当前位置:文档之家› LCD数字时钟

LCD数字时钟

LCD数字时钟
LCD数字时钟

; LCD显示时钟,第一行显示设定日期" DATE XXXX-XX-XX " ,第二行显示设定时间" TIME XX-XX-XX " ,开始时两行并列逐字;显示日期和时间,然后定格,时钟继续运行。祝亚森(0515074240),朱大三(0515074239)

RS EQU P3.0 ;写入数据(1)或指令(0)选择端

RW EQU P3.1 ;读(1)写(0)控制

E EQU P3.2; ;使能

LCD EQU P2 ;LCD数据口

BF EQU P2.7 ;忙标志

YEA1 EQU 30H ;日期储存地址

YEA2 EQU 31H

MON EQU 32H

DAY EQU 33H

HOU EQU 34H ;时间储存地址

MIN EQU 35H

SEC EQU 36H

COUNT EQU 3CB0H ;T0初值

COUNT1 EQU 20 ;20*50us=1S

SECCOUN EQU 10H ;存放20的地址

LEDBUF EQU 40H ;显示数据首地址

ORG 0000H

LJMP MAIN

ORG 000BH ;T0中断入口

LJMP STIME ;调用定时器T0中断服务子程序

MAIN: ;装入固定点显示字母或符号

SETB PSW.5

MOV LEDBUF, #12 ;D

MOV LEDBUF+1, #13 ;A

MOV LEDBUF+2, #14 ;T

MOV LEDBUF+3, #15 ;E

MOV LEDBUF+4, #16 ;空格

MOV LEDBUF+9, #10 ;-

MOV LEDBUF+12,#10 ;-

MOV LEDBUF+15,#17 ;T

MOV LEDBUF+16,#18 ;I

MOV LEDBUF+17,#19 ;M

MOV LEDBUF+18,#15 ;E

MOV LEDBUF+19,#16 ;空格

MOV LEDBUF+20,#16 ;空格

MOV LEDBUF+23,#11 ;:

MOV LEDBUF+26,#11 ;:

MOV LEDBUF+29,#16 ;空格

;---------LCD1602初始化-------------------

MOV A, #00000001B ;发送清屏操作指令;

CALL W_CMD ;调写入指令子程序

MOV A, #00001111B ;发送显示开/关控制

ACALL W_CMD ;指令,有光标,有闪烁

MOV A, #00011100B ;发送光标移动指令

ACALL W_CMD ;光标和字一起移动,光标自动右移

MOV A, #00111100B ;发送功能设置指令

CALL W_CMD ;8位DB,双行,5x7字符

MOV DPTR, #TAB ;装入查表地址

;---------LCD1602初始化结束---------------------

;---------T0定时初始化--------------------------

MOV YEA1,#20H ;设置日期初始值

MOV YEA2,#08H

MOV MON, #10H

MOV DAY, #12H

MOV HOU,#12H ;设置时间初始值

MOV MIN,#59H

MOV SEC,#50H

MOV TMOD,#01H ;设置T0定时,模式1

MOV TH0,#HIGH(COUNT) ;装入高4位初始值

MOV TL0,#LOW(COUNT) ;装入低4位初始值

SETB EA ;开中断

SETB ET0 ;开T0中断允许位

SETB TR0 ;开始定时

MOV SECCOUN,#COUNT1 ;把数值20放到10H单元中

;---------T0定时初始化结束------------------------

MOVBUF1: ;日期"年"前两位处理

MOV A,YEA1

ANL A,#0F0H ;取高四位

SW AP A ;高四位和低四位调换

MOV LEDBUF+5,A ;把处理的数存放到相应地址中MOV A,YEA1

ANL A,#0FH ;取低四位

MOV LEDBUF+6,A ;把处理的数存放到相应地址中

MOV A,YEA2 ;日期"年"后两位处理

ANL A,#0F0H

SW AP A

MOV LEDBUF+7,A

MOV A,YEA2

ANL A,#0FH

MOV LEDBUF+8,A

MOV A,MON ;日期"月"处理

ANL A,#0F0H

SW AP A

MOV LEDBUF+10,A

MOV A,MON

ANL A,#0FH

MOV LEDBUF+11,A

MOV A,DAY ;日期"日"处理

ANL A,#0F0H

SW AP A

MOV LEDBUF+13,A

MOV A,DAY

ANL A,#0FH

MOV LEDBUF+14,A

MOV A,HOU ;时间"时"处理

ANL A,#0F0H

SW AP A

MOV LEDBUF+21,A

MOV A,HOU

ANL A,#0FH

MOV LEDBUF+22,A

MOV A,MIN ;时间"分"处理

ANL A,#0F0H

SW AP A

MOV LEDBUF+24,A

MOV A,MIN

ANL A,#0FH

MOV LEDBUF+25,A

MOV A,SEC ;时间"秒"处理

ANL A,#0F0H

SW AP A

MOV LEDBUF+27,A

MOV A,SEC

ANL A,#0FH

MOV LEDBUF+28,A

JMP2DIS:LCALL DISPLAYLCD ;调用显示子程序

SJMP MOVBUF1

;-------------定时器T0中断服务子程序----------

STIME: MOV TH0,#HIGH(COUNT) ;重新装入高4位初始值MOV TL0,#LOW(COUNT) ;重新装入低4位初始值

DJNZ SECCOUN,TIMEEND ;判断是否够1秒(20*50us=1S)

MOV SECCOUN,#COUNT1 ;重新装入20

PUSH ACC ;堆栈

SECCHA: MOV A,SEC ;"秒"处理

ADD A,#1 ;秒加1

DA A ;十进制调整

MOV SEC,A

CJNE A,#60H,TIMEEND1 ;判断是否够60秒

MOV SEC,#0 ;够60秒后,秒位清0

MINCHA: MOV A,MIN ;"分"处理

ADD A,#1

DA A

MOV MIN,A

CJNE A,#60H,TIMEEND1

MOV MIN,#0

HOUCHA: MOV A,HOU ;"时"处理

ADD A,#1

DA A

MOV HOU,A

CJNE A,#24H,TIMEEND1

MOV HOU,#0

DAYCHA: MOV A,DAY ;"日"处理

MOV A,#1

DA A

MOV DAY,A

CJNE A,#24H,TIMEEND1

MONCHA: MOV A,MON ;"月"处理

MOV A,#1

DA A

MOV MON,A

CJNE A,#12H,TIMEEND1

YEA2CHA:MOV A,YEA2 ;"年"后两位处理

MOV A,#1

DA A

MOV YEA2,A

CJNE A,#99H,TIMEEND1

YEA1CHA:MOV A,YEA1 ;"年"前两位处理

MOV A,#1

DA A

MOV YEA1,A

CJNE A,#99H,TIMEEND1

TIMEEND1:

POP ACC ;弹出堆栈

TIMEEND:RETI

;-------------定时器T0中断服务子程序结束-------------

;------------------LCD1602显示子程序------------------

DISPLAYLCD:

MOV R0, #LEDBUF ;显示首地址

MOV R1, #LEDBUF+15

MOV R2, #0 ;显示第一个字

MOV R3, #10000001B ;发送第一行DDRAM地址设置指令

MOV R4, #11000001B ;发送第二行DDRAM地址设置指令LOOP1:

MOV A,R3

ACALL W_CMD

MOV A, @R0

MOVC A, @A+DPTR ;查表

ACALL W_DA TA ;调用LCD显示字子程序

INC R0 ;显示下一个字

INC R3

MOV A,R4

ACALL W_CMD

MOV A, @R1

MOVC A, @A+DPTR ;查表

ACALL W_DA TA ;调用LCD显示字子程序

INC R1 ;显示下一个字

INC R2 ;下一个数

INC R4

JNB PSW.5,TG

CALL DELAY

TG:

CJNE R2, #15, LOOP1

CLR PSW.5

LOOP:

MOV A, #00001100B ;发送显示开/关控制

ACALL W_CMD ;指令,无光标,无闪烁

LJMP EXIT ;跳出LCD1602显示子程序

TAB: DB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39H DB 2DH,3AH,44H,41H,54H,45H,20H,54H,49H,4DH

W AIT:

MOV LCD, #0FFH ;令P2作输入口使用

CLR RS

SETB RW

CLR E

NOP

SETB E

JB BF, WAIT ;判断LCD忙标志

RET

W_CMD: ;入口参数A

ACALL WAIT

MOV LCD, A

CLR RS

CLR RW

SETB E

NOP

CLR E

RET

W_DA TA: ;入口参数A

ACALL WAIT

MOV LCD, A

SETB RS

CLR RW

SETB E

NOP

CLR E

RET

EXIT:

RET

;------------------LCD1602显示子程序结束------------------

DELAY: MOV R6,#00H ;延时子程序MOV R7,#00H

DELAY1: NOP

DJNZ R7,DELAY1

DJNZ R6,DELAY1

RET

END

图片看不清的可以放大,这个应该会的,不多说

相关主题
文本预览
相关文档 最新文档