#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 ;循环计数用
COUNT3 EQU 35H
POINT EQU 36H ;查表偏移地址
POINT1 EQU 37H ;查表偏移地址
POINT2 EQU 38H ;查表偏移地址
POINT3 EQU 40H
TEMP EQU 39H ;临时寄存器
TEMP1 EQU 3AH ;临时寄存器
;-----------------------------------------------
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 ;“深圳乾龙盛电子”
CALL QUSHU
GOTO $
;************************写准备****************************
WR_ZB
MOVLW 34H
CALL SEND_I
MOVFW LCD_Y ;Y地址
CALL SEND_I
MOVFW LCD_X ;页地址
CALL SEND_I
MOVLW 30H
CALL SEND_I
RETURN
;***********************清屏*******************************
CLEAR_P
MOVLW 1H ;清除显示
CALL SEND_I
RETURN
;***********************取数显示程序***********************
QUSHU
CLRF POINT ;取数地址低8位
CLRF POINT+1 ;取数地址高8位(因为一共需要(128/8)*64个数据)
CLRF POINT2 ;POINT的临时寄存器
CLRF POINT3 ;POINT+1的临时寄存器
MOVLW 02H ;整块屏分为上下两个小屏(每小屏共32行)
MOVWF COUNT3
MOVLW 80H ;上半屏的起始地址
MOVWF LCD_X
QUSHU1
MOVLW 80H ;每一行的第一个字节的地址
MOVWF LCD_Y
MOVLW 20H ;每一小屏共32行
MOVWF COUNT2
QUSHU2
MOVLW 10H ;每一行共16个字节(16*8=128)
MOVWF COUNT1
CALL WR_ZB ;调用写准备函数
QUSHU3
CALL TAB1 ;查表
CALL SEND_D ;写入到LCD的GDROM里
CLRF POINT3
INCF POINT,1 ;偏移地址加1,查找下一个数据
BTFSC STATUS,Z ;低8位是否有溢出
INCF POINT+1,1 ;有,高8位+1
DECFSZ COUNT1,1 ;是否写完一行16个字节
GOTO QUSHU3 ;否,返回去继续写
INCF LCD_Y,1 ;是,写下一行
DECFSZ COUNT2,1 ;是否写完32行
GOTO QUSHU2 ;否,继续写
MOVLW 88H ;是,写下半屏
MOVWF LCD_X
DECFSZ COUNT3,1 ;是否写完下半屏
GOTO QUSHU1 ;否,继续写
;是,开显示
MOVLW 36H ;扩展指令,图形显示开
CALL SEND_I
MOVLW 30H ;基本指令
CALL SEND_I
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
MOVLW LOW(TAB1A) ;获取数据表头的低8位地址
ADDWF POINT,0 ;并上取数的低8位
MOVWF POINT2 ;转存到POINT2里
BTFSC STATUS,C ;判断低8位是否有溢出
INCF POINT3,1 ;是,高8位+1
MOVLW HIGH(TAB1A) ;获取数据表头的高8位地址
ADDWF POINT3,0
ADDWF POINT+1,0 ;并上取数的高8位
MOVWF PCLATH ;准备PC的高5位
MOVFW POINT2
MOVWF PCL ;准备PC的低8位
TAB1A: ; 数据表
DT 0X0F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X00,0X00
DT 0X18,0XFC,0XB7,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0XFF,0XE0,0X00,0X00
DT 0X1E,0X7F,0X0C,0X00,0X00,0X07,0XFF,0XFF,0X80,0X00,0X0F,0XF8,0X7F,0XE0,0X03,0XC0
DT 0X1F,0XE7,0X80,0X00,0X00,0X7F,0XFF,0XFF,0XC0,0X00,0X7F,0XE1,0XFF,0XE0,0X0C,0X60
DT 0X1F,0X9B,0XE0,0X00,0X01,0XFF,0XFF,0XFF,0XF0,0X01,0X80,0X07,0XFF,0XE0,0X0C,0X60
DT 0X1F,0XCF,0XE0,0X00,0X1F,0XFF,0XFF,0XFF,0XF8,0X01,0X00,0X1F,0XFF,0XE0,0X0C,0X60
DT 0X13,0XE4,0XF0,0X00,0X7F,0XFF,0XFF,0XFF,0XFE,0X00,0X00,0XFF,0X0E,0X20,0X0C,0X60
DT 0X10,0XF0,0XF0,0X00,0XFF,0XFE,0XFF,0XFF,0XFF,0X00,0X00,0XF8,0X0E,0X20,0X0C,0X60
DT 0X1C,0X7C,0X38,0X01,0XEF,0XF4,0X0F,0XFF,0XFF,0X80,0X00,0X00,0X7F,0XE0,0X0C,0X60
DT 0X1F,0X1E,0X08,0X03,0X9F,0XC0,0X00,0XFE,0XFF,0XC0,0X00,0X07,0XFF,0XE0,0X0D,0X60
DT 0X1F,0X03,0X80,0X07,0X27,0X80,0X00,0X3F,0X3F,0XE0,0X00,0X7F,0XFF,0XE0,0X0D,0XE0
DT 0X1E,0XE0,0XC0,0X06,0X4F,0X00,0X00,0X3F,0XBF,0XF0,0X00,0XFE,0X1C,0X20,0X07,0XC0
DT 0X1F,0XF0,0X20,0X0E,0X4E,0X00,0X00,0X1F,0XCF,0XF8,0X00,0X00,0X7F,0XA0,0X00,0XC0
DT 0X1F,0XFE,0X00,0X0C,0X9C,0X00,0X00,0X0F,0XFF,0XF8,0X00,0X00,0X7F,0XE0,0X00,0XE0
DT 0X1F,0XFF,0X80,0X1D,0XF8,0X00,0X00,0X0F,0XF3,0XFC,0X00,0X3F,0X8E,0XE0,0X00,0X00
DT 0X1E,0X03,0X00,0X1F,0X78,0X00,0X00,0X07,0XC7,0XFC,0X00,0X0F,0X7F,0XA0,0X00,0X00
DT 0X1F,0X80,0X00,0X1B,0XF0,0X00,0X00,0X09,0XCF,0XFC,0X00,0X00,0X0F,0XE0,0X0F,0X00
DT 0X1F,0XFE,0X00,0X19,0XF0,0X00,0X00,0X07,0XC9,0XFE,0X00,0X07,0X1F,0XE0,0X06,0X00
DT 0X1F,0XFF,0XC0,0X0F,0XE0,0X00,0X00,0X03,0XC1,0XFE,0X00,0XFF,0XFF,0XE0,0X06,0X00
DT 0X1F,0XC0,0X40,0X0F,0XC0,0X00,0X00,0X03,0XE7,0XFE,0X00,0X9F,0XFF,0X20,0X06,0X00
DT 0X1F,0X00,0X00,0X0F,0XC0,0X00,0X00,0X07,0XE7,0XFC,0X00,0X0B,0XCF,0X20,0X06,0X00
DT 0X1F,0X78,0X00,0X0F,0XC0,0X00,0X00,0X07,0XE7,0XFC,0X00,0X00,0X0F,0XE0,0X06,0X00
DT 0X1F,0XFF,0X80,0X07,0XF0,0X00,0X00,0X03,0XEF,0XFC,0X00,0X00,0X3F,0XE0,0X06,0X00
DT 0X13,0XFF,0XE0,0X07,0XFE,0X01,0XE0,0X01,0XCF,0XFC,0X00,0X00,0X3F,0XE0,0X06,0X60
DT 0X1F,0XFC,0X00,0X07,0XE3,0X03,0XF8,0X06,0XDF,0XFC,0X00,0X1F,0XFE,0X60,0X06,0X60
DT 0X1F,0X80,0X00,0X03,0X80,0X80,0XC0,0X01,0XFF,0XF8,0X00,0X0F,0X3F,0XE0,0X0F,0XE0
DT 0X1C,0X00,0X00,0X01,0X80,0X41,0XC0,0X06,0XFF,0XF8,0X00,0X00,0XF3,0XE0,0X00,0X00
DT 0X13,0XFC,0X00,0X03,0XFC,0X41,0XFC,0X03,0X7F,0XF0,0X00,0X00,0X0F,0XE0,0X00,0X00
DT 0X1F,0XFF,0X00,0X03,0XFE,0X40,0XFF,0X00,0XFF,0XF0,0X00,0X07,0XFF,0XE0,0X07,0XC0
DT 0X1F,0XC0,0X00,0X02,0XF0,0X40,0XE1,0X00,0X78,0XF0,0X00,0X3C,0XFC,0X20,0X0C,0X60
DT 0X1E,0X00,0X00,0X02,0XC0,0XC0,0X60,0X00,0XF3,0X70,0X00,0X03,0XFF,0XE0,0X00,0X60
DT 0X10,0X00,0X00,0X02,0X00,0X80,0X60,0X00,0X67,0X30,0X00,0X00,0X7F,0XE0,0X00,0XC0
DT 0X17,0XFF,0X00,0X03,0X01,0X80,0X30,0X00,0XFC,0XB0,0X00,0X3F,0XCF,0XE0,0X01,0X80
DT 0X1F,0XFA,0X00,0X03,0X03,0X80,0X18,0X01,0XFC,0X70,0X00,0X3C,0X8F,0XE0,0X03,0X00
DT 0X1F,0XB0,0X00,0X03,0X0F,0X00,0X0C,0X02,0XFE,0X30,0X00,0X0D,0X3F,0X60,0X06,0X00
DT 0X1F,0X00,0X00,0X03,0X0F,0X00,0X04,0X05,0XEE,0X30,0X00,0X03,0XDF,0X20,0X0C,0X00
DT 0X1C,0X00,0X00,0X02,0X01,0X06,0X00,0X07,0XE3,0X30,0X01,0X00,0XDF,0XE0,0X0C,0X60
DT 0X10,0X1E,0X00,0X03,0X03,0X03,0X80,0X07,0XF1,0X30,0X00,0XE0,0X33,0XE0,0X0F,0XE0
DT 0X1F,0XEC,0X00,0X02,0X03,0X01,0XE0,0X09,0XF0,0X60,0X00,0X3C,0X8E,0X60,0X00,0X00
DT 0X1F,0X30,0X00,0X03,0X03,0X9D,0X30,0X13,0XFC,0X60,0X00,0X1F,0X3F,0XA0,0X00,0X00
DT 0X1F,0XC1,0X8C,0X02,0X81,0XF3,0X10,0X0F,0XF0,0XC0,0X03,0X87,0XC7,0XE0,0X03,0X80
DT 0X1A,0X06,0X30,0X03,0X03,0X80,0X08,0X13,0XE0,0XC0,0X00,0XE3,0XF1,0XE0,0X06,0XC0
DT 0X1C,0X1C,0X40,0X01,0X82,0X00,0X04,0X0F,0XE1,0X80,0X00,0X78,0XFE,0X60,0X0C,0X60
DT 0X13,0XF8,0X80,0X01,0X46,0X00,0X00,0X07,0XE3,0X00,0X00,0X3E,0X7F,0XE0,0X0C,0X60
DT 0X1F,0X63,0X00,0X01,0X8C,0X00,0X00,0X07,0XFE,0X00,0X00,0X0F,0X9F,0XE0,0X0D,0X60
DT 0X1F,0X8E,0X04,0X01,0X47,0XEE,0X00,0X07,0XFE,0X00,0X00,0X87,0XEF,0XE0,0X0D,0X60
DT 0X1E,0X3C,0X1C,0X00,0XA7,0XFF,0X8C,0X03,0XF8,0X00,0X00,0XC1,0XFF,0XE0,0X0C,0X60
DT 0X1F,0X78,0X38,0X00,0XC3,0X93,0X8E,0X07,0XF0,0X00,0X00,0X78,0X7F,0XE0,0X0C,0X60
DT 0X1F,0XF1,0X60,0X00,0XE3,0X80,0X06,0X07,0XF0,0X00,0X00,0X3A,0X1F,0XE0,0X06,0XC0
DT 0X1F,0XE1,0X40,0X00,0X13,0XC8,0X00,0X0B,0XF0,0X00,0X00,0X1E,0X13,0XE0,0X03,0X80
DT 0X17,0X8F,0X84,0X00,0X61,0XF8,0X00,0X17,0XF0,0X00,0X00,0X0F,0XB0,0XE0,0X00,0X00
DT 0X1F,0X1E,0X29,0X80,0X33,0X00,0X00,0X0F,0XFC,0X00,0X00,0X43,0XFD,0X60,0X00,0X00
DT 0X1E,0X7C,0X73,0X00,0X3A,0X10,0X00,0X0F,0XF4,0X00,0X00,0X21,0XFF,0XA0,0X03,0X80
DT 0X15,0XF8,0XE3,0X00,0X1E,0X18,0X00,0X1F,0XF6,0X00,0X00,0X18,0XFF,0XE0,0X06,0XC0
DT 0X1B,0XE1,0X86,0X00,0X1E,0X00,0X00,0X3F,0XE6,0X00,0X03,0X0E,0X7F,0XE0,0X0C,0X60
DT 0X1F,0XC7,0X8C,0X00,0X1E,0X00,0X00,0X7F,0XE7,0X00,0X03,0X85,0X1B,0XE0,0X0C,0X60
DT 0X1F,0X0F,0X39,0X20,0X07,0X00,0X01,0XFF,0XCF,0X00,0X01,0XC3,0XCD,0XE0,0X0D,0X60
DT 0X1E,0X3E,0X73,0X40,0X03,0X80,0X0F,0XFF,0X9F,0X80,0X00,0XF1,0XF0,0X60,0X0D,0X60
DT 0X18,0X7C,0XF6,0X20,0X01,0XE0,0X3F,0XFE,0X3F,0XE0,0X00,0X78,0XFE,0X60,0X0C,0X60
DT 0X11,0XFB,0XE6,0X40,0X01,0XFF,0XFF,0XFC,0X7F,0XFC,0X08,0X3C,0X7F,0XE0,0X0C,0X60
DT 0X1F,0XF7,0XFE,0X40,0X02,0XFF,0XFF,0XF9,0XFF,0XFF,0X00,0X0F,0X3F,0XE0,0X06,0XC0
DT 0X1F,0XFF,0XFC,0X88,0X06,0XFF,0XFD,0XF3,0XFF,0XFF,0XC1,0X8F,0X9F,0XE0,0X03,0X80
DT 0X1F,0XFF,0XB9,0X38,0X0E,0XFE,0X71,0XE7,0XFF,0XFF,0XE8,0XC3,0XEF,0XE0,0X00,0X00
DT 0X0F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X00,0X00
;***************************源程序结束************************
end
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』