用的是STC89C51,编程就不知道该怎么写了函数了

2019-07-15 19:40发布

第一次用LCD1602,画PCB时,为了焊接接线方便,就把LCD的D0-D7口分别接到了P2.7-P2.0,我用的是STC89C51,接线的时候也没想太多,觉得这个软件肯定是能改的,现在编程就不知道该怎么写了函数了,希望高手能帮助解决这个问题。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
7条回答
依然落叶飘零
1楼-- · 2019-07-15 20:53
 精彩回答 2  元偷偷看……
依然落叶飘零
2楼-- · 2019-07-15 21:19
以前我也这样做过,你写一个函数将要输出的字节高低位对调就行了。
这是我在网上找的函数,方法很简单,但是程序有点难读,你慢慢琢磨吧。
  1. unsigned char upset(unsigned char dat)              //用12345678代表dat的各个位
  2. {        
  3.         dat=(dat<<4)|(dat>>4);                            //dat变成56781234
  4.         dat=((dat<<2)&0xcc)|((dat>>2)&0x33);   //dat=78563412
  5.         dat=((dat<<1)&0xaa)|((dat>>1)&0x55);   //dat=87654321
  6.         return dat;
  7. }
复制代码


gullong
3楼-- · 2019-07-16 01:31
这个简单,用BDATA就可以很好的解决
123安全卫士
4楼-- · 2019-07-16 02:34
依然落叶飘零 发表于 2014-5-18 02:07
以前我也这样做过,你写一个函数将要输出的字节高低位对调就行了。
这是我在网上找的函数,方法很简单,但 ...

看不懂啊!下面是我写的程序怎么改呢?
#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);
}

123安全卫士
5楼-- · 2019-07-16 07:57
依然落叶飘零 发表于 2014-5-18 12:50
将write_data和write_com函数里面改一下就行了,调用我上面的那个函数将P2=date;改为P2=upset(date);同理 ...

经过菜鸟的努力还是改不成功,求大神帮我把上面程序改一下,让菜鸟学习学习。
123安全卫士
6楼-- · 2019-07-16 10:55
 精彩回答 2  元偷偷看……

一周热门 更多>