?? lcd.asm
字號(hào):
;=================================================
; LCD顯示程序 - 內(nèi)含顯示實(shí)用子程序
;=================================================
; 本學(xué)習(xí)板采用四位總線(xiàn)顯示方式
;
; 教學(xué)請(qǐng)看《液晶顯示器件應(yīng)用技術(shù)》 第七章
;
; 《LCD規(guī)格書(shū).doc》內(nèi)有指令表和字符表
;
; 注意:因?yàn)長(zhǎng)CD和LED 數(shù)碼管共用接口,所以使用LCD時(shí)P2.4-P2.7 必需設(shè)為1。
;=================================================
;
;=================================================
LCDpRS BIT P0.0
LCDpRW BIT P0.1
LCDpE BIT P0.2
LCDLED BIT P0.3
ORG 000H
;初始化
CALL LCD_INIT
CALL DISP_DATE
MOV DPTR,#TAB_YuHua
MOV A,#00H
CALL LCD_PRINT
JMP $
;=================================================================================
DISP_DATE:
;20XX-XX-XX
MOV A,#32H
MOV B,#43H
CALL LCD_WORD
MOV A,#30H
MOV B,#44H
CALL LCD_WORD
MOV A,#2DH
MOV B,#47H
CALL LCD_WORD
MOV A,#2DH
MOV B,#4AH
CALL LCD_WORD
mov a,#7 ;year
mov b,#45H
call BCDtoLCD
mov a,#1 ;month
mov b,#48H
call BCDtoLCD
mov a,#27H ;day
mov b,#4BH
call BCDtoLCD
ret
;=================================================================================
; LCD顯示控制程序 采用4位總線(xiàn)的結(jié)構(gòu)
;=================================================================================
; 外部調(diào)用
; 使用的變量 A B
;=================================================================================
LCD_INIT: ;初始化
CLR LCDpRW
CLR LCDpRS
SETB LCDpE
ANL P0,#00001111B
ORL P0,#00110000B
CLR LCDpE
CALL Delay_5ms
SETB LCDpE
ANL P0,#00001111B
ORL P0,#00110000B
CLR LCDpE
CALL Delay_5ms
SETB LCDpE
ANL P0,#00001111B
ORL P0,#00110000B
CLR LCDLED
CLR LCDpE
CALL Delay_5ms
SETB LCDpE
MOV a,#28H ;四位總線(xiàn),兩行,5X7
CALL LCD_SEND8BIT
MOV a,#0cH ;畫(huà)面顯示,不顯光標(biāo)和不閃爍
CALL LCD_SEND8BIT
CLR LCDpRS
MOV a,#01H ;清屏
CALL LCD_SEND8BIT
MOV a,#0cH ;畫(huà)面顯示,不顯光標(biāo)和不閃爍
CALL LCD_SEND8BIT
MOV a,#06H ;畫(huà)面不動(dòng),光標(biāo)右移
CALL LCD_SEND8BIT
MOV a,#14H ;光標(biāo)向右滾動(dòng)
CALL LCD_SEND8BIT
RET
LCD_CLR:
CALL LCD_CLR_LINE1
CALL LCD_CLR_LINE2
RET
LCD_CLR_LINE1: ;清除第一行
MOV DPTR,#TAB_CLR_LINE
MOV A,#00H
CALL LCD_PRINT
RET
LCD_CLR_LINE2: ;清除第二行
MOV DPTR,#TAB_CLR_LINE
MOV A,#40H
CALL LCD_PRINT
RET
CLR LCDpRS
MOV a,#01H ;清屏
CALL LCD_SEND8BIT
RET
;======================================
; a為十進(jìn)制BCD數(shù)據(jù),b為L(zhǎng)CD上的位置(第一行0-fh,第二行40h-4fh)
;======================================
BCDtoLCD:
PUSH B
PUSH ACC
SWAP A
ANL A,#00001111b
ADD A,#30h
CALL LCD_word
POP ACC
ANL A,#00001111b
ADD A,#30h
POP B
INC B
CALL LCD_word
RET
;======================================
;打印顯示子程序(顯示一串字符)
; a=為顯示地址(第一行0-fh,第二行40h-4fh), dptr=表名 ,0ffH結(jié)束標(biāo)志
;======================================
LCD_PRINT:
CLR LCDpRS ;寫(xiě)地址
ORL a,#10000000b
CALL LCD_SEND8BIT
SETB LCDpRS ;寫(xiě)數(shù)據(jù)
LCD_PRINT1:
CLR A
CLR C
MOVC A,@A+DPTR
CJNE A,#0ffh,$+3
JNC LCD_PRINT2
CALL LCD_SEND8BIT
INC dptr
JMP LCD_PRINT1
LCD_PRINT2:
RET
;======================================
;打印顯示子程序(顯示一個(gè)字符)
; A-寫(xiě)入數(shù)據(jù), B-寫(xiě)入地址(第一行0-fh,第二行40h-4fh)
;======================================
LCD_WORD:
PUSH ACC
MOV a,b
CLR LCDpRS ;寫(xiě)地址
ORL a,#10000000b
CALL LCD_SEND8BIT
SETB LCDpRS ;寫(xiě)數(shù)據(jù)
POP ACC
CALL LCD_SEND8BIT
RET
;======================================
LCD_SEND8BIT: ; A為欲寫(xiě)入的數(shù)據(jù)
MOV B,A
SETB LCDpE
ANL A,#11110000B
ANL P0,#00001111B
ORL P0,A
CLR LCDpE
MOV A,B
SWAP A
SETB LCDpE
ANL A,#11110000B
ANL P0,#00001111B
ORL P0,A
CLR LCDpE
MOV B,#0ffH ;500us
DJNZ B,$
RET
;要顯示的字符串表 0FFH 表示結(jié)束
TAB_AM: DB 41H,4DH,0FFH
TAB_FM: DB 46H,4DH,0FFH
TAB_USB: DB 55H,53H,42H,0FFH
TAB_CLR_LINE: DB 20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,0FFH
TAB_Volume: DB 56H,6FH,6CH,75H,6DH,65H,0FFH
TAB_MHz: DB 4DH,48H,7AH,0FFH
TAB_KHz: DB 4BH,48H,7AH,0FFH
TAB_MUTE: DB 4DH,55H,54H,45H,0FFH
TAB_PLAY: DB 50H,4CH,41H,59H,0FFH
TAB_NO_MP3: DB 4EH,4FH,20H,4DH,50H,33H,0FFH
TAB_NEXT: DB 4EH,45H,58H,54H,0FFH
TAB_PREV: DB 50H,52H,45H,56H,0FFH
TAB_PresetEmpty: DB 50H,72H,65H,72H,65H,74H,20H,20H,20H,45H,6DH,70H,74H,79H,0FFH
TAB_PresetStored: DB 50H,72H,65H,72H,65H,74H,20H,20H,20H,53H,74H,6FH,72H,65H,64H,0FFH
TAB_STEREO: DB 53H,74H,65H,72H,65H,6FH,0FFH
TAB_MONO: DB 20H,20H,4DH,6FH,6EH,6FH,0FFH
TAB_STOP: DB 53H,54H,4FH,50H,0FFH
TAB_PAUSE: DB 50H,41H,55H,53H,45H,0FFH
TAB_Alarm_Setup:DB 41H,6CH,61H,72H,6DH,20H,53H,65H,74H,75H,70H,0FFH
TAB_Beep: DB 42H,65H,65H,70H,020H,0FFH
TAB_Radio: DB 52H,61H,64H,69H,6FH,0FFH
TAB_YuHua: DB 20H,59H,75H,48H,75H,61H,20H,45H,6CH,65H,63H,74H,72H,6FH,6eH,20H,0FFH
;============================================================================
DELAY_500MS:
MOV R2,#208
JMP DELAY_MS
DELAY_175MS:
MOV R2,#73
JMP DELAY_MS
delaY_120MS:
MOV R2,#50
JMP DELAY_MS
delay_60ms:
MOV R2,#25
JMP DELAY_MS
delay_30ms:
MOV R2,#12
JMP DELAY_MS
DELAY_5MS:
MOV R2,#2
;===================================
DELAY_MS:
CALL DELAY2400
DJNZ R2,DELAY_MS
RET
;===================================
DELAY2400:;10x244+4=2447 /1.024=2390
MOV R0,#244 ;1
DELAY24001:
MUL AB ;4
MUL AB ;4
DJNZ R0,DELAY24001 ;2
RET
END
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -