📄 lcd.asm
字号:
;/**************************************************************************
;* *
;* Copyright (c) 2006 by JINRUN Technology Co., Ltd. *
;* Title : FPPA TM demo board---PIC PARTY
;* Content: AD,LCM Drive,Key input,LED flash,etc.,
;* MCU : PIC16F877A(PIC),PDK80C08(PDK)[FPPA TM]
;* LCD : RT1602C
;* OSC : 8MHz(ext. HT)
;* WDT : OFF
;* Author : Raker.Yang *
;* FPPA TM 简介:FPPA TM是世界首创的多核心单晶片,所有RAM和ROM却能够共享
;* 目前支持8个核心(8路独立PC,STACK,ACC等)
;* 既然有了独立多核心,跑多任务程序也就更简单了。
;* 更重要的是,它可以非常方便的扩展MCU外围,如,PWM,IIC,UART等。
;* 如果你对FPPA TM技术感兴趣,欢迎访问笔者博客 http://gongkong.gkbk.com
;* 或加入作者QQ:595142970, QQ群25644462
;* 同时欢迎各路商家前来进行方案合作!
;*
;* 声明:本资料仅供个人学习PIC或FPPA TM软件设计参考,任何人都可以转载此资料。
;* 但任何单位或个人都不能将此资料作为商业用品。本资料可能存在一些缺陷,
;* 如果你将本资料用于产品,所引起的一切后果,均由使用者承担
;* *
;**************************************************************************/
;用PIC16F877A驱动LCD模块
;LCD模块,型号:RT1602C
;**********************************************************
;************************************************************
;命令字,数据写入子程序**************
DATA_WR:
MOVWF LCD_DATA_PORT
NOP
NOP
BSF LCD_RS
GOTO WR_COM
COMAND_WR:
MOVWF LCD_DATA_PORT ;将要写入的命令数据送B端口.
NOP
NOP
BCF LCD_RS ;置命令字操作.
WR_COM:
NOP
NOP
BCF LCD_RW ;置写入操作
NOP
NOP
BCF LCD_EN
NOP
NOP
CALL BUSYCHECK ;在每次写入完后检查LCD模块的Busy信号,此信号置1表示还不能进行下一次写入
BSF LCD_EN
RETURN
;----------------------------------------------------
;----------LCD DISP DATA READ------------------------
; Name :DATA_RD
; Input :void
; Output :TEMP3
; TEMP REG :TEMP3(DATA OUT)
; Function :Read LCD Display data
;----------------------------------------------
DATA_RD
BANKSEL LCD_PORT_IO ;选择体1
MOVLW 0FFH
MOVWF LCD_PORT_IO ;将B口方向设为输入方式
BCF STATUS,RP0 ;回到体0
BSF LCD_RS ;置数据操作.
BSF LCD_RW ;置读出操作.
BSF LCD_EN ;从LCD模块的显示存贮器中读出数据.
NOP
NOP
NOP
NOP
NOP
BCF LCD_EN
NOP
NOP
NOP
MOVF LCD_DATA_PORT,W
MOVWF TEMP3 ;将读出的数据保存.
CALL BUSYCHECK ;在每次读出完后检查LCD模块的Busy信号,此信号置1表示还不能进行下一次写入
RETURN
;----------LCD DISP DATA READ END--------------------
;
;----------Busy Check subroutine---------------------
; Name :BUSYCHECK
; Input :void
; Output :void
; Temp REG :void
; Function :delay and check busy
;----------------------------------------------
BUSYCHECK
BANKSEL LCD_PORT_IO ;选择体1
MOVLW 0FFH
MOVWF LCD_PORT_IO ;将B口方向设为输入方式
BCF STATUS,RP0 ;回到体0
BCF LCD_RS ;置命令字操作.
NOP
NOP
BSF LCD_RW ;置读出操作.
NOP
NOP
BCF LCD_EN
NOP
NOP
BSF LCD_EN
BTFSC LCD_DATA_PORT, 7
GOTO BUSYCHECK
BCF LCD_RW ;将RW控制线恢复成写状态.
BANKSEL LCD_PORT_IO ;选择体1
CLRF LCD_PORT_IO ;将B口恢复为输出状态.
BCF STATUS,RP0 ;返回到体0
RETURN
;--------------busy check subroutine end-----------------------------
; ------------delay time subroutine----------------------------------
; Name :DELAYTIME
; Input :W: W = .30,5ms; W = .60 ,10ms.
; Output :Delay time
; Temp reg :TEMP0,TEMP1,TEMP2
; Function :Delay time 5ms 1 + ((3*TEMP1-1)+1+2+1+1)*W - 1 + 2
; =(3*TEMP1+4)*W(TEMP0) + 2
DELAYTIME
MOVWF TEMP0
LOOP01
MOVLW D'110'
;109
MOVWF TEMP1
LOOP02
DECFSZ TEMP1
GOTO LOOP02
DECFSZ TEMP0
GOTO LOOP01
RETURN
;------------delay time subroutine end-----------------------------
;
;--------LCD INITIALIZTION---------------------
LCD_INIT:
MOVLW 01H ;将模块设为向显示数据存贮器写入一个数据后,地址或光标加
CALL COMAND_WR ;1,即后写入的字符处于显示屏的右边.
MOVLW 38H ;写入38H指令,本来在此不用检测Busy信号(在COMAND_WR子程序
CALL COMAND_WR ;中包含有检测Busy信号的子程序),但此处不想单独编写命令写
;入程序,所以全部用同一个命令写入子程序.
MOVLW 0x0F
CALL COMAND_WR
MOVLW 0x06
CALL COMAND_WR
MOVLW 0xC0
CALL COMAND_WR
return
;--------LCD INITIALIZTION END--------------------
;
;-------LCD CLEAR---------------------------------
LCD_CLR: ;MICRO IS THE BEST
MOVLW 0x01
CALL COMAND_WR
return
;-------LCD CLEAR END-----------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -