使用的是AMS1602A1显示屏,不能显示应有英文,只显示背景小黑方块,不是对比度问题,1602液晶
**************************************/
sbit RS = P2^5;
sbit RW = P2^6;
sbit E = P2^7;
/**************************************
短延时
**************************************/
void delay5ms()
{
uchar i,v,k;
for(i=1;i>0;i–)
for(v=168;v>0;v–)
for(k=22;k>0;k–);
}
/**************************************
写指令
**************************************/
void lcd_Write_com(uchar com)
{
RS=0; //定义指令寄存器
RW=0; //写允许
P0=com; //写指令
delay5ms(); E=1; //片选端上拉
delay5ms(); E=0; //下降沿锁存
}
/**************************************
写数据
**************************************/
void lcd_write_date(uchar date)
{
RS=1; //定义数据寄存器
RW=0; //写允许
P0=date; //写数据
delay5ms(); E=1; //片选端上拉
delay5ms(); E=0; //下降沿锁存
}
/**************************************
显示程序
**************************************/
void dis_lcd1602(uchar x,uchar y,uchar dat)
{
uchar add;
if(y==1) add=(0x80+x);
if(y==2) add=(0xc0+x);
lcd_Write_com(add); //写指令
lcd_write_date(dat); //写数据
}
/**************************************
液晶初始化
**************************************/
void lcd1602_init()
{
lcd_Write_com(0x38); //设置8位格式,2行,5*7
lcd_Write_com(0x01); //清屏
lcd_Write_com(0x0c); //整体显示,关光标,不闪烁
lcd_Write_com(0x06); //设定输入方式,增量不移位
lcd_Write_com(0x80); //初始坐标
}
/**************************************
液晶显示汉字程序
**************************************/
void hz_lcdDis(uchar x,uchar y,uchar *p) //汉字显示
{
uchar i=0,temp;
if(x)temp = 0x40; else temp = 0;
for(i=y;*p!=’\0′;i++,p++)
{
lcd_Write_com(i|0x80+temp);
lcd_write_date(*p);
delay5ms();
}
}
/**************************************
液晶显示数字程序
**************************************/
void num_lcdDis(uchar X,uchar Y,uint num,uchar n)
{
uint i=0,temp,hang;
n +=1;
if(X)hang = 0x40;else hang = 0;
for(i=(n-1);i>0;i–)
{
lcd_Write_com((i+Y-1)|0x80+hang); //从个位开始显示
temp = num%10+0x30;
lcd_write_date(temp);
delay5ms();
num/=10;
}
}
函数说明: 主函数
**********************************************************/
void main(void)
{
uint U1,U2,I1,S;
SD_1=0;
lcd1602_init();
hz_lcdDis(0,4,”Welcome!”);
init_pwm();
InitADC();
delay(250);
// delay(250);
EA=1;//开总中断
lcd_Write_com(0x01); //清屏
// SD_1=1;
hz_lcdDis(0,0,”IN= . V S= . A”);
hz_lcdDis(1,0,”OU= . V I= . A”);
while(1)//主循环
{
U1=Filter(Boost_voltage)/92; //输入电压 1:10采样电阻 93,
U2=Filter(Battery_voltage)/92; //输出电压 1:10采样电阻 93
I1=Filter(O_current)/150; //输出电流
// if(I1>1) I1=I1-1;//输出电流显示校准
if(U2>242)
{SD_1=0; lock=1; CCAP1L =CCAP1H =128; hz_lcdDis(0,8,”P”); }
num_lcdDis(0,3,U1/10,2);
num_lcdDis(0,6,U1%10,1);
num_lcdDis(1,3,U2/10,2);
num_lcdDis(1,6,U2%10,1);
S=OUT_Current/3;
num_lcdDis(0,11,S/100,1);
num_lcdDis(0,13,S%100,2);
num_lcdDis(1,11,I1/100,1);
num_lcdDis(1,13,I1%100,2);
// if((u2-u1)<40) hz_lcdDis(0,10,”Error!”);
// else hz_lcdDis(0,10,”OK “);
key_scan();
}
}
,是不是背景问题,与程序无关,可以人工调节背景,以证明之。,
yzwzfyz 发表于 2020-1-28 23:18
是不是背景问题,与程序无关,可以人工调节背景,以证明之。
对比度吗?老铁,对比度上我串了一个103电阻,可以自我调节,还是没有显示,会不会是我的显示程序那段有问题呢?帮忙看下可以吗?可是我又觉得写得也没毛病啊,很苦恼,我已搞定,谢谢各位大佬无需留言咧,怎么解决的?分享一下,谢谢