您好,欢迎访问三七文档
课程论文题目:基于Proteus的60秒倒计时时钟设计与仿真60秒倒计时时钟一丶设计要求用单片机的定时器/计数器实现60秒倒计时,用两只数码管从59开始静态示倒计时秒值。当显示为00时,再从59开始显示倒计时。本实验中采用定时器/计数器T1的方式1定时,定时时间为50ms,对应的时间常数为0x3cb0,对应的十进制的初值为15536,计数满50000后,即1us×50000=50ms,20次中断后,则时间为1s。从而秒单元增1。采用74LS47BCD-7段数码管译码器/驱动器,即用于将BCD码转化为数码管的显示数字,从而简化了显示程序的编写。二丶Proteus电路设计所有操作都在ISIS中进行,步骤如下。1.从Proteus库中选取元器件(1)AT89C51:单片机;(2)RES:电阻;(3)7SEG-COM-AN-GRN:带公共端的共阳极七段绿色数码管;(4)CAP丶CAP-ELEC:电容丶电解电容;(5)CRYSTAL:晶振;(6)74LS47:四输入译码器。2.放置元器件丶放置电源和地丶连线丶元器件属性设置丶电气检测所有操作都在ISIS中进行。完成的电路设计如下图所示:60秒倒计时试验电路原理图三丶源程序设计通过KeiluVision3建立工程,再建立源程序文件。参考的源程序如下:#includereg52.hunsignedcharsecond,timer;voidt1_init()//初始化函数{TMOD=0x10;//定时器T1方式1定时IE=0X88;//总中断允许,允许定时器T1中断TH1=0xb0;//给定时器T1装入时间常数TL1=0xb0;TR1=1;//启动定时器}voidmain()//主函数{t1_init();//调用初始化函数second=59;//秒单元second初始值为59timer=0;//中断次数计数单元timer初始值为0while(1);}voidt1_func()interrupt3//定时器T1中断函数{TH1=0x3c;//重新装入时间常数TL1=0xb0;if(timer20){timer=timer+1;//中断次数计数单元如果小于20,则timer加1}elseif(timer==20){timer=0;//中断次数计数单元timer如果等于20,则1秒时间到if(second==0)//如果秒单元为0,则从59重新开始{second=59;}else{second=second-1;//如果秒单元不为0,则减1}}P2=second/10;//取秒单元的十位数并送P2口,送译码器译码并显示P3=second%10;//取秒单元的十位数并送P3口,送译码器译码并显示}程序说明:由于定时器的初始值为15536,因使用的时钟为12MHz,所以定时的时间为1us×(65536—15536)=1us×50000=50ms。要想定时1s,需要20次中断,因此程序中定义了中断次数单元timer,来对中断次数进行计数。由于采用硬件74LS译码器芯片,因此程序变得简单,只需将秒单元进行“second/10”运算,即可得到秒的十位的BCD码,并送P2口经译码器显示秒的十位。秒的个位BCD码只需取余数“second%10”运算就可得到,并送P3口经译码器显示秒的个位。最后通过按钮“Buildtarget”编译源程序,生成目标代码文件*.hex文件。若编译失败,对程序修改调试直至编译成功。四丶Proteus仿真1.加载目标代码右击选中的ISIS编辑区中单片机AT89C51,在单击打开其属性窗口,在“ProgramFile”右侧框中输入目标代码”*.hex”文件,再在ClockFrequency栏中设置12MHz,仿真系统则以12MHz的时钟频率运行。2.仿真单击仿真按钮进行仿真,仿真运行片段如下图所示:
本文标题:60秒倒计时钟
链接地址:https://www.777doc.com/doc-4679428 .html