仪器社区

单片机控制1601液晶屏只显示8个字符!?

邱佩妍 2016-10-22
我使用的是1601液晶屏,但是屏幕上只有8个字符能正常显示,如果把对比度调高也只能看见8个字符块,另外8个一直都没亮!请求大侠帮忙!在线等1601LCD只有一行16个字符无初始话情况下就... 我使用的是1601液晶屏,但是屏幕上只有8个字符能正常显示,如果把对比度调高也只能看见8个字符块,另外8个一直都没亮! 请求大侠帮忙!在线等 1601LCD 只有一行 16个字符 无初始话情况下就不对,考虑会不会是外部电路的问题??
评论
全部评论
甜蜜Love戀
你仿照这个程序改改你的显示

#include
#include
#include
#include

#define uchar unsigned char
#define uint unsigned int

#define LCD_DATA P0

sbit lcd_flag=P0^7;
sbit LCD_RS=P3^0;
sbit LCD_RW=P3^1;
sbit LCD_E=P3^3;
sbit p32=P3^2;

sbit ST=P2^3;
sbit OE=P2^4;
sbit EOC=P2^5;

static long int counter;
static long float f;
float Vbuf=0,xy,tmp,flag=0;

void lcd_delay(int ms) //延时函数
{
uchar i;
while(ms--)
{
for(i=0;i<250;i++)
{
_nop_();_nop_();_nop_();_nop_();
}
}
}

bit lcd_busy() //判断是否忙碌 RS=Low,RW=High,E=High:读状态
{
bit flag;
LCD_RS=0; //寄存器为Low
LCD_RW=1; //是否读写为High
LCD_E=1; //使能端为High
if (lcd_flag==1) flag=1;
else flag=0;
LCD_E=0;
return flag; //返回标志,判断是否LCD忙碌
}

write_command(uchar command) //写指令时序
{ while(lcd_busy());
LCD_RS=0;
LCD_RW=0;
LCD_E=0;
LCD_DATA=command;
//delay_1ms(5);
LCD_E=1;

LCD_E=0;
}

write_data(uchar da) //写数据时序
{ while(lcd_busy());
LCD_RS=1;
LCD_RW=0;
LCD_E=0;
// delay_1ms(5);
LCD_DATA=da;
LCD_E=1;

LCD_E=0;
}

void LCD_INIT(void)
{ write_command(0x38); lcd_delay(1); //LCD为2行,5×7字
write_command(0x0c); lcd_delay(1); //打开显示,显示光标,光标不闪
write_command(0x06); lcd_delay(1); //每次右移一字符
}

void main()
{
uchar i,j,n;
uchar buff[16],buf[16];

LCD_INIT();
P2 &=0xf8;

while(1)
{
flag++;
if(flag >= 10)
{
ST = 0;
OE = 0;
ST = 1;
ST = 0;
if(EOC == 1)
{
OE = 1;
xy = P1;
OE =0;
if(xy > tmp)
{
tmp = xy;
Vbuf = xy*1.0/50;

}
}
}
if(flag < 10)
{
TMOD=0X09;
TH0=0;
TL0=0;
while(p32==1);
TR0=1;
while(p32==0);
while(p32==1);
TR0=0;
}
counter=TH0*256+TL0;
while(counter<=500) /*判断是否分频及计算分频次数*/
{
P2++;
i++;
counter=counter*10;
if(i==2)
{
P2 &= 0xf8;
break;
}
}
f=(1843200.0/(2*counter))*pow(10,i);

sprintf(buf," V=%4.2fv",Vbuf);
//if(f<1500) f = f / 1.3123;
if(f<1000)
{
sprintf(buff,"f=%4.2fHZ",f);
}
else if(f<1000000)
{
f=f/1000;
sprintf(buff,"f=%4.2fkHZ",f);
}

write_command(0x80);

for( j=0;j<16&&buf[j] != '\0';j++)

{
write_data(buf[j]) ;
}

write_command(0xc0);
for(n=0;n<16&&buff[n]!='\0';n++)
{
write_data(buff[n]);
}

}
}
14 0 2016-10-23 0条评论 回复
您可能感兴趣的社区主题
加载中...
发布 评论