;*************************************************************************************************
;实验目的:熟悉12864LCD的使用
;12864LCD带中文字库
;编程让12864LCD显示公司名称“深圳乾龙盛电子”,公司电话“075528187975”,公司传真“0755-28187976”
;硬件设置:
;关断所有拨码开关。
;*************************************************************************************************
#include
__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 ;延时一段时间(134.58MS)
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
;***************************源程序结束************************