找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1860|回复: 4
收起左侧

使用的是AMS1602A1显示屏,不能显示应有英文,只显示背景小黑方块,不是对比度问题

[复制链接]
回帖奖励 50 黑币 回复本帖可获得 50 黑币奖励! 每人限 1 次
ID:219729 发表于 2020-1-28 13:59 | 显示全部楼层 |阅读模式
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();
        }
}


9]$GY`D3WSZVBUI3LA%7URI.png
回复

使用道具 举报

ID:123289 发表于 2020-1-28 23:18 | 显示全部楼层
是不是背景问题,与程序无关,可以人工调节背景,以证明之。
回复

使用道具 举报

ID:219729 发表于 2020-1-29 07:08 | 显示全部楼层
yzwzfyz 发表于 2020-1-28 23:18
是不是背景问题,与程序无关,可以人工调节背景,以证明之。

对比度吗?老铁,对比度上我串了一个103电阻,可以自我调节,还是没有显示,会不会是我的显示程序那段有问题呢?帮忙看下可以吗?可是我又觉得写得也没毛病啊,很苦恼
回复

使用道具 举报

ID:219729 发表于 2020-1-31 21:46 | 显示全部楼层
我已搞定,谢谢各位大佬无需留言咧
回复

使用道具 举报

ID:882548 发表于 2021-2-22 09:46 | 显示全部楼层
怎么解决的?分享一下,谢谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表