您可以添加到网摘 让更多人关注此文章:
;************************************************************************************************* ;实验目的:熟悉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 ;延时一段时间(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'
;***************************源程序结束************************ END
|