单片机电子钟设计课程设计报告.docx

上传人:教**** 文档编号:88926385 上传时间:2023-05-04 格式:DOCX 页数:15 大小:338.89KB
返回 下载 相关 举报
单片机电子钟设计课程设计报告.docx_第1页
第1页 / 共15页
单片机电子钟设计课程设计报告.docx_第2页
第2页 / 共15页
点击查看更多>>
资源描述

《单片机电子钟设计课程设计报告.docx》由会员分享,可在线阅读,更多相关《单片机电子钟设计课程设计报告.docx(15页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、单片机课程电子时钟设计报告2016.04.27一 设计的任务及要求:利用实验平台上4个LED数码管,设计带有闹铃功能的数字时钟。任务:通过电子时钟综合设计,学会利用 8051 定时器时间计时处理功能,了解按键扫描及控制LED数码管显示原理,掌握单片机和按键以及LED数码管硬件电路设计及控制程序的设计方法。思考按键消除抖动、LED 动态显示与静态显示的特点,从而提高解决实际问题的能力。要求:1在 4 位数码管上显示当前时间。显示格式“时时分分”。2由 LED 闪动做秒显示。3利用按键可对时间及闹玲进行设置,并可显示闹玲时间。当闹玲时间到蜂鸣器发出声响,按停止键使可使闹玲声停止。二 工作原理:LE

2、D数码管:蜂鸣器:按键:三 软件设计流程及描述:总设计框图:显示部分:显示部分分为时钟显示、闹钟显示和秒显示三部分,主要由时钟显示子程序和闹钟显示子程序构成,秒显示较为简单。闹钟显示与时钟显示编程流程大致相同。流程图如下:按键扫描及处理框图:闹铃部分:设计思路及原理:音节由不同频率的方波产生,音节与频率的关系如下表所示。要产生音频方波,设计利用延时来建立音符表NOTE,表格中的数存R3*20us,其倒数1/(R3*2*10us)对应相应音符的频率。另外,音乐的节拍是由延时实现的,如果1拍为0.4秒,1/4拍是0.1秒。只要设定延时时间,就可求得节拍的时间。延时作为基本延时时间,节拍值只能是它的

3、整数倍。设计利用T1中断产生10ms延时,取1/4拍为10H*10ms,相应产生所需延时。音符(低).1.2.3.4.5.6.7频率(HZ)262294330349392440494音符(中)1234567频率(HZ)523587659698784880988音符(高)1234567频率(HZ)1046117513181397156817601967程序中的音乐乐谱如下:NOTE:DB 60H,60H,7FH,98H,7FH,60H,60H,7FH,60HDB 98H,7FH,60H,7FH,98H,60H,7FH,98H,50HMETRE:DB 20H,20H,20H,20H,20H,20H

4、,20H,20H,20HDB 20H,20H,20H,20H,20H,20H,20H,20H,20H四 源程序及代码:;程序主要包括MAIN函数,T0/T1中断程序,时间、闹钟显示程序 ,按键扫描、处理程序;/主函数/预置T0T1工作方式,置初值,预置时钟、闹钟,置位数码管 ORG 0000HAJMP MAIN;跳转到主程序MAIN执行ORG 000BHAJMP INTT0;跳到INTT0执行ORG 001BHLJMP INTT1;跳到INTT1执行ORG 02B0HMAIN:MOV SP,#80HMOV TMOD,#11H;设置定时器T0、T1工作于方式1MOV TH0,#0ECH;装入时钟

5、定时初值(5ms)MOV TL0,#78HMOV TH1,#0D8H;装入闹铃定时初值(10ms) MOV TL1,#0F0H MOV R1,#00H;确保首次默认闹铃工作MOV 22H,#00H;预置时钟分钟MOV 23H,#00H;预置时钟小时MOV 30H,#03H;预置闹铃分钟MOV 31H,#00H;预置闹铃小时SETB P1.7;LED7显示秒;置位P1.7,发光二极管LED8灭SETB EA;开放总中断SETB ET0;允许T0中断SETB TR0;开启定时器T0LOOP:LCALL DISPT;调用时间显示子程序LCALL RING;调用闹铃处理子程序LCALL KEY;调用按

6、键扫描子程序JZ LOOP;无键按下则循环LCALL CASE;有键按下则转按键处理子程序执行SJMP LOOP;返回循环;/ T0一秒定时中断程序INTT0/正常时钟计时INTT0:PUSH PSW;状态字入栈保护 PUSH ACC;累加器入栈保护MOV TH0,#0ECH;装入计数初值,12MHZ晶振,形成1S中断MOV TL0,#78HINC 20HMOV A,20HCJNE A,#200,RETURNCPL P1.67;一秒到LED8亮,用于显示秒MOV 20H,#00;一秒到清20H MOV A,21HADD A,#01HDA AMOV 21H,ACJNE A,#60H,RETURN

7、MOV 21H,#00;一分到,21H单元清零MOV A,22HADD A,#01HDA AMOV 22H,ACJNE A,#60H,RETURNMOV 22H,#00;一小时到,22H单元清零MOV A,23HADD A,#01HDA AMOV 23H,ACJNE A,#24H,RETURNMOV 23H,#00H;满24,23H单元清零RETURN:POP ACCPOP PSWRETI;/时间显示子程序/DISPT:MOV A,22HANL A,#0FHMOV 2AH,A;时钟分的低位MOV A,22HANL A,#0F0HSWAP AMOV 2BH,A;时钟分的高位MOV A,23HAN

8、L A,#0FHMOV 2CH,A;时钟时的低位MOV A,23HANL A,#0F0HSWAP AMOV 2DH,A;时钟时的高位LED1:SETB P2.3 MOV A,2DH MOV DPTR,#TAB MOVC A,A+DPTR CLR P2.0;选通数码管1 MOV P0,A;显示时钟时的十位部分 LCALL DELAYLED2:SETB P2.0 MOV A,2CH MOV DPTR,#TAB MOVC A,A+DPTR CLR P2.1;选通数码管2 MOV P0,A;显示时钟时的个位部分 LCALL DELAY LED3:SETB P2.1 MOV A,2BH MOV DPTR

9、,#TAB MOVC A,A+DPTR CLR P2.2;选通数码管3 MOV P0,A;显示时钟分的十位部分 LCALL DELAYLED4:SETB P2.2 MOV A,2AH JB P1.6,TATA: MOV DPTR,#TAB MOVC A,A+DPTR CLR P2.3;选通数码管4 MOV P0,A;显示时钟分的个位部分 LCALL DELAY RETTAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H;共阳数码管的时间显示码;/按键扫描程序/开关接P3口,判断按键情况KEY: MOV P3,#0FFH MOV A,P3CPL

10、 AANL A,#2CHJZ RETK;无键按下则返回LCALL DELAY;延时消抖MOV A,P3CPL AANL A,#2CHJZ RETK;键盘去抖动MOV R6,A;将键值存入R6LOOP1:LCALL DISPT;MOV A,P3CPL AANL A,#2CHJNZ LOOP1;等待键释放MOV A,R6RETK:RET;/按键处理子程序/根据按键情况进行处理CASE:MOV A,R6CLR P1.0;发光二极管LED1亮JB ACC.2,SETH;转调整时JB ACC.3,SETM ;转调整分JB ACC.5,SETR;转闹铃设置WAITCASE:LCALL DISPT;无键按下

11、时等待LCALL KEYJZ WAITCASE;/时间调整程序/按键调整时间SETT:LCALL DISPTLCALL KEYJZ SETTMOV A,R6JB ACC.2,SETHJB ACC.3,SETMJB ACC.5,KEYGO;第二次按为确认离开KEYGO: SETB P1.0;发光二极管LED1、LED2灭SETB P1.1RETSETH:MOV A,23H;调整时钟时,时加1ADD A,#01HDA A;十进制调整MOV 23H,ACJNE A,#24H,HD;判断是否到24,不到继续MOV 23H,#00H;到24时清零HD:LJMP SETTSETM:MOV A,22H;分加

12、1ADD A,#01HDA A;十进制调整 MOV 22H,ACJNE A,#60H,MD;判断是否到1小时,不到继续MOV 22H,#00H;到1小时则清零MD:LJMP SETT;/闹铃时间调整按键扫描及处理子程序/KEYR: MOV P3,#0FFH MOV A,P3CPL AANL A,#2CHJZ RETK;无键按下则返回LCALL DISPR;延时消抖MOV A,P3CPL AANL A,#2CHJZ RETK;键盘去抖动MOV R6,A;将键值存入R6LJMP LOOPRLOOPR:LCALL DISPRMOV A,P3CPL AANL A,#2CHJNZ LOOPR;等待键释放

13、MOV A,R6AJMP RETK;/设置闹铃时间/SETR:SETB P1.0;发光二极管LED1灭CLR P1.1;发光二极管LED2亮,改显示状态LCALL DISPRMOV R1,#00H;设置闹钟时重设R1,用于检测闹铃播放与否MOV 53H,#03H;重设闹铃次数LCALL KEYR;闹铃时间调整按键检测JZ SETRMOV A,R6JB ACC.2,SETRHJB ACC.3,SETRMJB ACC.5,KEYGO;第二次按为确认离开SETRH:MOV A,31H;闹钟时加1ADD A,#01HDA A;十进制调整MOV 31H,ACJNE A,#24H,RHD;判断是否到24,

14、不到继续MOV 31H,#00H;到24时则清零RHD:LJMP SETRSETRM:MOV A,30H;闹钟分加1ADD A,#01HDA A;十进制调整MOV 30H,ACJNE A,#60H,RMD;判断是否到1小时,不到继续MOV 30H,#00H;到1小时则清零RMD:LJMP SETR;/闹钟设置显示子程序/DISPR:MOV A,30HANL A,#0FH;屏蔽高四位MOV 3AH,A;保留低位送3AHMOV A,30HANL A,#0F0H;屏蔽低四位 SWAP A;高四位与第四位交换MOV 3BH,A;将保留的高4位送3BHMOV A,31HANL A,#0FH MOV 3C

15、H,A;低位MOV A,31HANL A,#0F0HSWAP AMOV 3DH,A;高位LEDR1:SETB P2.3MOV A,3DH MOV DPTR,#TAB MOVC A,A+DPTR CLR P2.0MOV P0,ALCALL DELAYLEDR2:SETB P2.0 MOV A,3CH MOV DPTR,#TAB MOVC A,A+DPTR CLR P2.1MOV P0,ALCALL DELAYLEDR3:SETB P2.1 MOV A,3BH MOV DPTR,#TAB MOVC A,A+DPTR CLR P2.2MOV P0,ALCALL DELAYLEDR4:SETB P2.

16、2 MOV A,3AH MOV DPTR,#TAB MOVC A,A+DPTR CLR P2.3MOV P0,ALCALL DELAYRET;/延时子程序/DELAY:MOV R5,#2 D1:MOV R4,#250D2:DJNZ R4,D2DJNZ R5,D1RET;/闹铃检测程序/RING:MOV A,23H;比较时CJNE A,31H,RETRMOV A,22H;比较分CJNE A,30H,RETR LCALL SINGRETR:RET;/定时器T1中断子程序/INTT1:PUSH PSW;状态字入栈保护 PUSH ACC;累加器入栈保护 INC 50H;中断服务程序,中断计数器加1MO

17、V TH1,#0D8H;装入计数初值,12M晶振,形成10MS中断 MOV TL1,#0F0H POP ACC POP PSWRETI ;/响铃子程序/ SING:CJNE R1,#01H,SING1;判断是否已经闹铃过一次 LJMP RETS SING1:SETB ET1 MOV 50H,#00H;中断计数器清0 MOV 51H,#00H;音符指针 MOV 52H,#00H;节拍码指针 MOV 53H,#03H;设置闹钟不退出响铃次数 GETNOT:MOV A,51H MOV DPTR,#NOTE;表头地址送DPTR MOVC A,A+DPTR;查表取音符码 JZ ENDP;是00H,则结束

18、 MOV R6,A;存R6 INC 51H CJNE A,#0FFH,GETMET;不为0FFH,转取节拍码 LJMP PAUSE;转休止播放 LJMP GETNOT;取音符码 GETMET:MOV A,52H MOV DPTR,#METRE;取节拍码首地址 MOVC A,A+DPTR;取节拍代码送R7 MOV R7,A INC 52H PLAY:SETB TR1;启动计数 CPL P2.4 LCALL KEY JNZ RETS MOV A,R6 MOV R3,A;音符码存R3 LCALL DELAY1 MOV A,R7;取节拍码放A与中断计数比较CJNE A,50H,PLAY;中断计数器(5

19、0H)=R7否,不等继续循环MOV 50H,#00H;等于,则取下一代码 LCALL DISPT CLR TR1 LJMP GETNOT RETS:SETB P2.4;置位蜂鸣器,否则可能产生啸叫MOV R1,#01H;表明播放过一次CLR A;清除A,防止进入按键处理子程序LJMP RETR PAUSE:CLR TR1;休止100毫秒 MOV R2,#0DH DELAY2: MOV R3,#0FFH LCALL DELAY1 DJNZ R2,DELAY2RET ENDP:SETB P2.4 MOV R2,#0C7H;歌曲结束,延时1秒后继续END1M: MOV R3,#00H LCALL D

