PIC单片机驱动ST1620-1字符型液晶显示模块的测试_第1页
PIC单片机驱动ST1620-1字符型液晶显示模块的测试_第2页
PIC单片机驱动ST1620-1字符型液晶显示模块的测试_第3页
PIC单片机驱动ST1620-1字符型液晶显示模块的测试_第4页
PIC单片机驱动ST1620-1字符型液晶显示模块的测试_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、;*LCD模块测试程序* ;编程:刘钢 ;日期:2005/1/21 ;*器件说明* ;用PIC16F877A驱动LCD模块 ;LCD模块,型号:ST1620-1 ;LCD模块初始化,由厂家提供的资料显示,其初始化过程为: ;1-延时15ms ;2-写指令38H(写入之前不用检测Busy信号 ;3-延时5ms ;4-再次写入38H指令(写入之前不用检测Busy信号,至于为什么要重复写入现在不清楚,而且下面还要写一次. ;5-延时5ms ;4-再次写入38H指令(写入之前不用检测Busy信号 ;5-检测Busy信号; ;6-写指令38H,此条指令是将LCD显示模块设置为8位数据线,双行,5X7点阵

2、显示 ;7-检测Busy信号; ;8-写指令08H,关闭显示 ;9-检测Busy信号; ;10-写指令01H,显示清屏 ;以后写入光标等的控制指令. ;* LIST P=PIC16F877A ;告诉汇编器所要汇编的器件型号 INCLUDE "P16F877.INC" ;汇编程序的头文件 ;设置单片机的特殊存储器位,使用HS(高速晶振,打开上电延时复位功能, ;关闭看门狗,关闭低电压编程功能. _CONFIG _HS_OSC &_PWRTE_ON&_WDT_OFF&_LVP_OFF ;注意:在CONFIG前面一定要加上两条下画线,否则汇编时会出错! ;

3、* LCD_RS EQU 02H LCD_RW EQU 01H LCD_E EQU 00H COUNT1 EQU 020H COUNT2 EQU 021H COUNT3 EQU 022H COUNT4 EQU 023H DATA_TEMP EQU 041H DATADO EQU 042H ;* ORG 0000H ;上电复位初始地址 GOTO MAIN ;* ORG 0010H ;主程序起始地址 MAIN ;初始化端口 BANKSEL ADCON1 ;选择体1 BCF INTCON,GIE ;关闭中断 MOVLW 07H MOVWF ADCON1 ;上电时有A/D转换功能的端子全部被设为了A状

4、态, MOVLW 0XFF MOVWF TRISA ;暂时将A口设为输入 CLRF TRISB ;设B口为输出 CLRF TRISC ;设C口为输出 CLRF TRISE ;设E口为普通I/O口,RE0-RE2为输出口 MOVLW 0XFF MOVWF TRISD ;暂时将D口设为输入 BANKSEL PORTC ;选择体0 ;初始化LCD模块* CALL DELAYTIME10 ;LCD上电延时15秒钟,使LCD上建立工作所需电压. CALL DELAYTIME10 MOVLW 038H ;写入38H指令,本来在此不用检测Busy信号(在COMAND_WR子程序 CALL COMAND_WR

5、 ;中包含有检测Busy信号的子程序,但此处不想单独编写命令写 ;入程序,所以全部用同一个命令写入子程序. CALL DELAYTIME5 MOVLW 038H ;再次写 入38H指令(写入之前不用检测Busy信号,至于为什么要 CALL COMAND_WR ;重复写入现在不清楚,而且下面还要写一次. CALL DELAYTIME5 MOVLW 038H CALL COMAND_WR CALL DELAYTIME5 MOVLW 038H CALL COMAND_WR MOVLW 08H ;并闭LCD模块的显示. CALL COMAND_WR MOVLW 01H ;清LCD模块显示. CALL

6、COMAND_WR MOVLW 06H ;将模块设为向显示数据存贮器写入一个数据后,地址或光标加 CALL COMAND_WR ;1,即后写入的字符处于显示屏的右边. ;以下为LCD显示测试程序* ;为了使程序具有通用性,所以将命令字的写入,数据的写入与读出程序都做成了子程序. MOVLW 0CH ;开LCD模块的显示 CALL COMAND_WR LCD_DISPLAY MOVLW 080H ;设置第一行字符从第一位开始显示.由于已经将指针 CALL COMAND_WR ;设为了每向显示存贮器写入一个数据指针加1,所以越 ;后写入的数据会越靠近右边.另外,由于在LCD模块的 ;初始化时已经写

7、入了清显示命令,光标及显示存贮器 ;的地址指针已回到了00H,所以在此处不写入此段命令 ;也可以. CALL LCD_DISPLAY1 ;显示第一行字符 MOVLW 0C0H ;设置第二行字符从第一位开始显示. CALL COMAND_WR CALL LCD_DISPLAY2 DISPLAY_LOOP CALL SWAP ;读出LCD显示数据存贮器中的字符数据并移位. CALL DELAYTIME250 ;延时. MOVLW 0C0H ;写入显示数据存贮器的首地址. CALL COMAND_WR MOVLW 030H ;数据表指针. MOVWF FSR WR_LOOP MOVF INDF,W

8、;将数据表中的数据写入到LCD模块显示数据存贮器中. CALL DATA_WR INCF FSR MOVF FSR,W SUBLW 040H ;是否已经将16个字符数据全部写入到LCD模块中. BTFSS STATUS,Z GOTO WR_LOOP ;没有写完则返回继续写入. GOTO DISPLAY_LOOP ;*以下为各子程序* ;移位子程序 ;程序功能:使字符向左流动并循环显示.在本程序中,只是第二行的字符会流动显示,第一行字符固定显示. ;移位原理:将LCD模块的显示存贮器内的40H4FH(对应第二行显示存贮器的第1字符到第16字符数据读出, ; 依次放置于地址为30H3FH的数据寄存

9、器器中,然后将其整体向下 移一位.以达到字符流动显示的 ; 效果,并将40H中的数据取出放入30H中,以达到循环的效果. SWAP MOVLW 030H ;设置数据表(30H40H寄存器指针起始值 MOVWF FSR ;数据表指针. MOVLW 0C0H ;设置想要读出的LCD模块的显示存贮器的起始地址,此处的C0H对 ;应LCD模块第二行的第1个字符 CALL COMAND_WR READ CALL DATA_RD ;调数据读出子程序从LCD模块的显示存贮器中读出数据,每读一次 ;LCD显示存贮器的地址指针会自动加1,不用人工干预. MOVF DATA_TEMP,W ;将子程序读出的数据存于

10、W中. MOVWF INDF ;用间接寻址指令将读出的数据存入以FSR为指针的寄存器中. INCF FSR ;将指针加1,指向下一个寄存器. MOVF FSR,W ;检查指针数值是否达到40H,如果达到40H表明已经读出了16个数据 SUBLW 040H ;将指针数据与40H相减. BTFSS STATUS,Z ;如果为零则状态寄存器的Z位置1. GOTO READ ;如果不为零则表示还没有读出16个数据,转回再继续读出. MOVLW 03FH MOVWF FSR ;设置寄存器指针,这次的指针用于移位. RD_LOOP MOVF INDF,W ;将指针所指的寄存器中的数据取出. INCF FS

11、R ;将指针加1. MOVWF INDF ;将先前从寄存器中取出的数据写入到下一个寄存器中(因为指针被加1. DECF FSR ;将指针减1,消去刚才加上的1. DECF FSR ;将指针减1,指向上一个寄存器. MOVF FSR,W SUBLW 02FH ;判断移位16个数据 BTFSS STATUS,Z GOTO RD_LOOP ;如果移位没有完成则继续移位. MOVF 040H,W ;将40H中的数据(实际是移位前3FH中的数据放入30H中,以达到循环的效果. MOVWF 030H RETURN ;显示子程序* LCD_DISPLAY1 ;LCD模块第一行字符显示子程序,显示"

12、*LS Liengsing*" ;由于每向LCD模块的显示存贮器中写入一个字符模块的显示存贮器地址指针就加1,不用人工干预. MOVLW '*' CALL DATA_WR MOVLW '*' CALL DATA_WR MOVLW 'L' CALL DATA_WR MOVLW 'S' CALL DATA_WR MOVLW ' ' CALL DATA_WR MOVLW ' ' CALL DATA_WR MOVLW 'E' CALL DATA_WR MOVLW 'n

13、9; CALL DATA_WR MOVLW 'g' CALL DATA_WR MOVLW 'i' CALL DATA_WR MOVLW 'n' CALL DATA_ WR MOVLW 'e' CALL DATA_WR MOVLW 'e' CALL DATA_WR MOVLW 'r' CALL DATA_WR MOVLW '*' CALL DATA_WR MOVLW '*' CALL DATA_WR RETURN LCD_DISPLAY2 ;LCD模块第二行字符显示子程

14、序,显示"*Liu Gang*" MOVLW '*' CALL DATA_WR MOVLW '*' CALL DATA_WR MOVLW '*' CALL DATA_WR MOVLW '*' CALL DATA_WR MOVLW 'L' CALL DATA_WR MOVLW 'i' CALL DATA_WR MOVLW 'u' CALL DATA_WR MOVLW ' ' CALL DATA_WR MOVLW 'G' CALL DA

15、TA_WR MOVLW 'a' CALL DATA_WR MOVLW 'n' CALL DATA_WR MOVLW 'g' CALL DATA_WR MOVLW '*' CALL DATA_WR MOVLW '*' CALL DATA_WR MOVLW '*' CALL DATA_WR MOVLW '*' CALL DATA_WR RETURN INCLUDE "TS1620SUBPRG_A8.ASM" ; 以下为延时子程序 * DELAYTIME5 MOVLW

16、D'51 MOVWF COUNT2 LOOP01 MOVLW D'255 MOVWF COUNT3 LOOP02 DECFSZ COUNT3 GOTO LOOP02 DECFSZ COUNT2 GOTO LOOP01 RETURN ;* DELAYTIME10 MOVLW D'101 MOVWF COUNT2 LOOP11 MOVLW D'255 MOVWF COUNT3 LOOP12 DECFSZ COUNT3 GOTO LOOP12 DECFSZ COUNT2 GOTO LOOP11 RETURN ;* DELAYTIME500 MOVLW D'20 MOVWF COUNT4 LOOP21 MOVLW D'255 MOVWF COUNT3 LOOP22 MOVLW D'255 MOVWF COUNT2 LOOP23 DECFSZ COUNT2 GOTO LOOP23 DECFSZ COUN

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论