1、P0之外的端口能连接LCD吗?比如,P2、P1能连LCD1602吗?
=> 可以.我们做的板子,P2连得LCD1602,并且顺序完全颠倒,我写的程序0k的.
P1口,网上有说成功的例子.
2、单片机板子布线,为了美观、方便,引脚顺序打乱。
=> 没事.我贴出来我的LCD1602.h部分测试程序,自己比较啦(区别部分已划底线)
测试条件:P0与LCD1602的顺序完全颠倒
A、正常1602驱动
#define Data P0//数据端口
/******************************************************************/
/* 写入命令函数 */
/******************************************************************/
void WriteCommand(unsigned char c)
{
DelayMs(5);
E=0;
RS=0;
RW=0;
_nop_();
E=1;
Data=c;
E=0;
}
/******************************************************************/
/* 写入数据函数 */
/******************************************************************/
void WriteData(unsigned char c)
{
DelayMs(5); //操作前短暂延时,保证信号稳定
E=0;
RS=1;
RW=0;
_nop_();
E=1;
Data=c;
E=0;
RS=0;
}
B1、颠倒的处理方法1(我们做的板子这样子处理的)
加入
uchar sortData(uchar dat)
{
uchar temp=0;
uchar i;
for (i=0; i<7; i++)
{
temp |= dat&0x01;
dat >>= 1;
temp<<= 1;
}
temp |= dat&0x01;
return temp;
}
使用
/******************************************************************/
/* 写入命令函数 */
/******************************************************************/
void WriteCommand(unsigned char c)
{
DelayMs(5);//操作前短暂延时,保证信号稳定
E=0;
RS=0;
RW=0;
_nop_();
E=1;
c = sortData(c);
Data=c;
E=0;
}
/******************************************************************/
/* 写入数据函数 */
/******************************************************************/
void WriteData(unsigned char c)
{
DelayMs(5); //操作前短暂延时,保证信号稳定
E=0;
RS=1;
RW=0;
_nop_();
E=1;
c =sortData(c);
Data=c;
E=0;
RS=0;
}
B2、颠倒的处理方法2
加入
void Data(uchar dat)
{
data0= dat&0x01;
data1= dat&0x02;
data2= dat&0x04;
data3= dat&0x08;
data4= dat&0x10;
data5= dat&0x20;
data6= dat&0x40;
data7= dat&0x80;
}// 这个函数,发送顺序估计有条件,按照LCD接收的从0~7或者P0发送的从0~7(估计是前者)
使用
/******************************************************************/
/* 写入命令函数 */
/******************************************************************/
void WriteCommand(unsigned char c)
{
DelayMs(5);//操作前短暂延时,保证信号稳定
E=0;
RS=0;
RW=0;
_nop_();
E=1;
Data(c); //注意:原来后面的Data=c;不再需要了
E=0;
}
/******************************************************************/
/* 写入数据函数 */
/******************************************************************/
void WriteData(unsigned char c)
{
DelayMs(5); //操作前短暂延时,保证信号稳定
E=0;
RS=1;
RW=0;
_nop_();
E=1;
Data(c); //注意:原来后面的Data=c;不再需要了
E=0;
RS=0;
}
阅读(652) | 评论(0) | 转发(0) |