标题:
基于AT89S52单片机数字钟的仿真设计(汇编语言程序)
[打印本页]
作者:
12356wxh
时间:
2018-1-11 15:44
标题:
基于AT89S52单片机数字钟的仿真设计(汇编语言程序)
基于AT89S52单片机数字钟的设计
新人不好的话原谅啊
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
0.jpg
(117.17 KB, 下载次数: 68)
下载附件
2018-1-11 17:23 上传
0.jpg
(16.27 KB, 下载次数: 70)
下载附件
2018-1-11 17:23 上传
单片机汇编语言源程序如下:
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)
2018-1-11 15:44 上传
点击文件名下载附件
课程设计
下载积分: 黑币 -5
作者:
qjzyx
时间:
2018-1-12 21:58
看了一下,电路精简,改天下个玩玩!
作者:
79778584
时间:
2018-3-11 13:01
谢谢楼主!很实用!!!
作者:
aifengdian
时间:
2018-3-15 08:54
正需要这个,谢谢分享!
作者:
jiajia86
时间:
2019-11-13 13:21
谢谢楼主!很实用!!!
作者:
初学者5
时间:
2020-11-30 14:45
最上面的蓝屏的led名称是什么啊
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1