微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 12864液晶乱连线,想在编程中解决,但是一直弄不对,求大神解答

12864液晶乱连线,想在编程中解决,但是一直弄不对,求大神解答

时间:10-02 整理:3721RD 点击:
由于布局问题,RW2.7,RE2.6,DB0-DB5 接的P2.5-2.0 DB6接P4.4 DB7接P4.2,因此需要将数据进行拼接。
unsigned char bdata Ports;
sbit Pt00 = Ports^0;
……
sbit Pt07 = Ports^7;
若想传0xff到液晶则
Ports = 0xff;
DB0 = Pt00;
……
DB7 = Pt07;
若想读液晶数据(判断液晶是否忙)
Pt00 = DB0;
……
Pt07 = DB7;
while((Ports&0x80)==1);
其中
sbit DB0 = P2^5;
……
sbit DB5 = P2^0;
sbit DB6 = P4^4;
sbit DB7 = P4^2;
程序哪里出错了 跪求大神解答啊 困扰一个星期了 无助啊

你用的是并口的?

嗯 使用的并口。上面的程序是别人给的思路写的 我自己能理解他的意思,但是怎么也弄不对,可不可以帮我看看哪里写的不对啊?谢谢啦

将单片机与液晶接口的引脚都设为双向方式,读忙时只需要读第七位就可以了,如果要读液晶的所有八位数据,就每次读一个位,然后进行移位操作,这样读完所有位的数据

读数据全删了行不行····主要写数据也没做到 我那样写是不行的 但又不知道哦啊哪里错了····

顶一下哦,看看,

谢谢~~~搜了问了好多,这个方法好好像是最佳的 不要翻转比特位 但是我就是搞不通 才疏学浅 见笑了~

你是用C写吗,C好像没有单独的位对位操作吧,读入需要把位转换为字节,再字节进行移位和或操作,组合成完整的字节,输出需要根据位的值设置相应引脚的值

那是你自己的问题哦,

嗯嗯 用C写的 哎 硬件那边改不了 只能从编程方面试试 而且应该是可以的。但我就是没弄好····输入输出现在貌似都有问题······

先解决一方面的问题,输出比较好处理,先解决输出的问题,然后再考虑输入的情况。

老哥这句话没毛病,这是我自己的问题,不是其他回帖人的问题。

液晶的输出有人说不用管 说液晶就是个输入数据然后显示的。输入时用过两种数据拼接方法 一种是比特位翻转+移位+拼接 还有一个就是这个,理想中只用个拼接就行了····这个思路有没有问题呢?

顶你,兄弟 ,加油,

必须的~~~

大力支持兄弟们的努力

如果你的液晶能点亮,正确显示,那可以不管输出部分,上面贴的程序好像是位对位的直接赋值,但C好像不支持单独的位对位操作,所以应该只有移位+拼接的方法了

//比特位翻转、移位
unsigned char reverse(register unsigned char comx)
{
        comx=((comx&0x01)<<7)|((comx&0x02)<<5)|((comx&0x04)<<3)|((comx&0x08)<<1)|
        ((comx&0x10)>>1)|((comx&0x20)>>3)|((comx&0x40)>>5)|((comx&0x80)>>7);
        comx=comx>>2;
        return comx;
}//翻转比特位 并右移两位 空出高2位 以便后面数据拼接
        temp=0xc0&P2;/暂存P2高2位状态
        if(date&0x02)DB6=1;
                        else DB6=0;//给P4.4 即DB6赋值
        if(date&0x01)DB7=1;
                        else DB7=0;//给P4.2 即DB7赋值
        v=reverse(date);//比特位翻转+移位
        P2=temp|(0X3F&v);//拼接好数据 整体传P2口

只是第一种方法。也没调通 是不是我自己编写的reverse有问题?第一次编写这种功能函数(估计不是叫这个名···)

顶顶贴 问题还没解决

你可以根据C语言的计算规则算一算你的算法最后得出什么结果

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top