




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
单片机/微机接口课程设计说明书PAGEPAGE5单片机/微机接口课程设计说明书PAGEI目录TOC\o"1-2"\h\z\u1设计任务与要求 12设计方案 23硬件设计 33.1单片机型号的选择 33.2数码管显示工作原理 33.3键盘电路设计 43.4整个电路原理图 54软件设计 64.1程序流程图 64.2程序设计 84.3仿真结果 124.4仿真结果分析 135小结 146附录 157参考文献 241设计任务与要求1.设计一个基于单片机的电子时钟,并且能够实现时分秒的现实和调节。2.设计出硬件电路。3.设计出软件编程方法,并写出源代码。4.用PROTEUS进行仿真。5.用汇方式实现目的。7.系统的各各功能模块要编语言编实现程序设计。6.利用查表,中断等清楚,有序。8.程序运行时有友好的用户界面。2设计方案本设计主要设计了一个基于AT89C51单片机的电子时钟。并在数码管上显示相应的时间。并通过一个控制键用来实现时间的调节和是否进入省电模式的转换。应用Proteus的ISIS软件实现了单片机电子时钟系统的设计与仿真。该方法仿真效果真实、准确,节省了硬件资源。该设计的硬件部分主要包括89C51多功能接口芯片用于开发电子时钟芯片、LED七段数码显示器用于显示时间、8031集成定时器用于定时、0.125W、8欧姆的扬声器用于定时发声。软件部分包括主程序、定时计数中断程序、时间调整程序、延时程序四大模块。通过中断程序进行定时器计数,时间调整程序是当键按下时间小于1秒,关闭显示(省电)进入调节时间状态,延时程序用于时间的延迟。先设计个秒钟程序,在秒钟程序中先不设计按钮,直接通电运行,使用40H存放计数值,从00—59,一直循环,把40H中的数值拆分成个位和十位,分别存在30H与31H中,要求动态扫描时,使用21H当标志位,用指令JB控制显示个位与十位,程序中使用中间寄存器R0与R1用于存放拆分后的字型,再传到30H与31H中去,再设计时钟程序。3硬件设计3.1单片机型号的选择通过对多种单片机性能的分析,最终认为89C51是最理想的电子时钟开发芯片。89C51是一种带4K字节闪烁可编程可擦除只读存储器的低电压,高性能CMOS8位微处理器,器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的89C51是一种高效微控制器,而且它与MCS-51兼容,且具有4K字节可编程闪烁存储器和1000写/擦循环,数据保留时间为10年等特点,是最好的选择。3.2数码管显示工作原理数码管是一种把多个LED显示段集成在一起的显示设备。有两种类型,一种是共阳型,一种是共阴型。共阳型就是把多个LED显示段的阳极接在一起,又称为公共端。共阴型就是把多个LED显示段的阴极接在一起,即为公共商。阳极即为二极管的正极,又称为正极,阴极即为二极管的负极,又称为负极。通常的数码管又分为8段,即8个LED显示段,这是为工程应用方便如设计的,分别为A、B、C、D、E、F、G、DP,其中DP是小数点位段。而多位数码管,除某一位的公共端会连接在一起,不同位的数码管的相同端也会连接在一起。即,所有的A段都会连在一起,其它的段也是如此,这是实际最常用的用法。数码管显示方法可分为静态显示和动态显示两种。静态显示就是数码管的8段输入及其公共端电平一直有效。动态显示的原理是,各个数码管的相同段连接在一起,共同占用8位段引管线;每位数码管的阳极连在一起组成公共端。利用人眼的视觉暂留性,依次给出各个数码管公共端加有效信号,在此同时给出该数码管加有效的数据信号,当全段扫描速度大于视觉暂留速度时,显示就会清晰显示出来。图3.1共阴数码管3.3键盘电路设计该设计只用了一个键盘,但实现的功能却是比较完善,减少了硬件资源的损耗,该键盘可以实现小时和分钟的调节以及控制是否进入省电模式。当按键按下又松开,可以实现屏蔽数码管显示的功能,达到省电的目的;直接按下不松开,则可以通过按键实现分钟的累加,每按一次分钟加一;而连续两次按下按键不放松,则可实现小时的调节,同样每按一次小时加一。达到时间调节的目的。图3.2多功能控制键3.4整个电路原理图图3.3系统电路原理图4软件设计4.1程序流程图T0中断入口T0中断入口通过查表方式显示数据数码位选加1位选数值=8吗?位选数值=0秒计数加1秒计数=500吗?秒计数=0SECOND加1SECOND=60吗?SECOND=0,并MINITE加1MINITE=60吗?MINITE=0,并HOUR加1HOUR=24吗?HOUR=0显示数据处理中断返回图4.2中断处理流程图开始开始计数单元清零TH0,TL0装入初值开中断,并允许T0中断秒按键识别成功否SECOND加1SECOND=60吗?SECOND=0显示数据处理分按键识别成功否?MINITE加1MINITE=60吗?MINITE=0显示数据处理分按键识别成功否?HOUR加1HOUR=24吗?HOUR=0显示数据处理结束图4.2主程序流程4.2程序设计本系统的软件系统主要可分为主程序、定时计数中断程序、时间调整程序、延时程序四大模块。在程序设计过程中,加强了部分软件抗干扰措施,下面对部分模块作介绍。定时计数中断程序:MOVTMOD,#00H;写控制字MOVTH0,#0F0H;写定时常数MOVTLO,#0CHSETBTR0;启动T0SETBETO;允许T0中断SETBEA;开放CPU中断AJMP$时间调整程序:SETMM:cLRET0;关定时器T0中断CLRTR0;关闭定时器T0LCALLDL1S;调用1秒延时程序JBP3.7,CLOSEDIS;键按下时间小于1秒,关闭显示(省电)MOVR2,#06H;进入调时状态,赋闪烁定时初值SETBET1;允许T1中断SETBTR1;开启定时器T1SET2:JNBP3.7,SET1;P3.7口为0(键未释放),等待SETB00H;键释放,分调整闪烁标志置1SET4:JBP3.7,SET3;等待键按下LCALLDL05S;有键按下,延时0.5秒JNBP3.7,SETHH;按下时间大于0.5秒转调小时状态MOVR0,#77H;按下时间小于0.5秒加1分钟操作LCALLADD1;调用加1子程序MOVA,R3;取调整单元数据CLRC;清进位标志CJNEA,#60H,HHH;调整单元数据与60比较HHH:JCSET4;调整单元数据小于60转SET4循环LCALLCLR0;调整单元数据大于或等于60时清0CLRC;清进位标志AJMPSET4;跳转到SET4循环CLOSEDIS:SETBET0;省电(LED不显示)状态。开T0中断SETBTR0;开启T0定时器(开时钟)CLOSE:JBP3.7,CLOSE;无按键按下,等待。LCALLDISPLAY;有键按下,调显示子程序延时削抖JBP3.7,CLOSE;是干扰返回CLOSE等待WAITH:JNBP3.7,WAITH;等待键释放LJMPSTART1;返回主程序(LED数据显示亮)SETHH:CLR00H;分闪烁标志清除(进入调小时状态)SETHH1:JNBP3.7,SET5;等待键释放SETB01H;小时调整标志置1SET6:JBP3.7,SET7;等待按键按下LCALLDL05S;有键按下延时0.5秒JNBP3.7,SETOUT;按下时间大于0.5秒退出时间调整MOVR0,#79H;按下时间小于0.5秒加1小时操作LCALLADD1;调加1子程序MOVA,R3;CLRC;CJNEA,#24H,HOUU;计时单元数据与24比较HOUU:JCSET6小于24转SET6循环LCALLCLR0;大于或等于24时清0操作AJMPSET6;跳转到SET6循环SETOUT:JNBP3.7,SETOUT1;调时退出程序。等待键释放LCALLDISPLAY;延时削抖JNBP3.7,SETOUT;是抖动,返回SETOUT再等待CLR01H;清调小时标志CLR00H;清调分标志CLR02H;清闪烁标志CLRTR1;关闭定时器T1CLRET1;关定时器T1中断SETBTR0;开启定时器T0SETBET0;开定时器T0中断(计时开始)LJMPSTART1;跳回主程序SET1:LCALLDISPLAY;键释放等待时调用显示程序(调分)AJMPSET2;防止键按下时无时钟显示SET3:LCALLDISPLAY;等待调分按键时时钟显示用AJMPSET4SET5:LCALLDISPLAY;键释放等待时调用显示程序(调小时)AJMPSETHH1;防止键按下时无时钟显示SET7:LCALLDISPLAY;等待调小时按键时时钟显示用AJMPSET6SETOUT1:LCALLDISPLAY;退出时钟调整时键释放等待AJMPSETOUT;防止键按下时无时钟显示延时程序:1MS延时程序,LED显示程序用DL1MS:MOVR6,#14HDL1:MOVR7,#19HDL2:DJNZR7,DL2DJNZR6,DL1RET20MS延时程序,采用调用显示子程序以改善LED的显示闪烁现象DS20MS:ACALLDISPLAYACALLDISPLAYACALLDISPLAYRET4.3仿真结果图4.3开始运行程序仿真图图4.4运行一段时间后仿真图4.4仿真结果分析功能太过单调,只能实现时分秒的显示,设计比较简单。电路图的设计过于单调,用的器件太少,实现调节时间的按钮太少,不能很好的实现时间的调节。在测试过程中,六位数码显示管只显示五位数字,有一位数字不亮,通过多次的修改程序并在PROTEUS软件环境中进行仿真,最终解决了这个问题,同时也透露出本人在单片机电路设计和程序设计方面的不足。不过最后的仿真效果非常好,实现了预期的效果,能过通过多功能控制键调节时间和是否进入省电模式,是一个比较令人满意的设计。5小结在朱老师耐心的指导下,我顺利完成了这次单片机课程设计课题中的电子时钟设计,通过这次的设计使我认识到本人对单片机方面的知识知道的太少了,对于书本上的很多知识还不能灵活运用,尤其是对程序设计语句的理解和运用,不能够充分理解每个语句的具体含义,导致编程的程序过于复杂,使得需要的存储空间增大。损耗了过多的内存资源。本次的设计使我从中学到了一些很重要的东西,那就是如何从理论到实践的转化,怎样将我所学到的知识运用到我以后的工作中去。在大学的课堂的学习只是在给我们灌输专业知识,而我们应把所学的用到我们现实的生活中去,此次的电子时钟设计给我奠定了一个实践基础,我会在以后的学习、生活中磨练自己,使自己适应于以后的竞争,同时在查找资料的过程中我也学到了许多新的知识,在和同学协作过程中增进同学间的友谊,使我对团队精神的积极性和重要性有了更加充分的理解。最后,感谢朱老师对我的细心的指导,正是由于朱老师的细心的辅导和他提供给我们的参考资料,使得我的课程设计能够顺利的完成,6附录ORG0000H;程序执行开始地址LJMPSTART;跳到标号START执行ORG0003H;外中断0中断程序入口RETI;外中断0中断返回ORG000BH;定时器T0中断程序入口LJMPINTT0;跳至INTTO执行ORG0013H;外中断1中断程序入口RETI;外中断1中断返回ORG001BH;定时器T1中断程序入口LJMPINTT1;跳至INTT1执行ORG0023H;串行中断程序入口地址RETI;串行中断程序返回主程序开始;START:MOVR0,#70H;清70H-7AH共11个内存单元MOVR7,#0BH;CLEARDISP:MOV@R0,#00H;INCR0;DJNZR7,CLEARDISP;MOV20H,#00H;清20H(标志用)MOV7AH,#0AH;放入"熄灭符"数据MOVTMOD,#11H;设T0、T1为16位定时器MOVTL0,#0B0H;50MS定时初值(T0计时用)MOVTH0,#3CH;50MS定时初值MOVTL1,#0B0H;50MS定时初值(T1闪烁定时用)MOVTH1,#3CH;50MS定时初值SETBEA;总中断开放SETBET0;允许T0中断SETBTR0;开启T0定时器MOVR4,#14H;1秒定时用初值(50MS×20)START1:LCALLDISPLAY;调用显示子程序JNBP3.7,SETMM1;P3.7口为0时转时间调整程序SJMPSTART1;P3.7口为1时跳回START1SETMM1:LJMPSETMM;转到时间调整程序SETMM;;1秒计时程序;;INTT0:PUSHACC;累加器入栈保护PUSHPSW;状态字入栈保护CLRET0;关T0中断允许CLRTR0;关闭定时器T0MOVA,#0B7H;中断响应时间同步修正ADDA,TL0;低8位初值修正MOVTL0,A;重装初值(低8位修正值)MOVA,#3CH;高8位初值修正ADDCA,TH0;MOVTH0,A;重装初值(高8位修正值)SETBTR0;开启定时器T0DJNZR4,OUTT0;20次中断未到中断退出ADDSS:MOVR4,#14H;20次中断到(1秒)重赋初值MOVR0,#71H;指向秒计时单元(71H-72H)ACALLADD1;调用加1程序(加1秒操作)MOVA,R3;秒数据放入A(R3为2位十进制数组合)CLRC;清进位标志CJNEA,#60H,ADDMM;ADDMM:JCOUTT0;小于60秒时中断退出ACALLCLR0;大于或等于60秒时对秒计时单元清0MOVR0,#77H;指向分计时单元(76H-77H)ACALLADD1;分计时单元加1分钟MOVA,R3;分数据放入ACLRC;清进位标志CJNEA,#60H,ADDHH;ADDHH:JCOUTT0;小于60分时中断退出ACALLCLR0;大于或等于60分时分计时单元清0MOVR0,#79H;指向小时计时单元(78H-79H)ACALLADD1;小时计时单元加1小时MOVA,R3;时数据放入ACLRC;清进位标志CJNEA,#24H,HOUR;HOUR:JCOUTT0;小于24小时中断退出ACALLCLR0;大于或等于24小时小时计时单元清0OUTT0:MOV72H,76H;中断退出时将分、时计时单元数据移MOV73H,77H;入对应显示单元MOV74H,78H;MOV75H,79H;POPPSW;恢复状态字(出栈)POPACC;恢复累加器SETBET0;开放T0中断RETI;中断返回;;闪动调时程序;;;T1中断服务程序,用作时间调整时调整单元闪烁指示INTT1:PUSHACC;中断现场保护PUSHPSW;MOVTL1,#0B0H;装定时器T1定时初值MOVTH1,#3CH;DJNZR2,INTT1OUT;0.3秒未到退出中断(50MS中断6次)MOVR2,#06H;重装0.3秒定时用初值CPL02H;0.3秒定时到对闪烁标志取反JB02H,FLASH1;02H位为1时显示单元"熄灭"MOV72H,76H;02H位为0时正常显示MOV73H,77H;MOV74H,78H;MOV75H,79H;INTT1OUT:POPPSW;恢复现场POPACC;RETI;中断退出FLASH1:JB01H,FLASH2;01H位为1时,转小时熄灭控制MOV72H,7AH;01H位为0时,"熄灭符"数据放入分MOV73H,7AH;显示单元(72H-73H),将不显示分数据MOV74H,78H;MOV75H,79H;AJMPINTT1OUT;转中断退出FLASH2:MOV72H,76H;01H位为1时,"熄灭符"数据放入小时MOV73H,77H;显示单元(74H-75H),小时数据将不显示MOV74H,7AH;MOV75H,7AH;AJMPINTT1OUT;转中断退出;;加1子程序;;ADD1:MOVA,@R0;取当前计时单元数据到ADECR0;指向前一地址SWAPA;A中数据高四位与低四位交换ORLA,@R0;前一地址中数据放入A中低四位ADDA,#01H;A加1操作DAA;十进制调整MOVR3,A;移入R3寄存器ANLA,#0FH;高四位变0MOV@R0,A;放回前一地址单元MOVA,R3;取回R3中暂存数据INCR0;指向当前地址单元SWAPA;A中数据高四位与低四位交换ANLA,#0FH;高四位变0MOV@R0,A;数据放入当削地址单元中RET;子程序返回;;清零程序;;;对计时单元复零用CLR0:CLRA;清累加器MOV@R0,A;清当前地址单元DECR0;指向前一地址MOV@R0,A;前一地址单元清0RET;子程序返回;;时钟调整程序;;;当调时按键按下时进入此程序SETMM:CLRET0;关定时器T0中断CLRTR0;关闭定时器T0LCALLDL1S;调用1秒延时程序JBP3.7,CLOSEDIS;键按下时间小于1秒,关闭显示(省电)MOVR2,#06H;进入调时状态,赋闪烁定时初值SETBET1;允许T1中断SETBTR1;开启定时器T1SET2:JNBP3.7,SET1;P3.7口为0(键未释放),等待SETB00H;键释放,分调整闪烁标志置1SET4:JBP3.7,SET3;等待键按下LCALLDL05S;有键按下,延时0.5秒JNBP3.7,SETHH;按下时间大于0.5秒转调小时状态MOVR0,#77H;按下时间小于0.5秒加1分钟操作LCALLADD1;调用加1子程序MOVA,R3;取调整单元数据CLRC;清进位标志CJNEA,#60H,HHH;调整单元数据与60比较HHH:JCSET4;调整单元数据小于60转SET4循环LCALLCLR0;调整单元数据大于或等于60时清0CLRC;清进位标志AJMPSET4;跳转到SET4循环CLOSEDIS:SETBET0;省电(LED不显示)状态。开T0中断SETBTR0;开启T0定时器(开时钟)CLOSE:JBP3.7,CLOSE;无按键按下,等待。LCALLDISPLAY;有键按下,调显示子程序延时削抖JBP3.7,CLOSE;是干扰返回CLOSE等待WAITH:JNBP3.7,WAITH;等待键释放LJMPSTART1;返回主程序(LED数据显示亮)SETHH:CLR00H;分闪烁标志清除(进入调小时状态)SETHH1:JNBP3.7,SET5;等待键释放SETB01H;小时调整标志置1SET6:JBP3.7,SET7;等待按键按下LCALLDL05S;有键按下延时0.5秒JNBP3.7,SETOUT;按下时间大于0.5秒退出时间调整MOVR0,#79H;按下时间小于0.5秒加1小时操作LCALLADD1;调加1子程序MOVA,R3;CLRC;CJNEA,#24H,HOUU;计时单元数据与24比较HOUU:JCSET6;小于24转SET6循环LCALLCLR0;大于或等于24时清0操作AJMPSET6;跳转到SET6循环SETOUT:JNBP3.7,SETOUT1;调时退出程序。等待键释放LCALLDISPLAY;延时削抖JNBP3.7,SETOUT;是抖动,返回SETOUT再等待CLR01H;清调小时标志CLR00H;清调分标志CLR02H;清闪烁标志CLRTR1;关闭定时器T1CLRET1;关定时器T1中断SETBTR0;开启定时器T0SETBET0;开定时器T0中断(计时开始)LJMPSTART1;跳回主程序SET1:LCALLDISPLAY;键释放等待时调用显示程序(调分)AJMPSET2;防止键按下时无时钟显示SET3:LCALLDISPLAY;等待调分按键时时钟显示用AJMPSET4SET5:LCALLDISPLAY;键释放等待时调用显示程序(调小时)AJMPSETHH1;防止键按下时无时钟显示SET7:LCALLDISPLAY;等待调小时按键时时钟显示用AJMPSET6SETOUT1:LCALLDISPLAY;退出时钟调整时键释放等待AJMPSETOUT;防止键按下时无时钟显示;;显示程序;;DISPLAY:MOVR1,#70H;指向显示数据首址M
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 安全与环境的协调发展注册安全工程师试题及答案
- 细胞应激反应机制分析试题及答案
- CPSM考试对个人能力评估的影响及试题及答案
- 2024年CPMM实践的试题及答案小窍门
- 运输市场环境变化分析试题与答案
- 中班防溺水课件下载
- 2025年羧甲淀粉钠合作协议书
- 2024年CPSM考试知识回顾试题及答案
- 保洁防控培训课件
- CPMM知识检验试题及答案总结
- 《无人机操控技术》 课件 项目 3 无人机视距内操控技术
- 中国铁路发展历程
- TBT2765-2005 列车运行监控记录装置技术条件
- 小学特色课程《口风琴课程》校本教材
- 试卷印制服务投标方案(技术标)
- 安全风险分级管控清单(大全)
- 智能传感器系统(第二版)(刘君华)1-5章
- 6G移动通信技术
- 有效沟通技巧(适用于工厂)PPT幻灯片
- 湖南省消除艾梅乙工作考试复习题库大全(含答案)
- 采矿学课程设计砚北煤矿新井设计全套图纸
评论
0/150
提交评论