基于AT89S52单片机数字钟的设计
新人不好的话原谅啊
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
单片机汇编语言源程序如下:
- ORG 0000H
- LJMP MAIN
- ORG 000BH
- LJMP DINGSHI
- ORG 001BH
- LJMP TIAOSHI
- STYLE BIT P3.0 ;模式健
- PLUS BIT P3.1 ;加键
- MINUS BIT P3.2 ;减键
- SHI EQU 30H ;时针
- FEN EQU 31H ;分针
- MIAO EQU 32H ;钞针
- MAIN:
- MOV SHI , #00H
- MOV FEN , #00H
- MOV MIAO , #00H
- MOV 33H,#00H ;时钟扫描
- MOV 34H,#00H ;分钟扫描
- MOV 35H,#00H ;秒钟扫描
- MOV 36H,#00H ;时钟扫描计数
- MOV 37H,#00H ;时钟扫描闪烁
- MOV 38H,#00H ;分钟扫描计数
- MOV 39H,#00H ;分钟扫描闪烁
- MOV 3AH,#00H ;秒钟扫描计数
- MOV 3BH,#00H ;秒钟扫描闪烁
- MOV 3CH,#00H ;定时
- MOV 3DH, #00H ;模式
- MOV 40H, #00H ;消抖
- MOV SP, #50H ;堆栈指针
- MOV DPTR, #TABLE ;查找表首地址
- MOV TH0, #(65535-20000)/256 ;定时器初值
- MOV TL0, #(65535-20000) MOD 256
- MOV TH1, #(65535-20000)/256
- MOV TL1, #(65535-20000) MOD 256
- MOV TMOD, #11H ;定时器工作方式设置,T0,T0设置为方式一
- SETB PT0 ;设置T0为高优先级
- SETB ET0 ;开定时器中断
- SETB ET1
- SETB TR0 ;启动定时器
- SETB TR1
- SETB EA ;开总中断
- DISPLAY:
- MOV A, 33H
- CJNE A,#00,X1 ;判断时针是否扫描
- MOV P2, #7FH ;选通数码管时钟的十位
- MOV A, SHI
- MOV B, #10
- DIV AB ;把时针的十位个位分离
- MOVC A, @A+DPTR ;把时针的十位放在累加器A中
- MOV P1,A ;显示时针的十位
- LCALL DELAY ;延时
- MOV P2,#0BFH ;选通时针的个位
- MOV A, B
- MOVC A,@A+DPTR
- MOV P1,A
- LCALL DELAY
- MOV A, 37H
- CJNE A,#01,X3 ;判断是否闪烁
- X1:
- INC 36H
- MOV A, 36H
- CJNE A,#10,X2
- MOV 33H, #00
- X2:
- CJNE A,#20,X3
- MOV 36H, #00
- MOV 33H, #01
- X3:
- MOV P2, #0DFH ;显示分隔符
- MOV A, #40H
- MOV P1, A
- LCALL DELAY
- MOV A, 34H ;分针的显示
- CJNE A,#00,F1
- MOV P2, #0EFH
- MOV A, FEN
- MOV B, #10
- DIV AB
- MOVC A, @A+DPTR
- MOV P1, A
- LCALL DELAY
- MOV P2, #0F7H
- MOV A, B
- MOVC A, @A+DPTR
- MOV P1, A
- LCALL DELAY
- MOV A, 39H
- CJNE A,#01H ,F3
- F1:
- INC 36H
- MOV A, 36H
- CJNE A,#10, F2
- MOV 34H, #00H
- F2:
- CJNE A,#20H,F3
- MOV 36H, #00H
- MOV 34H, #01H
- F3:
- MOV P2, #0FBH ;显示分隔符
- MOV A, #40H
- MOV P1, A
- LCALL DELAY
- MOV A,35H
- CJNE A,#00H ,M1
- MOV P2, #0FDH ;秒针的显示
- MOV A, MIAO
- MOV B, #10
- DIV AB
- MOVC A, @A+DPTR
- MOV P1, A
- LCALL DELAY
- MOV P2, #0FEH
- MOV A, B
- MOVC A, @A+DPTR
- MOV P1, A
- LCALL DELAY
- MOV A, 3BH
- CJNE A,#01,M3
- M1:
- INC 3AH
- MOV A, 3AH
- CJNE A,#10,M2
- MOV 35H, #00H
- M2:
- CJNE A,#20H,M3
- MOV 3AH, #00H
- MOV 35H, #01H
- M3:
- LJMP DISPLAY
- DINGSHI:
- PUSH ACC
- PUSH PSW
- MOV TH0, #(65535-20000)/256 ;定时器赋初值
- MOV TL0, #(65535-20000) MOD 256
- INC 3CH
- MOV A, 3CH
- CJNE A,#50,J1 ;判断是否为一秒,若为一秒顺序执行,否发生跳转
- MOV 3CH, #00H ;定时次数清零
- INC MIAO ;秒针加一
- MOV A, MIAO
- CJNE A,#60, J1 ;判断是否为一分
- MOV MIAO, #00 ;秒针清零
- INC FEN ;分针加一
- MOV A, FEN
- CJNE A,#60,J1 ;判断是否为一时
- MOV FEN, #00H ;分针清零
- INC SHI ;时针加一
- MOV A, SHI
- CJNE A,#24,J1 ;判断是否溢出
- MOV SHI, #00H ;时针清零
- J1:
- CLR ET0
- POP ACC
- POP PSW
- SETB ET0
- RETI
- TIAOSHI:
- PUSH ACC
- PUSH PSW
- MOV TH1, #(65535-20000)/256 ;定时器赋初值
- MOV TL1, #(65535-20000) MOD 256
- JB STYLE, G1 ;判断模式键是否按下
- INC 40H ;清抖
- MOV A, 40H
- CJNE A,#10,G1
- JB STYLE ,G1 ;模式键真的被按下
- MOV 40H,#00
- INC 3DH ;模式键加一
- MOV A, 3DH
- CJNE A,#01,A1 ;判断是否为模式一
- MOV 33H,#01 ;时针扫描判断
- MOV 37H,#01 ;时针扫描闪烁判断
- A1:CJNE A,#02,A2 ;模式是否为二
- MOV 33H,#00
- MOV 37H,#00
- MOV 34H,#01
- MOV 39H,#01
- A2:CJNE A,#03,A3 ;模式是否为三
- MOV 34H,#00
- MOV 39H,#00
- MOV 35H,#01
- MOV 3BH,#01
- A3:CJNE A,#04,G1 ;模式是否为四,为四正常走时
- MOV 3DH,#00
- MOV 35H,#00
- MOV 3BH,#00
- G1:JB PLUS,B1 ;判断加键是否按下
- INC 40H ;消抖
- MOV A, 40H
- CJNE A,#11,B1
- JB PLUS ,B1
- MOV 40H,#00
- MOV A,3DH
- CJNE A,#01,C1 ;若为模式一,时针加一
- INC SHI
- MOV A, SHI
- CJNE A,#24,B1
- MOV SHI,#00
- C1: CJNE A,#02,C2 ;若为模式二,分针加一
- INC FEN
- MOV A,FEN
- CJNE A,#60, B1
- MOV FEN, #00
- C2:CJNE A,#03,B1 ;若为模式三,秒针加一
- INC MIAO
- MOV A, MIAO
- CJNE A,#60,B1
- MOV MIAO,#00
- B1:JB MINUS,E1 ;判断减键是否按下
- INC 40H ;清抖
- MOV A, 40H
- CJNE A,#12,E1
- JB MINUS ,E1
- MOV 40H,#00
- MOV A, 3DH
- CJNE A,#01,Q1 ;若为模式一,时针减一
- MOV A, SHI
- CJNE A,#00,Q2 ;判断时针是否为0
- MOV SHI, #23
- LJMP E1
- Q2:DEC SHI ;时针减一
- LJMP E1
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
基于AT89S52单片机数字钟的设计.zip
(90.66 KB, 下载次数: 93)
|