单片机课程设计心得倒计时秒表模版Word文件下载.docx
《单片机课程设计心得倒计时秒表模版Word文件下载.docx》由会员分享,可在线阅读,更多相关《单片机课程设计心得倒计时秒表模版Word文件下载.docx(15页珍藏版)》请在冰豆网上搜索。
除了单片机工作必须的振荡电路,复位电路外,该设计增加了报警电路用来提示倒计时完成,显示电路用来显示倒计时,按键电路用来设定倒计时间以及控制开始暂停。
总体设计框图如图3.1所示。
图1总体框图
3.2工作原理
以AT89S51单片机为核心元件,利用两位7段共阳极数码管作为显示器件。
在此设计中共接入2个两位一体7段共阳LED数码管,来显示实时数字,其中1个用于显示十位,1个用于显示个位,通过查表指令分别动态显示个位和十位。
2个LED数码管显示范围可达到O--99。
按下开始键开始计时,按下倒计时键开始设定倒计时时间,再按开始键开始倒计时。
利用中断实现记录,利用单片机的外部中断0和外部中断1来实现记录和显示,把记录处理和显示处理做成分别做成外部中断0和外部中断1的中断服务程序,通过中断服务程序处理不同的动作。
利用T0做一个1秒的中断,从而实现倒计时。
另外通过数据区来记录记录值。
通过显示子程序来显示当前倒计时和记录值。
3.3主程序框图
本程序采用定时器T0产生1秒定时来实现秒表的倒计时,采用外部中断0来记录不同的记录值,通过外部中断1来显示已经记录的记录值。
在主程序中初始化各个数值并且仅仅循环执行显示程序,有中断来时才转去做相应的中断服务程序。
(1)主程序
ORG00H
AJMPMAIN
ORG0BH
AJMPT0INT
ORG30H
MAIN:
MOVSP,#60H
MOVDPTR,#TAB
MOVTMOD,#01H;
T0定时方式1
SETBEA
SETBET0
MOVTH0,#3CH;
50ms定时常数
MOVTL0,#0B0H
MOVR0,#20;
20x50mS=1S
(2)定时中断程序
T0INT:
MOVTH0,#03CH;
;
定时中断子程序。
重装定时常数
MOVTL0,#0B0H;
DJNZR0,T0INTR;
50msX20=1S,未满20次,跳出中断子程序
MOVR0,#20
JNB7FH,T0INT00;
时间未到转T0INT00
DJNZR3,T0INTR;
未到3S跳出中断子程序
CLR7FH;
3S时间到,清计时时间到标志
CLRTR0;
关定时器
AJMPT0INTR;
跳出中断
T0INT00:
JNB7EH,T0INT0;
7EH为倒计时标志,1为倒计时
DECR4;
=1,R4-1
CJNER4,#0,T0INTR
CLR7EH
SETB7FH;
时间到标志
AJMPT0INTR
T0INT0:
INCR4
CJNER4,#99,T0INTR
T0INTR:
RETI
四、各部分电路设计
4.1复位电路
AT89S-51单片机的复位是靠外部电路实现的。
MCS-52单片机工作之后,只要在他的RST引线上加载10ms以上的高点平,单片机就能有效地复位。
MCS-52单片机通常采用上电自动复位和按键复位两种方式。
最简单的按键复位电路如下图:
图3复位电路
按键按下瞬间,RC电路充电,RST引线出现正脉冲,只要RST保持10ms以上的高电平,就能使单片机有效的复位。
4.2振荡电路
在AT89S-51单片机一般常用内部时钟方式,也就是在XTAL1和XTAL2之间连接晶体震荡器与电容构成稳定的自激震荡器,本模块用了一个12MHZ的晶振外加两个30pf的电容
,
图4振荡电路
4.3按键电路
由六个相同按键组成,分别作为开始,暂停,清零,倒计时,十位加一,个位加一,电路图如下:
图5按键电路
4.4两位数码显示电路
由两位共阳极LED数码管和1k欧排阻构成。
数码管的位由p2.1和p2.0口决定,段选由P0口决定。
如下图:
图6显示电路
4.5.报警电路
报警电路由小扬声器组成,计时完成后,利用显示子程序延时约2ms求反,产生250H的方波,从而扬声器发声,电路如下
图7报警电路
五、整体电路图
图8整体电路图
六、仿真及调试
图9Proteus仿真图
调试问题及解决方法
开始在主程序的循环中没有添加调用显示子程序的语句导致在没有按键按下的情况下LED数码管没有显示。
当在主程序循环检测按键的过程中添加了调用显示子程序的语句后就解决了这一问题。
由于键盘需要消抖延时和等待按键释放所以相似的情况又出现了——按下按键后有一段时间LED数码管断续显示或者按下按键后不释放按键时LED数码管没有显示。
仔细分析后发现问题出现的原因还是一样的,由于本设计的LED数码管采用了动态显示,故需要不断调用显示子程序,否则会导致LED数码管没有显示。
所以最终做了以下改进1.按键的消抖延时选择调用两次显示子程序每次显示子程序大约用时5ms,两次即为10ms左右来取代原来的10ms软件延时。
在等待按键释放时使用循环调用显示子程序来替代原来的循环等待。
经过上述两点的改进后LED数码管无显示或者断续显示的问题就得到了彻底的解决。
七、设计总结
刚接到课程设计的时候完全没有思路,不知该如何下手,好像自己学到的东西一点都用不上,后来经过翻阅资料从最基本的着手,开始对倒计时秒表有了一点认识,从单元电路到整体电路按部就班。
在整个课程设计完后,总的感觉是:
很累,很有压力,但是很有收获。
在这个过程中,我的确学得到很多在书本上学不到的东西,如:
如何将学过的单片机知识加以运用,如何查找资料,如何利用计算机来画图以及如何利用proteus进行单片机仿真等等。
通过查阅资料、接口设计、程序设计、安装调试等环节,完成AT89S-51单片机多种资源应用并具有综合功能的小系统目标板的设计与编程应用。
让我不仅能够将课堂上学到的理论知识与实际应用结合起来,而且能够对电子电路、电子元器件、印制电路板等方面的知识进一步加深认识,同时在软件编程、排错调试、焊接技术、相关仪器设备的使用技能等方面得到较全面的锻炼和提高,增进对单片机的感性认识,加深对单片机理论方面的理解,掌握单片机的内部功能模块的应用,如定时器/计数器、中断、I/O口等。
更重要的是,团结精神,合作精神在这次课程设计中得到了很好地体现,仅凭我个人的力量是无法完成任务的。
但现在回过头来看,还是挺有成就感的,毕竟这是大学里第一次进行实物课程设计,第一次真正的将理论转化为实际,第一次实际接触电路板。
这是一笔无法估量的财富。
对单片机有了更深刻的认识和掌握,我感到很欣慰,付出的中就会有收获!
。
但是由于理论和实际存在差距,我们成功进行了仿真,但是在制作电路板时始终有部分功能不能实现,尽管我们不停地调试但是终究没有效果,我们的倒计时秒表能实现自由设定时间,倒计时,报警。
最令我高兴的是我们设计的倒计时秒表不仅能倒计时也能正计时,这是在要求之外的。
由于时间有限,只有一个星期,我相信,我们还可以实现更多的功能,虽然课程设计结束了,但是在课余时间,我还会继续进行实践,从实践中学习知识掌握单片机!
八、参考文献
[1]张毅刚《单片机原理及应用》高等教育出版社2003年
[2]张毅刚《单片微机原理及应用》西安电子科技大学出版社1994年
[3]李全利迟荣强《单片机原理及接口技术》北京高等教育出版社2004年
[4]楼然笛《单片机课程设计实例指导》北京航空航天大学出版社2004年
[5]何立民《单片机应用技术选编》北京航空航天大学出版社1993年
[6]梁宗善《电子技术基础课程设计》华中科技大学出版社2009年
[7]李广弟《单片机基础》北京航空航天大学出版社2001年
附录
源程序代码:
STRTEQUP2.2
P_SEQUP2.3
CLRREQUP2.4
CDWNEQUP2.5
ADJHEQUP2.6
ADJLEQUP2.7
ORG00H
AJMPT0INT
MOVSP,#60H
MOVR0,#20;
MAIN1:
ACALLALARM;
调用报警子程序
k1:
按键检测子程序开始键
LCALLDISP
JBSTRT,K2
ACALLDISP
JNBSTRT,$-2
AJMPSTART
k2:
暂停键
JBP_S,K3
LCALLDISP
JNBP_S,$-3
AJMPPAUSE
K3:
清零键
JBCLRR,K4
JNBCLRR,$-3
AJMPCLEAR
K4:
倒计时键
JBCDWN,K5
JNBCDWN,$-2
AJMPCDOWN
K5:
倒计时设定十位
JB7EH,K51
AJMPMAIN1
K51:
JBADJH,K6
JNBADJH,$-2
AJMPSHINC
K6:
倒计时设定个位
JB7EH,K61
K61:
JBADJL,MAIN1
JNBADJL,$-2
AJMPSLINC
START:
SETBTR0
CLR7DH;
开始后此标志清0,跳过显示子程序的设定部分
MOVR3,#3;
蜂鸣3S
AJMPK1
PAUSE:
CLRTR0
AJMPK2
CLEAR:
MOVR4,#0
AJMPK3
CDOWN:
SETB7EH;
倒计标志,作倒计减1计数用
SETB7DH;
倒计标志,作倒计设定显示用
AJMPK4
SHINC:
INC23H;
23H为设定值十位缓存
MOVA,23H
CJNEA,#10,K5
MOV23H,#0
AJMPK5
SLINC:
INC22H;
22H为设定值个位缓存
MOVA,22H
CJNEA,#10,K6
MOV22H,#0
ALARM:
JB7FH,ALARM0;
7FH为时间到标志,RAM内存2FH的D7位
AJMPALARMRT;
时间未到,跳出报警
ALARM0:
CPLP1.0
ACALLDISP;
利用显示子程序延时约2ms求反,产生250H的方波。
AJMPALARM
ALARMRT:
RET
MOVTH0,#03CH;
JNB7EH,T0INT0;
INCR4
DISP:
JNB7DH,DISP1
MOV20H,22H;
22H存设定个位
MOV21H,23H;
23H存设定十位
MOVA,23H
MOVB,#10
MULAB
ADDA,22H
MOVR4,A
DISP1:
MOVA,R4
DIVAB;
当前值除以10
MOV20H,A;
得出的商送给十位
MOV21H,B;
得出的余数送给个位
MOVA,20H;
十位显示
MOVCA,@A+DPTR
MOVP0,A
SETBP2.1
LCALLDELAY
CLRP2.1
MOVA,21H;
个位显示
SETBP2.0
CLRP2.0
DELAY:
误差0us
MOVR6,#10
DL0:
MOVR5,#50
DJNZR5,$
DJNZR6,DL0
TAB:
DB0C0H,0F9H,0A4H,0B0H,99H;
共阳极0-9显示代码
DB92H,82H,0F8H,80H,90H
END