📄 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 + -