?? lcd1602_temp_v1.1.asm
字號:
SETB E
NOP
NOP
CLR RS ;寫入控制命令的子程序
CLR RW
CLR E
ACALL TEST_BUSY
SETB E
RET
TEST_BUSY:
SETB E
NOP
NOP
MOV P1,#0FFH ;判斷液晶顯示器是否忙的子程序
CLR RS
SETB RW
CLR E
NOP
SETB E
JB P1.7,TEST_BUSY ;如果P1.7為高電平表示忙就循環(huán)等待
RET
WRITE_DATA_TO_LCD:
SETB E
NOP
NOP
SETB RS ;RS=1
CLR RW ;RW=0 ;準(zhǔn)備寫入數(shù)據(jù)
CLR E ;E=0 ;執(zhí)行顯示命令
ACALL TEST_BUSY ;判斷液晶模塊是否忙?
SETB E ;E=1 ;顯示完成,程序停車
RET
;***************************數(shù)據(jù)轉(zhuǎn)換***************************
DATA_CONV: ;數(shù)據(jù)轉(zhuǎn)換
MOV A,28H ;低字節(jié)
ANL A,#0FH;去除高位
MOV B,#6;乘6得到實(shí)際數(shù)值的100倍.
MUL AB
MOV B,#10
DIV AB
MOV 33H,A;小數(shù)位高
MOV 32H,B; 小數(shù)位低
MOV A,28H
MOV C,29H.0 ;29h高位的低4字節(jié)
RRC A
MOV C,29H.1
RRC A
MOV C,29H.2
RRC A
MOV C,29H.3
RRC A
MOV 28H,A ;重新合成.結(jié)果存在28H.
MOV A,28H
MOV B,#10
DIV AB
MOV 26H,A ;整數(shù)位高
MOV 25H,B ;整數(shù)位低
;-------------------------
MOV A,2AH
MOV B,#10
DIV AB
MOV 40H,B ;高溫限值個(gè)位
MOV B,#10
DIV AB
MOV 41H,B;十位
MOV 42H,A;百位
;----------------------------
MOV A,2BH
MOV B,#10
DIV AB
MOV 43H,B ;低溫限值位個(gè)位
MOV B,#10
DIV AB
MOV 44H,B ;十位
MOV 45H,A ;百位
CLR C
MOV A,28H;現(xiàn)溫度值與高溫限值比較
SUBB A,2AH
JC BIG ;如果高.則關(guān)機(jī)器
CLR C
MOV A,2BH;現(xiàn)溫度與低溫限值比較
SUBB A,28H
JC X_BIG ;低溫限值比現(xiàn)溫高,則開機(jī)器
AJMP CONVERT_END
BIG:
CLR K_ON
AJMP CONVERT_END
X_BIG:
SETB K_ON
CONVERT_END:
RET
;********************顯示溫度*************************
DISPLAY_18B20_TEMP: ;LCD_顯示子程序
MOV P1,#10000000B; 顯示位置
ACALL ENABLE ;執(zhí)行指令
MOV DPTR,#TAB3;顯示'WENDU:'
MOV R1,#0 ;碼表初值
MOV R0,#7;字?jǐn)?shù)
CALL DISPLAY
;---------------顯示溫度值高位
MOV DPTR,#LED_DATA
MOV R1,26H ;碼表初值
MOV R0,#1;字?jǐn)?shù)
CALL DISPLAY
;---------------顯示溫度值低位
MOV DPTR,#LED_DATA
MOV R1,25H ;碼表初值
MOV R0,#1;字?jǐn)?shù)
CALL DISPLAY
;---------------顯示小數(shù)點(diǎn)
MOV DPTR,#DOT
MOV R1,#0 ;碼表初值
MOV R0,#1;字?jǐn)?shù)
CALL DISPLAY
;---------------顯示溫度值小數(shù)高位
MOV DPTR,#LED_DATA
MOV R1,33H ;碼表初值
MOV R0,#1;字?jǐn)?shù)
CALL DISPLAY
;---------------顯示溫度值小數(shù)低位
MOV DPTR,#LED_DATA
MOV R1,32H ;碼表初值
MOV R0,#1;字?jǐn)?shù)
CALL DISPLAY
;---------------顯示單位度
MOV DPTR,#SIGN
MOV R1,#0 ;碼表初值
MOV R0,#2;字?jǐn)?shù)
CALL DISPLAY
RET
;******************顯示限值.*****************
DISPLAY_18B20_TEMP_XZ:
MOV P1,#11000000B; 顯示位置
ACALL ENABLE ;執(zhí)行指令
MOV DPTR,#TAB_L ; 顯示'L:'
MOV R1,#0 ;碼表初值
MOV R0,#2;字?jǐn)?shù)
CALL DISPLAY
;---------------顯示溫度限值高位
MOV DPTR,#LED_DATA
MOV R1,45H ;碼表初值
MOV R0,#1;字?jǐn)?shù)
CALL DISPLAY
;---------------顯示溫度限值低位
MOV DPTR,#LED_DATA
MOV R1,44H ;碼表初值
MOV R0,#1;字?jǐn)?shù)
CALL DISPLAY
;-----------------
MOV DPTR,#LED_DATA
MOV R1,43H ;碼表初值
MOV R0,#1;字?jǐn)?shù)
CALL DISPLAY
MOV P1,#11000111B; 顯示位置
ACALL ENABLE
;----
MOV DPTR,#TAB_H ; 顯示'H:'
MOV R1,#0 ;碼表初值
MOV R0,#2;字?jǐn)?shù)
CALL DISPLAY
;---------------顯示高溫度限值高位
MOV DPTR,#LED_DATA
MOV R1,42H ;碼表初值
MOV R0,#1;字?jǐn)?shù)
CALL DISPLAY
;---------------顯示高溫度限值低位
MOV DPTR,#LED_DATA
MOV R1,41H ;碼表初值
MOV R0,#1;字?jǐn)?shù)
CALL DISPLAY
;-------------------
MOV DPTR,#LED_DATA
MOV R1,40H ;碼表初值
MOV R0,#1;字?jǐn)?shù)
CALL DISPLAY
RET
;**********************提示語**********************
DISPLAY_18B20_HELLO:
MOV P1,#10000000B; 顯示位置
ACALL ENABLE ;執(zhí)行指令
MOV DPTR,#TAB_HELLO
MOV R1,#0 ;碼表初值
MOV R0,#16;字?jǐn)?shù)
CALL DISPLAy
RET
/*
DISPLAY_18B20_TESTING:
MOV P1,#10000000B; 顯示位置
ACALL ENABLE ;執(zhí)行指令
MOV DPTR,#TAB_TESTING
MOV R1,#0 ;碼表初值
MOV R0,#16;字?jǐn)?shù)
CALL DISPLAy
RET
*/
DISPLAY_18B20_ERROR:
MOV P1,#00000001B ;清屏并光標(biāo)復(fù)位
ACALL ENABLE
MOV DPTR,#TAB1
MOV R1,#0 ;碼表初值
MOV R0,#16;字?jǐn)?shù)
CALL DISPLAy
RET
DISPLAY_WATING:
MOV P1,#00000001B ;清屏并光標(biāo)復(fù)位
ACALL ENABLE;調(diào)用寫入命令子程序
MOV P1,#10000000B; 顯示位置
ACALL ENABLE ;執(zhí)行指令
MOV DPTR,#TAB2
MOV R1,#0 ;碼表初值
MOV R0,#13;字?jǐn)?shù)
CALL DISPLAy
RET
DISPLAY_SAVE:
MOV P1,#00000001B ;清屏并光標(biāo)復(fù)位
ACALL ENABLE;調(diào)用寫入命令子程序
MOV P1,#10000000B; 顯示位置
ACALL ENABLE ;執(zhí)行指令
MOV DPTR,#TAB_SAVE
MOV R1,#0 ;碼表初值
MOV R0,#10;字?jǐn)?shù)
CALL DISPLAy
RET
DISPLAY_SETING_TEMP_H:
MOV P1,#00000001B ;清屏并光標(biāo)復(fù)位
ACALL ENABLE;調(diào)用寫入命令子程序
MOV P1,#10000000B; 顯示位置
ACALL ENABLE ;執(zhí)行指令
MOV DPTR,#TAB_SETING_TEMP_H
MOV R1,#0 ;碼表初值
MOV R0,#13;字?jǐn)?shù)
CALL DISPLAy
RET
DISPLAY_SETING_TEMP_L:
MOV P1,#00000001B ;清屏并光標(biāo)復(fù)位
ACALL ENABLE;調(diào)用寫入命令子程序
MOV P1,#10000000B; 顯示位置
ACALL ENABLE ;執(zhí)行指令
MOV DPTR,#TAB_SETING_TEMP_L
MOV R1,#0 ;碼表初值
MOV R0,#13;字?jǐn)?shù)
CALL DISPLAy
RET
DISPLAY_ON:
MOV P1,#11001101B; 顯示位置
ACALL ENABLE ;執(zhí)行指令
MOV DPTR,#TAB_ON
MOV R1,#0 ;碼表初值
MOV R0,#3;字?jǐn)?shù)
CALL DISPLAy
RET
DISPLAY_OFF:
MOV P1,#11001101B; 顯示位置
ACALL ENABLE ;執(zhí)行指令
MOV DPTR,#TAB_OFF
MOV R1,#0 ;碼表初值
MOV R0,#3;字?jǐn)?shù)
CALL DISPLAy
RET
/*
ADJ_FLASH:
JB FLASH_FLAG,
MOV P1,#1 ;在顯示數(shù)字的位置用三個(gè)空格..
ACALL ENABLE;
*/
;*****************提示語**********************
/*
TM0:;定時(shí)器程序.
DJNZ R0,N1
CPL 02H
MOV R0,#14H
N1:
MOV TL0,#0B0H
MOV TH0,#3CH
RETI
*/
;**************廷時(shí)程序************************
DELAY_BY_R3:
NOP
NOP
DJNZ R3,DELAY_BY_R3
RET
DELAY_BY_R6:
D1: MOV R7,#0
DJNZ R7,$
DJNZ R6,D1
RET
DELAY_2MS:
MOV R6,#2
F2: MOV R7,#75
F1: NOP
NOP
DJNZ R7,F1
DJNZ R6,F2
RET
DELAY_600MS:
MOV R6,#0
G2: MOV R7,#0
G1: NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
DJNZ R7,G1
DJNZ R6,G2
RET
DELAY_1M:
MOV R6,#0
MOV R7,#0
E1: NOP
NOP
DJNZ R7,E1
DJNZ R6,E1
RET
DEFINE_DATA:
DB 0CH,12H,12H,0CH,00H,00H,00H,00H;度
;DB 04H,0CH,12H,0DH,1EH,04H,08H,00H;今
;DB 0EH,04H,1FH,04H,04H,0AH,11H,00H;天
;DB 0EH,0EH,0EH,1FH,04H,0EH,17H,00H;是
;DB 10H,1FH,02H,0FH,0AH,1FH,02H,00H;年
;DB 0FH,09H,0FH,09H,0FH,09H,13H,00H;月
;DB 0FH,09H,09H,0FH,09H,09H,0FH,00H;日
LED_DATA: DB '0123456789'
TAB_HELLO:
DB 'Hello!' ;6
DB 0H,1H,2H,3H,4H,5H,6H
TAB_TESTING:
DB 'TEXTING...' ;10
TAB1:
DB '18B20 NO CONNECT'
TAB2:
DB 'Waiting......'
TAB3:
DB 'WENDU: '
DOT:
DB "."
SIGN:
DB 00H,'C'
TAB_L:
DB 'L:'
TAB_H:
DB 'H:'
TAB_SETING_TEMP_H:
DB 'SETING_TMP:H '
TAB_SETING_TEMP_L:
DB 'SETING_TMP:L '
TAB_SAVE:
DB 'SAVEING...'
TAB_ON:
DB 'ON '
TAB_OFF:
DB 'OFF'
END
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -