资源预览内容
第1页 / 共11页
第2页 / 共11页
第3页 / 共11页
第4页 / 共11页
第5页 / 共11页
第6页 / 共11页
第7页 / 共11页
第8页 / 共11页
第9页 / 共11页
第10页 / 共11页
亲,该文档总共11页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
单片机原理及应用课程设计基于单片机的步进电机(直流电机)控制器设计学 院: 物联网工程学院 班 级: 自动化 姓 名: 学 号: 同组成员: 日 期: 2016.6.20-2016.6.24 一、设计目的通过具体小型测试系统设计,实践单片机系统设计及调试的全过程,以加深对单片机内部结构、功能和指令系统的理解,并进一步学习单片机开发系统的应用及一些外围芯片的接口和编程方法,初步掌握单片机系统的硬、软件设计技术及调试技巧。二、设计要求1)电机转速可以平稳控制2)通过键盘和显示器可以设置电机的转速3)显示电机的速度趋势三、仪器设备1)IBMPC 机 一台2)DS-51PRO.NET 单片机仿真器、编程器、试验仪三合一综合开发平台 一台四、硬件线路图及主要芯片说明1、AT89C5 单片机芯片说明AT89C51 是一种带 4K 字节闪烁可编程可擦除只读存储器(FPEROM Falsh Programmable and Erasable Read Only Memory)的低电压,高性能 CMOS8 位微处理器,俗称单片机。该器件采用ATMEL 高密度非易失存储器制造技术制造,与工业标准的 MCS-51 指令集和输出管脚相兼容。由于将多功能 8 位 CPU 和闪烁存储器组合在单个芯片中,ATMEL 的 AT89C51 是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。VCC:AT89C51 电源正极输入,接+5V 电压。GND:电源接地端。XTAL1:接外部晶振的一个引脚。在单片机内部,它是一反相放大器输入端,这个放大器构成了片内振荡器。它采用外部振荡器时,些引脚应接地。XTAL2:接外部晶振的一个引脚。在片内接至振荡器的反相放大器输出端和内部时钟发生器输入端。当采用外部振荡器时,则此引脚接外部振荡信号的输入。RST:AT89C51 的复位信号输入引脚,高电位工作,当要对芯片又时,只要将此引脚电位提升到高电位,并持续两个机器周期以上的时间,AT89C51 便能完成系统复位的各项工作,使得内部特殊功能寄存器的内容均被设成已知状态。ALE/PROGALE:是英文ADDRESS LATCH ENABLE的缩写,表示允许地址锁存允许信号。当访问外部存储器时,ALE 信号负跳变来触发外部的 8 位锁存器 (如 74LS373),将端口 P0 的地址总线(A0-A7)锁存进入锁存器中。在非访问外部存储器期间,ALE 引脚的输出频率是系统工作频率的 1/16,因此可以用来驱动其他外围芯片的时钟输入。当问外部存储器期间,将以 1/12 振荡频率输出。EA/VPP:该引脚为低电平时,则读取外部的程序代码 (存于外部 EPROM 中)来执行程序。因此在 8031 中,EA 引脚必须接低电位,因为其内部无程序存储器空间。如果是使用 AT89C51或其它内部有程序空间的单片机时,此引脚接成高电平使程序运行时访问内部程序存器,当程序指针 PC 值超过片内程序存储器地址(如 8051/8751/89C51 的 PC 超过 0FFFH)时,将自动转向外部程序存储器继续运行。此外,在将程序代码烧录至 8751 内部 EPROM、89C51 内部 FALSH 时,可以利用此引脚来输入提供编程电压(8751 为 2lV、AT89C51 为 12V、8051 是由生产厂方一次性加工好)。PSEN:此为 Program Store Enable的缩写。访问外部程序存储器选通信号,低电平有效。在访问外部程序存储器读取指令码时,每个机器周期产生二次 PSEN 信号。在执行片内程序存储器指令时,不产生 PSEN 信号,在访问外部数据时,亦不产生 PSEN 信号。P0:P0 口(P0.0P0.7) 是一个 8 位漏极开路双向输入输出端口,当访问外部数据时,它是地址总线(低 8 位)和数据总线复用。外部不扩展而单片应用时,则作一般双向 IO 口用。P0 口每一个引脚可以推动 8 个 LSTTL 负载。P2:P2 口(P2.0P2.7) 口是具有内部提升电路的双向 I/0 端口 (准双向并行 I/O 口) ,当访问外部程序存储器时,它是高 8 位地址。外部不扩展而单片应用时,则作一般双向 IO 口用。每一个引脚可以推动 4 个 LSTL 负载。P1:P1 口(P1.0P1.7) 口是具有内部提升电路的双向 I/0 端口 (准双向并行 I/O 口) ,其输出可以推动 4 个 LSTTL 负载。仅供用户作为输入输出用的端口。P3:P3 口(P3.0P3.7) 口是具有内部提升电路的双向 I/0 端口 (准双向并行 I/O 口) ,它还提供特殊功能,包括串行通信、外部中断控制、计时计数控制及外部随机存储器内容的读取或写入控制等功能。其特殊功能引脚分配如下:P3.0 RXD 串行通信输入P3.1 TXD 串行通信输出P3.2 INT0 外部中断 0 输入,低电平有效P3.3 INT1 外部中断 1 输入,低电平有效P3.4 T0 计数器 0 外部事件计数输入端P3.5 T1 计数器 1 外部事件计数输入端P3.6 WR 外部随机存储器的写选通,低电平有效P3.7 RD 外部随机存储器的读选通,低电平有效2、实验接线原理图五、系统工作原理(包括采样原理、数据存放单元安排、按键和显示处理原理、中断处理等)1)采样原理通过采集点不同电压而执行不同的功能。当不同的按键被按下时,AD 转换的电压不同,通过 AD转换值便可以判断出是哪个按键被按下。2)按键和显示处理键盘处理程序首先执行有无键按下的程序段,当确认有按键按下后,下一步就要识别哪一个按键被按下。对键的识别常用逐行扫描查询法或行列反转法。在获取键号后,继续扫描端口,直到状态改变,去抖动后,再次确认状态改变,即可判断按键释放。六、程序框图七、程序清单#include #define KeyPort P3#define DataPort P0 /定义数据端口 程序中遇到 DataPort 则用 P0 替换sbit LATCH1=P26;/定义锁存使能端口 段锁存sbit LATCH2=P27;/ 位锁存unsigned char code dofly_DuanMa10=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;/ 显示段码值 09unsigned char code dofly_WeiMa=0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f;/分别对应相应的数码管点亮,即位码unsigned char TempData8; /存储显示值的全局变量sbit A1=P10; /定义步进电机连接端口sbit B1=P11;sbit C1=P12;sbit D1=P13;#define Coil_AB1 A1=1;B1=1;C1=0;D1=0;/AB 相通电,其他相断电#define Coil_BC1 A1=0;B1=1;C1=1;D1=0;/BC 相通电,其他相断电#define Coil_CD1 A1=0;B1=0;C1=1;D1=1;/CD 相通电,其他相断电#define Coil_DA1 A1=1;B1=0;C1=0;D1=1;/D 相通电,其他相断电#define Coil_A1 A1=1;B1=0;C1=0;D1=0;/A 相通电,其他相断电#define Coil_B1 A1=0;B1=1;C1=0;D1=0;/B 相通电,其他相断电#define Coil_C1 A1=0;B1=0;C1=1;D1=0;/C 相通电,其他相断电#define Coil_D1 A1=0;B1=0;C1=0;D1=1;/D 相通电,其他相断电#define Coil_OFF A1=0;B1=0;C1=0;D1=0;/全部断电unsigned char Speed=1;bit StopFlag;void Display(unsigned char FirstBit,unsigned char Num);void Init_Timer0(void);unsigned char KeyScan(void);/*-uS 延时函数,含有输入参数 unsigned char t,无返回值unsigned char 是定义无符号字符变量,其值的范围是0255 这里使用晶振 12M,精确延时请使用汇编,大致延时长度如下 T=tx2+5 uS -*/void DelayUs2x(unsigned char t) while(-t);/*-mS 延时函数,含有输入参数 unsigned char t,无返回值unsigned char 是定义无符号字符变量,其值的范围是0255 这里使用晶振 12M,精确延时请使用汇编-*/void DelayMs(unsigned char t) while(t-)/大致延时 1mSDelayUs2x(245);DelayUs2x(245);/*-主函数-*/main()unsigned int i=512;/旋转一周时间unsigned char num;Init_Timer0();Coil_OFFwhile(1) /正向 num=KeyScan(); /循环调用按键扫描if(num=1)/第一个按键,速度等级增加if(Speed1)Speed-;else if(num=3)Coil_OFFStopFlag=1;else if(num=4)StopFlag=0; TempData0=dofly_DuanMaSpeed/10;/分解显示信息,如要显示 68,则 68/10=6 68%10=8 TempData1=dofly_DuanMaSpeed%10;/*-显示函数,用于动态扫描数码管输入参数 FirstBit 表示需要显示的第一位,如赋值 2 表示从第三个数码管开始显示如输入 0 表示从第一个显示。Num 表示需要显示的位数,如需要显示 99 两位数值则该值输入 2-*/void Display(unsigned char FirstBit,unsigned char Num)static unsigned char i=0;DataPort=0; /清空数据,防止有交替重影LATCH1=1; /段锁存LATCH1=0;DataPort=dofly_WeiMai+FirstBit; /取位码 LATCH2=1; /位锁存LATCH2=0;DataPort=TempDatai; /取显示
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号