您好,欢迎来到爱问旅游网。
搜索
您的当前位置:首页加显示和时钟的程序最终版文档

加显示和时钟的程序最终版文档

来源:爱问旅游网
 T_RST BIT P3.4 ;实时时钟复位线引脚

T_CLK BIT P3.5 ;实时时钟时钟线引脚 T_IO BIT P3.6 ;实时时钟数据线引脚 E BIT P2.2 RW BIT P2.1

RS BIT P2.0

SL_BIT EQU 26H ;秒低位 SH_BIT EQU 27H ;秒高位 ML_BIT EQU 28H ;分低位 MH_BIT EQU 29H ;分高位 HL_BIT EQU 2AH ;时低位 HH_BIT EQU 2BH ;时高位 SEC EQU 30H MIN EQU 31H

HOUR EQU 32H

DS1302_ADDR EQU 5EH DS1302_DATA EQU 5FH ORG 0000H LJMP MAIN

ORG 0003H

LJMP INT_INT0

ORG 0013H

LJMP INT_INT1 ORG 0100H MAIN:

MOV SP,#60H MOV HOUR,#12H MOV MIN,#0 MOV SEC,#0 Setb px1

SETB IT0 SETB EX0

SETB IT1 SETB EX1

SETB TR1

MOV TMOD,#10H

SETB EA

LCALL START ;对LCD初始化

SETB F0 ;F0为1时时钟,为0时秒表 LCALL WR1302 ;LCALL RD1302 AGAIN1: LCALL DISP;调显示 LCALL RD1302 ;LCALL DISP;调显示

LJMP AGAIN1 INT_INT0: MOV R1,#0 MOV R2,#0 MOV R3,#0

CLR F0

LCALL DISP1;调显示 MS1: JB P3.2 ,MSOVER;判断切换

显示的地址

显示的地址

AGAIN:

MSOVER: DISP1: MOV TH1, #0D8H MOV TL1, #0F0H JNB TF1, AGAIN INC R1 CLR TF1

LCALL DISP1;调显示 CJNE R1,#99,MS1;毫秒计数 MOV R1,#0 INC R2 CJNE R2,#59,MS1;秒计数 MOV R2,#0

INC R3

CJNE R3,#99,MS1;分计数 MOV R2, #00 ;秒 MOV R1, #00 ; 毫秒 MOV R3, #00;分

LCALL DISP1 SJMP MS1

SETB F0 RETI ;写冒号子程序 MOV A,#8AH ;冒号在1602中 LCALL WR_CMD

MOV A,#3AH ;冒号? LCALL WR_DATA

MOV A,#8DH ;冒号在1602中 LCALL WR_CMD

MOV A,#3AH ;冒号? LCALL WR_DATA;写秒显示子程序 MOV A,R1

MOV B,#10 DIV AB mov r4,a ;十位在A,个位在

B

MOV A,#8EH ;秒显示的位置 LCALL WR_CMD mov a,r4

MOV DPTR,#TAB MOVC A,@A+DPTR

LCALL WR_DATA MOV A,#8FH ;秒显示的位置 B

B

LCALL WR_CMD MOV A,B

MOVC A,@A+DPTR ;MOV P0,A LCALL WR_DATA ;写分显示子程序 MOV A,R2

MOV B,#10 DIV AB mov r4,a MOV A,#8BH LCALL WR_CMD mov a,r4

MOV DPTR,#TAB

MOVC A,@A+DPTR

;MOV P0,A LCALL WR_DATA MOV A,#8CH LCALL WR_CMD MOV A,B

MOVC A,@A+DPTR ;MOV P0,A LCALL WR_DATA ;写时显示子程序 MOV A,R3 MOV B,#10

DIV AB mov r4,a MOV A,#88H LCALL WR_CMD mov a,r4

MOV DPTR,#TAB MOVC A,@A+DPTR

;十位在A,个位在 ;秒显示的位置 ;秒显示的位置 ;十位在A,个位在 ;秒显示的位置 ;MOV P0,A

LCALL WR_DATA MOV A,#89H ;秒显示的位置 LCALL WR_CMD MOV A,B

MOVC A,@A+DPTR ;MOV P0,A LCALL WR_DATA

DS1302_DATA,#80H

jb p3.1,loop10

停止振荡

RET

;调整中断程序

INT_INT1: JNB F0,AMS;对秒表操作 CLR EX1 LOOP0: JNB P3.1,LOOP1;调时 LCALL DELAY10MS;消抖

JNB P3.1,LOOP1

MOV DS1302_ADDR,#80H

MOV 停止振荡 LCALL WRITE

loop10: INC HOUR

