显示用LED显示
单片机源程序如下:
- ;;;;;;;;;;;;;;;电子时钟;;;;;;;;;;;;;;;
- ;;;定时计数器方式2,每次定时100us;;;;;
- ;;;;;;;;;;;;;;;晶振:6MHZ;;;;;;;;;;;;;
- ORG 0000H
- AJMP MAIN
- ORG 000BH //T0中断入口地址
- LJMP IT0P
- ORG 0100H
- MAIN: MOV SP,#60H
- MOV TMOD,#02H //设置T0方式为方式2
- MOV TL0,#0CEH //给T0装入计数初值
- MOV TH0,#0CEH
- SETB ET0 //开启中断
- SETB TR0
- SETB PT0
- SETB EA
- MOV R7,#0FAH //1s循环次数
- MOV R6,#28H
- MOV 54H,#03H //时个位存储单元
- MOV 55H,#02H //时十位存储单元
- MOV 52H,#09H //分个位存储单元
- MOV 53H,#05H //分十位存储单元
- MOV 50H,#00H //秒个位存储单元
- MOV 51H,#03H //秒十位存储单元
- HERE: LCALL DISP //调用显示子程序
- JNB P3.0,MIN
- JNB P3.1,HOUR
- SJMP HERE
- MIN: LCALL SETM
- SJMP HERE
- HOUR: LCALL KEY2
- SJMP HERE
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- IT0P: CLR EA
- CLR TR0 //保护现场
- PUSH Acc
- PUSH PSW
- SETB TR0
- DJNZ R7,RETURN //判断定时时间是否到25ms
- MOV R7,#0FAH //重装定时常数
- DJNZ R6,RETURN //判断是否到1s,不到1s继续计时
- MOV R6,#028H //重装定时常数
- MOV A,50H //将秒的个位与10相比较,到10则将其清零,之后加1并将其放在50H存储
- INC A
- MOV 50H,A
- CJNE A,#0AH,RETURN
- CLR A
- MOV 50H,A
- MOV A,51H //将秒的十位与6相比较,到6则将其清零,之后加1并将其放在51H存储
- INC A
- MOV 51H,A
- CJNE A,#06H,RETURN
- CLR A
- MOV 51H,A
- MOV A,52H //将分的个位与10相比较,到10则将其清零,之后加1并将其放在52H存储
- INC A
- MOV 52H,A
- CJNE A,#0AH,RETURN
- CLR A
- MOV 52H,A
- MOV A,53H //将分的十位与6相比较,到6则将其清零,之后加1并将其放在53H存储
- INC A
- MOV 53H,A
- CJNE A,#06H,RETURN
- CLR A
- MOV 53H,A
- MOV A,54H //将时的个位与4相比较,不到4则跳出,到4则进行时十位的比较
- INC A
- CJNE A,#04H,RETURN
- MOV A,55H //若时个位大于等于4,十位小于2时则跳转
- CJNE A,#02H,LOOP
- CLR A //24时到时将其个位、十位清零
- MOV 54H,A
- MOV 55H,A
- LJMP RETURN
- LOOP: MOV A,54H //判断时个位是否到10,到10则进位(时十位加1),不到10则跳出
- CJNE A,#0AH,RETURN
- MOV A,55H
- INC A
- MOV 55H,A
- RETURN: CLR EA //恢复现场
- POP PSW
- POP Acc
- SETB EA
- RETI
- ;;;;;;;;;;;;;;;;;;;;;;调时、调分;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- SETM: CLR TR0
- LCALL DISP
- LCALL DISP
- JB P3.0,OUT
- STM1: LCALL DISP
- LCALL DISP
- JNB P3.0,STM1
- MOV A,54H //将时的个位与4相比较,不到4则跳出,到4则进行时十位的比较
- ADD A,#01H
- MOV 54H,A
- CJNE A,#04H,HX
- HX: JC OUT
- MOV A,55H //若时个位大于等于4,十位小于2时则跳转
- CJNE A,#02H,LOOP0
- CLR A //24时到时将其个位、十位清零
- MOV 54H,A
- MOV 55H,A
- LJMP OUT
- LOOP0:MOV A,54H //判断时个位是否到10,到10则进位(时十位加1),不到10则跳出
- CJNE A,#0AH,OUT
- MOV 54H,#00H
- MOV A,55H
- ADD A,#01H
- MOV 55H,A
- OUT: SETB TR0
- RET
- KEY2:
- OUT1: RET
- ;;;;;;;;;;;;;;;;;;;;;;;显示子程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- DISP: MOV R0,#01H //位选信号,选中最右边八段数码管
- MOV R1,#50H
- CIR: MOV A,R0
- MOV P1,A //把01H送给P1口控制最右端的八段数码管
- MOV DPTR,#TAB //表首值送给DPTR
- MOV A,@R1
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
(电子时钟).rar
(51.2 KB, 下载次数: 25)
|