标题: 无字库LCD12864的显示问题 [打印本页]

作者: Li.Chi    时间: 2020-5-5 22:02
标题: 无字库LCD12864的显示问题
如果接到单片机的IO口是按照 D7对应P0.7 D6-P0.6 按照这个顺序接到D0-P0.0 LCD12864就能正常显示
如果是 反过来的话 D7接到P0.0 D6-P0.1 一直接到D0-P0.7 那么就不能正常显示了



我想问下这个问题怎么解决,因为自己想做块板,自己焊,第一种接线能正常显示但是很乱,飞线太多了,第二种接法就好看多。
下面是程序,这也是参考网上的资料的。


先提前谢谢各位大佬帮忙解答问题


1正面.png (36.94 KB, 下载次数: 119)

1正面.png

作者: wc86110    时间: 2020-5-6 07:39
美不美观,关键是看各元器件如何布局排版
作者: 杨雪飞    时间: 2020-5-6 08:28
重新取模吧,重新取高位生成字模再试试
作者: 黄youhui    时间: 2020-5-6 08:31
并口的液晶屏,如果你将接口顺序反过来的话,指令和数据也要反过来,比如0x01 你要换成0x80,0x01其实就时D7-D0分别取值 0 0 0 0 0 0 0 1
作者: man1234567    时间: 2020-5-6 11:09
1、成品打板后并不存在所说的美观就是乱成一团放在盒子里也木有问题除非搭棚;
2、如果非得要这样“好看”,做个小程序将P0要口输出的数据(程例中Lcd_date镜像)从高到低转成从低到高再输出相当于反过来接。网上抄的程例加进去后只要改Lcd_date那句就可以。
unsigned char swap (unsigned char pData)
{
unsigned char value=0,tmp=0;
unsigned char ii,jj;
for (ii=0x80,jj=0;ii!=0;ii=ii>>1,jj++)
{
if (pData & ii) tmp=1;
else tmp =0;
value |= tmp << jj;
}
return value;
}

作者: Li.Chi    时间: 2020-5-6 13:02
man1234567 发表于 2020-5-6 11:09
1、成品打板后并不存在所说的美观就是乱成一团放在盒子里也木有问题除非搭棚;
2、如果非得要这样“好看” ...

想问下这个函数具体要怎么使用呢?请大佬指点一下
作者: man1234567    时间: 2020-5-7 09:41
Li.Chi 发表于 2020-5-6 13:02
想问下这个函数具体要怎么使用呢?请大佬指点一下

Lcd_date(swap(Chinese[flag++]));
俺能力有限还不清楚就没法帮了。
作者: hotpet    时间: 2020-5-7 10:31
无须更改线路或软件,将显示屏旋转180度即可。
作者: f556    时间: 2020-5-7 15:48
man1234567 回答的方法正确,重新取模不行,因为指令数还没有反转。
Lcd_com(0x3f); -----------全改成Lcd_com(swap(0x3f));也可以写入反转交换后的数,不用swap
Lcd_date( aa  )-------------全改成Lcd_date(swap(aa));也可以重新取模,高位在下改高位在上
作者: f556    时间: 2020-5-7 15:51
另外,赞同你对调,美观与方便焊接线第一,软件服从硬件。也可以说,硬件不足软件补。
作者: man1234567    时间: 2020-5-7 15:51
hotpet 发表于 2020-5-7 10:31
无须更改线路或软件,将显示屏旋转180度即可。

其实走到桌子对面更便捷
作者: hotpet    时间: 2020-5-7 22:35
man1234567 发表于 2020-5-7 15:51
其实走到桌子对面更便捷

将显示屏在线路板上的位置转180度,是可以减少飞线的,成品做好后是无所谓上下方向的。
作者: carpcarey    时间: 2020-5-8 12:35
uchar Swap_uchar(uchar data)
{
        uchar i=0;
        uchar result=0;
        for (i=0;i<8;i++)
        {
                result>>1;
                if (data&0x80)
                {
                        result|=0x80;
                }
                data<<1;
        }
        return result;
}

void Lcd_com_N(uchar data)
{
        Lcd_com(Swap_uchar(data));
}

//LCD初始化函数
void lcd_init()
{
        Lcd_com_N(0x3f); //LCD开显示
        Lcd_com_N(Oxc0); //LCD行初始地址,共64行
        Lcd_com_N(0xb8); //LCD页初始地址,共3页
        Lcd_com_N(0x40); //LCD列初始地址,共64列
        led_clear(0);        //清屏                                                                                     该函数led_clear内的 Lcd_com 改为 Lcd_com_N
}

//************** 中文显示 **************//
void zhongwen(uchar cslor2,uchar X,uchar Y,uint flag)
{
        int i;
        flag=flag*32;
        control(cslor2); // 选择屏幕显示                                                                                 该函数control内的 Lcd_com 改为 Lcd_com_N
        Lcd_com_N(0xb8+(X*2));//选择—个汉字的上部
        Lcd_com_N(0x40+(Y*16));
        for(i=0;i<16;i++)
        {
                Lcd_date(Chinese[flag++]) ;//先输入一个汉上面 16列                                        该函数Lcd_date内的 Lcd_com 改为 Lcd_com_N
        }
        Lcd_com_N(0xb8+(X*2)+1);//选择一个汉字的下部|
        Lcd_com_N(0x40+(Y*16));
        for(i=0;i<16;i++)
        {
                Lcd_date(Chinese[flag++]);//输入一个汉字的下部                                                该函数Lcd_date内的 Lcd_com 改为 Lcd_com_N
        }
}



作者: carpcarey    时间: 2020-5-8 12:39
uchar Swap_uchar(uchar data)
{
        uchar i=0;
        uchar result=0;
        for (i=0;i<8;i++)
        {
                result>>1;
                if (data&0x80)
                {
                        result|=0x80;
                }
                data<<1;
        }
        return result;
}

void Lcd_com_N(uchar data)
{
        Lcd_com(Swap_uchar(data));
}

//LCD初始化函数
void lcd_init()
{
        Lcd_com_N(0x3f); //LCD开显示
        Lcd_com_N(Oxc0); //LCD行初始地址,共64行
        Lcd_com_N(0xb8); //LCD页初始地址,共3页
        Lcd_com_N(0x40); //LCD列初始地址,共64列
        led_clear(0);        //清屏                                                                                                                                  该函数内的 Lcd_com 改为 Lcd_com_N
}

//************** 中文显示 **************//
void zhongwen(uchar cslor2,uchar X,uchar Y,uint flag)
{
        int i;
        flag=flag*32;
        control(cslor2); // 选择屏幕显示                                                                                 该函数control内的 Lcd_com 改为 Lcd_com_N
        Lcd_com_N(0xb8+(X*2));//选择—个汉字的上部
        Lcd_com_N(0x40+(Y*16));
        for(i=0;i<16;i++)
        {
                Lcd_date(Swap_uchar(Chinese[flag++])) ;//先输入一个汉上面 16列       
        }
        Lcd_com_N(0xb8+(X*2)+1);//选择一个汉字的下部|
        Lcd_com_N(0x40+(Y*16));
        for(i=0;i<16;i++)
        {
                Lcd_date(Swap_uchar(Chinese[flag++]));//输入一个汉字的下部                       
        }
}

作者: bobo233    时间: 2020-5-9 00:40
可能需要重新取模,或者在程序中改变一下,使其能够对应




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1