20、ELAY1 DJNZ R2,END1M DJNZ 53H,SING RETDELAY1:NOP;R3为01H时,DELAY延时为20uSDELAY3: MOV R4,#02H DELAY4: DJNZ R4,DELAY4 DJNZ R3,DELAY3 RETNOTE:DB 60H,60H,7FH,98H,7FH,60H,60H,7FH,60HDB 98H,7FH,60H,7FH,98H,60H,7FH,98H,50HMETRE:DB 20H,20H,20H,20H,20H,20H,20H,20H,20HDB 20H,20H,20H,20H, 20H,20H,20H,20H,20HEND六. 总

21、结与体会本次课程设计对知识的要求较为综合,我们用到了单片机、数字电路、模拟电路、protel/proteuse、keil-c51等知识,而且在后来要求必须用汇编语言来编写程序。所以,才开始时,我们不知道从何下手。不过后来在老师的帮助下,以及自己不断的查找资料,和同学商量,终于开始有点头目了,慢慢的便进入了状态。在将编写好的源程序输入电脑,编译后出现很多错误,这些错误有许多是平时的实验遇到过的,例如:输入的分号格式不正确, CJNE写成了CJNZ等等。通过这次课程设计,发现自己的很多不足,自己知识的很多漏洞,看到了自己的实践经验还是比较缺乏,理论联系实际的能力还急需提高。单片机理论的学习是为课程的设计作准备的,但有时学习的理论也解决不了实践中的问题。实践中获得的知识能让我对单片机的知识有更好的认识和理解。虽然这次的课程设计我参考了一些文献资料,在对程序的读写过程中我明白了许多。这次课程设计的最大收获是,只有把理论用到实践中我们才能真正掌握好所学知识。七. Proteus仿真

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