用的是STC89C51,编程就不知道该怎么写了函数了
将write_data和write_com函数里面改一下就行了,调用我上面的那个函数将P2=date;改为P2=upset(date);同理P2=upset(com);
我上面那个函数就是将高低位对调。例如date二进制为1110 0001,那么调用那个函数后得到的结果为1000 0111。
以前我也这样做过,你写一个函数将要输出的字节高低位对调就行了。
这是我在网上找的函数,方法很简单,但是程序有点难读,你慢慢琢磨吧。
- unsigned char upset(unsigned char dat) //用12345678代表dat的各个位
- {
- dat=(dat<<4)|(dat>>4); //dat变成56781234
- dat=((dat<<2)&0xcc)|((dat>>2)&0x33); //dat=78563412
- dat=((dat<<1)&0xaa)|((dat>>1)&0x55); //dat=87654321
- return dat;
- }
这个简单,用BDATA就可以很好的解决
看不懂啊!下面是我写的程序怎么改呢?
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[]="Hello everyone!";
uchar code table1[]="Welcome to here!";
sbit lcden=P0^2;
sbit lcdrs=P0^0;
uchar num;
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
{
lcdrs=0;
P2=com;
delay(5);
lcden=1;
delay(5);
lcden=0;//完成一个高脉冲
}
void write_data(uchar date) //写数据
{
lcdrs=1;
P2=date;//数据付给P2口
delay(5);
lcden=1;
delay(5);
lcden=0;
void init()
//----------初始化函数。
{
lcden=0;
write_com(0x38);//显示设置指令(初始化0x38)
write_com(0x0f);//不显示光标
write_com(0x06);//写一个字符后指针与地址加一
//write_com(0x01);//显示清零,数据和指针清零
}
void main()
{
init();
write_com(0x80+0x18);
for(num=0;num<15;num++)
{
write_data(table[num]);
delay(5);
}
write_com(0x80+0x58);
for(num=0;num<16;num++)
{
write_data(table1[num]);
delay(5);
}
for(num=0;num<16;num++)
{
write_com(0x18);
delay(20);
}
while(1);
}
经过菜鸟的努力还是改不成功,求大神帮我把上面程序改一下,让菜鸟学习学习。
谢谢哈,谢谢哈 。我弄好了
弄好了就行…………