找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3274|回复: 14
打印 上一主题 下一主题
收起左侧

无字库LCD12864的显示问题

[复制链接]
跳转到指定楼层
楼主
100黑币
如果接到单片机的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, 下载次数: 71)

1正面.png
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:96682 发表于 2020-5-6 07:39 来自手机 | 只看该作者
美不美观,关键是看各元器件如何布局排版
回复

使用道具 举报

板凳
ID:97554 发表于 2020-5-6 08:28 | 只看该作者
重新取模吧,重新取高位生成字模再试试
回复

使用道具 举报

地板
ID:592807 发表于 2020-5-6 08:31 | 只看该作者
并口的液晶屏,如果你将接口顺序反过来的话,指令和数据也要反过来,比如0x01 你要换成0x80,0x01其实就时D7-D0分别取值 0 0 0 0 0 0 0 1
回复

使用道具 举报

5#
ID:584814 发表于 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;
}
回复

使用道具 举报

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

想问下这个函数具体要怎么使用呢?请大佬指点一下
回复

使用道具 举报

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

Lcd_date(swap(Chinese[flag++]));
俺能力有限还不清楚就没法帮了。
回复

使用道具 举报

8#
ID:732506 发表于 2020-5-7 10:31 | 只看该作者
无须更改线路或软件,将显示屏旋转180度即可。
回复

使用道具 举报

9#
ID:282850 发表于 2020-5-7 15:48 | 只看该作者
man1234567 回答的方法正确,重新取模不行,因为指令数还没有反转。
Lcd_com(0x3f); -----------全改成Lcd_com(swap(0x3f));也可以写入反转交换后的数,不用swap
Lcd_date( aa  )-------------全改成Lcd_date(swap(aa));也可以重新取模,高位在下改高位在上
回复

使用道具 举报

10#
ID:282850 发表于 2020-5-7 15:51 | 只看该作者
另外,赞同你对调,美观与方便焊接线第一,软件服从硬件。也可以说,硬件不足软件补。
回复

使用道具 举报

11#
ID:584814 发表于 2020-5-7 15:51 | 只看该作者
hotpet 发表于 2020-5-7 10:31
无须更改线路或软件,将显示屏旋转180度即可。

其实走到桌子对面更便捷
回复

使用道具 举报

12#
ID:732506 发表于 2020-5-7 22:35 | 只看该作者
man1234567 发表于 2020-5-7 15:51
其实走到桌子对面更便捷

将显示屏在线路板上的位置转180度,是可以减少飞线的,成品做好后是无所谓上下方向的。
回复

使用道具 举报

13#
ID:267719 发表于 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
        }
}


回复

使用道具 举报

14#
ID:267719 发表于 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++]));//输入一个汉字的下部                       
        }
}
回复

使用道具 举报

15#
ID:440553 发表于 2020-5-9 00:40 | 只看该作者
可能需要重新取模,或者在程序中改变一下,使其能够对应
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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