标题:
基于51单片机汇编语言的时钟仿真及程序,实现校时功能
[打印本页]
作者:
huxiaoyu
时间:
2018-3-25 15:47
标题:
基于51单片机汇编语言的时钟仿真及程序,实现校时功能
基于51单片机的时钟仿真及程序,实现校时功能
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
0.png
(15.77 KB, 下载次数: 80)
下载附件
2018-3-26 03:09 上传
0.png
(51.74 KB, 下载次数: 87)
下载附件
2018-3-26 03:09 上传
单片机汇编语言源程序如下:
ORG 0000H
LJMP START
ORG 000BH ;定时器/计数器T0中断程序入口
LJMP INTT0
////////////////////////////////////////////////////////
START: MOV R0,#70H
MOV R7,#0CH
INIT: MOV @R0,#00H
INC R0
DJNZ R7,INIT ;清空70H-7CH中的内容,用于存储时间的各位数
MOV 72H,#10
MOV 75H,#10 ;数码管显示中间的横杠,取TAB中的第11个代码
MOV TMOD,#01H ;定时器方式
MOV TL0,#0B0H ;初值设定
MOV TH0,#03CH
SETB EA ;开中断,启动
SETB ET0
SETB TR0
START1: LCALL SCAN
LCALL KEYSCAN
SJMP START1
DL1MS: MOV R6,#14H ;延时1MS子程序
DL1: MOV R7,#19H
DL2: DJNZ R7,DL2
DJNZ R6,DL1
RET
DL20MS: MOV R1,#20
DL3: LCALL DL1MS ;延时20MS子程序
DL4: DJNZ R1,DL2
RET
//////////////////////////////////////////////////////
;数码管显示程序
SCAN: MOV A,78H ;取秒的个位给70H,十位给71H
MOV B,#0AH
DIV AB
MOV 71H,A
MOV 70H,B
MOV A,79H ;取分的个位给73H,十位给74H
MOV B,#0AH
DIV AB
MOV 74H,A
MOV 73H,B
MOV A,7AH ;取时的个位给76H,十位给77H
MOV B,#0AH
DIV AB
MOV 77H,A
MOV 76H,B
MOV R1,#70H ;从70H-77H循环扫描显示
MOV R5,#80H
MOV R3,#08H
SCAN1: MOV A,R5
MOV P2,A ;位码赋给P2
MOV A,@R1 ;从70H储存的秒的个位开始扫描,通过查表将段码赋给P0
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV P0,A
MOV A,R5
LCALL DL1MS
INC R1
MOV A,R5
RR A ;位码右移一位
MOV R5,A
DJNZ R3,SCAN1 ;8次一个循环
MOV P2,#00H
MOV P0,#0FFH
RET
TAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0BFH
;“0~9”,“-”的共阳极字段码
INTT0: PUSH ACC ;定时器/计数器T0中断服务程序
PUSH PSW
CLR ET0
CLR TR0
MOV TL0,#0B0H ;重装初值
MOV TH0,#03CH
SETB TR0
INC 7BH ;50ms缓冲单元
MOV A,7BH
CJNE A,#14H,OUTT0 ;计满20次50ms单元清零,秒单元加一
MOV 7BH,#00
INC 78H ;
MOV A,78H ;78H存秒单元
CJNE A,#3CH,OUTT0 ;秒计满60次,分单元加一,秒单元清零
MOV 78H,#00
INC 79H ;
MOV A,79H ;79H存分单元
CJNE A,#3CH,OUTT0 ;分计满60次,时单元加一,分单元清零
MOV 79H,#00
INC 7AH ;7AH存时单元
MOV A,7AH
CJNE A,#18H,OUTT0 ;时单元满24清零
MOV 7AH,#00
OUTT0:
SETB ET0
pop psw
pop acc
RETI
//////////////////////////////////////////////////////////
;按键处理程序
KEYSCAN:JNB P1.0,KEYSCAN0
JNB P1.1,KEYSCAN1
JNB P1.2,KEYSCAN2
KEYOUT: RET
KEYSCAN0: LCALL DL20MS ;防按键抖动程序
JB P1.0,KEYOUT
WAIT0: JNB P1.0,WAIT0 ;k1是高电平则顺序执行,每按一次循环一下7CH计数加一
INC 7CH
MOV A,7CH
CLR TR0
CLR ET0
CJNE A,#03H,KEYOUT ;按三次则继续计时,按不到三次则跳转
MOV 7CH,#00
SETB TR0
SETB ET0
SJMP KEYOUT
KEYSCAN1: LCALL DL20MS
JB P1.1,KEYOUT
WAIT1: JNB P1.1,WAIT1 ;按k2值加一
MOV A,7CH
CJNE A,#02H,KSCAN11 ;判断k1,按一次则跳转到时值调整,按两次则顺序执行分值调整
INC 79H ;分值加一
MOV A,79H
CJNE A,#3CH,KEYOUT ;若分值到60,则清零
MOV 79H,#00
SJMP KEYOUT
KSCAN11: INC 7AH ;小时加一
MOV A,7AH
CJNE A,#18H,KEYOUT ;若小时满24,则清零
……………………
…………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
时钟程序.zip
(50.17 KB, 下载次数: 42)
2018-3-25 15:46 上传
点击文件名下载附件
7黑币
下载积分: 黑币 -5
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1