pic18控制1602液晶屏只显示一行黑格,急!
时间:10-02
整理:3721RD
点击:
求助各位大神,帮帮小弟!用的是pic18f452,KS0066U 普通的1602液晶屏
程序都是书上的例子,8位控制
D0-D7=PORTD0-PORTD7
RS=PORTA4
RW=PORTA5
E=PORTE0
不管怎么弄运行后都只显示一行黑格..
程序都是书上的例子,8位控制
D0-D7=PORTD0-PORTD7
RS=PORTA4
RW=PORTA5
E=PORTE0
不管怎么弄运行后都只显示一行黑格..
- /* PIC18F4520 LCD1602液晶驱动程序 滚屏显示 */
- #include<p18f452.h>
- #define uchar unsigned char
- #define uint unsigned int
- #define LCDRS PORTAbits.RA4
- #define LCDRW PORTAbits.RA5
- #define LCDEN PORTEbits.RE0
- const unsigned char table1[]="PIC18F4520+LCD1602 TEST PROGRAM";
- const unsigned char table2[]="QQ:710878209 TEL:13804638210";
- //定义显示字符串
- void delay(uint t); //延时函数声明
- void write_com(uchar com); //向1602液晶写命令函数声明
- void write_inf(uchar inf); //向1602液晶写数据函数声明
- void init_lcd(); //1602液晶初始化函数声明
- /**********主函数**********/
- void main()
- {
- uchar num; //定义循环变量NUM
- init_lcd(); //初始化1602液晶
- delay(5); //延时以等待液晶清屏指令完成
- for(num=0;num<31;num++)
- {
- write_inf(table1[num]); //在LCD第一行写入字符串
- delay(1);
- }
- for(num=0;num<31;num++)
- {
- write_com(0x80+0x40+num);//将地址设为LCD的第二行
- write_inf(table2[num]); //在LCD第二行写入字符串
- delay(1);
- }
- while(1)
- {
- write_com(0x18); //让屏幕循环左移
- delay(1000);
- }
- }
- /**********延时函数**********/
- void delay(uint t)
- {
- uint x,y;
- for(x=t;x>0;x--)
- for(y=100;y>0;y--);
- }
- /**********向1602液晶写命令函数**********/
- void write_com(uchar com)
- {
- LCDRW=0; //将R/W端清0表示写操作
- LCDRS=0; //将RS端清0表示写命令
- PORTD=com; //数据由PORTD端口送出
- delay(2); //延时
- LCDEN=1; //将E端置高
- delay(2); //延时
- LCDEN=0; //将E端置低产生下降沿,命令写入
- }
- /*********向1602液晶写数据函数***********/
- void write_inf(uchar inf)
- {
- LCDRW=0; //将R/W端清0表示写操作
- LCDRS=1; //将RS端置1表示写命令数据
- PORTD=inf; //命令由PORTD端口送出
- delay(2); //延时
- LCDEN=1; //将E端置高
- delay(2); //延时
- LCDEN=0; //将E端置低产生下降沿,数据写入
- }
- /**********初始化1602液晶**********/
- void init_lcd()
- {
- TRISD=0x00;
- TRISA4=0;
- TRISA5=0;
- TRISE0=0;
- LCDRW=0;
- LCDEN=0;
- LCDRS=0;
- write_com(0x38); //8位数据线格式,2行字符,5x7点阵
- write_com(0x0f); //显示功能开,有光标且光标闪烁
- write_com(0x06); //写入新数据后光标右移,显示屏不移动。
- write_com(0x01); //清屏
- }
- /**********结束**********/
这个我刚遇到了,把PORTAbits.RA4、PORTAbits.RA5、PORTEbits.RE0等变成LATAbits.LATA4、LATAbits.LATA5、LATEbits.LATE0。PORT只能读不能写、芯片手册上写的,好好看看
是只有上面一行是黑格么?如果是的话可能跟程序有关了,1602没有被正确初始化吧,如果正确初始化不给屏写命令1602应该什么都不现实,如果是两行全是黑格的话你先看看调节亮度的电位器哪里有没有问题
我刚刚遇到这个问题了,初始化函数函数里加上lcdRW=0就好了,在这里得到了启发,非常感谢!
小编问题解决了吗?想知道怎么解决的~
