资源描述
,A Pera Global Company PERA China,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,设计简介,一,设计背景,二,AT89C51,单片机简介,三,设计方案,四,硬件电路设计,五,软件设计与程序代码,六,主要内容,设计简介一设计背景二AT89C51单片机简介 三设计方案四硬,一、设计简介,本设计利用,Atmel,公司的,AT89C5,1单片机对电子时钟进行开发,设计了实现所需功能的硬件电路,应用汇编进行软件编程,并用,Proteus,软件进行仿真演示、验证。主要介绍用单片机内部的定时,/,计数器来实现电子时钟的方法,本设计由单片机,80C51,芯片和,LED,数码管为核心,辅以必要的电路,构成了一个单片机的数字电子时钟。它的计时周期为,24,小时,显满刻度为“,23,时,59,分,59,秒”,且配有3个独立键盘,可以灵活地调节时间,并具有一定的扩展性。,一、设计简介,二、设计背景,十一世纪的今天,最具代表性的计时产品就是电子万年历,它是近代世界钟表业界的第三次革命。,第一次是摆和摆轮游丝的发明,相对稳定的机械振荡频率源使钟表的走时差从分级缩小到秒级,代表性的产品就是带有摆或摆轮游丝的机械钟或表。,第二次革命是石英晶体振荡器的应用,发明了走时精度更高的石英电子钟表,使钟表的走时月差从分级缩小到秒级。,第三次革命就是单片机数码计时技术的应用(电子万年历),使计时产品的走时日差从分级缩小到,1/600万秒,从原有传统指针计时的方式发展为人们日常更为熟悉的夜光数字显示方式,直观明了,并增加了全自动日期、星期、温度以及其他日常附属信息的显示功能,它更符合消费者的生活需求!,二、设计背景,四、设计方案,1,、主程序,主程序执行流程图如图,1,所示。主程序先对显示单元和定时器计数器初始化,然后重复调用数码管显示模块和按键处理模块,当有建按下,则转入相应的功能程序。,四、设计方案1、主程序主程序执行流程图如图1所示。主程序先对,AT89C51单片机的数字时钟设计(同名38)课件,四、设计方案,2,、,数码管显示模块,本设计的显示模块采用6位一体共阳极数码管,显示分为时钟显示模式,从右到左依次显示秒个位,秒十位,分个位,分十位,时个位,时十位;数码管显示的信息用6个内存单元存放,这6个内存单元为显示缓冲区,其中秒个位和秒十位,分个位和分十位,时个位和时十位分别由秒数据,分数据和小时数据分拆得到。,四、设计方案2、数码管显示模块,四、设计方案,3,、,定时器计数器,T0,中断服务程序,定时器计数器,T0,用于时间计时,选择方式,1,,重复定时,定时时间设为2,0MS,,定时时间到则溢出中断,计50次则对秒单元加,1,,秒单元加到,60,则对分单元加,1,,同时秒单元清零。分单元加到,60,的时候,则对时单元加,1,,同时分单元清零,时单元加到,24,的时候则对时单元清零,标志一天时间计满,此时所以单元清零。在对各单元计数的同时,把它们的值放到存储器单元的制定位置,四、设计方案3、定时器计数器T0中断服务程序,四、设计方案,4,、,按键处理模块,按键处理设置为:如果没有按键,则为时钟模式,时钟正常走时.按键KEY1为工作模式键,用于时钟显示或调秒、调分、调时的功能切换选择。R3寄存器记录KEY1按键的次数,R3=0,显示时钟;R3=1,调秒;R3=2,调分;R3=3,调时。按键KEY2为增1键,对选定的被调项的当前值增1;按键KEY3为减1键,对选定的被调项的当前值减1,四、设计方案4、按键处理模块,五、,硬件电路设计,五、硬件电路设计,六、,软件设计与程序代码,1,、,软件选择与介绍,Proteus7.8,是一款电路分析实物仿真系统,可仿真各种电路和,IC,,并支持单片机,元件库齐全,使用方便,是不可多得的专业的单片机软件仿真系统。,六、软件设计与程序代码 1、软件选择与介绍 Proteus7,六、,软件设计与程序代码,2,、,软件仿真电路全图,1.模式0,显示时钟,六、软件设计与程序代码 2、软件仿真电路全图 1.模式0显示,2.模式,1,第,1,次按,KEY1,键选择调秒,2.模式1第1次按KEY1键选择调秒,3.模式,2,第,2,次按,KEY1,键选择调分,3.模式2第2次按KEY1键选择调分,4.模式,3,第,3,次按,KEY1,键选择调时,4.模式3第3次按KEY1键选择调时,六、,软件设计与程序代码,3、程序代码,KEY1 BIT P1.0,KEY2 BIT P1.1,KEY3 BIT P1.2,CLK BIT P1.3,LOAD BIT P1.4,DIN BIT P1.5,SECOND DATA 30H,MINUTE DATA 31H,HOUR DATA 32H,ORG 0000H,AJMP MAIN,ORG 000BH,AJMP TIMER0,MAIN:MOV SP,#60H,MOV TMOD,#01H,;定时器,T0,方式设置,MOV TH0,#0B1H,;定时器,T0,装入初值,20ms,MOV TL0,#0E0H,SETB ET0,;,T0,中断允许,SETB EA,;总中断允许,MOV R2,#50,;,T0,中断为,1s,SETB TR0,;启动,T0,MOV SECOND,#00H,MOV MINUTE,#00H,MOV HOUR,#08H,;初始化时间,8,点,00,分,00,秒,MOV A,HOUR,时间值送显示缓冲区,79H7EH,ANL A,#0F0H,SWAP A,MOV 79H,A,六、软件设计与程序代码 3、程序代码KEY1 BIT P1.,MOV A,HOUR,ANL A,#0FH,MOV 7AH,A,MOV A,MINUTE,ANL A,#0F0H,SWAP A,MOV 7BH,A,MOV A,MINUTE,ANL A,#0FH,MOV 7CH,A,MOV A,SECOND,ANL A,#0F0H,SWAP A,MOV 7DH,A,MOV A,SECOND,ANL A,#0FH,MOV 7EH,A,MOV R3,#00H,;,R3,初值设为,0,,,显示时钟,ACALL INI7219,;,调用,7219,初始化子程序,I,NI7219:MOV,50H,#0FH,;,显示测试寄存器设置,MOV 51H,#00H,;非测试模式,正常显示,MOV R0,#50H,ACALL SEND7219,MOV,50H,#0CH,;关闭显示寄存器,MOV 51H,#01H,;正常显示,MOV R0,#50H,ACALL SEND7219,MOV 50H,#0BH,;扫描界限寄存器,MOV 51H,#05H,;,6,位显示,MOV R0,#50H,ACALL SEND7219,MOV 50H,#0AH;亮度寄存器,其值为000EH,设置为0AH,MOV A,HOURI,MOV 51H,#09H,MOV R0,#50H,ACALL SEND7219,MOV 50H,#09H,;译码方式寄存器,MOV 51H,#0FFH,;,8,位显示全部,B,译码,MOV R0,#50H,ACALL SEND7219,RET,DISPLAY:MOV 50H,#01H,;显示子程序,MOV 51H,79H,;显示缓冲区设在,79H7EH,单元,MOV R0,#50H,;其内容从左至右一次显示在数码管显示器上,ACALL SEND7219,MOV 50H,#02H,MOV 51H,7AH,MOV R0,#50H,ACALL SEND7219,MOV 50H,#03H,MOV 51H,7BH,MOV R0,#50H,ACALL SEND7219,MOV 50H,#04H,MOV 51H,7CH,MOV R0,#50H,ACALL SEND7219,MOV 50H,#05H,MOV 51H,7DH,MOV R0,#50H,ACALL SEND7219,MOV 50H,#06H,MOV 51H,7EH,MOV R0,#50H,ACALL SEND7219,RET,MOV 51H,#09H,SEND7219:CLR LOAD,;向,7219,写入数据子程序,MOV R4,#02H,;写入,16,位串行数据,CLR C,LOP1:MOV R1,#08H,MOV A,R0,LOP2:RLC A,MOV DIN,C,SETB CLK,CLR CLK,DJNZ R1,LOP2,INC R0,DJNZ R4,LOP1,SETB LOAD,RET,;键扫描处理子程序,KEY:JNB KEY1,KK1,;判断,KEY1,键是否按下,JB KEY1,$,;等待,KEY1,键是否释放,INC R3,;模式值增,1,,在,0,、,1,、,2,、,3,间逐项切换,CJNE R3,#04H,JMPKK3,;当让中的模式值为,4,时,在设置为,0,MOV R3,#00H,JMPKK3:AJMP KK3,;转至,KK3,,按,R3,内容选择显示,KK1:JNB KEY2,KK2,;判断,KEY2,键是否按下,JB KEY2,$,;等待,KEY2,键释放,MOV A,R3,;根据当前,R3,值对时间项增,1,调整,RL A,MOV DPTR,#KJMP1,JMP A+DPTR,KJMP1:AJMP DISCLK,AJMP SINC,AJMP MINC,AJMP HINC,SEND7219:CLR LOAD;向7219写入数据子程,SINC:MOV A,SECOND,;秒增,1,ADD A,#01H,DA A,MOV SECOND,A,CJNE A,#60H,DISS1,MOV 30H,#01H,DISS1:AJMP DISS,;转至秒显示缓冲区设置,MINC:MOV A,MINUTE,;分增,1,ADD A,#01H,DA A,MOV MINUTE,A,CJNE A,#60H,DISM1,MOV MINUTE,#00H,DISM1:AJMP DISM,;转至分显示缓冲区设置,HINC:MOV A,HOUR,;时增,1,ADD A,#01H,DA A,MOV HOUR,A,CJNE A,#24H,DISH1,MOV HOUR,#00H,DISH1:AJMP DISH,;转至时显示缓冲区设置,KK2:JNB KEY3,KK3,;判断,KEY3,是否按下,JB KEY3,$,;等待,KEY3,键释放,MOV A,R3,RL A,MOV DPTR,#KJMP2,JMP A+DPTR,KJMP2:AJMP DISCLK,AJMP SDEC,AJMP MDEC,AJMP HDEC,SDEC:MOV A,#9AH,;秒减,1,CLR C,SUBB A,#01H,ADD A,SECOND,DA A,SINC:MOV A,SECOND;秒增1,MOV SECOND,A,CJNE A,#00H,DISS2,MOV SECOND,#59H,DISS2:AJMP DISS,;转至秒显示缓冲区设置,MDEC:MOV A,#9AH,;分减,1,CLR C,SUBB A,#01H,ADD A,MINUTE,DA A,MOV MINUTE,A,CJNE A,#0,DISM2,MOV MINUTE,#59H,DISM2:AJMP DISM,;转至分显示缓冲区设置,HDEC:MOV A,#9AH,;时减,1,CLR C,SUBB A,#01H,ADD A,HOUR,DA A,MOV HOUR,A,CJNE A,#99H,DISH2,MOV HOUR,#23H,DISH2:AJMP DISH,;转至时显示缓冲区设置,KK3:MOV A,R3,RL A,MOV DPTR,#KJMP3,JMP A+DPTR,KJMP3:AJMP DISCLK,;,R3=0,显示时钟,AJMP DISS,;,R3=1,显示秒,AJMP DISM,;,R3=2,显示分,AJMP DISH,;,R3=3,显示时,DISCLK:MOV R0,#79H,MOV
展开阅读全文