单片机设计60秒倒计时正计时+Proteus仿真.docx
《单片机设计60秒倒计时正计时+Proteus仿真.docx》由会员分享,可在线阅读,更多相关《单片机设计60秒倒计时正计时+Proteus仿真.docx(9页珍藏版)》请在冰豆网上搜索。
单片机设计60秒倒计时正计时+Proteus仿真
60秒倒计时设计
一:
1.目的
课程设计是单片机课程教学的最后一个环节,是对学生进行全面的系统的训练。
2.要求
单片机控制的60s倒计时
(1)用单片机AT89C51的定时器实现60s倒计时。
(2)用PROTEUS设计,仿真基于AT89c51单片机的60s倒计时实验。
3.目标
通过课程设计,使自己深刻理解并掌握基本概念,掌握单片机的基本应用程序设计及综合应用程序设计的方法。
2:
方案选择
图2.1:
60秒倒计时总体电路设计
本设计由硬件设计和软件设计两部分组成,总电路框图如图2.1所示。
具体设计:
通过AT89C51型号单片机,由P1和P2两组I/O引脚分别控制两个7SEG–COM–ANODE型号数码管,分十位控制和个位控制,达到显示60秒倒计时的目的。
通过复位电路,在仿真过程中点击开关实现60复位
3.1AT89C51
外形及引脚排列如图3.1所示
图3.1:
89C51的核心电路框图
主要特性
·与MCS-51兼容
·4K字节可编程闪烁存储器
·寿命:
1000写/擦循环
·数据保留时间:
10年
·全静态工作:
0Hz-24MHz
·三级程序存储器锁定
·128×8位内部RAM
·32可编程I/O线
·两个16位定时器/计数器
·5个中断源
·可编程串行通道
·低功耗的闲置和掉电模式
·片内振荡器和时钟电路
管脚说明
(1)电源及时钟引脚(4个)
Vcc:
电源接入引脚
Vss:
接地引脚
XTAL1:
晶振震荡器接入的一个引脚(采用外部振荡器时,此引脚接地);
XTAL2:
晶体振荡器的另一个引脚(采用外部振荡器时,此引脚作为外部振荡器信号的输入端)。
(2)控制线引脚(4个)
RST/Vpd:
复位信号输入引脚/备用电源输入引脚;
ALE:
地址锁存允许信号输出引脚/编程脉冲输入引脚:
EA:
内外存储器选择引脚/片外EPROM编程电压输入引脚;
PSEN:
外部程序存储器选通信号输出引脚。
(3)并行I/O引脚
P0.0-P0.7:
一般I/O口引脚或数据/低位地址总线复用引脚;
P1.0-P1.7:
一般I/O口引脚;
P2.0-P2.7:
一般I/O口引脚或高位地址总线引脚;
P3.0-P3.7:
一般I/O口引脚或第二功能引脚
●振荡器特性:
XTAL1和XTAL2分别为反向放大器的输入和输出。
该反向放大器可以配置为片内振荡器。
石晶振荡和陶瓷振荡均可采用。
如采用外部时钟源驱动器件,XTAL2应不接。
有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度
本设计中还用到其他一些元器件,如:
晶振,电容,电阻排,电解电容,开关等等。
晶振采用频率为12MHZ,连接的两个电容为30pF;电阻排为470*8,能够实现8个470欧电阻的等效替换;电解电容为10u;开关功能是在仿真过程中,按下开关便能实现60秒复位。
4.软件设计
4.1定时/计数器初值计算
(1)本电路应用TIMER0MODE16位计数器的计时中断法。
(2)1秒等于1000000微秒,而每一计时脉冲是1微秒,因此需输入100000个计时脉冲,方可达到1秒的时间。
本设计中,设定中断每次溢出时间50ms。
(3)由上式得知,循环20次即可达到1秒定时,即:
N=t/T=0.05s/0.000001=5000
X=65536-5000=15536=3CB0H
(4)由上式得知5000个脉冲,首先需设定TL0=3CH,TH0=0B0H,此时第1次只要输入5000个脉冲输入,就会溢出;第2次至第20次,则需每1000000个计时脉冲,定时1秒。
(5)上电时,显示60,开始倒数计时按下开关实现复位。
代码如下
ORG0000H
AJMPMAIN
ORG0030H
MAIN:
MOVR2,#60;计数初值
LOOP1:
MOVA,R2
MOVB,#10
DIVAB
MOVDPTR,#TABLE
MOVCA,@A+DPTR;查表
MOVP1,A;十位显示
MOVA,B
MOVCA,@A+DPTR
MOVP2,A;个位显示
MOVR7,#20
LOOP0:
MOVTMOD,#01H;置T0工作于方式0
MOVTH0,#3CH;装入计数初值
MOVTL0,#0B0H
SETBTR0;启动定时器T0
JNBTF0,$;TF0=0,等待
CLRTF0;清TF0
DJNZR7,LOOP0;循环20次
DECR2;减一
CJNER2,#0FFH,LOOP1;倒计时
AJMPMAIN;复位回到60秒初始
TABLE:
DB0C0H,0F9H,0A4H,0B0H
DB99H,92H,82H,0F8H
DB80H,90H,88H,83H
DB0C6H,0A1H,86H,8EH
END
5.软件调试:
1.启动Keilc51
2.新建一个工程。
Project菜单——〉Newproject,选择好我们要保存的文件夹后,文件保存。
我们选择最常用的AT89C51,确定。
3.在工程中加入文件。
新建一个文件,文件菜单File——New,我们再选择:
文件菜单File——SaveAs(另存为)弹出对话框后,我们文件名框中键入文件名(注意文件后缀名是.c)保存。
C文件建好啦。
现在我们把文件加入到工程中去。
点击Target1前面的+号,右键单击SourceGroup1——选择AddFilestoGroup,SourceGroup1,选择添加Add。
编译运行。
4.PROTEUS仿真图
60秒正计时设计代码
SECONDEQU30H
TCOUNTEQU31H
ORG00H
START:
MOVSECOND,#00H
MOVTCOUNT,#00H
MOVTMOD,#01H
MOVTH0,#(65536-50000)/256
MOVTL0,#(65536-50000)MOD256
SETBTR0
DISP:
MOVA,SECOND
MOVB,#10
DIVAB
MOVDPTR,#TABLE
MOVCA,@A+DPTR
MOVP0,A
MOVA,B
MOVCA,@A+DPTR
MOVP2,A
WAIT:
JNBTF0,WAIT
CLRTF0
MOVTH0,#(65536-50000)/256
MOVTL0,#(65536-50000)MOD256
INCTCOUNT
MOVA,TCOUNT
CJNEA,#20,NEXT
MOVTCOUNT,#00H
INCSECOND
MOVA,SECOND
CJNEA,#60,NEX
MOVSECOND,#00H
NEX:
LJMPDISP
NEXT:
LJMPWAIT
TABLE:
DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
END
60秒正计时PROTEUS仿真图