北京交通大学单片机电子时钟.doc_第1页
北京交通大学单片机电子时钟.doc_第2页
北京交通大学单片机电子时钟.doc_第3页
北京交通大学单片机电子时钟.doc_第4页
北京交通大学单片机电子时钟.doc_第5页
免费预览已结束,剩余15页可下载查看

下载本文档

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

文档简介

单片机课程设计 电气0909 熊飞(09292024) 单片机课程设计报告电子时钟 指导老师:季晓衡 班 级:电气0909 姓 名:熊飞 学 号:09292024 2011年12月 电子时钟一、 设计要求与内容本系统主要通过89S51单片机实现,有6个数码显示管显示年、月、日和时、分、秒,两个按键,一个用作切换设置位键B,一个功能键A增加显示数值及转换模式,用来调节显示的部分和修改电子时钟的时间。使用12MHz的晶振作为单片机的外部时钟输入,一个机器周期为1us。使用定时器0作为时钟计数器,工作在方式1,当计数满50ms时定时器0产生中断,当中断产生20次时,调用时间模块进行加1操作。先对秒进行加1,若加1后等于60秒,则清除秒单元,同时向分进1,同理,对分、时进行同样操作。调节显示部分和修改电子时钟的时间时,先按切换键A,从显示年、月、日切换到现实时、分、秒,选定一种状态后再按一下B,显示秒的开始闪烁,此时按一下A,则可以改变秒的时间,从00依次变到60,修改完毕,若再按B键,可使显示分的又开始闪烁,同样按A键调整分的值,同样办法调整其他显示部分的显示值。都设定好后,第四次按下B键就会退出来正常显示年、月、日或时、分、秒。二、主要元件的相关资料 1、单片机89S512(1)单片机(89S51)芯片外观:(2)单片机(89S51)管脚图: (3) 51系列单片机8031、8051及89c51/89s51均采用40Pin封装的双列直接DIP结构。上图是它们的引脚配置:40个引脚中,正电源和地线两根,外置石英振荡器的时钟线两根,4组8位共32个I/O口,中断口线与P3口线复用。2、74HC245总线驱动器(1)简介 总线驱动器,典型的TTL型三态缓冲门电路。由于单片机等CPU的数据地址控制总线端口都有一定的负载能力,如果负载超过其负载能力,一般应加驱动器。(2)74HC245实物图(3)引脚定义 第1脚DIR,为输入输出端口转换用,DIR=“1”高电平时信号由“A”端输入“B”端输出,DIR=“0”低电平时信号由“B”端输入“A”端输出。 第29脚“A”信号输入输出端,A1=B1、A8=B8,A1与B1是一组,如果DIR=“1”OE=“0”则A1输入B1输出,其它类同。如果DIR=“0”OE=“0”则B1输入A1输出,其它类同。 第1118脚“B”信号输入输出端,功能与“A”端相同。 第19脚OE,使能端,若该脚为“1”A/B端的信号将不导通,只有为“0”时A/B端才被启用,该脚也就是起到开关的作用。 第10脚GND,电源地。 第20脚VCC,电源正极。3、八段LED数码显示管 (8段共阴LED数码管结构) (原理图)八段LED数码管由八只发光二极管组成,编号是a、b、c、d、e、f、g和SP,分别与同名管脚相连。其显示原理是通过同名管脚上所加电平的高低来控制发光二极管是否点亮从而显示不同字形的。LED上所显示的字形不同,相应的字形码也不一样。共阴字形码: 三、proteus仿真四、实现程序的流程图l 主程序流程图开 始初始化显示缓冲区初始化定时计数器赋电子时钟初值按键处理程序是否有按键? YN转换BCD码到显示缓冲区判断显示模式显示及闪烁处理程序显示及闪烁处理程序l 按键判断及处理程序流程图返回主函数继续执行余下程序进入按键处理程序是否有按键?NY判断是调整显示模式还是设时间状态位70H加一,到四清零设时间返回主函数继续执行余下程序调整显示模式设定年月日?设定时分秒?将标志位71H取反,表示显示模式切换年月日时分秒显示时间部分闪烁延时时分秒设定程序(相应单元加一)年月日设定程序(相应单元加一)l 定时器中断程序流程图 进入T0定时器中断初始化 赋初值0.05单元加一N是否到一秒?Y0.05单元清零,秒加1,转换成BCD码转换成BCD码是否到一分?NY秒清零,分加1转换成BCD码Y是否到一小时?NN是否到一天?时、分、秒清零天加一,转换成BCD码N是否到一月?天置一,月加一,转换成BCD码N是否到一年?月置一,年加一,转换成BCD码返回中断l 将BCD码写入缓冲区(79H-84H) 进入BCDEX转换程序循环执行,将所有时间单元写入缓冲区,然后返回主函数。 指向某时间单元 将该单元中的BCD码得高低位依次取出放入缓冲区中l 闰年判断以及月份选择闰年判断具有特殊性,因为显示年只有两位,所以表示2000-2099年,判断闰年的准则是:能被4整除却不能被100整除 或 能被400整除的年份是闰年在2000-2099年之间,能被一百整除的只有2000年,又因为它还能被4整除,所以它是闰年,所以在2000-2099年之间是闰年的只有当该年份能被4整除时。通过计算得出:(年份的后两位)低位04826对应的高位0001122233444556667788899只有满足以上规律的年份才是闰年。此规律为:低位必须为偶数,且当低位能被4整除时,高位必须是偶数。或当低位能被2整除时,高位必须是奇数。月份选择是指由于每个月的天数可能不一样,所以要做判断该月的天数有多少,同时还要判断闰年还是平年,因为二月份的天数与闰年和平年有关的。月份判断N查表1取数是闰年吗?Y取的数放36H中查表2取数闰年判断:高四位是奇数取出24H中存好的年份BCD码N取其高四位取其低四位YN能被2整除能被4整除YYN取高四位N不是闰年(39H)=0高四位是偶数Y是闰年(39H)=1返回是闰年(39H)=1l 带有显示的延时:;延时程序DELAY:MOV R3,#01HS1:MOV R6,#066HS4:DJNZ R6,S2 AJMP S3S2:ACALL DISPLAYAJMP S4S3:DJNZ R3,S1RETDISPLAY:MOV R5,71HCJNE R5,#00H,HHHH1ACALL DISPLAYTIME;调用显示及时更新显示状态SJMP KKKHHHH1: ACALL DISPLAYYEARKKK:RET采用边显示边延时,使得时钟显示连续不间断,实时更新。还能使按下按键时显示不会中断。l 调时闪烁程序:大体思路是1、判断是否处于调时模式2、若是则判断调哪两位3、对要调时的两位进行闪烁处理,即让他们在一段时间内关断,在另一段时间内打开,交替进行,反复循环,形成闪烁效果提醒用户目前可调的是该两位。、20R7=0Y正常显示NN重置R7=0R7=1YY关断分月位(70H)=1NY关断时年位(70H)=2N关断秒日位YNR7=2正常显示送字形字位Y返回(70H)=0N加R6NR6=#6AHY加R0,清零R6NYR0=#01H加R7,清零R0程序注释以及模块化解释:1、初始化程序ORG 0000HAJMP STARTORG 000BHLJMP TINTSV;T0中断ORG 0100HSTART:MOV SP,#50H;初始化程序MOV 20H,#00H;将时分秒计数单元清零MOV 21H,#00HMOV 22H,#00HMOV 23H,#00H;清零0.05秒计数单元MOV 24H,#00H;将年月日单元清零MOV 25H,#01HMOV 26H,#01HMOV 70H,#00HMOV 71H,#00HSETB RS1;将显示时分秒对应寄存器清零MOV R7,#00HMOV R6,#00HMOV R0,#00HCLR RS1SETB RS0;将显示年月日对应寄存器清零MOV R7,#00HMOV R6,#00HMOV R0,#00HCLR RS0MOV TMOD,#01H;启动计数器并设初值MOV TH0,#03CHMOV TL0,#0AFHSETB EA;打开T0中断SETB ET0SETB TR0欢迎界面程序:START1:该程序用于在开机时显示“HELLO”欢迎字母MOV R1,#00HMOV R2,#0DFHMOV R3,#00HDDISP1:MOV A,R2MOV P0,AMOV A,R1MOV DPTR,#TAB11MOVC A,A+DPTRMOV P2,ANOPDDISP2:DJNZ R3,DDISP2SETB CMOV A,R2RRC ANOPMOV R2,AINC R1CJNE A,#0FFH,DDISP1MOV A,#00HMOV P2,ADJNZ 35H,START1CLR RS1SJMP MAINTAB11:DB 76H 79H 38H 38H 3FH 00H主函数程序:MAIN:;主程序PUSH ACC;保护堆栈,避免对PSW各位产生影响,从而影响十进制调整指令的执行PUSH PSWACALL KEYSCAN;调用键盘扫描、判断程序POP PSW;弹出堆栈POP ACCACALL BCDEX;调用BCD码分拆程序MOV R5,71HCJNE R5,#00H,HHH1;判断显示状态(模式)ACALL DISPLAYTIME;显示时分秒SJMP MAINHHH1:ACALL DISPLAYYEAR;显示年月日SJMP MAIN闰年判断模块:RUNNIAN:;此段程序用于判断该年是否为闰年PUSH ACCPUSH PSWMOV A,24HANL A,#0FHMOV B,#04HDIV ABMOV A,BJNZ PANDUANMOV A,24HANL A,#0F0HMOV B,#02HDIV ABMOV A,BJNZ RREETTRREETT1:MOV 39H,#01HPOP PSWPOP ACCRETRREETT:MOV 39H,#00HPOP PSWPOP ACCRETPANDUAN:CJNE A,#02H,RREETTMOV A,24HANL A,#0F0HMOV B,#02HDIV ABMOV A,BCJNE A,#01H,RREETTLJMP RREETT1月份判断选择模块:YUEFEN:;该段程序用于判断该月有几天PUSH ACCPUSH PSWMOV R1,#82HMOV A,39HCJNE A,#00H,RAINIANMOV A,R1JNZ PADU1MOV R1,#81HMOV A,R1PADU2:MOV DPTR,#TA11MOVC A,A+DPTRMOV 36H,APOP PSWPOP ACCRETPADU1:MOV R1,#81HMOV A,R1ADD A,#0AHSJMP PADU2RAINIAN:MOV R1,#82HMOV A,R1JNZ PADU3MOV R1,#81HMOV A,R1PADU4:MOV DPTR,#TA22MOVC A,A+DPTRMOV 36H,APOP PSWPOP ACCRETPADU3:MOV R1,#81HMOV A,R1ADD A,#0AHSJMP PADU4TA11:DB 00H 32H 29H 32H 31H 32H 31H 32H 32H 31H 32H 31H 32HTA22:DB 00H 32H 30H 32H 31H 32H 31H 32H 32H 31H 32H 31H 32H延时中的显示部分:;下面这段程序用于在显示、按键处理时调用的延时程序中的显示部分,功能与主函数一样。DISPLAY:MOV R5,71HCJNE R5,#00H,HHHH1ACALL DISPLAYTIMESJMP KKKHHHH1: ACALL DISPLAYYEARKKK:RETBCD码拆分程序:BCDEX:MOV R3,#03H;将计数单元中的BCD码分拆进入显示缓冲区中去。MOV R0,#79H;以下将20H-22H中的BCD码分拆成高、低位给时分秒显示缓冲区。MOV R1,#22HLOOP:MOV A,R1ANL A,#0FHMOV R0,AINC R0MOV A,R1SWAP AANL A,#0FHMOV R0,AINC R0DEC R1DJNZ R3,LOOPMOV R3,#03H;同理分拆年月日单元24H-26H到7FH-84H的显示缓冲区MOV R0,#7FHMOV R1,#26HLOOP1:MOV A,R1ANL A,#0FHMOV R0,AINC R0MOV A,R1SWAP AANL A,#0FHMOV R0,AINC R0DEC R1DJNZ R3,LOOP1RET;分拆完毕以后,返回主程序。显示时分秒:DISPLAYTIME:;显示时分秒SETB RS1;设定为寄存器区域二MOV R1,#7EH;指向对应的显示缓冲区MOV R2,#0DFH;字位MOV R3,#00H;延时用计数寄存器调时闪烁程序:DISP1:MOV A,R2;字位给A;闪烁程序,将寄存器R7分为0-1,正常显示,1-2为关断想要调时的位CJNE R7,#01H,JJ0;若R7=0,则正常显示JJ0:JC L3; CJNE R7,#02H,JJ1;否则若R7=1,则关断相应位,否则若R7=2,则重置闪烁JJ1:JNC L6tMOV R5,70H;根据显示状态判断关断位CJNE R5,#1,L1;第一种情况SETB ACC.2SETB ACC.3AJMP L3L1:CJNE R5,#2,L2;第二种情况SETB ACC.0SETB ACC.1AJMP L3L2:SETB ACC.4;第三种情况SETB ACC.5CJNE R7,#02H,L3;判断关断是否应该结束L6t:MOV A,R2;关断结束,全部重置MOV R7,#0MOV R6,#0L3:MOV P0,A;字位送P2口MOV A,R1;取出显示缓冲区中的BCD码MOV DPTR,#TABMOVC A,A+DPTR;查字形表MOV P2,A;字形送P3口DISP2:DJNZ R3,DISP2;进行简短延时SETB CMOV A,R2RRC A;移动字位MOV R2,A;存字位DEC R1;显示缓冲区减一CJNE A,#0BFH,DISP1;判断是否已经显示到第六个灯MOV A,#00HMOV P2,A;关掉所有数码管MOV R5,70H;显示状态指示单元给R5寄存器CJNE R5,#0,DONE1;判断是否进入调是模式AJMP DONE;如果进入了调时模式,就要进行延时,以便制造出闪烁效果,延时采用三个寄存器。DONE1:INC R6CJNE R6,#06AH,DONE2INC R0MOV R6,#00HCJNE R0,#01H,DONE2INC R7MOV R0,#00HAJMP DONE2DONE:MOV R0,#00HMOV R6,#00HMOV R7,#00HDONE2:CLR RS1RETTAB:DB 3FH 06H 5BH 4FH 66H 6DH 7DH 07H 7FH 6FH中断程序:TINTSV:;进入中断程序PUSH ACC;保护堆栈PUSH PSWMOV TH0,#03CH;重设定时器初值,不间断计时MOV TL0,#0AFHINC 23H;50毫秒单元加一MOV A,23HCJNE A,#14H,RETN;判断是否已经一秒MOV 23H,#00H;若为一秒则清零50毫秒单元,重新计数MOV A,22HADD A,#01H;秒单元加一DA A;进行十进制调整MOV 22H,ACJNE A,#60H,RETN;判断是否达到60秒MOV 22H,#00HMOV A,21HADD A,#01HDA AMOV 21H,ACJNE A,#60H,RETN;判断是否达到60分MOV 21H,#00HMOV A,20HADD A,#01HDA AMOV 20H,ACJNE A,#24H,RETN;判断是否达到24时MOV 20H,#00H MOV A,26H ADD A,#01H DA A MOV 26H,A CJNE A,#32H,RETN;判断是否达到31日 MOV 26H,#01H MOV A,25H ADD A,#01H DA A MOV 25H,A CJNE A,#13H,RETN;判断是否达到12月 MOV 25H,#01H MOV A,24H ADD A,#01H DA A MOV 24H,A CJNE A,#99H,RETN;判断是否达到2098年(设定的一个年的上限) MOV 24H,#00HRETN:POP PSWPOP ACCRETI;返回键盘查询处理:KEYSCAN:键盘扫描、处理程序MOV A,#0FFHMOV P1,A;将P1口全置高位MOV A,P1;读取P1口JNB ACC.0,KEY0;按键00是否按下JNB ACC.1,KEY1;按键01是否按下RRRE: RETKEY0:;按键0相应处理程序ACALL DELAY;延时INC 70H;按键0切换调时位MOV R4,70HCJNE R4,#4,RRRE;是否该回到原状态MOV 70H,#00HAJMP RRREKEY1:;按键1相应处理程序ACALL DELAY;延时MOV R5,71HMOV R4,70HCJNE R4,#00H,HHHH;若70H=0,则取反71H,表示显示模式的切换MOV A,R5CPL AMOV R5,AMOV 71H,R5HHHH:CJNE R4,#1,J2;否则若70H不等于0,则判断调节哪两位CJNE R5,#00H,HHHHC;判断调节时分秒,还是调节年月日AJMP KEYAHHHHC:AJMP KEYCJ2:CJNE R4,#2,J3CJNE R5,#00H,HHHHDAJMP KEYBHHHHD:AJMP KEYDJ3:CJNE R4,#3,J4CJNE R5,#00H,HHHHBAJMP KEYEHHHHB:AJMP KEYFJ4:RETKEYB:;调时MOV A,20HINC ADA ACJNE A,#24H,DAAMOV 20H,#00HRETDAA:MOV 20H,ARETKEYA:;调分MOV A,21HINC ADA ACJNE A,#60H,DAAAMOV 21H,#00HRETDAAA:MOV 21H,ARETKEYC:;调月MOV A,25HINC ADA ACJNE A,#13H,DAAAAMOV 25H,#00HRETDAAAA:MOV 25H,ARETKEYD:;调年MOV A,24HINC ADA ACJNE A,#20H,DAAAAAMOV 24H,#00HRETDAAAAA:MOV 24H,ARETKEYE:;调秒MOV A,22HINC ADA ACJNE A,#60H,DEEEEMOV 22H,#00HRETDEEEE:MOV 22H,ARETKEYF:;调日MOV A,26HINC ADA ACJNE A,#32H,D

温馨提示

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

评论

0/150

提交评论