微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 用的是STC89C51,编程就不知道该怎么写了函数了

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

时间:10-02 整理:3721RD 点击:
第一次用LCD1602,画PCB时,为了焊接接线方便,就把LCD的D0-D7口分别接到了P2.7-P2.0,我用的是STC89C51,接线的时候也没想太多,觉得这个软件肯定是能改的,现在编程就不知道该怎么写了函数了,希望高手能帮助解决这个问题。

将write_data和write_com函数里面改一下就行了,调用我上面的那个函数将P2=date;改为P2=upset(date);同理P2=upset(com);
我上面那个函数就是将高低位对调。例如date二进制为1110 0001,那么调用那个函数后得到的结果为1000 0111。

以前我也这样做过,你写一个函数将要输出的字节高低位对调就行了。
这是我在网上找的函数,方法很简单,但是程序有点难读,你慢慢琢磨吧。

  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. }

复制代码



这个简单,用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);
}

经过菜鸟的努力还是改不成功,求大神帮我把上面程序改一下,让菜鸟学习学习。

谢谢哈,谢谢哈 。我弄好了

弄好了就行…………

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

网站地图

Top