标题:
单片机驱动lcd12864乱码
[打印本页]
作者:
shenqiwei
时间:
2020-9-12 17:08
标题:
单片机驱动lcd12864乱码
视频:
1.rar
(1.15 MB, 下载次数: 7)
2020-9-12 17:07 上传
点击文件名下载附件
12864乱码现象
#include<reg51.h>
#include<intrins.h>
#include<stdlib.h>
#define uchar unsigned char
#define uint unsigned int
#define LCD_data P0 //数据口
#define ushort unsigned short int
ushort b;
/*******引脚定义*******/
sbit LCD_RS=P3^5;
sbit LCD_RW=P3^6;
sbit LCD_EN=P3^4;
sbit LCD_PSB=P3^7;
sbit wela=P2^6;
sbit dula=P2^7;
uchar code dis1[]={"abcdefg"};
uchar code dis2[]={"您好"};
uchar code dis3[]={"欢迎光临"};
uchar code dis4[]={"www.baidu.com"};
uchar code dis5[]={"数值:"};
uchar dis6[5]={"L 000"};
uchar dis7[5]={"R 000"};
uchar code dis8[]={""};
/*******延时函数*******/
void delay_1ms(uint x)
{
uint i,j;
for(j=0;j<x;j++)
for(i=0;i<110;i++);
}
void quzhi()
{
uint f=dis6[5],g=dis7[5];
for(f=0;f<5;f++)
for(g=0;g<5;g++);
}
/*******写指令*******/
void write_cmd(uchar cmd)
{
LCD_RS=0;
LCD_RW=0;
LCD_EN=0;
P0=cmd;
delay_1ms(5);
LCD_EN=1;
delay_1ms(5);
LCD_EN=0;
}
/*******显示数据*******/
void write_dat(uchar dat)
{
LCD_RS=1;
LCD_RW=0;
LCD_EN=0;
P0=dat;
delay_1ms(5);
LCD_EN=1;
delay_1ms(5);
LCD_EN=0;
}
/*******设定初始显示位置*******/
void lcd_pos(uchar x,uchar y)
{
uchar pos;
if(x==0)
x=0x82;
else if(x==1)
x=0x91;
else if(x==2)
x=0x8A;
else if(x==3)
x=0x98;
pos=x+y;
write_cmd(pos);
}
void lcd_pos2(uchar x,uchar y)
{
uchar pos2;
if(x==0)
x=0x80;
else if(x==1)
x=0x93;
else if(x==2)
x=0x8B;
else if(x==3)
x=0x98;
pos2=x+y;
write_cmd(pos2);
}
/*******LCD初始化程序*******/
void lcd_init()
{
LCD_PSB=1; //并口方式
write_cmd(0x30);
delay_1ms(5);
write_cmd(0x0c); //显示开,关光标
delay_1ms(5);
write_cmd(0x01); //清除LCD的显示内容
delay_1ms(5);
}
/*******LCD数据显示位置*******/
void shuju()
{
uchar i;
lcd_pos(0,0); //第一行
while(dis1[i]!='\0')
{
write_dat(dis1[i]);
i++;
}
lcd_pos(1,0); //第二行
i=0;
while(dis2[i]!='\0')
{
write_dat(dis2[i]);
i++;
}
lcd_pos(2,0); //第三行
i=0;
while(dis3[i]!='\0')
{
write_dat(dis3[i]);
i++;
}
lcd_pos(3,0); //第四行
i=0;
while(dis4[i]!='\0')
{
write_dat(dis4[i]);
i++;
}
delay_1ms(2000);
write_cmd(0x01);
lcd_pos2(0,0); //第一行
i=0;
while(dis5[i]!='\0')
{
write_dat(dis5[i]);
i++;
}
lcd_pos2(1,0); //第二行
i=0;
while(dis6[i]!='\0')
{
write_dat(dis6[i]);
i++;
}
lcd_pos2(2,0); //第三行
i=0;
while(dis7[i]!='\0')
{
write_dat(dis7[i]);
i++;
}
lcd_pos2(3,0); //第四行
i=0;
while(dis8[i]!='\0')
{
write_dat(dis8[i]);
i++;
}
}
/*******主程序*******/
void main()
{
uchar i;
wela=0;
dula=0;
TMOD=0x01;
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
EA=1;
ET0=1;
TR0=1;
delay_1ms(10);
lcd_init();
shuju();
quzhi();
while(1)
{
lcd_pos2(2,0); //第三行
i=0;
while(dis7[i]!='\0')
{
write_dat(dis7[i]);
i++;
}
lcd_pos2(1,0); //第二行
i=0;
while(dis6[i]!='\0')
{
write_dat(dis6[i]);
i++;
}
}
}
void T0_time() interrupt 1
{
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
b++;
dis7[2]='0'+b;
if (b>9)
{
b=0;
}
dis7[3]='0'+b;
if (b>99)
{
b=0;
}
dis7[4]='0'+b;
if (b>999)
{
b=0;
}
dis6[2]='0'+b;
if (b>9)
{
b=0;
}
dis6[3]='0'+b;
if (b>9)
{
b=0;
}
dis6[4]='0'+b;
if (b>9)
{
b=0;
}
}
复制代码
作者:
man1234567
时间:
2020-9-15 09:33
排除硬件肯定是程序问题。帖多少代码都不表示可以通吃任何12864的屏。
作者:
cdlongbo
时间:
2020-9-16 10:38
调试点阵,先不要显示文字等信息,先用全黑测试一下,全黑没有问题了在测试显示
作者:
cdlongbo
时间:
2020-9-16 10:39
全黑不能显示,那么重点检查驱动与液晶屏初始化参数
作者:
shenqiwei
时间:
2021-12-16 01:07
我试过了,也调试了,没有起到什么用
作者:
15996822510
时间:
2021-12-17 14:12
搞点图片吧,不然还得下载你的rar,多麻烦
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1