LCALL DELAY LCALL WR13022 LCALL RD1302

LCALL DISP2;调显示 jNb p3.1,loop1

MOV R5,HOUR

CJNE R5,#35,LOOP10

MOV HOUR,#0

; LJMP AGAIN1

;MOV DS1302_ADDR,#80H ;开始振荡

;MOV DS1302_DATA,#00H ;LCALL WRITE LOOP1: JNB P3.0,LOOP2 ;调分 LCALL DELAY10MS;消抖

JNB P3.0,LOOP2

; MOV DS1302_ADDR,#80H

;MOV DS1302_DATA,#80H ;1302 ; LCALL WRITE

;1302 loop20: INC MIN

LCALL DELAY

LCALL WR13022 LCALL RD1302

LCALL DISP2;调显示

jNb p3.0,loop2 MOV R5,MIN

CJNE R5,#59,LOOP20

MOV MIN,#00H

MOV DS1302_ADDR,#80H ;开始振

MOV DS1302_DATA,#00H LCALL WRITE LOOP2: JB P3.3,NEXT0

SJMP LOOP0

NEXT0: SETB EX1 RETI

AMS: JNB P3.0,LOOP11 MOV R1, #00 ; 秒 MOV R2, #00 ;分

MOV R3, #00 ;时

LCALL DISP1

LOOP11: JNB P3.1,LOOP22;暂停键 CLR TR0 JB P3.1,LOOP11

SETB TR0

LOOP22: JB P3.3 ,NEXT01 SJMP AMS NEXT01: RETI

DISP:

MOV A,HOUR MOV B,#10H DIV AB

MOV HL_BIT,B MOV HH_BIT,A

MOV A,MIN MOV B,#10H DIV AB MOV ML_BIT,B MOV MH_BIT,A

MOV A,SEC

MOV B,#10H DIV AB

MOV SL_BIT,B MOV SH_BIT,A

MOV A,#30H ;16进制转ASCII

ORL HH_BIT, A ORL HL_BIT, A ORL MH_BIT, A ORL ML_BIT, A ORL SH_BIT, A ORL SL_BIT, A

MOV A, #10001000B LCALL WR_CMD MOV A,HH_BIT LCALL WR_DATA MOV A,HL_BIT LCALL WR_DATA MOV A,#\":\"

LCALL WR_DATA MOV A,MH_BIT LCALL WR_DATA MOV A,ML_BIT LCALL WR_DATA

MOV A,#\":\"

LCALL WR_DATA MOV A,SH_BIT LCALL WR_DATA MOV A,SL_BIT LCALL WR_DATA RET DISP2: MOV A,HOUR ADD A,#00H DA A MOV HOUR,A MOV A,MIN ADD A,#00H

DA A

MOV MIN,A

MOV A,SEC

ADD A,#00H DA A MOV SEC,A

;写冒号子程序

; LINE2

MOV A,#8AH ;冒号在1602中显示的地址

LCALL WR_CMD

MOV A,#3AH ;冒号? LCALL WR_DATA

MOV A,#8DH ;冒号在1602中显示的地址

LCALL WR_CMD

MOV A,#3AH ;冒号? B

B

LCALL WR_DATA;写秒显示子程序 MOV A,SEC MOV B,#10H

DIV AB mov r4,a ;十位在A,个位在 MOV A,#8EH ;秒显示的位置 LCALL WR_CMD mov a,r4

MOV DPTR,#TAB MOVC A,@A+DPTR

LCALL WR_DATA MOV A,#8FH ;秒显示的位置 LCALL WR_CMD MOV A,B

MOVC A,@A+DPTR ;MOV P0,A LCALL WR_DATA ;写分显示子程序 MOV A,MIN

MOV B,#10H DIV AB mov r4,a ;十位在A,个位在 MOV A,#8BH ;秒显示的位置 LCALL WR_CMD mov a,r4

MOV DPTR,#TAB MOVC A,@A+DPTR ;MOV P0,A

LCALL WR_DATA MOV A,#8CH ;秒显示的位置 LCALL WR_CMD MOV A,B

MOVC A,@A+DPTR ;MOV P0,A LCALL WR_DATA ;写时显示子程序 MOV A,HOUR MOV B,#10H

DIV AB mov r4,a ;十位在A,个位在B

写1302

止振荡

WR1302:

MOV A,#88H ;秒显示的位置 LCALL WR_CMD mov a,r4 MOV DPTR,#TAB MOVC A,@A+DPTR

;MOV P0,A LCALL WR_DATA MOV A,#89H ;秒显示的位置 LCALL WR_CMD MOV A,B

