龙空技术网

单片机电子时钟程序

夜来风雨声声慢 148

前言:

现在朋友们对“c语言电子时钟程序设计编程”大约比较重视,兄弟们都需要学习一些“c语言电子时钟程序设计编程”的相关知识。那么小编同时在网上汇集了一些对于“c语言电子时钟程序设计编程””的相关文章,希望朋友们能喜欢,小伙伴们一起来学习一下吧!

程序开始

ORG 0000H

AJMP MAIN (绝对转移)

ORG 000BH

AJMP CLOCK

ORG 0100H

主程序开始:

MAIN: MOV SP,#70H

MOV 6EH,#00H ;显示缓存器初始值设定

MOV 6DH,#00H

MOV 6CH,#00H

MOV 6BH,#00H

MOV 6AH,#00H

MOV 69H,#00H

MOV 50H,#00H ;秒,分,小时初始值设定

MOV 51H,#00H

MOV 52H,#00H

MOV DPTR,#0F003H ;8255端口定义,PA,PB为输出

MOV A,#80H

MOVX @DPTR,A

MOV 4FH,#00H

MOV TMOD,#01H ;定时器T0及TL0,TH0初始值设定

MOV TH0,#3CH

MOV TL0,#0B0H

SETB EA ;开总中断

SETB ET0 ;开定时器中断

SETB TR0

循环程序开始,并显示时间:

START: MOV A,50H A=50H

LCALL BCD 先把程序计数器pc加3获得下条指令的地址(也就是断点地址),并把它压入堆栈(先低四位后高四位),同时把堆栈指针加2.接着把指令的第二个和第三个字节(A15-A8,A7-A0)分别装入pc的高位和低位中,然后从pc中指出的地址开始执行程序。

本指令执行后不影响任何标志

MOV 6AH,A ;显示秒十位

MOV 69H,B ;显示秒个位

MOV A,51H

LCALL BCD

MOV 6CH,A ;显示分十位

MOV 6BH,B ;显示分个位

MOV A,52H

LCALL BCD ;调用十六进制至BCD码转换子程序

MOV 6EH,A

MOV 6DH,B

LCALL DIS ;调用显示子程序

LCALL KEY ;调用键盘子程序

AJMP START

;主程序结束

BCD: MOV B,#0AH ;BCD码转换子程序

DIV AB

RET

CLOCK: PUSH ACC ;保护现场

PUSH PSW

CLR TR0

MOV TH0,#3CH ;定时参数重新设置

MOV TL0,#0B0H

SETB TR0

INC 4FH ;100ms单元加1

MOV A,4FH

CJNE A,#0AH,D0 ;100ms单元=10,就秒单元加1

MOV 4FH,#00H ;100ms单元内容清0

MOV A,50H

ADD A,#01H ;秒单元加1

MOV 50H,A

CJNE A,#3CH,D0 ;秒单元内容=60,则秒单元清0

MOV 50H,#00H

MOV A,51H ;分,时单元代码

ADD A,#01H

MOV 51H,A

CJNE A,#3CH,D0

MOV 51H,#00H

MOV A,52H

ADD A,#01H

LCALL DIANJI ;输出电机控制信号

MOV 52H,A

CJNE A,#18H,D0

MOV 52H,#00H

D0: POP PSW ;出栈,退出中断子程序

POP ACC

RETI

DIANJI: MOV R3,A

CLR P1.0

LCALL DELL50

SETB P1.0

LCALL DELL50

DJNZ R3,RING

RET

键盘子程序:

KEY: JB P1.7,MSET ;秒设定子程序

LCALL DELL ;防抖动延时

JB P1.7,MSET

INC 50H

MOV A,50H

CJNE A,#3CH,SDIS

MOV 50H,#00H

SDIS: MOV A,50H

LCALL BCD

MOV 69H,B

MOV 6AH,A

SREP: LCALL DIS

JNB P1.7,SREP

MSET: JB P1.6,HSET ;分设定子程序

LCALL DELL

JB P1.6,HSET

INC 51H

MOV A,51H

CJNE A,#3CH,MDIS

MOV 51H,#00H

MDIS: MOV A,51H

LCALL BCD

MOV 6BH,B

MOV 6CH,A

MREP: CALL DIS

JNB P1.6,MREP

HSET: JB P1.5,SETEND ;小时设定子程序

LCALL DELL

JB P1.5,SETEND

INC 52H

MOV A,52H

CJNE A,#18H,HDIS

MOV 52H,#00H

HDIS: MOV A,52H

LCALL BCD

MOV 6DH,B

MOV 6EH,A

HREP: LCALL DIS

JNB P1.5,HREP

SETEND: RET ;键盘设定子程序结束

显示子程序:

DIS: MOV R0,#69H ;建立显示首地址

MOV R3,#01H ;从右边开始显示

MOV A,R3 ;位控码初值

YB: MOV DPTR,#0F001H ;位控口地址,PB口

MOVX @DPTR,A

MOV A,@R0

MOV DPTR,#TAB

MOVC A,@A+DPTR

MOV DPTR,#0F000H

MOVX @DPTR,A ;输出段控码

LCALL DELL ;延时

INC R0 ;转向下一单元

MOV A,R3

JB ACC.5,EEND ;判断是否到最高位,到则返回

RL A

MOV R3,A

SJMP YB ;继续扫描

EEND: RET

TAB: DB 3FH,06H,5BH,4FH,66H,6DH ;字形代码表

DB 7DH,07H,7FH,6FH,77H,7CH

DB 39H,5EH,79H,71H,73H,3EH

DB 31H,6EH,1CH,23H,40H,03H

DELL: MOV R5,#0AH 延时10ms

LP1: MOV R6,#32H

DJNZ R6,$

DJNZ R5,LP1

RET

DELL50: MOV R7,#0AH 延时50 MS

LCALL DELL

DJNZ R7,DELL50

RET

END

标签: #c语言电子时钟程序设计编程 #单片机c语言时钟程序