我要发布
仪器网/ 仪器社区/ 液晶/ 单片机控制1601液晶屏只显示8个字符!?

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

邱佩妍    2016-10-22    液晶    浏览 464 次

我使用的是1601液晶屏,但是屏幕上只有8个字符能正常显示,如果把对比度调高也只能看见8个字符块,另外8个一直都没亮!请求大侠帮忙!在线等1601LCD只有一行16个字符无初始话情况下就... 我使用的是1601液晶屏,但是屏幕上只有8个字符能正常显示,如果把对比度调高也只能看见8个字符块,另外8个一直都没亮!
请求大侠帮忙!在线等
1601LCD 只有一行 16个字符 无初始话情况下就不对,考虑会不会是外部电路的问题??

精彩问答
甜蜜Love戀 发布日期:2016-10-23
你仿照这个程序改改你的显示

#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]);
}

}
}
最新主题
相关版块
我要评论
X您尚未登录
账号登录
X您尚未登录
手机动态密码登录
X您尚未登录
扫码登录

当前页面为旧版页面,诚邀您切换到新版页面。| 感受更多精心打造的新增功能、更加流畅的操作体验。

官方微信

仪器网微信服务号

扫码获取最新信息


仪器网官方订阅号

扫码获取最新信息

在线客服

咨询客服

在线客服
工作日:  9:00-18:00
联系客服 企业专属客服
电话客服:  400-822-6768
工作日:  9:00-18:00
订阅商机

仪采招微信公众号

采购信息一键获取海量商机轻松掌控