MOVC A,@A+DPTR ;MOV P0,A LCALL WR_DATA RET MOV DS1302_ADDR,#8EH MOV DS1302_DATA,#00H ;允许LCALL WRITE

MOV DS1302_ADDR,#80H MOV DS1302_DATA,#80H ;1302停 LCALL WRITE

MOV DS1302_ADDR,#84H ;时写入1302 MOV DS1302_DATA,HOUR

LCALL WRITE

MOV DS1302_ADDR,#82H ;分写入1302 MOV DS1302_DATA,MIN LCALL WRITE

MOV DS1302_ADDR,#80H ;秒写入1302 MOV DS1302_DATA,SEC LCALL WRITE

ANL A,#7FH ;开启晶振

MOV DS1302_ADDR,#80H MOV DS1302_DATA,A LCALL WRITE RET

WR13022: MOV DS1302_ADDR,#8EH MOV DS1302_DATA,#00H ;允许写1302

LCALL WRITE

停止振荡

;MOV DS1302_ADDR,#80H

;MOV DS1302_DATA,#80H ;1302 ; LCALL WRITE

MOV DS1302_ADDR,#84H ;时写入1302 MOV DS1302_DATA,HOUR LCALL WRITE

MOV DS1302_ADDR,#82H ;分写入1302 MOV DS1302_DATA,MIN LCALL WRITE

MOV DS1302_ADDR,#80H ;秒写入1302 MOV DS1302_DATA,SEC LCALL WRITE RET WRITE:

CLR T_CLK NOP

SETB T_RST

NOP

MOV A,DS1302_ADDR MOV R4,#8

WRITE1:

RRC A NOP NOP CLR T_CLK NOP NOP

NOP

MOV T_IO,C NOP NOP

NOP

SETB T_CLK NOP

NOP

DJNZ R4,WRITE1 CLR T_CLK NOP

MOV A,DS1302_DATA

MOV R4,#8 WRITE2:

RRC A

NOP 时读出

分读出

秒读出

RD1302:

READ: CLR T_CLK NOP NOP

MOV T_IO,C NOP NOP NOP

SETB T_CLK NOP NOP

DJNZ R4,WRITE2 CLR T_RST

RET MOV DS1302_ADDR,#85H LCALL READ

MOV HOUR,DS1302_DATA

MOV DS1302_ADDR,#83H LCALL READ

MOV MIN,DS1302_DATA

MOV DS1302_ADDR,#81H LCALL READ

MOV SEC,DS1302_DATA

RET CLR T_CLK NOP NOP

SETB T_RST

NOP

MOV A,DS1302_ADDR

MOV R4,#8 ;;;

READ1:

RRC A

MOV T_IO,C NOP NOP

NOP

SETB T_CLK NOP NOP 点阵

READ2:

START:

NOP

CLR T_CLK NOP

NOP

DJNZ R4,READ1

MOV R4,#8 CLR T_CLK NOP NOP NOP

MOV C,T_IO NOP NOP NOP NOP

NOP RRC A NOP NOP NOP

NOP

SETB T_CLK NOP

DJNZ R4,READ2 MOV DS1302_DATA,A CLR T_RST RET MOV A, #01H

LCALL WR_CMD ;清屏

MOV A, #38H

LCALL WR_CMD ;8位数据,16X2,5X7

MOV A, #0CH

LCALL WR_CMD ;开显示,关光标,不闪烁

MOV A, #06H

LCALL WR_CMD ;读写字符时地址+1,整屏不移动

RET

WR_CMD:

MOV P0, A

就循环等待

CLR RS ;写入控制命令 CLR RW CLR E LCALL BUSY SETB E LCALL DL_40U

RET

WR_DATA:

MOV P0, A

SETB RS ;写入数据 CLR RW

CLR E

LCALL BUSY ;判断液晶模块是否忙? SETB E LCALL DL_40U RET

BUSY: ;查看LCD是否忙 MOV P0,#0FFH CLR RS SETB RW CLR E

NOP SETB E

JB P0.7,BUSY ;如果P0.7为高电平表示忙DL_40U: MOV R5, #20 ;延时40US DJNZ R5, $

MOV R5,#20

RET DELAY: mov r7,#100 aa2: MOV R0, #20

AA1: MOV R6, #250 DJNZ R6, $ DJNZ R0, AA1 djnz r7,aa2

MOV R6,#250

MOV R0,#20 RET DELAY10MS: MOV R0, #20 AA: MOV R6, #250 DJNZ

R6, $

DJNZ R0, AA

MOV R6,#250 MOV R0,#20

TAB: 30H,31H,32H,33H,34H,35H,36H,37H,38H,39H

RET

;0~9液晶显示 END DB

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- awee.cn 版权所有

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务