⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcd.asm

📁 关于库的资料保证详尽
💻 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 + -