单片机应用系统设计实例共46页
- 格式:ppt
- 大小:2.79 MB
- 文档页数:46
数字钟设计实例利用AT89C51的定时器和6位7段数码管,设计一个电子时钟,显示格式“XX XX XX”,从左向右分别是:时、分、秒1、硬件设计2、软件设计说明:定时器每1000us中断一次,在中断服务程序中,对中断次数计数,100us计数10000次就是1s,然后再对秒计数得到分和小时,并送入显示缓存。
LEDBUF EQU 30H ;显示码缓存区HOUR EQU 40HMINUTE EQU 41HSECOND EQU 42HC100us EQU 43HTICK EQU 10000 ;置中断次数T100us EQU 256-100 ;置定时器初始值LJMP START ;跳转至主程序ORG 000BH ;定时器0中断入口T0INT: PUSH PSW ;状态保护PUSH ACCMOV A,C100us+1JNZ GOON ;计数值是否为0DEC C100usGOON: DEC C100us+1MOV A,C100usORL A,C100us+1JNZ EXITMOV C100us,#HIGH(TICK) ;重置计数值MOV C100us+1,#LOW(TICK)INC SECOND ;秒值加一MOV A,SECONDCJNE A,#60,EXIT ;判断秒值是否为60MOV SECOND,#0 ;秒值为60,则清0INC MINUTE ;分值加一MOV A,MINUTECJNE A,#60,EXIT ;判断分值是否为60MOV MINUTE,#0 ;分值为60,则清0INC HOUR ;小时值加一MOV A,HOURCJNE A,#24,EXIT ;判断小时值是否为24MOV HOUR,#0 ;小时值为24,则清0 EXIT: POP ACCPOP PSWRETIDELAY: ;延时子程序MOV R7,#0FFHDELAYLOOP:DJNZ R7,DELAYLOOPDJNZ R6,DELAYLOOPRETLEDMAP: DB 3FH,06H,5BH,4FH ;八段数码管显示码DB 66H,6DH,7DH,07HDB 7FH,6FH,77H,7CHDB 39H,5EH,79H,71HDISPLAYLED:MOV R0,#LEDBUFMOV R1,#6 ;共6个八段管MOV R2,#B ;位扫描码初值LOOP: MOV A,#0MOV P0,A ;关所有八段管MOV A,@R0MOV P0,AMOV A,R2MOV P3,A ;显示一位八段管MOV R6,#01HCALL DELAYMOV A,R2 ;显示下一位RR AMOV R2,AINC R0DJNZ R1,LOOPRETT0LED: MOV DPTR,#LEDMAP ;将字段码转换显示码MOVC A,@A+DPTRRETSTART: MOV TMOD,#02H ;定时器工作方式2 MOV TH0,#T100us ;置定时器初始值MOV TL0,#T100usMOV IE,#B ;EA=1,IT0=1MOV HOUR,#0 ;显示初始值MOV MINUTE,#0MOV SECOND,#0MOV C100us,#HIGH(TICK)MOV C100us+1,#LOW(TICK)SETB TR0 ;启动定时器0MLOOP: MOV A,HOUR ;显示小时值十位MOV B,#10DIV ABCALL T0LEDMOV LEDBUF,A ;将十位值送显示码缓存区MOV A,B ;显示小时值个位CALL T0LEDORL A,#80H ;显示小数点MOV LEDBUF+1,A ;送显示码缓存区MOV A,MINUTE ;显示分钟值十位MOV B,#10DIV ABCALL T0LEDMOV LEDBUF+2,A ;将十位值送显示码缓存区MOV A,B ;显示分钟个位值CALL T0LEDORL A,#80H ;显示小数点MOV LEDBUF+3,A ;送显示码缓存区MOV A,SECONDMOV B,#10 ;显示秒十位值DIV ABCALL T0LEDMOV LEDBUF+4,A ;送显示码缓存区MOV A,BCALL T0LEDMOV LEDBUF+5,ACALL DISPLAYLED ;调用显示子程序LJMP MLOOPEND。