课程设计课程名称:单片机课程设计题目名称:单片机电子时钟学院:专业:电气工程及其自动化姓名:金鱼学号:指导教师:3、定时器/计数器T0中断服务程序T0用于计时,选中方式一,重复定时,定时时间设为50ms,定时时间到则中断,在中断服务程序中用一个计数器对50ms计数,计20次则对秒单元加一。秒单元加到60则对分单元加一,同时秒单元清0;分单元加到60则对时单元加一,同时分单元清0;时单元加到24则对时单元清0,标志一天时间计满。在对各单元计数的同时,把他们的值放到存储器单元的指定位置。流程图如下:4、按键处理模块按键设置为:如果没有按键吗,则时钟正常走时。现场保护,重置初值,启动下一个50ms是开始显示单元清0T0、T1设为16位计数模式允许T0中断调用显示子程序进入功能程序按下键否开始中断返回50ms计数器加一秒单元加一,50ms计数器清0分单元加一,秒单元清0时单元加一,分单元清0时单元清050ms计数器=20?秒单元=60?分单元=60?时单元=24?主程序流程图T0中断服务程序NONONONO当按下K0键时,进入调分状态,时钟停止走动;按K1和K2按键可以进行加一和减一操作;继续按K0键可以分别进行分和小时的调整;最后按K0键启动计时。5、汇编语言程序ORG0000HLJMPSTARTORG000BHLJMPINIT0START:MOVR0,#70H;主程序开始MOVR7,#0CHINIT:MOV@R0,#00HINCR0DJNZR7,INITMOV72H,#10;对连字符进行装值MOV75H,#10MOVTMOD,#01H;选择定时器/计数器T0的方式1MOVTL0,#0B0H;对低位赋初值MOVTH0,#03CH;高位赋初值SETBEASETBET0SETBTR0START1:LCALLSCANLCALLKEYSCANSJMPSTART1DL1MS:MOVR6,#14H;延时1子程序DL1:MOVR7,#19HDL2:DJNZR7,DL2DJNZR6,DL1RETDL20MS:ACALLSCAN;延时20ms子程序ACALLSCANACALLSCANRET;数码管显示程序开始SCAN:MOVA,78HMOVB,#0AHDIVAB;时间秒的十位送给A,时间秒的个位送BMOV71H,A;时间秒要显示的十位MOV70H,B;时间秒要显示的个位MOVA,79HMOVB,#0AHDIVAB;时间分的十位送给A,时间分的个位送BMOV74H,A;时间分要显示的十位送地址MOV73H,B;时间分要显示的个位送地址MOVA,7AHMOVB,#0AHDIVAB;时间时的十位送给A,时间时的个位送BMOV77H,A;时间时显示的十位送地址MOV76H,B;时间时要显示的个位送地址MOVR1,#70HMOVR5,#0FEHMOVR3,#08HSCAN1:MOVA,R5;数码管的显示程序MOVP2,AMOVA,@R1MOVDPTR,#TABMOVCA,@A+DPTR;对字段表取值显示MOVP0,AMOVA,R5LCALLDL1MSINCR1MOVA,R5RLAMOVR5,ADJNZR3,SCAN1MOVP2,#0FFHMOVP0,#0FFHRET;0~9和-的字段表TAB:DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0BFH;定时/计数器T0中断程序INIT0:PUSHACCPUSHPSWCLRET0CLRTR0MOVTL0,#0B0HMOVTH0,#03CHSETBTR0INC7BHMOVA,7BHCJNEA,#14H,OUTT0;50ms是否到20次,没有到就继续执行50ms的延时MOV7BH,#00INC78HMOVA,78HCJNEA,#3CH,OUTT0;一秒的延时是否计到60次,没有就继续执行MOV78H,#00INC79HMOVA,79HCJNEA,#3CH,OUTT0MOV79H,#00INC7AHMOVA,7AHCJNEA,#18H,OUTT0;60分钟的延时是否计到24次,没有就继续执行程序MOV7AH,#00OUTT0:SETBET0;启动定时器T0POPPSWPOPACCRETI;按键处理程序KEYSCAN:CLREAJNBP1.0,KEYSCAN0;P1.0有按键按下则跳转到子程序JNBP1.1,KEYSCAN1;P1.1有按键按下则跳转到子程序JNBP1.2,KEYSCAN2;P1.2有按键按下则跳转到子程序KEYOUT:SETBEARETKEYSCAN0:LCALLDL20MS;20ms的延时消抖JBP1.0,KEYOUTWAIT0:JNBP1.0,WAIT0;判断按键是否松手,松手就往下执行程序INC7CHMOVA,7CHCLRET0CLRTR0CJNEA,#03H,KEYOUT;按下第一次和第二次对时、分选定MOV7CH,#00;按下第三次时就启动计时SETBET0SETBTR0SJMPKEYOUTKEYSCAN1:LCALLDL20MS;按键加一的程序JBP1.1,KEYOUTWAIT1:JNBP1.1,WAIT1MOVA,7CHCJNEA,#02H,KSCAN11;如果功能键按下则对时加一调整INC79HCJNEA,#3CH,KEYOUT;如果加到60则清零MOV79H,#00SJMPKEYOUTKSCAN11:INC7AH;如果功能键是按下第二次则对分进行加一调整MOVA,7AHCJNEA,#18H,KEYOUTMOV7AH,#00SJMPKEYOUTKEYSCAN2:LCALLDL20MS;延时消抖程序JBP1.2,KEYOUTWAIT2:JNBP1.2,WAIT2;判断是否放开按键MOVA,7CHCJNEA,#02H,KSCAN21;如果功能键是按下第一次对时进行减一DEC79HMOVA,79HCJNEA,#0FFH,KEYOUTMOV79H,#3BHSJMPKEYOUTKSCAN21:DEC7AH;如果功能键是按下第二次则对分进行减一CJNEA,#0FFH,KEYOUTMOV7AH,#17HSJMPKEYOUTEND6、软件编译环境:KeiluVision2确保生成.Hex文件五、系统硬件电路的设计系统的硬件主要包括单片机芯片,数码管显示,按键开关电路,它的硬件电路如下图所示,单片机采用广泛使用的AT89C52,系统时钟采用12MHz的晶振,八个数码管显示,小时与分钟与秒钟间用短横线,采用共阳极七段式数码管,P0口为段选码输出端,P2口为位选码输出端。硬件电路如图所示:六、课程设计总结经过一周的时间以及对整本教材的知识总结,把课程设计分成了硬件和软件两大模块。总的来说,硬件部分很好入手,电路也教简单,主要涉及的是简单的按键、电容、电阻、晶振和数码管。在软件部分,细分为了按键模块、显示模块、定时/计数模块,最后把几个模块整合在主程序模块中,使得程序简单明了。整个设计过程中遇到的最大问题是软件的编写,由于采用的是汇编语言,其间使用到的各种寄存器、存储器地址、变量很多,很难对程序的整体把握。通过电子钟的设计,对单片机的原理、结构、外围电路进一步的了解。在整个设计过程中学到了团体精神和独立解决问题的重要性。为以后的求职之路打下了基础。七、参考资料[1]《单片机原理与应用》谢维成杨加国编著[2]《单片机应用与仿真调试》严天峰编著[3]《模拟电子技术(第三版)》胡宴如耿苏燕编著[4]《数字电子技术(第三版)》杨志忠卫桦林编著