📄 yjp_nxsx.asm
字号:
;;*****************************************************************
;;----------- 液晶屏程序 --------------------------------------------
;;文件名: YJP_NXSX.ASM
;; 宁夏三新
;;真空热水锅炉(群控型)界面
;;订单号:02101504
;;通讯波特率 9600Kbs
;;*******************************************************************
;;口线定义区
;;-------------------------------------------------------------------
;;发光管
COM_LED EQU P2.0
CPU_LED EQU P2.1
POWER_LED EQU P2.2
;;-------------------------------------------------------------------
;;蜂鸣器
BEEB EQU P2.3;00H;;P2.3
;;-------------------------------------------------------------------
;;液晶背光电源
LCD_POWER EQU P2.4
;;-------------------------------------------------------------------
;;24C021 I2C器件
A24C_SCL EQU P1.0
A24C_SDA EQU P1.1
;;-------------------------------------------------------------------
;;SDA2000A I2C器件
SDA2_SCL EQU P1.3
SDA2_SDA EQU P1.2
;;-------------------------------------------------------------------
;;OCMJ510液晶显示模块
BUSY EQU P2.5
REQ EQU P2.6
RESET EQU P2.7
;;-------------------------------------------------------------------
;;键盘口线
;;1#键区
;上页键 EQU P1.6
;下页键 EQU P1.5
; 左键 EQU P1.4
; 右键 EQU P1.7
KEY1_SELECT EQU P3.4
;;2#键区
; 下键 EQU P1.6
; 上键 EQU P1.5
;SET键 EQU P1.4
;ENT键 EQU P1.7
KEY2_SELECT EQU P3.3
;;3#键区
; F1键 EQU P1.5
; F2键 EQU P1.7
; F3键 EQU P1.6
; F4键 EQU P1.4
KEY3_SELECT EQU P3.5
;;===================================================================
;;RAM定义区
SHOW1BUF1 EQU 2BH
SHOW1BUF2 EQU 2CH
SHOW1BUF3 EQU 2DH
SHOW1BUF4 EQU 2EH
SHOW1BUF5 EQU 2FH
;;-------------------------------------------------------------------
STR_DELAY EQU 30H
STR_DEL_BZ EQU 31H
T_005S EQU 32H
PAGE_NUMB EQU 33H
SHOW_COUNT1 EQU 34H
SHOW_COUNT2 EQU 35H
SHOWBUF1 EQU 36H
SHOWBUF2 EQU 37H
SHOWBUF3 EQU 38H
SHOWBUF4 EQU 39H
SHOWBUF5 EQU 3AH
SHOW_TIME EQU 3BH
CUR_TIME EQU 3CH
CURFLASH EQU 3DH
SET_H_BUF EQU 3EH
SET_L_BUF EQU 3FH
;;-------------------------------------------------------------------
DPH_BUF1 EQU 40H
DPL_BUF1 EQU 41H
DPH_BUF2 EQU 42H
DPL_BUF2 EQU 43H
DPH_BUF3 EQU 44H
DPL_BUF3 EQU 45H
DPH_BUF4 EQU 46H
DPL_BUF4 EQU 47H
DPH_BUF5 EQU 48H
DPL_BUF5 EQU 49H
DPH_BUF6 EQU 4AH
DPL_BUF6 EQU 4BH
DPH_BUF7 EQU 4CH
DPL_BUF7 EQU 4DH
DPH_BUF8 EQU 4EH
DPL_BUF8 EQU 4FH
;;===================================================================
SEND_START EQU 50H
RECE_SP EQU 51H
TX_COMM EQU 52H
BYTE_SUM EQU 53H
TT_SP EQU 54H
TXH_DPL_BUF EQU 55H
TXL_DPL_BUF EQU 56H
DATA_SP EQU 57H
STATUS_CODE EQU 58H
TX_LENTH EQU 59H
TX_LENTH1 EQU 5AH
TX_ADDR EQU 5BH
;;===================================================================
SET_X EQU 60H
FLASH_X EQU 61H
CLR_CUR_X EQU 62H
CLR_CUR_Y EQU 63H
KEY_LIAN EQU 64H
KEY_BUF1 EQU 65H
KEY_BUF2 EQU 66H
KEY_BUF3 EQU 67H
CLR_BIT_X EQU 68H
CLR_BIT_Y EQU 69H
PAGE_BUF EQU 6AH
LCD_POW_BZ EQU 6BH
LCD_POW_TBZ EQU 6CH
LCD_POW_TIME EQU 6DH
T1S EQU 6EH
PAGE_QHBZ EQU 6FH
;;===================================================================
SET_NUMB EQU 70H ;本页画面设置数据个数
SET_MODE EQU 71H
SHOW_COUN EQU 72H
DPH_S1 EQU 73H ;可设置寄存器标号数据首址
DPL_S1 EQU 74H
DPH_S2 EQU 75H ;可设置寄存器显示位数数据首址
DPL_S2 EQU 76H
DPH_S3 EQU 77H ;可设置寄存器上限下限数据首址
DPL_S3 EQU 78H
SHOW_LENTH EQU 79H ;该设置数据显示长度
SET_HIGH_H EQU 7AH ;设置数据上限
SET_HIGH_L EQU 7BH
SET_LOW_H EQU 7CH ;设置数据下限
SET_LOW_L EQU 7DH
CLR_CUR_BZ EQU 7EH
;;===================================================================
;;扩展RAM定义
;;-------------------------------------------------------------------
;;系统区 用户仅以只读方式访问
MW00 EQU 000H ;年
MW01 EQU 002H ;月
MW02 EQU 004H ;日
MW03 EQU 006H ;星期
MW04 EQU 008H ;时
MW05 EQU 00AH ;分
MW06 EQU 00CH ;秒
MW07 EQU 00EH ;第一时段开小时
MW08 EQU 010H ;第一时段开分钟
MW09 EQU 012H ;第一时段关小时
MW10 EQU 014H ;第一时段关分钟
MW11 EQU 016H ;第二时段开小时
MW12 EQU 018H ;第二时段开分钟
MW13 EQU 01AH ;第二时段关小时
MW14 EQU 01CH ;第二时段关分钟
MW15 EQU 01EH ;第三时段开小时
MW16 EQU 020H ;第三时段开分钟
MW17 EQU 022H ;第三时段关小时
MW18 EQU 024H ;第三时段关分钟
MW19 EQU 026H ;第四时段开小时
MW20 EQU 028H ;第四时段开分钟
MW21 EQU 02AH ;第四时段关小时
MW22 EQU 02CH ;第四时段关分钟
MW23 EQU 02EH ;时段定时允许位 1:MW23.0 2:MW23.1 3:MW23.2 4:MW23.3
MW24 EQU 030H
MW25 EQU 032H ;时段定时允许位1 1:MW25.0 2:MW25.1 3:MW25.2 4:MW25.3
MW26 EQU 034H ;未定义
MW27 EQU 036H ;画面序号 用户可通过修改值切换画面
MW28 EQU 038H ;未定义
MW29 EQU 03AH ;未定义
;;-------------------------------------------------------------------
;;用户区 用户可读可写 可自定义
MW30 EQU 03CH
MW31 EQU 03EH
MW32 EQU 040H
MW33 EQU 042H
MW34 EQU 044H
MW35 EQU 046H
MW36 EQU 048H
MW37 EQU 04AH
MW38 EQU 04CH
MW39 EQU 04EH
MW40 EQU 050H
MW41 EQU 052H
MW42 EQU 054H
MW43 EQU 056H
MW44 EQU 058H
MW45 EQU 05AH
MW46 EQU 05CH
MW47 EQU 05EH
MW48 EQU 060H
MW49 EQU 062H
MW50 EQU 064H
MW51 EQU 066H
MW52 EQU 068H
MW53 EQU 06AH
MW54 EQU 06CH
MW55 EQU 06EH
MW56 EQU 070H
MW57 EQU 072H
MW58 EQU 074H
MW59 EQU 076H
MW60 EQU 078H ;定时结果输出位 1:MW60.0 2:MW60.1 3:MW60.2 4:MW60.3
MW61 EQU 07AH
MW62 EQU 07CH
MW63 EQU 07EH
MW64 EQU 080H
MW65 EQU 082H
MW66 EQU 084H
MW67 EQU 086H
MW68 EQU 088H
MW69 EQU 08AH
MW70 EQU 08CH
MW71 EQU 08EH
MW72 EQU 090H
MW73 EQU 092H
MW74 EQU 094H
MW75 EQU 096H
MW76 EQU 098H
MW77 EQU 09AH
MW78 EQU 09CH
MW79 EQU 09EH
MW80 EQU 0A0H
MW81 EQU 0A2H
MW82 EQU 0A4H
MW83 EQU 0A6H
MW84 EQU 0A8H
MW85 EQU 0AAH
MW86 EQU 0ACH
MW87 EQU 0AEH
MW88 EQU 0B0H
MW89 EQU 0B2H
MW90 EQU 0B4H
MW91 EQU 0B6H
MW92 EQU 0B8H
MW93 EQU 0BAH
MW94 EQU 0BCH
MW95 EQU 0BEH
MW96 EQU 0C0H
MW97 EQU 0C2H
MW98 EQU 0C4H
MW99 EQU 0C6H
MW100 EQU 0C8H
MW101 EQU 0CAH
MW102 EQU 0CCH
MW103 EQU 0CEH
MW104 EQU 0D0H
MW105 EQU 0D2H
MW106 EQU 0D4H
MW107 EQU 0D6H
MW108 EQU 0D8H
MW109 EQU 0DAH
MW110 EQU 0DCH
MW111 EQU 0DEH
MW112 EQU 0E0H
MW113 EQU 0E2H
MW114 EQU 0E4H
MW115 EQU 0E6H
MW116 EQU 0E8H
MW117 EQU 0EAH
MW118 EQU 0ECH
MW119 EQU 0EEH
MW120 EQU 0F0H
MW121 EQU 0F2H
MW122 EQU 0F4H
MW123 EQU 0F6H
MW124 EQU 0F8H
MW125 EQU 0FAH
MW126 EQU 0FCH
MW127 EQU 0FEH
;********************************************************************
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP TIM0
ORG 0023H
LJMP R_T_DATA
;;*******************************************************************
ORG 0100H
MAIN: SETB BEEB
LCALL RST_WDOG
LCALL SETUP
LCALL SETUP_SDA2
MOV LCD_POW_BZ,#1
LCALL AUTO_LCD_POWER
LCALL RST_OCMJ510
LCALL STR_3SEC
MAI1: LCALL RST_WDOG
MOV R0,#STR_DEL_BZ
MOV A,@R0
JNZ MAI1
LCALL SET_OCMJ510
LCALL RD_SET_DATA
LOOP: SETB POWER_LED
LCALL RST_WDOG
LCALL RD_TIME
LCALL AUTO_LCD_POWER
LCALL SAVE_TIKEY
LCALL JDTIME
LCALL KEY
LCALL AUTOSHOW
AJMP LOOP
;;===================================================================
;;以下为SDA2000A I2C时钟芯片操作子程序
;;-------------------------------------------------------------------
;名称:START
;描述:启动I2C总线子程序-发送I2C起始条件
;--------------------------------------------------------------------
SDA2_START:CLR SDA2_SCL ;发送起始条件数据信号
DB 0,0,0,0,0
SETB SDA2_SDA ;发送起始条件数据信号
DB 0,0
SETB SDA2_SCL ;发送起始条件的时钟信号
DB 0,0,0,0,0 ;起始条件锁定时间大于4.7us
DB 0,0,0,0,0
CLR SDA2_SDA ;发送起始信号
DB 0,0,0,0,0 ;起始条件锁定时间大于4.7us
DB 0,0,0,0,0
CLR SDA2_SCL ;钳住I2C总线,准备发送或接收数据
RET
;;===================================================================
;名称:SDA2_STOP
;描述:停止I2C总线子程序-发送I2C总线停止条件
;--------------------------------------------------------------------
SDA2_STOP: CLR SDA2_SDA ;发送停止条件的数据信号
DB 0,0,0,0,0
DB 0,0,0,0,0
SETB SDA2_SCL ;发送停止条件的时钟信号
DB 0,0,0,0,0 ;起始条件建立时间大于4.7us
DB 0,0,0,0,0
SETB SDA2_SDA ;发送I2C总线停止信号
DB 0,0,0,0,0
DB 0,0,0,0,0
CLR SDA2_SDA
CLR SDA2_SCL
DB 0,0,0,0,0
RET
;;===================================================================
;名称:SDA2_SENTBYTEHL 高位到低位
;描述:字节数据传送子程序,发送一个字节数据或地址给被控器
; 要发送的数据在ACC中,使用R3寄存器,高位在前
; 发送数据正常,返回标志F0=0,F0=1表示被控器无应答
;--------------------------------------------------------------------
SDA2_SENTBYTEHL:
MOV R3,#08H ;要传送的数据长度为8位
SDA2_SENTBHL:RLC A ;要发送的数据左移,发送位入C
JC SDA2_SENT1HL ;发送位为"1"转发送数据位"1"
CLR SDA2_SDA ;发送数据位"0"
SJMP SDA2_SENTHL ;转发送数据位
SDA2_SENT1HL:SETB SDA2_SDA ;发送数据位"1"
SDA2_SENTHL:
DB 0,0,0,0,0
DB 0,0,0,0,0
SETB SDA2_SCL ;置时钟线位高,通知被控器开始接收数据
DB 0,0,0,0,0 ;保证时钟高周期大于4us
DB 0,0,0,0,0
CLR SDA2_SCL ;钳住总线准备接收下一个数据位
DJNZ R3,SDA2_SENTBHL
DB 0,0,0,0,0
SETB SDA2_SDA ;8位发送完后释放总线,准备接收应答
DB 0,0,0,0,0
SETB SDA2_SCL ;开始接收应答信号
DB 0,0,0,0,0
CLR F0 ;预先清发送数据出错标志
JNB SDA2_SDA,SDA2_ACKENDHL
SETB F0 ;未收到应答,置位错误标志
SDA2_ACKENDHL: NOP
NOP
CLR SDA2_SCL ;发送结束钳住总线,准备下一步发送或
RET ;接收数据或进行其它操作
;;===================================================================
;名称:SDA2_SENTBYTELH 低位到高位
;描述:字节数据传送子程序,发送一个字节数据或地址给被控器
; 要发送的数据在ACC中,使用R3寄存器,低位在前
; 发送数据正常,返回标志F0=0,F0=1表示被控器无应答
;--------------------------------------------------------------------
SDA2_SENTBYTELH:
MOV R3,#08H ;要传送的数据长度为8位
SDA2_SENTBLH:RRC A ;要发送的数据右移,发送位入C
JC SDA2_SENT1LH ;发送位为"1"转发送数据位"1"
CLR SDA2_SDA ;发送数据位"0"
SJMP SDA2_SENTLH ;转发送数据位
SDA2_SENT1LH:SETB SDA2_SDA ;发送数据位"1"
SDA2_SENTLH:
DB 0,0,0,0,0
DB 0,0,0,0,0
SETB SDA2_SCL ;置时钟线位高,通知被控器开始接收数据
DB 0,0,0,0,0 ;保证时钟高周期大于4us
DB 0,0,0,0,0
CLR SDA2_SCL ;钳住总线准备接收下一个数据位
DJNZ R3,SDA2_SENTBLH
DB 0,0,0,0,0
SETB SDA2_SDA ;8位发送完后释放总线,准备接收应答
DB 0,0,0,0,0
SETB SDA2_SCL ;开始接收应答信号
DB 0,0,0,0,0
CLR F0 ;预先清发送数据出错标志
JNB SDA2_SDA,SDA2_ACKENDLH
SETB F0 ;未收到应答,置位错误标志
SDA2_ACKENDLH: NOP
NOP
CLR SDA2_SCL ;发送结束钳住总线,准备下一步发送或
RET ;接收数据或进行其它操作
;;===================================================================
;名称:SDA2_RCVBYTE 低位到高位顺序
;描述:字节数据接收子程序,从被控器接收一个字节数据,然后根
; 据主程序要求发送应答位
; 接收的数据在ACC中,使用R3寄存器
; F0=0,发送应答信号,F=1发送非应答信号
;--------------------------------------------------------------------
SDA2_RCVBYTE:
SETB SDA2_SDA ;置数据线为输入方式
MOV R3,#08H ;要传送的数据长度为8位
SDA2_RCV: NOP
NOP
CLR SDA2_SCL ;置时钟线为低,准备接收数据位
DB 0,0,0,0,0 ;时钟低周期大于4us
DB 0,0,0,0,0
SETB SDA2_SCL ;置时钟线为高使数据线上数据有效
DB 0,0,0,0,0
CLR C ;准备将接收的数据位放入ACC中
JNB SDA2_SDA,SDA2_RCV0 ;读数据位,若为"1"则置C=1
SETB C
SDA2_RCV0: RRC A ;接收的数据放入ACC中
NOP
DB 0,0,0,0,0
DJNZ R3,SDA2_RCV ;8位没完继续接收
CLR SDA2_SCL ;8位接收完置时钟线和数据线为低
DB 0,0,0,0,0 ;准备发送应答或非应答信号
DB 0,0,0,0,0
CLR SDA2_SDA
JNB F0,SDA2_SENTACKB ;判断是否接收字节数据
SETB SDA2_SDA ;发送非应答信号
SDA2_SENTACKB: NOP ;以下程序发送应答位
DB 0,0,0,0,0
SETB SDA2_SCL ;置时钟线为高使应答位有效
DB 0,0,0,0,0 ;时钟高周期大于4us
DB 0,0,0,0,0
CLR SDA2_SCL ;清时钟线钳住I2C总线以便继续接收数据
DB 0,0,0,0,0
CLR F0 ;清接收非应答标志
CLR SDA2_SDA
RET
;;===================================================================
;名称:SDA2_RCVDATA
;描述:从SAD200A中接收实时时钟数据
; 数据顺序 年 月 日 星期 时 分 秒
; 接收数据缓冲区首址在MW0中
; 接收数据正常,返回标志F=0,F=1表示被控器无应答
; 发送命令数据:65H
;--------------------------------------------------------------------
SDA2_RCVDATA:
MOV R7,#07
MOV R0,#MW00
LCALL SDA2_START ;发送I2C总线起始条件
MOV A,#65H ;取被控器总线地址
LCALL SDA2_SENTBYTEHL ;发送被控器总线地址
JB F0,SDA2_RCVRETURN ;出错返回
CLR F0 ;清接收非应答标志,准备接收数据
DJNZ R7,SDA2_RCVNEXT ;如果未接收则转接收(R7)-1个数据
SJMP SDA2_RCVLAST ;只剩最后一个未接收转去接收最后一个
SDA2_RCVNEXT:
LCALL SDA2_RCVBYTE ;接收数据
MOV B,A
MOV A,R0
MOV DPL,A
MOV DPH,#02H
MOV A,#0
MOVX @DPTR,A ;高字节清0
INC DPTR
MOV A,B
MOVX @DPTR,A ;送MW0开始缓冲
INC R0
INC R0 ;指向下一缓冲区
DJNZ R7,SDA2_RCVNEXT ;重复操作至最后一个数据
SDA2_RCVLAST:
SETB F0 ;置接收非应答标志,准备在接收完最后一个数据发非应答
LCALL SDA2_RCVBYTE ;接收最后一个数据
MOV B,A
MOV A,R0
MOV DPL,A
MOV DPH,#02H
MOV A,#0
MOVX @DPTR,A ;高字节清0
INC DPTR
MOV A,B
MOVX @DPTR,A ;送MW0开始缓冲
LCALL SDA2_STOP ;发送I2C总线停止条件
CLR F0 ;置接收正常标志
SDA2_RCVRETURN:
RET
;;===================================================================
;名称:SDA2_SENDDATA
;描述:向SAD200A中发送实时时钟数据
; 数据顺序 年 月 日 星期 时 分 秒
; 发送数据缓冲区首址在MW0中
; 接收数据正常,返回标志F=0,F=1表示被控器无应答
; 发送命令数据:64H
;--------------------------------------------------------------------
SDA2_SENDDATA:
MOV R7,#07
MOV R0,#MW00
LCALL SDA2_START ;发送I2C总线起始条件
MOV A,#64H ;取被控器总线地址
LCALL SDA2_SENTBYTEHL ;发送被控器总线地址
JB F0,SDA2_SENDRETURN ;出错返回
CLR F0 ;清接收非应答标志,准备发送数据
DJNZ R7,SDA2_SENDNEXT ;如果未接收则转发送(R7)-1个数据
SJMP SDA2_SENDLAST ;只剩最后一个未发送转去发送最后一个
SDA2_SENDNEXT:
MOV A,R0
MOV DPL,A
MOV DPH,#02H
INC DPTR
MOVX A,@DPTR
LCALL SDA2_SENTBYTELH ;发送数据
JB F0,SDA2_SENDRETURN ;出错返回
INC R0
INC R0 ;指向下一缓冲区
DJNZ R7,SDA2_SENDNEXT ;重复操作至最后一个数据
SDA2_SENDLAST:
MOV A,R0
MOV DPL,A
MOV DPH,#02H
INC DPTR
MOVX A,@DPTR
LCALL SDA2_SENTBYTELH ;发送最后一个数据
JB F0,SDA2_SENDRETURN ;出错返回
LCALL SDA2_STOP ;发送I2C总线停止条件
SDA2_SENDRETURN:
RET
;;===================================================================
SDA2_BCDZH:
MOV R0,#MW00 ;MW00
MOV A,R0
MOV DPL,A
MOV DPH,#02H
MOV A,#0
MOVX @DPTR,A
INC DPTR
MOVX A,@DPTR
LCALL SDA2_BCD_HEX ;年
MOV DPH,#01H
MOVX @DPTR,A
MOV DPH,#02H
INC DPTR
MOV A,#0
MOVX @DPTR,A
INC DPTR
MOVX A,@DPTR
LCALL SDA2_BCD_HEX ;月
MOV DPH,#01H
MOVX @DPTR,A
MOV DPH,#02H
INC DPTR
MOV A,#0
MOVX @DPTR,A
INC DPTR
MOVX A,@DPTR
LCALL SDA2_BCD_HEX ;日
MOV DPH,#01H
MOVX @DPTR,A
MOV DPH,#02H
INC DPTR
MOV A,#0
MOVX @DPTR,A
INC DPTR
MOVX A,@DPTR
LCALL SDA2_BCD_HEX ;星期
MOV DPH,#01H
MOVX @DPTR,A
MOV DPH,#02H
INC DPTR
MOV A,#0
MOVX @DPTR,A
INC DPTR
MOVX A,@DPTR
ANL A,#7FH
LCALL SDA2_BCD_HEX ;时
MOV DPH,#01H
MOVX @DPTR,A
MOV DPH,#02H
INC DPTR
MOV A,#0
MOVX @DPTR,A
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -