基于单片机的数字电子钟设计(含完整程序+PCB图)课程设计_第1页
基于单片机的数字电子钟设计(含完整程序+PCB图)课程设计_第2页
基于单片机的数字电子钟设计(含完整程序+PCB图)课程设计_第3页
基于单片机的数字电子钟设计(含完整程序+PCB图)课程设计_第4页
基于单片机的数字电子钟设计(含完整程序+PCB图)课程设计_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1 课题设计任务、功能要求及总体方案1.1 课题设计任务本课程设计选题目为:数字电子钟。设计一个具有特定功能的电子钟。1.2 功能要求设计的数字电子钟上电或按键复位后能自动显示系统提示符“p.”, 进入时钟准备状态;第一次按数字电子钟启动/调整键,数字电子钟从0时0分0秒开始运行,进入时钟运行状态;再次按数字电子钟启动/调整键,则数字电子钟进入时钟调整状态,并且时间停止不动,此时可分别利用各调整键调整时、分、秒,调整结束后可按启动/调整键再次进入时钟运行状态。1.3 设计总体方案介绍及工作原理说明本课程设计采用at89s52单片机设计一个数字电子钟,通过两个4位led数码管显示时、分、秒,并设

2、有9个按键。其中一个用于单片机的复位;一个为启动/调整键;两个分别为加,减键;其他键本课题暂不用。电路分为5部分,分别为复位电路、键盘电路、时钟电路、显示电路和控制电路。复位电路采用按键复位方式。键盘电路采用独立式键盘。时钟电路用12mhz的晶振产生时钟信号。显示电路采用8个三极管驱动两个4位led显示。控制电路采用8位的at89s52单片机作为cpu;原理是:时钟用t0为时钟秒加1中断,时间常数位50ms,每20次加1s,t0用为时间加1中断,时间常数为50ms,中断20次时间加1。其设计框图如图1.1所示:图1.1 设计方案框图2 数字电子钟硬件系统的设计2.1 硬件系统各模块功能简要介绍

3、2.1.1 复位电路复位是单片机的硬件初始化操作。经复位操作后,单片机系统才能开始正常工作。单片机上有复位引脚rst,用于外接复位电路,这里复位电路采用按键电平复位。2.1.2 时钟电路单片机工作所需的同步时钟信号由以下两种方法获得:由单片机片内时钟电路结合外部晶振、电容产生和直接从单片机外部引入脉冲信号。这里用第一种方法产生时钟信号。电路用12mhz的石英晶体和二个微调电容(为33pf)连接起来接到单片机的xtal1和xtal2引脚上。2.1.3 键盘电路由于按键较少,所以此处使用独立式键盘,键盘接到单片机的p1口上,当键按下时,在其相应的口线上产生低电平信号,键松开时仍为高电平信号。 2.

4、1.4 显示电路本显示电路采用三极管驱动两个4位数码管段位控端;用单片机的p2口控制位控;用单片机的p0口线作段控口,位、段控线上都串入470的限流电阻。 2.2 数字电子钟原理图、pcb图和元器件布局图2.2.1 原理图原理图见附录a。2.2.2 pcb图 pcb图见附录b。2.2.3 元器件布局图 元器件布局图见附录c。2.3 数字电子钟元器件清单 本课程设计元器件清单如表2.1所示:表2.1 数字电子钟元器件清单名称型号数量备注单片机at89s521块含插座,双列直插式三极管90129个电阻47024个电阻1k 3个电阻4.7k 1个上拉排阻10k2片数码管4位一体2块含两个插座电容33

5、pf2个电解电容22f1个下载线接口1个双列10针电源线接口1个开关1二极管9个温度传感器18b201个蜂鸣器1个插针38个电阻2001个晶振12mhz1个按键9个3 数字电子钟软件系统的设计3.1 数字电子钟使用单片机资源情况在电子钟的编程过程中,单片机资源使用情况如下:寄存器:通用寄存器的r0r7;位地址:23h(用于保存启动/调整键盘当前的状态);io口线:p0口(作数码管的段控口),p2口(作数码管的位控口),p1口(作键盘接口);堆栈栈底单元地址:60h;定时器:定时器0;显示缓冲单元:78h7fh;秒分时对应储存单元:72h77h生成键码出口地址:20h。3.2 数字电子钟软件系统

6、各模块功能简要介绍3.2.1 显示模块此处将显示程序编成一个子程序,要显示时调用显示子程序即可,显示程序中显示的是缓冲区中的内容再调数据表格中显示代码,程序中只要将要显示的内容在数据表中的位置送往显示缓冲区即可,就可以显示你所需要显示的内容。3.2.2 中断服务程序模块本程序中用了一个定时器中断,所以有中断服务程序,是为了使秒自加而使用定时器中断,定时50ms循环20次到一秒以后,向cpu申请中断,使秒自加1。3.2.3 键盘模块运用直接判断io口线的方法编成键盘扫描程序,来完成用键盘监控程序的功能,总共用了四个键,其具体的功能上面已经叙述过,这里不再赘述,使用键盘能够很准确的、快速的监控系统

7、。3.3 数字电子钟软件系统程序流程框图3.3.1 主程序流程框图 主程序员流程框图如图3.1所示:图3.1 主程序流程图3.3.2 中断服务程序流程框图中断服务程序流程图如图3.2所示:图3.2 中断服务程序流程图3.3.3 加1子程序流程框图加1子程序流程框图如图3.3所示:图3.3 加1子程序流程图3.3.4 减1子程序流程框图加1子程序流程框图如图3.4所示: 图3.4 减1子程序流程图3.3.5 键扫子程序流程图框图键扫子程序流程图框图如图3.5 图3.5 键扫子程序流程图3.3.6 显示子程序流程图框图显示子程序流程图框图如图3.6图3.6 显示子程序流程图3.4 数字电子钟软件系

8、统程序清单程序清单详见附录d4 仿真与误差分析4.1 数字电子钟的设计结论及使用说明本课程设计的目的是设计一个电子钟,通过原理图的绘制,pcb板的制作,最终做出的实物是成功的,能够达到预期的目的,以下本次所作电子钟的具体的使用说明:电子钟上电后,最高位显示p.,按下启动/调整键,电子钟从0时0分0秒开始自动运行,再次按下启动/调整键,电子钟运行停止,处于调整状态,按下加减键,可以实现时、分、秒加键1,这样可以实现时、分、秒的累加调整,再次按下启动/调整键,电子钟自动运行起来,处于运行状态,调整结束。4.2 设计课题的仿真结果如图4.1、4.2所示:图4.1 显示p.仿真结果图4.2 运行仿真结

9、果4.3 设计课题的误差分析本课程设计存在一定误差,引起误差原因主要是程序中定时后很多指令引起的时间误差。经过测试10小时,时钟慢25秒,则每秒钟慢2.5/3600=0.6944ms,50ms中断一次,20次中断为1秒,因此每次中断比标准慢0.6944/20=0.03472ms.th0tl0=65536-(50-0.03472)*1000/1=15570=3cd2h。将原来中断初值th0tl0=3cb0h改为th0tl0=3cd2h。4.4 数字电子钟设计体会本次做课程设计,从硬件方面说,我认为本次设计的重点在于单片机的最小系统,若单片机的最小系统不能正常工作,那后面一切都免谈;从软件方面说,

10、我编程的思路就是从简单到难,一步一步实现各个功能。这个电子钟的程序重点在于调整键功能程序和中断服务程序的编写,这两个小模块编好了,就很容易了。在做课程设计的过程中,学到很多东西,比如说做pcb板的技术有了很大的提高,再比如说,自己通过编电子钟的程序,使自己对汇编指令的应用越来越熟练,编程的能力也有了较大提高。在制作电子钟的过程中,遇到的问题都能尝试去自己解决,比如说调试程序,检查线路等等,使自己发现问题、解决问题的能力大大提高。4.5 教学建议 通过一个学期的单片机课,我生生的体会到了什么叫名师;诚然,王老师总说自己不是名师,但我们真的得尊称你为名师。 在这里我只是觉得我们的动手能力还是太差了

11、,还得增加实践的动手!让我们多做几块板子,即使我们心有不情愿,还需老师一如既往的加压!参考文献 1 李广第,朱月秀,冷祖祁.单片机基础m.第三版.北京:航空航天大学出版社,2007.18-152 li guangdi,zhu yuexiu,leng zuqi.scmcbasism.the third edition.beijing: aerospace university press,2007.18-152 2 邱丽芳,彭志刚,胡汉辉.单片机原理与应用 .第二版.北京:人民邮电出版社,2009.7-259 qiu lifang,peng zhigang,hu hanhui.single-ch

12、ip microcomputer principle and application. the second edition. beijing: beijing peoples telephone and postal press ,2009.7-259致 谢在本课程设计进行过程中得到王韧老师的悉心指导,还有很多同学的帮助。王老师严谨求实的治学态度,踏实坚韧的工作精神,将使我终生受益。在此,谨向老师和帮助我的同学致以诚挚的谢意和崇高的敬意。 附 录 a原理图附 录 bpcb顶层图pcb底层图 附 录 c 元器件布局图附 录 d程序清单:;*;项目名称:数字电子钟;设计者:谭育奇;设计日期:20

13、10年12月29日;*;堆栈栈底60h;*;led数码管显示器设定;p0.7-p0.0段控线,接led的显示段dp,g,f,e,d,c,b,a;p2.7-p2.0位控线,从左至右(led7,led6,led5,led4,led3,led2,led1,led0);显示缓冲区设定从左至右依次为7fh,7eh,7dh,7ch,7bh,7ah,79h,78h(led4,led5,led6,led7,led0,led1,led2,led3);时十位,时个位,分十位,分个位,秒十位,秒个位对应的储存单元是(77h,76h,75h,74h,73h,72h);键值放在20h单元;*;独立式键盘设定;8个按键s

14、2至s9分别依次接在p1.0至p1.7口线;s2键为启动/调整;s4、s5为加、减键 ;* ;子程序;disp(数码管显示子程序);key(键扫子程序);dl(1毫秒延时子程序,晶振频率12mhz);take(更新缓冲区子程序);*;常数表格;tab(共阳数码管字型代码表);tab1(位控序号表);disbh(系统提示符p.字型代码序号表);*;时分秒的十位和个位分别伪定义 secge equ 72h secshi equ 73h fenge equ 74h fenshi equ 75h shige equ 76h shishi equ 77h;*;键值伪定义 s2b bit 20h.0 s3

15、b bit 20h.1 s4b bit 20h.2 s5b bit 20h.3 s6b bit 20h.4 s7b bit 20h.5 s8b bit 20h.6 s9b bit 20h.7;*;主程序org 0000h start: ljmp main ;主程序入口地址 org 000bh ljmp tc0 org 0030h main: mov sp, #60h ;堆栈初始化;*;定时器初始化 mov tmod ,#11h mov th0 ,#3ch mov tl0 ,#0b0h mov ie ,#8ah ;允许定时器0中断;* mov psw ,#00h ;psw初始化 mov r0 ,

16、#20h ;ram区首地址 mov r7 ,#5fh ;ram区单元个数 ml: mov r0 ,#00h ;ram初始化 inc r0 djnz r7 ,ml clr 23h.0 ;停止是否按下判断位 clr 23h.1 clr 23h.2 ;调整键按下判断位 clr 23h.3 ;启动停止判断位 push psw ;改变当期寄存器为2组 setb rs1 clr rs0 mov r1 ,#200 mov r5 ,#20 ;设定中断服务程序循环次数 mov r6 ,#0 ;判调整键按下的次数 mov r7 ,#25 ;按键是若不松开调显示的次数 pop psw tsf: mov dptr ,

17、#disbh ;系统初始化后提示符“p.”字符代码表首地址 mov r1 ,#00h mov r5 ,#08h mov r0 ,#78hdisptsf: mov a ,r1 movc a ,a+dptr mov r0 ,a inc r0 inc r1 djnz r5 ,disptsf ;调显示子程序显示提示符“p.” tt: lcall disp lcall key mov a ,20h jz tt;*;键判断程序 jb s2b ,s22 jb s4b ,s44 jb s5b ,s55 jb s3b ,s3 jb s6b ,s6 jb s7b ,s7 jb s8b ,s8 jb s9b ,s9

18、 ljmp tt;*;键功能程序s22: ljmp s2s44: ljmp s4 s55: ljmp s5 s3: nop ljmp tt s6: nop ljmp tt s7: nop ljmp tt s8: nop ljmp tt s9: nop ljmp tt;启动停止键功能程序 s2: push psw ;改变通用寄存器组为2组 setb rs1 clr rs0 jb 23h.0 ,szt jb 23h.4 ,s2tz ;23h.4为0执行启动程序,否则转向停止程序 setb 23h.4 setb tr0 clr 23h.2 jb 23h.1 ,s2d1 ;23h.1为1转向启动程序结

19、束 setb 23h.1 ;第一次启动电子钟,标志位置1 mov secshi ,#0 mov secge ,#0 mov fenshi ,#0 mov fenge ,#0 mov shishi ,#0 mov shige ,#0 s2d1: lcall key ;判键是否松开 jb s2b ,s2d1 ljmp ss2 s2tz: clr tr0 ;停止程序 setb 23h.0 clr 23h.4 s2d2: lcall key ;判键是否松开 jb s2b ,s2d2 ljmp ss2 szt: jnb 23h.0 ,ss2 ;判停止键是否按下,没有按下转向结束程序 lcall dl s

20、etb 23h.2 ;调整键按下,置1 cjne r6 ,#00h ,s2s ;是第一次按下调整键吗 inc r6 ;调整键的次数加1 s2s1: lcall key jb s2b ,s2s1 ljmp ss2 s2s: cjne r6 ,#01h ,s2f ;是第二次按下调整键吗 inc r6 ;调整键次数加1 s2s2: lcall key jb s2b ,s2s2 ljmp ss2 s2f: mov r6 ,#00h ;第三次按下调整键,把按下调整键的次数置0 s2s3: lcall key jb s2b ,s2s3 ss2: lcall take pop psw ljmp tt;*;加

21、1键功能程序 s4: push psw ;改变通用寄存器为2组 setb rs1 clr rs0 jnb 23h.2 ,s3g ;判调整键是否按下 cjne r6 ,#01h ,s3f ;停止键按下的次数是1次吗? lcall take3 ;时加1 cjne r2 ,#24h ,s3d1 ;24小时到了吗 mov shishi ,#00h mov shige ,#00h s3d1: lcall disp ;延时0.2秒 djnz r7 ,s3d1 mov r7 ,#25 ljmp s3g s3f: cjne r6 ,#02h ,s3m ;停止键按下的次数是2次吗? lcall take2 ;分

22、加1 cjne r3 ,#60h ,s3d2 ;60分到了吗 mov fenshi ,#00h mov fenge ,#00h s3d2: lcall disp ;延时0.2秒 djnz r7 ,s3d2 mov r7 ,#25 ljmp s3g s3m: lcall take1 ;秒加1 cjne r4 ,#60h ,s3d3 ;60秒到了吗 mov secshi ,#00h mov secge ,#00h s3d3: lcall disp ;延时0.2秒 djnz r7 ,s3d3 mov r7 ,#25 s3g: lcall take pop psw ljmp tt;*;减1键功能程序

23、s5: push psw setb rs1 clr rs0 jnb 23h.2 ,s4g cjne r6 ,#01h ,s4f ;停止键按下的次数是1次吗 s4dy: lcall take7 ;时减1 s4d1: lcall disp ;延时0.2秒 djnz r7 ,s4d1 mov r7 ,#25 ljmp s4g s4f: cjne r6 ,#02h ,s4m ;停止键按下的次数是2次吗 lcall take6 ;分减1 s4d2: lcall disp djnz r7 ,s4d2 mov r7 ,#25 ljmp s4g s4m: cjne r6 ,#00h ,s4g ;停止键按下的次

24、数是3次吗 lcall take5 ;秒减1 s4d3: lcall disp djnz r7 ,s4d3 mov r7 ,#25 s4g: lcall take pop psw ljmp tt ;*;常数表格区;系统初始化后提示符“p.”字符代码表 disbh: db 11h,10h,10h,10h,10h,10h,10h,10h ;显示字符段选码表(共阳极代码) tab: db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h db 90h, 0ffh,0ch,0bfh tab1: db 0efh,0dfh,0bfh,07fh,0feh,0fdh,0fbh,

25、0f7h;*;延时1毫秒子程序 dl: mov r7 ,#02h dl1: mov r6 ,#0ffh dl2: djnz r6 ,dl2 djnz r7 ,dl1 ret;*;显示子程序;入口:78h,79h,7ah,7bh,7ch,7dh,7eh,7fh disp: push dph push dpl push acc push psw clr rs1 ;改变当前寄存器组为组1 setb rs0 mov r7 ,#08h mov r1 ,#78h ;显示缓冲存储单元首地址 mov r0 ,#00h ;从左至右显示 disp1: mov a ,r1 mov dptr ,#tab movc a

26、 ,a+dptr mov p0 ,a ;送段控 mov a ,r0 mov dptr ,#tab1 movc a ,a+dptr mov p2 ,a ;送位控 lcall dl ;延时1毫秒 djnz r7 ,disp2 inc r1 inc r0 ljmp disp1 disp2: pop psw ;恢复当前寄存器组的组号 pop acc pop dpl pop dph ret;*;8个按键s2至s9分别依次接在p1.0至p1.7口线;键扫子程序key;出口:b,20h key: lcall keychuli ;调键处理子程序 jz exit lcall disp ;去抖动 lcall di

27、sp lcall keychuli ;调键处理子程序 jz exit ; mov b ,20h ;保存键值 keysf: lcall keychuli ;调键处理子程序 jz key1 ;按键释放,准备退出key子程序 lcall disp key1: mov 20h ,b ;恢复键值 exit: ret;键处理子程序keychuli;出口:a,20hkeychuli: mov p1 ,#0ffh ;先向p1口写1 mov a ,p1 cpl a anl a ,#04h mov 20h ,a ;保存取反后的键值 ret;*;更新缓冲区子程序 take: mov 78h ,shishi mov

28、79h ,shige mov 7ah ,#12h mov 7bh ,fenshi mov 7ch ,fenge mov 7dh ,#12h mov 7eh ,secshi mov 7fh ,secge ret;*;数字处理子程序 take1: push psw ;秒加1子程序 setb rs1 ;改变当期寄存器为2组 clr rs0 mov a ,secshi swap a mov r4 ,a mov a ,secge orl a ,r4 add a ,#01h da a mov r4 ,a swap a anl a ,#0fh mov secshi ,a mov a ,r4 anl a ,#

29、0fh mov secge ,a pop psw ret take2: push psw ;分加1子程序 setb rs1 clr rs0 mov a ,fenshi swap a mov r3 ,a mov a ,fenge orl a ,r3 add a ,#01h da a mov r3 ,a swap a anl a ,#0fh mov fenshi ,a mov a , r3 anl a ,#0fh mov fenge ,a pop psw ret take3: push psw ;时加1子程序 setb rs1 clr rs0 mov a ,shishi swap a mov r2 ,a mov a ,shige orl a ,r2 add a ,#01h da a mov r2 ,a swap a anl a ,#0fh mov shishi ,a mov a ,r2 anl a ,#0fh mov shige ,a pop psw ret take5: push psw ;秒减1程序 setb rs1 clr rs1 mov a ,secshi swap a mov r4

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论