?? 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 + -