单片机课程设计—电子万年历.doc

上传人:数据九部 文档编号:10384325 上传时间:2021-05-13 格式:DOC 页数:20 大小:144KB
返回 下载 相关 举报
单片机课程设计—电子万年历.doc_第1页
第1页 / 共20页
单片机课程设计—电子万年历.doc_第2页
第2页 / 共20页
单片机课程设计—电子万年历.doc_第3页
第3页 / 共20页
单片机课程设计—电子万年历.doc_第4页
第4页 / 共20页
单片机课程设计—电子万年历.doc_第5页
第5页 / 共20页
点击查看更多>>
资源描述

《单片机课程设计—电子万年历.doc》由会员分享,可在线阅读,更多相关《单片机课程设计—电子万年历.doc(20页珍藏版)》请在三一文库上搜索。

1、计算机信息工程学院2007/2008第二学期单片机课程设计题目 具有串行通信功能的电子万年历 专 业计算机科学与技术 学生姓名 * 学 号 * 小组及组员姓 名 班 级 指导教师 起止日期 08.6.2308.7.4 2008年 6 月 30 日一.实验目的通过本次课程设计达到如下目的:1、熟悉MCS-51定时/计数器、中断的应用。2、熟悉时钟时、分、秒计时方法,掌握编程技巧。3、掌握键盘的基本工作原理,键的识别,键抖动和重键问题的解决,键盘工作方式和键盘程序的编程。4、掌握七段码LED显示器的结构,七段码LED显示器的工作方式和显示程序的编程。5、掌握串行通信程序的编写。二.设计要求 利用A

2、TMEL89C51、七段码LED显示器、按键、MAX232及常用外围器件,设计一个具有串行通信功能的电子万年历,仅使用2位LED,具体要求如下:1、设计实现电子万年历的硬件原理图。2、用T0定时器,产生时钟信号,设计定时中断程序。3、具有2位LED,通过按键切换,分别显示时、分、秒,设计显示程序。4、可用键盘进行校对时间,设计键盘程序。5、当前时间可通过串口在其他单片机系统上显示。三.硬件设计 本系统中单片机通过P0口和P2口直接驱动LED数码管,单片机通过MAX232串口芯片实现和其他单片机系统的通信。系统框图如下:LEDLED P0 P289C51P3P3按键子单片机系统MAX232硬件原

3、理图P3.2所连接的按键是用于切换时、分、秒分别显示。P3.3所连接的按键是用于校时是分别对时、分、秒进行自加。P3.4所连接的开关是用于允许校正位,为低电平允许校正,显示停止。四.软件设计程序框图:num=20?YESNO图2 定时中断流程框图结束时间加1秒num=0计数标志num+装入计数初值(50ms中断)开始开始初始化按键扫描有键按下按键处理,确定模式时间显示模式根据按键状态显示相应时间段时间修改模式根据按键状态修改时间NONOYESYES图1 主程序流程框图YESNO结束图4 串行通信流程框图NO取发送缓冲区数据到SBUF发发送缓冲区空?TI=0,清零标志YESTI=1?将SBUF数

4、据放入接受缓冲区YESRI=0,清零标志RI=1?开始开始清零按键状态位按键为低电平?延时,去抖动按键为低电平?按键为低高平?有按键,置按键状态YESYES结束图3 按键扫描流程框图NONOYES清零按键状态程序中使用到了T0,T1和串口中断,P0,P2口为LED的输出数据口,P32,P33,P34分别为时分秒转换,时间校验和时间停止位(一):主机程序:org 0000hljmp mainorg 000bhljmp timeorg 0023hljmp chuanxingorg 0030hmain:setb p3.2setb p3.3setb p3.7setb p3.5mov pcon,#00h

5、mov scon,#01010000bmov tmod,#21hmov tl0,#0b0hmov th0,#3chmov th1,#0cch ;产生600波特率mov tl1,#0cchmov r5, #20 ;20次以达到1S的计时mov r4,#3 ;切换标志位mov r6,#0ffh ;恢复暂停标志mov r7,#1 mov r3,#0ffh ;暂停标志mov 50h,#0 ;存放时分秒的数据空间地址mov 51h,#0mov 52h,#0mov 53h,#0mov 54h,#0mov 55h,#0mov 60h,#0ffh;串性发送标志mov 61h,#0ffhmov 62h,#0ff

6、hmov 70h,#0 ;存放串行接受的数 mov 71h,#0 ;接受从机发送的切换标志setb easetb essetb et0setb tr0setb tr1start:call keymov a,70h cjne a,#0f1h,qiehuan;是否为串性标接受到的切换志mov 70h,#0mov 71h,#1ljmp xianshiqiehuan:cjne a,#0f2h,qiehuan1mov 70h,#0mov 71h,#2ljmp xianshiqiehuan1:cjne a,#0f3h,qiehuan2mov 70h,#0mov 71h,#3ljmp xianshiqieh

7、uan2:mov a,r0jnz xianshimov a,70hcjne a,#0f6h,qiehuan3;是否为串性接受到的恢复暂停标志mov r6,#0ljmp stopqiehuan3:mov a,r3jz stop1mov a,70hcjne a,#0f7h,xianshimov 70h,#0mov r6,#0ffhsjmp xianshistop1:ljmp stop;51h, 50h miao;53h,52h fen ;55h,54h shixianshi: ;显示子程序mov dptr,#segtab ;显示秒mov a,71hcjne a,#1,bingxing1sjmp b

8、ingxing2bingxing1:cjne r4,#3 ,fenbingxing2:mov a,51hmovc a,a+dptrmov p0,amov a,50hmovc a,a+dptrmov p2,amov a,60h ;串行发送秒jnz biaozhiclr timov a,50hmov sbuf,acall t10msjb ti ,$mov a,51hmov sbuf,ajb ti,$mov 60h,#0ffh;call t10msbiaozhi:ljmp startfen: ;显示分mov a,71hcjne a,#2,bingxing3sjmp bingxing4bingxing

9、3:cjne r4,#2 ,shibingxing4:mov a,53hmovc a,a+dptrmov p0,amov a,52hmovc a,a+dptrmov p2,amov a,61h ;串行发送分jnz biaozhi1clr timov a,52hmov sbuf,ajb ti ,$call t10msmov a,53hmov sbuf,ajb ti,$mov 60h,#0ffh;call t10msbiaozhi1:;call t10msljmp startshi: ;显示时mov a,71hcjne a,#3,bingxing5sjmp bingxing6bingxing5:c

10、jne r4,#1,shi1bingxing6:mov a,55hmovc a,a+dptrmov p0,amov a,54hmovc a,a+dptrmov p2,amov a,62h ;串行发送时?jnz biaozhi2clr timov a,54hmov sbuf,ajb ti ,$call t10msmov a,55hmov sbuf,ajb ti,$mov 60h,#0ffh;call t10msbiaozhi2:;call t10msshi1:ljmp startstop: ;暂停子程序mov a,r6jz xianshi1ljmp startxianshi1:mov a,70h

11、cjne a,#0f4h,aa mov 70h,#0ljmp num1aa:mov a,r1jnz num1mov a,70hcjne a,#0f5h,bbmov 70h,#0ljmp num2bb:mov a,r2jnz num2ljmp startnum1: ;高位累加cjne r4,#3,fen1 ;秒inc 51hmov a,51hcjne a,#6 ,qingling0mov 51h,#0qingling0:ljmp xianshifen1: ;分cjne r4,#2,shi11inc 53hmov a,53hcjne a,#6 ,qingling1mov 53h,#0qinglin

12、g1:ljmp xianshi ;时shi11:cjne r4,#1,qingling2inc 55hmov a,55hcjne a,#6 ,qingling2mov 55h,#0qingling2:ljmp xianshi num2: ;低位累加cjne r4,#3,fen2 ;秒inc 50hmov a,50hcjne a,#10,qingling3mov 50h,#0qingling3:ljmp xianshifen2:cjne r4,#2,shil2 ;分inc 52hmov a,52hcjne a,#10 ,qingling4mov 52h,#0qingling4:ljmp xian

13、shi ;时shil2:cjne r4,#1,qingling5inc 54hmov a,54hcjne a,#10 ,qingling5mov 54h,#0qingling5:ljmp xianshi time: ;中断子程序mov a,r6jnz fanhui11retifanhui11:djnz r5,nextmov r5,#20inc 50hmov a,60hcpl amov 60h,amov a,50hcjne a,#10,nextinc 51hmov 50h,#0mov a,51hcjne a,#6,nextinc 52hmov a,61hcpl amov 61h,amov 51h

14、,#0mov a,52hcjne a,#10,nextinc 53hmov 52h,#0mov a,53hcjne a,#6,nextinc 54hmov a,62hcpl amov 62h,amov 53h,#0mov a,54hcjne a,#10,nextinc 55hmov 54h,#0mov a,55hcjne a,#6,nextmov 55h,#0 ;重装初值next: ljmp fanhui1key ;键盘扫描子程序 p3.2切换 p3.3十位加p3.5暂停 p3.7个位加 mov r0,#0mov r1,#0mov r2,#0jb p3.2, rel1call t10msjnb

15、 p3.2,fanhui ;第一个键按下子程序mov r0,#1mov p1,#0fehdec r4mov a,r4jnz rel5mov r4,#3rel5:ljmp t10msrel1: ;第二个键按下子程序jb p3.3,rel2call t10msjnb p3.3 ,fanhuimov r1,#1ljmp fanhui ;第三个键按下子程序rel2:jb p3.7,rel3call t10msjnb p3.7 ,fanhuimov r2,#1ljmp fanhui ;第四个键按下子程序rel3:jb p3.5,fanhuicall t10msjnb p3.5 ,fanhuimov a,

