📄 1
字号:
页 1
11-20-05
09:53:56
伟福汇编器 V5.00 Copyright (c) 1989, 2001 by CHY
地址 机器码 源程序
;****************************************************************;
; 时钟\温度计程序( 用1302\18B20\12232F显示) ;
; ;
; AT89C52/12M晶振/编写者LRM/2005.07.10 ;
; ;
;****************************************************************;
;
; 从1302中读出的数据放在 52H(小时)51H(分钟)50H(秒)
; 时间显示缓冲单元:70H-79H: 72H-73H(45H-44H)小时,75H-76H(43H-42H)分钟,78H-79H(41H-40H)秒
; 温度显示缓冲单元:60H-67H: :\空\百\十\个\小数点\小数位\空\℃
; 定时器T1为时间调整时候闪烁用。
; 显示式样第一行为: 时间: 15:38:12
; 显示式样第二行为: 温度: 100.5 ℃
;*****************定义*********************;
PLAYFLG EQU P3.4 ; 主程序运行指示灯用
SCLK EQU P1.0 ; 1302时钟口,1302第7脚
IO EQU P1.1 ; 数据口,1302第6脚
RST EQU P1.2 ; 使能口,1302第5脚
SPEAK BIT P0.2 ;
KEY2 BIT P3.2
KEYSW0 EQU P2.6 ; 调时按键
KEYSW1 EQU P2.7 ; 加1按键
hour DATA 52H ; 1302读出时
mintue DATA 51H ; 1302读出分
second DATA 50H ; 1302读出秒
DS1302_ADDR DATA 3EH ; 1302需操作的地址数据存放
DS1302_DATA DATA 3DH ; 1302读出或需写入的数据存放
INTCON DATA 3CH ; 闪烁中断计时用
CON_DATA DATA 06H ; 闪烁时间=65*6=0.39秒
CON1S DATA 3BH ; 1秒计时用,温度1-2秒测量一次
CON1S_DATA DATA 0FH ; 测温间隔定时值65*15ms
FLG1S EQU 07H ; 1秒到标志
;************LCD定义***********************;
LAMPBLAK EQU P1.4 ;背光灯控制,=0时开,=1时关.
CS EQU P1.5 ;液晶使能,=1操作,=0禁止.
SID EQU P1.6 ;液晶串行数据输入口
CLK EQU P1.7 ;液晶串行操作时钟口
;温度部分定义
TEMPHEAD EQU 30H ;
TEMPL DATA 26H
TEMPH DATA 27H
TEMPHC DATA 28H
TEMPLC DATA 29H
TEMPDIN BIT P1.3
;
VSDA BIT P3.6 ; EEPROM数据传送口,24C16的5脚
VSCL BIT P3.5 ; EEPROM时钟传送口 ,24C16的6脚
BDATA DATA 2AH ;百十个小数位比较用
D:\温度时钟器示范程序\25.ASM
页 2
11-20-05
09:53:56
伟福汇编器 V5.00 Copyright (c) 1989, 2001 by CHY
地址 机器码 源程序
SDATA DATA 2BH
GDATA DATA 2CH
XSDATA DATA 2DH
BELL BIT P0.2 ;呜叫器
;
;*********************程序入口*********************;
;
ORG 0000H
0000 02002C LJMP START
ORG 0003H
0003 32 RETI
ORG 000BH
000B 0202A6 LJMP INTT0
ORG 0013H
0013 32 RETI
ORG 001BH
001B 0202DF LJMP INTT1
ORG 0023H
0023 32 RETI
ORG 002BH
002B 32 RETI
;
;*****************;主程序;*********************;
;
START:
002C C295 CLR CS ;液晶操作禁止
002E 758180 mov SP, #80H ;堆栈在80H上
0031 75700A MOV 70H,#0AH ;放北京时间后的“:”代码字
0034 75710F MOV 71H,#0FH ;空
0037 75740A MOV 74H,#0AH ; ": "
003A 75770A MOV 77H,#0AH ; ": "
003D 1205E1 LCALL READTEMP ;上电时先温度转换一次
0040 758911 MOV TMOD,#11H ;计数器1,方式1
0043 758B00 MOV TL1,#00H
0046 758D00 MOV TH1,#00H
0049 758A00 MOV TL0,#00H ;1秒定时用
004C 758C00 MOV TH0,#00H
004F 753C06 MOV INTCON,#CON_DATA
0052 C200 CLR 00H ;清闪烁标志
0054 C201 CLR 01H ;清闪烁标志
0056 E4 CLR A ;
0057 F8 MOV R0, A ;从24C16中 0000H开始读出4个字节放在40H始单元
0058 792A MOV R1, #BDATA ;
005A 7F04 MOV R7, #04H ;
005C 1207A6 LCALL C16SERD ;
005F D2AF SETB EA
0061 753E8E MOV DS1302_ADDR,#8EH
0064 753D00 MOV DS1302_DATA,#00H ;允许写1302
D:\温度时钟器示范程序\25.ASM
页 3
11-20-05
09:53:56
伟福汇编器 V5.00 Copyright (c) 1989, 2001 by CHY
地址 机器码 源程序
0067 12033F LCALL WRITE
006A 753E80 MOV DS1302_ADDR,#80H
006D 753D00 MOV DS1302_DATA,#00H ;1302晶振开始振荡
0070 12033F LCALL WRITE
0073 753E90 MOV DS1302_ADDR,#90H
0076 753DA6 MOV DS1302_DATA,#0A6H;1302充电,充电电流1.1MA
0079 12033F LCALL WRITE
007C 753E8E MOV DS1302_ADDR,#8EH
007F 753D80 MOV DS1302_DATA,#80H ;禁止写入1302
0082 12033F LCALL WRITE
;
0085 12040F LCALL SETUP ;LCD初始化
0088 1203D3 LCALL LOGON ;开机显示画面1
008B 1203F1 LCALL LOGON1 ;开机显示画面2
008E 1203B1 LCALL TIME ;上行显示"时间: 00:00:00"
0091 120699 LCALL TEMPP ;下行显示“温度:
0094 D2A9 SETB ET0
0096 D28C SETB TR0
0098 C207 CLR FLG1S
009A 753B0F MOV CON1S,#CON1S_DATA
009D 01F2 AJMP MAIN11
;以下主程序
009F 753E85 MAIN1: MOV DS1302_ADDR,#85H ;读出小时
00A2 120377 LCALL READ
00A5 853D52 MOV hour,DS1302_DATA
00A8 753E83 MOV DS1302_ADDR,#83H ;读出分钟
00AB 120377 LCALL READ
00AE 853D51 MOV mintue,DS1302_DATA
00B1 753E81 MOV DS1302_ADDR,#81H ;读出秒
00B4 120377 LCALL READ
00B7 853D50 MOV second,DS1302_DATA
;
00BA A852 MOV R0,hour ;小时分离,送显示缓存
00BC 120335 LCALL DIVIDE
00BF 8973 MOV 73H,R1 ;时个位
00C1 8944 MOV 44H,R1
00C3 8A72 MOV 72H,R2 ;时十位
00C5 8A45 MOV 45H,R2
00C7 A851 MOV R0,mintue ;分钟分离,送显示缓存
00C9 120335 LCALL DIVIDE
00CC 8976 MOV 76H,R1 ;时个位
00CE 8942 MOV 42H,R1
00D0 8A75 MOV 75H,R2 ;时十位
00D2 8A43 MOV 43H,R2
00D4 A850 MOV R0,second ;秒分离,送显示缓存
00D6 120335 LCALL DIVIDE
00D9 8979 MOV 79H,R1 ;秒个位
00DB 8940 MOV 40H,R1
D:\温度时钟器示范程序\25.ASM
页 4
11-20-05
09:53:56
伟福汇编器 V5.00 Copyright (c) 1989, 2001 by CHY
地址 机器码 源程序
00DD 8A78 MOV 78H,R2 ;秒十位
00DF 8A41 MOV 41H,R2
00E1 1203BC LCALL TIMEUP ;时间显示涮新一次
00E4 30A608 JNB KEYSW0,SETGG ;调整时间控制键
00E7 30B220 JNB KEY2,BAOJSET ;设置温度报警
00EA 100705 JBC FLG1S,MAIN11
00ED 019F AJMP MAIN1
00EF 0201AC SETGG: LJMP SETG
MAIN11:
00F2 1205F7 LCALL READTEMP1 ;读出温度值子程序
00F5 12062A LCALL CONVTEMP ;温度BCD 码计算处理子程序
00F8 1206A5 LCALL DISPTEMP ;温度值显示涮新子程序
00FB 1202B3 LCALL BAOJ ; 报警处理
00FE 1205E1 LCALL READTEMP ;再发一次转换温度命令
0101 D28C SETB TR0
0103 D2A9 SETB ET0
0105 B2B4 CPL PLAYFLG ;程序运行指示灯
0107 02009F LJMP MAIN1
;
010A 1204BD BAOJSET: LCALL DELAY1
010D 30B2FA JNB KEY2,BAOJSET
0110 C2A9 CLR ET0
0112 C2AF CLR EA
0114 C28C CLR TR0
0116 7490 MOV A,#90H ;第二行左第一个字开始
0118 12044B LCALL WRITE_COM
011B 90054D MOV DPTR,#CHINESE4 ;16*16点阵“报警-----”
011E 1204D7 LCALL WRITE_HZ
0121 756600 MOV 66H,#00H
0124 852C64 MOV 64H,GDATA
0127 852B63 MOV 63H,SDATA
012A 852A62 MOV 62H,BDATA
012D 75600A MOV 60H,#0AH ; :
0130 75610F MOV 61H,#0FH ; 空
0133 756511 MOV 65H,#11H ; 小数点.
0136 75670F MOV 67H,#0FH ; 空
0139 1206E4 LCALL TEMPUP ;显示报警温度
013C 7862 MOV R0,#62H
SET10:
013E 30B20C JNB KEY2,SET2
0141 30A619 JNB KEYSW0,SAFEADD1
0144 30A724 JNB KEYSW1,SAFESUBB1
0147 1206E4 LCALL TEMPUP ;显示报警温度
014A 02013E LJMP SET10
014D 1204BD SET2: LCALL DELAY1
0150 30B2FA JNB KEY2,SET2
0153 08 INC R0
0154 E8 MOV A,R0
D:\温度时钟器示范程序\25.ASM
页 5
11-20-05
09:53:56
伟福汇编器 V5.00 Copyright (c) 1989, 2001 by CHY
地址 机器码 源程序
0155 C3 CLR C
0156 B46500 CJNE A,#65H,SET101
0159 40E3 SET101: JC SET10
015B 2179 AJMP SETOUT
;
015D 1204BD SAFEADD1: LCALL DELAY1
0160 30A6FA JNB KEYSW0,SAFEADD1
0163 E6 MOV A,@R0
0164 12019A LCALL ADD11
0167 F6 MOV @R0,A
0168 02013E LJMP SET10
016B 1204BD SAFESUBB1: LCALL DELAY1
016E 30A7FA JNB KEYSW1,SAFESUBB1
0171 E6 MOV A,@R0
0172 1201A4 LCALL SUBB11
0175 F6 MOV @R0,A
0176 02013E LJMP SET10
;
0179 85622A SETOUT: MOV BDATA,62H
017C 85632B MOV SDATA,63H
017F 85642C MOV GDATA,64H
0182 85662D MOV XSDATA,66H
0185 E4 CLR A ; 把4 字节写入24C16的0000H开始地址中
0186 F8 MOV R0, A ;
0187 792A MOV R1, #BDATA ;
0189 7F04 MOV R7, #4 ;R7中的最大数据在1-16
018B 120748 LCALL C16PAWR ;
018E 120699 LCALL TEMPP
0191 D2A9 SETB ET0
0193 D2AF SETB EA
0195 D28C SETB TR0
0197 02009F MAIN111: LJMP MAIN1
;
ADD11:
019A 2401 ADD A,#01H
019C B40A00 CJNE A,#0AH,OLOOP
019F 4002 OLOOP: JC OUTT
01A1 7400 MOV A,#00H
01A3 22 OUTT: RET
;
SUBB11:
01A4 6002 JZ PPP1
01A6 14 DEC A
01A7 22 OUTP: RET
01A8 7409 PPP1: MOV A,#09H
01AA 21A7 AJMP OUTP
;******************公历设置程序*********************;
;
D:\温度时钟器示范程序\25.ASM
页 6
11-20-05
09:53:56
伟福汇编器 V5.00 Copyright (c) 1989, 2001 by CHY
地址 机器码 源程序
01AC 1204BD SETG : LCALL DELAY1
01AF 20A6E5 JB KEYSW0,MAIN111
01B2 D28E SETB TR1
01B4 D2AB SETB ET1
01B6 C28C CLR TR0
01B8 C2A9 CLR ET0
01BA 757800 MOV 78H,#00H ;调时时秒位为0
01BD 757900 MOV 79H,#00H ;调时时秒位为0
01C0 754000 MOV 40H,#00H ;调时时秒位为0
01C3 754100 MOV 41H,#00H ;调时时秒位为0
01C6 753E8E MOV DS1302_ADDR,#8EH
01C9 753D00 MOV DS1302_DATA,#00H ;允许写1302
01CC 12033F LCALL WRITE
01CF 753E80 MOV DS1302_ADDR,#80H
01D2 753D80 MOV DS1302_DATA,#80H ;1302停止振荡
01D5 12033F LCALL WRITE
01D8 1204BD GWAIT8: LCALL DELAY1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -