本帖最后由 yanxuerui 于 2011-5-4 14:28 编辑
need you now!
在写LCD显示程序遇到的问题:
下面是程序部分代码:
#define uchar unsigned char
#define uint unsigned int
#define lcdport P1
#define LCDSTARTROW 0xC0 //设置起始行指令
#define LCDPAGE 0xB8 //设置页指令
#define LCDLINE 0x40 //设置列指令
sbit BUSYSTATUS=P1^7;
sbit RST=P2^0;
sbit E=P2^1;
sbit RW=P2^2;
sbit DI=P2^3;
sbit CS2=P2^4;
sbit CS1=P2^5;
void delay_1(uint r)
{
uint s;
while(r--)
{
for(s=110;s>0;s--);
}
}
uchar checkbusy()
{
lcdport=0xff;
RW=1;
DI=0;
E=1;
E=0;
return BUSYSTATUS;
}
void WriteCMD(uchar uCMD)
{
while(checkbusy());
lcdport=0xff;
RW=0;
DI=0;
lcdport=uCMD;
E=1;
E=0;
}
void WriteData(uchar uDAT)
{
while(checkbusy());
lcdport=0xff;
RW=0;
DI=1;
lcdport=uDAT;
E=1;
E=0;
}
void LCD_Init()
{
RST=0;
delay_1(10);
RST=1;
E=1;
CS1=1;
CS2=1;
WriteCMD(0x38); //显示方式
WriteCMD(0x3f); //开显示
WriteCMD(0x01); //清屏
WriteCMD(LCDSTARTROW);
}
void SetStartLine(uchar urow) //设置显示起始行
{
WriteCMD(LCDSTARTROW+urow);
}
void SetPage(uchar upage)
{
WriteCMD(LCDPAGE+upage);
}
void SetColumn(uchar ucusor)
{
WriteCMD(LCDLINE+ucusor);
}
void Dsp(uchar p[16],uchar q)
{
uchar count,b[16];
if(q==1)
{
CS1=1;
CS2=0;
for(count=0;count<16;count++)
{
b[count]=*(p+count);
WriteData(b[count]);
}
}
else
{
CS1=0;
CS2=1;
for(count=0;count<16;count++)
{
b[count]=*(p+count);
WriteData(b[count]);
}
}
}
void delay(uchar w)
{
uint y;
while(w--)
{
for(y=125;y>0;y--);
}
}
void main()
{
LCD_Init();
while(1)
{
uchar i;
for(i=0;i<4;i++)
{
SetPage(0); //设置从第0页显示
SetColumn(i<<4); //显示一次,显示列位置向右移动16个单元
Dsp(QING_SHU_1,1); //输入“你好! 请”上半部分 通过CS1,CS2控制
SetPage(1);
SetColumn(i<<4);
Dsp(QING_SHU_2,1); //输入“你好! 请”下半部分 通过CS1,CS2控制
delay(200);
}
for(i=0;i<4;i++)
{
SetPage(0);
SetColumn(i<<4);
Dsp(QING_SHU_1[i+4],2); //输入“输入密码”下半部分 通过CS1,CS2控制
SetPage(1);
SetColumn(i<<4);
Dsp(QING_SHU_2[i+4],2); //输入“输入密码”下半部分 通过CS1,CS2控制
delay(200);
}
for(i=0;i<4;i++)
{
SetPage(6);
SetColumn(i<<4);
Dsp(QING_CHU_1,1); //显示“‘C’清除“的上半部分
SetPage(7);
SetColumn(i<<4);
Dsp(QING_CHU_2,1); //显示“‘C’清除“的下半部分
delay(200);
}
for(i=0;i<4;i++)
{
SetPage(6);
SetColumn(i<<4);
Dsp(QING_CHU_1[i+4],2); //显示”‘=’确认“的上半部分
SetPage(7);
SetColumn(i<<4);
Dsp(QING_CHU_2[i+4],2); //显示”‘=’确认“的下半部分
delay(200);
}
仿真调试时,只显示上面一行“您好! 请输入密码”或者只显示下面一行“‘C’清除=’确认”没问题,但同时显示时,LCD屏上“您好! 请输入密码”这一行的第一个字“您”的上半部分跟“‘C”上半部分替换了,其他的都显示正常,查看LCD的RAM中显示“您”上半部分和“‘C”上半部分的十六进制码替换了。
请问这是什么原因?LCD选用的是LGM12641BS1R。
非常感谢你的帮助!
具体效果请看图片!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>