《单片机课程设计基于汇编语言的数字钟设计.doc》由会员分享,可在线阅读,更多相关《单片机课程设计基于汇编语言的数字钟设计.doc(26页珍藏版)》请在三一办公上搜索。
1、物电学院单片机课程设计报告数字钟姓 名: 学 号: 指导教师: 成 绩: 日期: 2012.6.14 理工类样张(上边25mm,下边距25mm,左边距20mm,右边距20mm)基于汇编语言的数字钟设计摘要:该数字钟利用AT89C51来设计数字钟,数字钟包括三功能,行列键盘校时、秒表、时钟。校时时时钟和秒表均不工作,秒表工作时,时钟不显示但是继续走,到显示的时候能够准确的显示。时钟工作时,秒表不工作。关键词:AT89C51、4*4独立行列式键盘、汇编、读键、键处理、数字钟、秒表各功能单独实现秒表1、 思路: 秒表跑秒的时候,时钟还在工作,所以秒表的存储器跟时钟的存储器不一样,虽然这里没有时分秒之
2、说,但是为了与时钟的思路差不多所以就相当于时分秒了, 时、分、秒分别放在“43h”、“44h”、“45h”,拆分后放在时的十位放在“75h”,时的个位放在“74h”;拆分后分的十位放在“73h”,分的个位放在“72h”;拆分后秒的十位放在“71h”,秒的个位放在“70h”。将时的十位“75h”通过查询的方式查找到相应BCD七段码放在“85h”,将时的个位“74h”通过查询的方式查找到相应BCD七段码放在“84h”,将分的十位“73h”通过查询的方式查找到相应BCD七段码放在“83h”,将分的个位“72h”通过查询的方式查找到相应BCD七段码放在“82h”,将秒的十位“71h”通过查询的方式查找
3、到相应BCD七段码放在“81h”,将秒的个位“70h”通过查询的方式查找到相应BCD七段码放在“80h”。 2、实现秒表的程序 org 0000hljmp startorg 001bhljmp it1porg 1000hstart: mov tmod,#20hmov 62h,#40mov 43h,#0mov 44h,#0mov 45h,#0setb et1setb ea mov th1,#6mov tl1,#6setb tr1 abc2: setb p3.4 jb p3.4,holdjb p3.5,def2mov 43h,#0mov 44h,#0mov 45h,#0setb ea def2:
4、lcall chaifen2 lcall zhuanhuan2lcall disp2ljmp abc2 hold:clr ea lcall chaifen2 lcall zhuanhuan2lcall disp2ljmp abc2it1p: djnz 62h,returnmov 62h,#40mov a,#01hadd a,45hda amov 45h,acjne a,#100h,returnmov 45h,#00hmov a,#01hadd a,44hda amov 44h,acjne a,#60h,returnmov 44h,#00hmov a,#01hadd a,43hda amov 4
5、3h,acjne a,#60h,returnmov 43h,#00hreturn: retichaifen2:mov r2,#3 mov r0,#43h mov r1,#75h loop4:mov a,r0 anl a,#0f0hswap amov r1,adec r1mov a,r0anl a,#0fhmov r1,adec r1inc r0djnz r2,loop4retzhuanhuan2:mov r0,#70h mov r1,#80hmov r2,#6 dp102:mov dptr,#segtab mov a,r0movc a,a+dptrmov r1,ainc r1inc r0djn
6、z r2,dp102ret disp2:mov r0,#80h mov r7,#6MOV R3,#0feh loop22:mov a,#0ffh mov P1,a mov a,r0 mov p0,amov a,r3mov p1,alcall delayrl amov r3,ainc r0djnz r7,loop22retdelay: mov r4,#20 loop3: mov r5,#25djnz r4,loop3retsegtab:DB 3FH,06H,5BH,4FH,66H,6DH DB 7DH,07H,7FH,6FH,77H,7CH DB 58H,5EH,7BH,71H,00H,40H
7、End3、 程序流程图 秒表主程序流程图 秒表中断服务子程序it1p4、仿真图数字钟1、思路: 时、分、秒分别放在“40h”、“41h”、“42h”,拆分后放在时的十位放在“35h”,时的个位放在“34h”;拆分后分的十位放在“33h”,分的个位放在“32h”;拆分后秒的十位放在“31h”,秒的个位放在“30h”。将时的十位“35h”通过查询的方式查找到相应BCD七段码放在“55h”,将时的个位“34h”通过查询的方式查找到相应BCD七段码放在“54h”,将分的十位“33h”通过查询的方式查找到相应BCD七段码放在“53h”,将分的个位“32h”通过查询的方式查找到相应BCD七段码放在“52h
8、”,将秒的十位“31h”通过查询的方式查找到相应BCD七段码放在“51h”,将秒的个位“30h”通过查询的方式查找到相应BCD七段码放在“50h”。2、实现数字钟的程序 org 0000hljmp startorg 000bhljmp it0porg 1000hstart: mov tmod,#02hmov 60h,#40mov 61h,#100mov 40h,#0mov 41h,#0mov 42h,#0setb et0setb eamov th0,#6mov tl0,#6setb tr0 abc1: lcall chaifen1 lcall zhuanhuan1lcall disp1ljmp
9、 abc1it0p: push acc djnz 61h,return mov 61h,#100djnz 60h,returnmov 60h,#40mov a,#01hadd a,42hda amov 42h,acjne a,#60h,returnmov 42h,#00hmov a,#01hadd a,41hda amov 41h,acjne a,#60h,returnmov 41h,#00hmov a,#01hadd a,40hda amov 40h,acjne a,#24h,returnmov 40h,#00hreturn: pop accretichaifen1:mov r2,#3 mo
10、v r0,#40h mov r1,#35h loop41:mov a,r0 anl a,#0f0hswap amov r1,adec r1mov a,r0anl a,#0fhmov r1,adec r1inc r0djnz r2,loop41retzhuanhuan1:mov r0,#30h mov r1,#50hmov r2,#6 dp101:mov dptr,#segtab mov a,r0movc a,a+dptrmov r1,ainc r1inc r0djnz r2,dp101ret disp1:mov r0,#50h mov r7,#6MOV R3,#0feh loop21:mov
11、a,#0ffh mov P1,a mov a,r0 mov p0,amov a,r3mov p1,alcall delayrl amov r3,ainc r0djnz r7,loop21retdelay: mov r4,#20 loop3: mov r5,#25djnz r4,loop3retsegtab:DB 3FH,06H,5BH,4FH,66H,6DH DB 7DH,07H,7FH,6FH,77H,7CH DB 58H,5EH,7BH,71H,00H,40H end3程序流程图 时钟主程序流程图 中断服务程序的流程4、仿真图行列式键盘校时1、 思路 一般情况下,校时是用来对数字钟的校对,
12、所以行列式键盘校时用到的存储单元跟数字钟中的存储单元一样。即要校对的数据:时的十位放在“35h”,时的个位放在“34h”;分的十位放在“33h”,分的个位放在“32h”;秒的十位放在“31h”,秒的个位放在“30h”。将时的十位“35h”通过查询的方式查找到相应BCD七段码放在“55h”,将时的个位“34h”通过查询的方式查找到相应BCD七段码放在“54h”,将分的十位“33h”通过查询的方式查找到相应BCD七段码放在“53h”,将分的个位“32h”通过查询的方式查找到相应BCD七段码放在“52h”,将秒的十位“31h”通过查询的方式查找到相应BCD七段码放在“51h”,将秒的个位“30h”通
13、过查询的方式查找到相应BCD七段码放在“50h”。 2、实现校时的程序 3、程序流程图 DBUF EQU 30H TEMP EQU 50H ORG 0000H LJMP START ORG 0030hSTART: clr F0 mov 40h,#0mov 41h,#0mov 42h,#0ghi3:lcall key1JNB F0,abc3CLR F0lcall shiftdabc3: lcall zhenghe lcall zhuanhuan3lcall disp3ljmp ghi3zhenghe:mov r2,#3 mov r0,#40hmov r1,#35hloop43:mov a,r1
14、mov b,#10h mul ab mov 21h,a dec r1 mov a,r1 add a,21h mov r0,a dec r1 inc r0 djnz r2,loop43 retzhuanhuan3:mov r0,#30h mov r1,#50hmov r2,#6 dp103:mov dptr,#segtab mov a,r0movc a,a+dptrmov r1,ainc r1inc r0djnz r2,dp103ret disp3:mov r0,#50h mov r7,#6MOV R3,#0feh loop23:mov a,#0ffh mov P1,a mov a,r0 mov
15、 p0,amov a,r3mov p1,alcall delayrl amov r3,ainc r0djnz r7,loop23retSEGTAB:DB 3FH,06H,5BH,4FH,66H,6DH DB 7DH,07H,7FH,6FH,77H,7CH DB 58H,5EH,7BH,71H,00H,40Hshiftd:mov dbuf+5,dbuf+4mov dbuf+4,dbuf+3mov dbuf+3,dbuf+2mov dbuf+2,dbuf+1mov dbuf+1,dbufmov dbuf,20Hret delay: mov r4,#100 loop3: mov r5,#100djn
16、z r4,loop3ret KEY1:MOV P2, #0FHMOVA, P2ORLA, #0F0HCPLAJZ EKEYLCALL disp3LCALL disp3LCALL disp3;SKEY:MOV A, #00MOV R0, A MOV R2, AMOV R3, #0efHSKEY2:MOV A, R3 MOV P2, AMOVA, P2MOVR1, AORLA, #0F0HCPLAS123:JNZSKEY3INC R0 MOVA, R3RlAMOVR3, AMOVA, R0CJNEA, #04H, SKEY2EKEY:RETSKEY3: MOVA, R1JNBACC.0, SKEY
17、5JNBACC.1, SKEY6JNBACC.2, SKEY7JNBACC.3, SKEY8AJMP EKEYSKEY5:MOVA, #00HMOVR2, AAJMPDKEYSKEY6:MOVA, #01HMOVR2, AAJMPDKEYSKEY7:MOVA, #02HMOVR2, AAJMPDKEYSKEY8: MOVA, #03HMOVR2, AAJMPDKEYDKEY:MOVA, R0MOVB, #04HMULABADDA, R2SETB F0MOV 20H,AEKEYD:MOV P2, #0FHMOVA, P2ORLA, #0F0HCPLAJZ EKEYAJMPEKEYDEND3、 流
18、程图 校时主程序 shiftd子程序行列式键盘校时子程序 键值译码子程序 zhenghe子程序图 转换子程序流程图 拆分子程序流程图 显示子程序流程图 4、仿真图综合实现时钟秒表校时1、 思路: 使用T1、T2中断来完成数字钟和秒表的计数,利用主程序来进行扫描显示,主程序中利用查询来控制校时、秒表和时钟,用到了p3.0、p3.1、p3.4、p3.5。P3.0闭合,时钟和秒表工作,断开为校时。p3.1断开,仅显示时钟,并断开秒表计数中断,p3.1闭合,显示秒表,但不关断数字钟。P3.4、p3.5开控制秒表,同时为闭合时,秒表清零,先关断p3.5,秒表开始工作,从零开始计时,再关断p3.4秒表停止
19、计时,但是显示会停留在那里,当p3.5与p3.4关断后就会又清零。2、程序:DBUF EQU 30H TEMP EQU 50Horg 0000hljmp startorg 000bhljmp it0porg 001bhljmp it1porg 0030hstart: mov tmod,#22hmov 60h,#40mov 61h,#100mov 62h,#40mov 43h,#0mov 44h,#0mov 45h,#0setb et0setb eamov th0,#6mov tl0,#6setb tr0setb et1 mov th1,#6mov tl1,#6setb tr1xunhuan:m
20、ov p3,#0ffhjb p3.0,jiaoshijb p3.1,shuzizhongsetb et1lcall abc2lcall xunhuan jiaoshi:lcall ghi3shuzizhong:setb et0 clr et1 ljmp abc1 abc1: lcall chaifen1 lcall zhuanhuan1lcall disp1ljmp xunhuan abc2: jb p3.4,holdjb p3.5,def2mov 43h,#0mov 44h,#0mov 45h,#0setb ea def2: lcall chaifen2 lcall zhuanhuan2lc
21、all disp2jnb p3.1,abc2ljmp xunhuan hold:clr ea lcall chaifen2 lcall zhuanhuan2lcall disp2jnb p3.1,abc2ljmp xunhuan ghi3:clr et0 lcall key1 JNB F0,abc3 CLR F0 lcall shiftdabc3: lcall zhenghe lcall zhuanhuan3lcall disp3jnb p3.0, xunhuanljmp ghi3zhenghe:mov r2,#3 mov r0,#40hmov r1,#35hloop43:mov a,r1 m
22、ov b,#10h mul ab mov 21h,a dec r1 mov a,r1 add a,21h da a mov r0,a dec r1 inc r0 djnz r2,loop43 retit0p: push acc djnz 61h,return mov 61h,#100djnz 60h,returnmov 60h,#40mov a,#01hadd a,42hda amov 42h,acjne a,#60h,returnmov 42h,#00hmov a,#01hadd a,41hda amov 41h,acjne a,#60h,returnmov 41h,#00hmov a,#0
23、1hadd a,40hda amov 40h,acjne a,#24h,returnmov 40h,#00hreturn: pop accretiit1p: push acc djnz 62h,returnmov 62h,#40mov a,#01hadd a,45hda amov 45h,acjne a,#100h,returnmov 45h,#00hmov a,#01hadd a,44hda amov 44h,acjne a,#60h,returnmov 44h,#00hmov a,#01hadd a,43hda amov 43h,acjne a,#60h,returnmov 43h,#00
24、hpop accretichaifen1:mov r2,#3 mov r0,#40h mov r1,#35h loop41:mov a,r0 anl a,#0f0hswap amov r1,adec r1mov a,r0anl a,#0fhmov r1,adec r1inc r0djnz r2,loop41retchaifen2:mov r2,#3 mov r0,#43h mov r1,#75h loop42:mov a,r0 anl a,#0f0hswap amov r1,adec r1mov a,r0anl a,#0fhmov r1,adec r1inc r0djnz r2,loop42r
25、etzhuanhuan1:mov r0,#30h mov r1,#50hmov r2,#6 dp101:mov dptr,#segtab mov a,r0movc a,a+dptrmov r1,ainc r1inc r0djnz r2,dp101retzhuanhuan2:mov r0,#70h mov r1,#80hmov r2,#6 dp102:mov dptr,#segtab mov a,r0movc a,a+dptrmov r1,ainc r1inc r0djnz r2,dp102retzhuanhuan3:mov r0,#30h mov r1,#50hmov r2,#6 dp103:
26、mov dptr,#segtab mov a,r0movc a,a+dptrmov r1,ainc r1inc r0djnz r2,dp103ret disp1:mov r0,#50h mov r7,#6MOV R3,#0feh loop21:mov a,#0ffh mov P1,a mov a,r0 mov p0,amov a,r3mov p1,alcall delayrl amov r3,ainc r0djnz r7,loop21ret disp2:mov r0,#80h mov r7,#6MOV R3,#0feh loop22:mov a,#0ffh mov P1,a mov a,r0
27、mov p0,amov a,r3mov p1,alcall delayrl amov r3,ainc r0djnz r7,loop22ret disp3:mov r0,#50h mov r7,#6MOV R3,#0feh loop23:mov a,#0ffh mov P1,a mov a,r0 mov p0,amov a,r3mov p1,alcall delayrl amov r3,ainc r0djnz r7,loop23retdelay: mov r4,#100 loop3: mov r5,#100djnz r4,loop3retshiftd:mov dbuf+5,dbuf+4mov d
28、buf+4,dbuf+3mov dbuf+3,dbuf+2mov dbuf+2,dbuf+1mov dbuf+1,dbufmov dbuf,20Hret KEY1:MOV P2, #0FHMOVA, P2ORLA, #0F0HCPLAJZ EKEYLCALL disp3LCALL disp3LCALL disp3;SKEY:MOV A, #00MOV R0, A MOV R2, AMOV R3, #0efHSKEY2:MOV A, R3 MOV P2, AMOVA, P2MOVR1, AORLA, #0F0HCPLAS123:JNZSKEY3INC R0 MOVA, R3RlAMOVR3, A
29、MOVA, R0CJNEA, #04H, SKEY2EKEY:RETSKEY3: MOVA, R1JNBACC.0, SKEY5JNBACC.1, SKEY6JNBACC.2, SKEY7JNBACC.3, SKEY8AJMP EKEYSKEY5:MOVA, #00HMOVR2, AAJMPDKEYSKEY6:MOVA, #01HMOVR2, AAJMPDKEYSKEY7:MOVA, #02HMOVR2, AAJMPDKEYSKEY8: MOVA, #03HMOVR2, AAJMPDKEYDKEY:MOVA, R0MOVB, #04HMULABADDA, R2SETB F0MOV 20H,AE
30、KEYD:MOV P2, #0FHMOVA, P2ORLA, #0F0HCPLAJZ EKEYAJMPEKEYDsegtab:DB 3FH,06H,5BH,4FH,66H,6DH DB 7DH,07H,7FH,6FH,77H,7CH DB 58H,5EH,7BH,71H,00H,40H End3、流程图: 主程序的流程图4、仿真图参考文献1 张毅刚.单片机原理及接口应用 M.北京:高等教育出版社,2010.52 李艾华.讲课时的PPT及其仿真 3 李艾华.THDPJ-1-2实验指导书付印心得体会 通过这一次单片机课程设计使我清楚的认识到我自身的知识不足,一个简单的数字钟,市面上5块钱的电子表就可以买到一个有日期、闹钟、秒表自动识别月份天数,而我用了将近一周的时间才搞出来一个仅仅可以实现校时、数字钟和秒表功能。这次课程设计让我清楚的认识到,想要作为一个出色的单片机设计者,还有一段艰辛的路程要走。这次课程设计,我对protues和keil有了更多的认识,熟练了我的软件操作技巧,使我从最初的仅仅用老师的东西进行仿真,到现在可以独立的画一个中等的设计图。通过这次课程设计使我认识到我跟其他人的差距,也使我发现了我的优点,我要在大学期间努力学习,争取掌握更多更广泛的知识。为以后的人生打好一个基础。