?? lcd1.asm
字號:
;實驗目的:熟悉12864LCD的使用
;12864LCD帶中文字庫
;編程讓12864LCD顯示公司名稱“深圳乾龍盛電子”,公司電話“075528187975”,公司傳真“0755-28187976”
;硬件設置:
;關斷所有撥碼開關。
#include<p16f877a.inc>
;__CONFIG _DEBUG_OFF&_CP_ALL&_WRT_HALF&_CPD_ON&_LVP_OFF&_BODEN_OFF&_PWRTE_ON&_WDT_OFF&_HS_OSC
;芯片配置字,看門狗關,上電延時開,掉電檢測關,低壓編程關,加密,4M晶體HS振蕩
#define RS PORTA,5 ;命令/數據選擇
#DEFINE RW PORTA,4 ;讀/寫選擇
#DEFINE E PORTA,3 ;使能信號
#DEFINE PSB PORTA,2 ;并口/串口選擇(H/L)
#DEFINE RST PORTA,0 ;復位信號
;-----------------------------------------------
LCD_X EQU 30H ;頁地址
LCD_Y EQU 31H ;Y地址
COUNT EQU 32H ;循環計數用
COUNT1 EQU 33H ;循環計數用
COUNT2 EQU 34H ;循環計數用
POINT EQU 35H ;查表偏移地址
POINT1 EQU 36H ;查表偏移地址
POINT2 EQU 37H ;查表偏移地址
TEMP EQU 38H ;臨時寄存器
TEMP1 EQU 39H ;臨時寄存器
;-----------------------------------------------
ORG 0000H ;復位地址
NOP ;ICD需要的空指令
GOTO MAIN ;跳轉到主程序
;**********************主程序************************
MAIN
BANKSEL TRISA
CLRF TRISA ;A口輸出
CLRF TRISD ;D口輸出
BANKSEL ADCON1
MOVLW 06H
MOVWF ADCON1 ;A口全為數字口
CLRF STATUS
BCF RST ;復位LCD
CALL DELAY ;延時一段時間
BSF RST ;清除復位信號
NOP
BSF PSB ;并口通訊
;**************************初始化**********************
MOVLW 30H ;基本指令操作
CALL SEND_I
MOVLW 01H ;清除顯示
CALL SEND_I
MOVLW 06H ;指定在寫入或讀取時,光標的移動方向
CALL SEND_I
MOVLW 0CH ;開顯示,關光標,不閃爍
CALL SEND_I
;***********************顯示漢字************************
HAN_WR2
CALL CLEAR_P ;清屏
HAN_WR2A ;“深圳乾龍盛電子”
MOVLW LOW(TAB1A)
MOVWF POINT
MOVLW HIGH(TAB1A)
MOVWF POINT1 ;獲取表格的首地址
MOVLW 0eH ;數數據字節個數(7個漢字共14字節)
MOVWF COUNT
MOVLW 81H ;頁地址
CALL SEND_I
CALL QUSHU
HAN_WR2B ;“WWW。PIC16。COM”
MOVLW LOW(TAB1B)
MOVWF POINT
MOVLW HIGH(TAB1B)
MOVWF POINT1
MOVLW 10H
MOVWF COUNT
MOVLW 90H
CALL SEND_I
CALL QUSHU
HAN_WR2C ;“TEL0755-28187975”
MOVLW LOW(TAB1C)
MOVWF POINT
MOVLW HIGH(TAB1C)
MOVWF POINT1
MOVLW 10H
MOVWF COUNT
MOVLW 88H
CALL SEND_I
CALL QUSHU
HAN_WR2D ;“FAX0755-28187976”
MOVLW LOW(TAB1D)
MOVWF POINT
MOVLW HIGH(TAB1D)
MOVWF POINT1
MOVLW 10H
MOVWF COUNT
MOVLW 98H
CALL SEND_I
CALL QUSHU
CALL DELAY
CALL FLASH ;調用閃爍程序
CALL CLEAR_P ;清屏
GOTO HAN_WR2 ;返回重新顯示
;************************寫準備****************************
WR_ZB
MOVLW 30H
CALL SEND_I
MOVFW LCD_Y ;Y地址
CALL SEND_I
MOVFW LCD_X ;頁地址
CALL SEND_I
RETURN
;*************************閃爍程序*************************
FLASH
MOVLW 8H ;關顯示
CALL SEND_I
CALL DELAY1
MOVLW 0CH ;開顯示
CALL SEND_I
CALL DELAY1
CALL DELAY1
MOVLW 08H ;關顯示
CALL SEND_I
CALL DELAY1
MOVLW 0CH ;開顯示
CALL SEND_I
CALL DELAY1
CALL DELAY1
MOVLW 08H ;關顯示
CALL SEND_I
CALL DELAY1
MOVLW 0CH ;開顯示
CALL SEND_I
CALL DELAY1
CALL DELAY1
RETURN
;***********************清屏*******************************
CLEAR_P
MOVLW 1H ;清除顯示
CALL SEND_I
RETURN
;***********************取數顯示程序***********************
QUSHU
CLRF TEMP ;偏移地址清0
QUSHU1
MOVFW TEMP
ADDWF POINT,0 ;求偏移地址
MOVWF POINT2
CALL TAB1 ;查表
CALL SEND_D ;送LCD顯示
INCF TEMP,1 ;偏移地址加1,查找下一個數據
CALL DELAY
DECFSZ COUNT,1
GOTO QUSHU1
RETURN
;************************送數據到LCD***********************
;寫數據子程序
;RS=1,RW=0,E=高脈沖,D0-D7=數據
;**********************************************************
SEND_D
MOVWF TEMP1 ;暫存數據
CALL CHK_BUSY ;判斷總線是否忙
BSF RS
BCF RW
MOVFW TEMP1
MOVWF PORTD ;送出數據
BSF E
NOP
NOP
BCF E
RETURN
;************************送命令到LCD***********************
;寫指令子程序
;RS=0,RW=0,E=高脈沖,D0-D7=指令碼
;**********************************************************
SEND_I
MOVWF TEMP1 ;暫存命令
CALL CHK_BUSY ;判斷總線是否忙
BCF RS
BCF RW
MOVFW TEMP1
MOVWF PORTD ;送命令
BSF E
NOP
NOP
BCF E
RETURN
;************************判斷總線是否忙********************
;測忙碌子程序
;RS=0,RW=1,E=H,D0-D7=狀態字
;**********************************************************
CHK_BUSY
BANKSEL TRISD
MOVLW 0FFH
MOVWF TRISD ;D口設置為輸入
CLRF STATUS
MOVLW 0FFH
MOVWF PORTD
BCF RS
BSF RW
CHECK_BUSY_1
NOP
NOP
NOP
BSF E
NOP
NOP
NOP
BTFSS PORTD,7 ;D7為高表示總線忙,為低表示總線空閑
GOTO $+6
NOP
NOP
NOP
BCF E
GOTO CHECK_BUSY_1
BCF E
BANKSEL TRISD
CLRF TRISD ;恢復D口為輸出
CLRF STATUS
RETURN
;***************************延時程序***************************
DELAY
MOVLW 0afH
MOVWF 20H
MOVLW 0ffh
MOVWF 21H
DECFSZ 21H,1
GOTO $-1
DECFSZ 20H,1
GOTO $-5
RETURN
;***************************延時程序1**************************
;顯示閃爍用
DELAY1
MOVLW 05H
MOVWF 22H
CALL DELAY
DECFSZ 22H,1
GOTO $-2
RETURN
;***************************數據表格**************************
TAB1
MOVFW POINT1
MOVWF PCLATH
MOVFW POINT2
MOVWF PCL
TAB1A
dt 0C9,0EE ;深
dt 0DB,0DA ;圳
dt 0C7,0AC ;乾
dt 0C1,0FA ;龍
dt 0CA,0A2 ;盛
dt 0B5,0E7 ;電
dt 0D7,0D3 ;子
TAB1B ;WWW.PIC16.COM
dt ' ', ' ', 'W', 'W', 'W', '.', 'P', 'I', 'C', '1','6', '.', 'C', 'O', 'M', ' '
TAB1C ;TEL0755-28187975
dt 'T', 'E', 'L' ,'0' ,'7', '5' ,'5','-', '2', '8','1', '8' ,'7','9' ,'7','5'
TAB1D ;FAX0755-28187976
dt 'F', 'A', 'X', '0', '7', '5', '5', '-','2', '8','1', '8', '7', '9', '7', '6'
;***************************源程序結束************************
end
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -