单片机课程设计——时间控制器.doc_第1页
单片机课程设计——时间控制器.doc_第2页
单片机课程设计——时间控制器.doc_第3页
单片机课程设计——时间控制器.doc_第4页
单片机课程设计——时间控制器.doc_第5页
免费预览已结束,剩余10页可下载查看

下载本文档

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

文档简介

单片机课程设计时间控制器一设计要求:设计一个以AT89 C52为核心的时间控制器。可以实现时间显示和设置闹钟功能。用89S52单片机设计一个时间控制器,有8位数码管显示年月日及时分秒,具有日历和时钟功能,有一路输出控制电灯,有一路输出控制蜂鸣器,可以设置年月日及时分秒,可以设置一张时间表,该时间表记录什么时间开、关电灯,什么时间开、关蜂鸣器,而单片机按这张时间表来控制电灯和蜂鸣器。该时间表要求掉电时仍能保存不掉数据,所以需要用一片EEPROM来保存数据,如用24C02/04/08等。二设计原理:在AT80C52单片机内部对机器周期进行计数,从而得到定时。由于AT89 C52的内部计数器是16位的,振荡脉冲频率为12MHZ,这样一个机器周期为1s,计满一次为65536s。显示器选用8位共阳极数码管,分别表示时、分、秒。同时选用两个74HC273作为片选和位选锁存器。同时经过P0口外加四个键盘用以调整时间。软件部分分为四大模块:调整初始时间、设置闹铃时间实现闹铃功能、显示时间和脉冲计数模块。脉冲计数模块,通过AT89 C52的T0进行计数,设置T0计数溢出时,由内部硬件置位,同时开放中断,使系统进入中断服务程序。在定时器运行前,在其中先预置入计数初值,为了计算方便,在次设置中预置的初值为(655361000),这样一次“硬件计时周期”就可定时1000s。在中断服务程序设置进行1000次“硬件计时周期”就可得到1S。同理进行分、小时的计时。三流程图:开始设置INT0中断向量开启INT0中断初始化时间延时1秒,秒数加1秒数已为60?分钟数加1,秒钟数清0 分钟数已为60? 小时数加1,分钟数1小时数已为24? 小时数清0四设计原理图: 五程序清单: SYSTEM equ 0 NMLIGHTON equ 6 NMLIGHTOFF equ 7 NMALARMON equ 8 ANALARMOFF equ 9 YEAR1 equ 10H YEAR2 equ 11H YEAR3 equ 12H YEAR4 equ 13H MONTH1 equ 14H MONTH2 equ 15H DAY1 equ 16H DAY2 equ 17H HOUR1 equ 18H HOUR2 equ 19H MINUTE1 equ 1AH MINUTE2 equ 1BH SECOND1 equ 1CH SECOND2 equ 1DH WEEKDAY1 equ 1EH WEEKDAY2 equ 1FH ;time table LIGHTONT equ 100 LIGHTOFF equ 200 ALARMON equ 300 ALARMOFF equ 400 org 00h jmp start org 03h jmp Int0Proc org 1BH jmp T1Proc org 13H jmp Int1Proc org 30hstart: mov DPTR,#SYSTEM movx A,DPTRjnz Next3 ;have value in external ROMmov A,#01H movx DPTR,A call Init mov R4,#1 ;first display Date clr C ;LED turn off in the first mov P3.0,CNext3: mov TL1,#9cH mov TH1,#0ffH mov TMOD,#11H;Timer 1 mode 1 setb TR1 setb ET1 setb IT0 ;smart here setb IT1setb PX0 setb EX0setb EX1setb EASECOND: mov R5,#2 call WaitSecond cpl P3.1 jb P1.3, Next7 call SetDateNext7: jb P1.4,Next8 call SetTimeNext8: mov DPTR,#SECOND2 movx A,DPTR inc A movx DPTR,A ;seconds increase 1,then write to ROM xrl A,#10 jnz SECOND mov A,#0 mov DPTR,#SECOND2 movx DPTR,A ;clear SECOND2 mov DPTR,#SECOND1 movx A,DPTR inc A movx DPTR,A ;inc SECOND1 movx A,DPTR xrl A,#6 jnz SECOND mov A,#0 movx DPTR,AMINUTE: mov DPTR,#MINUTE2 movx A,DPTR inc A movx DPTR,A ;write to ROM movx A,DPTR xrl A,#10 ;BCD code jnz SECOND mov A,#0 movx DPTR,A mov DPTR,#MINUTE1 movx A,DPTR inc A movx DPTR,A ;write to ROM movx A,DPTR xrl A,#6 jnz SECOND mov A,#0 movx DPTR,AHOUR: mov DPTR,#HOUR2 movx A,DPTR inc A movx DPTR,A ;write to ROM movx A,DPTR xrl A,#10 ;BCD code jnz Next4 mov A,#0 movx DPTR,A mov DPTR,#HOUR1 movx A,DPTR inc A movx DPTR,A ;write to ROM jmp SECONDNext4: mov DPTR,#HOUR1 movx A,DPTR mov B,A ;save hour1 to B mov A,#10 mul AB mov R0,A ;save the result to R0 mov DPTR,#HOUR2 movx A,DPTR mov R1,A ;save hour2 to R1 mov A,B ;restore the result add A,R1 xrl A,#24 jnz SECOND mov A,#0 mov DPTR,#HOUR2 movx DPTR,A ;reset HOUR2 mov DPTR,#HOUR1 movx DPTR,A mp SECONDT1Proc: mov TH1,#0FfH mov TL1,#9cH cpl P3.1 retiInt0Proc: push DPL push DPH push ACC clr EA mov A,R4 jnz Next5 call WriteTime jmp Return3Next5: call WriteDateReturn3: setb EA pop ACC pop DPH pop DPL retiInt1Proc: push ACC push B clr EA inc R6 ;R6 to mark Date/Time on the LED mov A,R6 mov B,#3 div AB mov A,B ;judge the remainder jz Next6 mov R4,#0 jmp Return5 Next6: mov R4,#1HReturn5: setb EA pop B pop ACC retiWriteTime: inc R7 ;R7 to generate scan signal of LED mov A,R7 xrl A,#8 jnz I0mov R7,#0I0: mov A,R7 xrl A,#0 jnz I1 call WriteHour1 jmp Return4I1: mov A,R7 xrl A,#1 jnz I2 call WriteHour2 jmp Return4I2: mov A,R7 xrl A,#2 jnz I3call WriteMinute1 jmp Return4 I3: mov A,R7 xrl A,#3 jnz I4 call WriteMinute2 jmp Return4 I4: mov A,R7 xrl A,#4 jnz I5 call WriteSECOND1 jmp Return4I5: mov A,R7 xrl A,#5 jnz I6 call WriteSECOND2 jmp Return4I6: mov A,R7 xrl A,#6 jnz I7 call WriteWeekday1 jmp Return4 l7: mov A,R7 xrl A,#7 jnz Return4 call WriteWeekday2 Return4: ret WriteDate: inc R7 mov A,R7 xrl A,#8 jnz IS0 mov R7,#0IS0: mov A,R7 xrl A,#0 jnz IS1 call WriteYear1 jmp Return1IS1: mov A,R7 xrl A,#1 jnz IS2 call WriteYear2 jmp Return1IS2: mov A,R7 xrl A,#2 jnz IS3 call WriteYear3 jmp Return1 IS3: mov A,R7 xrl A,#3 jnz IS4 call WriteYeaR5 jmp Return1 IS4: mov A,R7 xrl A,#4 jnz IS5 call WriteMonth1 jmp Return1 IS5: mov A,R7 xrl A,#5 jnz IS6 call WriteMonth2 jmp Return1IS6: mov A,R7 xrl A,#6 jnz IS7 call WriteDay1 jmp Return1 IS7: mov A,R7 xrl A,#7 jnz Return1 call WriteDay2 Return1: retWriteYear1: mov DPTR,#YEAR1 movx A,DPTR anl P1,#11111000B ; P1=0 mov P2,A retWriteYear2: mov DPTR,#YEAR2 movx A,DPTR orl P1,#00000001B ; P1=1mov P2,AretWriteYear3: mov DPTR,#YEAR3 movx A,DPTR xrl P1,#00000011B ;P1=2 mov P2,A retWriteYeaR5: mov DPTR,#YEAR4 ;P1=3 movx A,DPTR orl P1,#00000001B mov P2,A retWriteMonth1: mov DPTR,#MONTH1 movx A,DPTR xrl P1,#00000111B;P1=4 mov P2,A retWriteMonth2: mov DPTR,#MONTH2 movx A,DPTR orl P1,#00000001B ;P1=5 mov P2,A retWriteDay1: mov DPTR,#DAY1 movx A,DPTR xrl P1,#00000011B ;P1=6 mov P2,A retWriteDay2: mov DPTR,#DAY2 movx A,DPTR orl P1,#00000001B ;P1=7 mov P2,A retWriteHour1: mov DPTR,#HOUR1 movx A,DPTR anl P1,#11111000B ; P1=0 mov P2,A retWriteHour2: mov DPTR,#HOUR2 movx A,DPTR orl P1,#00000001B ; P1=1 mov P2,A retWriteMinute1: mov DPTR,#MINUTE1 movx A,DPTR xrl P1,#00000011B ;P1=2 mov P2,A retWriteMinute2: mov DPTR,#MINUTE2 movx A,DPTR orl P1,#00000001B ;P1=3 mov P2,A retWriteSECOND1: mov DPTR,#SECOND1 movx A,DPTR xrl P1,#00000111B;P1=4 mov P2,A ret WriteSECOND2: mov DPTR,#SECOND2 movx A,DPTR orl P1,#00000001B ;P1=5 mov P2,A ret WriteWeekday1: mov DPTR,#WEEKDAY1 movx A,DPTR xrl P1,#00000011B ;P1=6 mov P2,A ret WriteWeekday2:mov DPTR,#WEEKDAY2 movx A,DPTR orl P1,#00000001B ;P1=7 mov P2,A ret Init: mov A,#2 mov DPTR,#YEAR1 movx DPTR,A mov A,#0mov DPTR,#YEAR2movx DPTR,Amov A,#0mov DPTR,#YEAR3movx DPTR,A mov A,#8mov DPTR,#YEAR4movx DPTR,Amov A,#0mov DPTR,#MONTH1movx DPTR,Amov A,#1mov DPTR,#MONTH2movx DPTR,A mov A,#0mov DPTR,#DAY1movx DPTR,Amov A,#1mov DPTR,#DAY2movx DPTR,A mov A,#1mov DPTR,#HOUR1movx DPTR,Amov A,#7mov DPTR,#HOUR2movx DPTR,A mov A,#1mov DPTR,#MINUTE1movx DPTR,Amov A,#6mov DPTR,#MINUTE2movx DPTR,A mov A,#1 mov DPTR,#SECOND1movx DPTR,A mov A,#0mov DPTR,#SECOND2movx DPTR,A mov A,#0mov DPTR,#WEEKDAY1movx DPTR,A mov A,#2mov DPTR,#WEEKDAY2movx DPTR,A ret SetTime: clr EX1 ;forbid interrupt 1 mov R4,#00H ;show time always mov A,#0 mov DPTR,#SECOND2 movx DPTR,A ;clear seconds mov DPTR,#SECOND1 movx DPTR,A settime1:jb P1.4,Return7 jb P1.5,Next9 call SetHour ; P1.5=0 ,key press Next9: jb P1.6,settime1 call SetMinute ;P1.6=0,key press jmp settime1 Return7: setb EX1 ret SetMinute:mov DPTR,#MINUTE2 movx A,DPTR inc A movxDPTR,A ;increase Minute2 xrl A,#10 jnz J mov A,#0 movx DPTR,ASetYear: mov DPTR,#YEAR4 movx A,DPTR inc A movx DPT

温馨提示

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

评论

0/150

提交评论