16、r3cpl amov r3,amov a,r6cpl amov r6,aljmp fanhuit10ms: ;十毫秒延时程序push 50hpush 51hmov 50h,#0ffh loop1: mov 51h,#0ffh nop loop2: nop djnz 51h,loop2djnz 50h,loop1pop 51hpop 50hfanhui: retfanhui1:mov tl0,#0b0hmov th0,#3chreti ;查表段segtab:db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90hchuanxing:;串性中断子程序jb ri

17、,loop clr tiajmp endtloop:mov a,sbufmov 70h,aclr riendt: retit1ms:;一豪秒的延时?push 50hpush 51hmov 50h,#0ffhloop11:mov 51h,#0ffhnoploop22:nopdjnz 51h,loop22djnz 50h,loop11pop 51hpop 50hretend(二):从机中的程序:org 0000hljmp mainrorg 0023hljmp intse2org 0030hmainr:;51h,50h mov 50h,#0mov 51h,#0mov 70h,#0mov r0,#0m

18、ov pcon,#00hmov scon,#01010000bmov tmod,#20hmov th1,#0cchmov tl1,#0cchsetb easetb essetb tr1mov r3,#0ffhmov r5,#0mov r7,#1mov r4,#3mov r6,#0ffhstart: ;键盘调用子程序cjne r7,#0,xianshi1call xianshimov r7,#1xianshi1:call keymov a,r0jnz fasong1mov a,r1jnz fasong2mov a,r2jnz fasong3mov a,70hcjne a,#0f8h,abcc1m

19、ov r3,#0ffhsjmp fasong5abcc1:mov a,r3jz fasong4sjmp startfasong1:cjne r4,#3,bbc1mov a,#0f1hclr timov sbuf,ajb ti,$bbc1:cjne r4,#2,bbc2mov a,#0f2hclr timov sbuf,ajb ti,$bbc2:cjne r4,#1,bbc3mov a,#0f3hclr timov sbuf,ajb ti,$bbc3:ljmp startfasong2:mov a,#0f4hclr ti;clr rimov sbuf,ajb ti,$ljmp startfaso

20、ng3:mov a,#0f5hclr timov sbuf,ajb ti,$ljmp startfasong4:mov a,#0f6hclr timov sbuf,ajb ti,$ljmp startfasong5:mov a,#0f7hclr timov sbuf,ajb ti,$ljmp startintse2: ;串行中断子程序jb ri,loopclr tisjmp endtloop:mov a,sbufcjne r5,#0,zhuanyimov 50h,aajmp zhuanyi1zhuanyi:mov 51h,azhuanyi1:clr riinc r5cjne r5,#2,end

21、tmov r5,0mov r7,#0endt: retixianshi:mov dptr,#segtab ;显示子程序mov a,50hmovc a,a+dptrmov p2,amov a,51hmovc a,a+dptrmov p0,aretkey:;键盘扫描子程序 p3.2切换 p3.3十位加 p3.5暂停 p3.7个位加 mov r0,#0mov r1,#0mov r2,#0jb p3.2, rel1call t10msjnb p3.2,fanhui ;第一个键按下子程序mov r0,#1dec r4mov a,r4jnz rel5mov r4,#3rel5:ljmp fanhuirel

22、1: ;第二个键按下子程序jb p3.3,rel2call t10msjnb p3.3 ,fanhuimov r1,#2ljmp fanhui ;第三个键按下子程序rel2:jb p3.7,rel3call t10msjnb p3.7 ,fanhuimov r2,#3ljmp fanhui ;第四个键按下子程序rel3:jb p3.5,fanhuicall t10msjnb p3.5 ,fanhui inc r6cjne r6,#1,abc13mov r3,#0abc13:cjne r6,#0,abc14mov r6,#2mov 70h,#0f8habc14:ljmp fanhuit10ms:

23、 ;十毫秒延时程序push 50hpush 51hmov 50h,#0afhloop11:mov 51h,#0ffhnoploop22:nopdjnz 51h,loop22djnz 50h,loop11pop 51hpop 50hfanhui:retsegtab:db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90hend五.实验总结本次实验主要涉及了单片机I/O的使用、七段码LED显示、按键识别以及双机串行通信方面的知识。首先设计实现电子万年历并不困难,之前有过类似的实验。实现串行通信是这次的难点,我们在实验中首先实验了单工通信,解决了这方面的困难后在进一步进行双工的实现,最终完成了实验。21世纪是计算机全面应用的时代,很多人不是在制造计算机而是在使用计算机。在使用计算机的人群中只有从事嵌入式系统应用的人才真正地进入到计算机系统内部软硬件体系中,才能真正领会计算机的智能化本质并掌握智能化设计的知识。通过这次难得的实践机会给了我很大收获,不仅巩固了原有的知识,并增强了动手能力,培养了面对问题的分析能力以及遇到困难如何应对。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1