微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 基于C51单片机的1602显示变量,求指教!

基于C51单片机的1602显示变量,求指教!

时间:10-02 整理:3721RD 点击:
下面是我写的一串代码,实现了1602的正常显示
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit rs=P2^5;
sbit rw=P2^6;
sbit e=P2^7;
uchar sz1[]="     a      !";
uchar sz2[]="--------56----  ";
void delay_50us(uint t)
{
     uchar j;
    for(;t>0;t--)
    for(j=19;j>0;j--);
}
void delay_50ms(uint t)
{
uint j;
for(;t>0;t--)
for(j=6245;j>0;j--);
}
void write_com(uchar com)
{
e=0;
rs=0;
rw=0;
P0=com;
delay_50us(100);
e=1;
delay_50us(100);
e=0;
}
void write_data(uchar dat)
{
e=0;
rs=1;
rw=0;
P0=dat;
delay_50us(100);
e=1;
delay_50us(100);
e=0;
}
void init(void)
{
delay_50us(300);
write_com(0x38);
delay_50us(100);
write_com(0x38);
delay_50us(100);
write_com(0x38);
write_com(0x38);
write_com(0x08);
write_com(0x01);
write_com(0x06);
write_com(0x0c);
}
void main()
{
    uchar k;
init ();
write_com(0x81);
for(k=0;k<16;k++)
{
  write_data(sz1[k]);
  delay_50us;
}
write_com(0x80 + 0x40);
  for(k=0;k<16;k++)
{
  write_data(sz2[k]);
  delay_50us;
}
while(1);
}
但是想让1602显示一个变量,想实现传感器传回来的任意值都能显示出来,但是想了很久都没找到办法,还请大神指教

还请各位大神指教,新手才开始学

小编和我遇到同样的问题  我也同求!

刚刚找到了一个办法,即是将采集到的数据利用拆分法,将数据拆成一位一位的并将其转化为ASCII,然后再将这些数据存入数组中
正在修改中
...

你是指个位十位百位一个个显示么? 刚才好像也有看到  就是有点迷糊。咱俩再研究研究。

嗯嗯 就是应该这是一个解决办法 还得看传回来的数据类型

我做的是通过AD转换成十进制数。貌似可以直接显示  但是这步骤还是。  

先定义一个数组,然后将拆分的数据赋值给这个数组,输出就应该可以了,不过我对这个步骤也还在尝试中

我以前也是用比较笨的方法,后来1602液晶接受的其实是字符串,使用C的sprintf函数可以方便地把变量转成字符串,当然对于初学者来说好像很少接触这些函数,先用sprintf把变量转成字符串,再把指针传到函数;
这是我当时用的函数/***************在制定位置显示一个字符***************************************************/

/*******************显示字符串*********************************************************/
void Disp_1602(unsigned char x,unsigned char y,char *p)//unsigned char count)
{
unsigned char i=0;       
while(*p)
{
if(i==0){WriteOrder(0x80+x);}
if(i==16){WriteOrder(0xC0+y);}  //发送显示地址
WriteData(*p);     //发送要显示的字符编码
i++;
p++;
}
//少于32个自动补空格
/*
unsigned char i;   
    for(i=0;i<count;i++)
    {
        if (0 == y) x |= 0x80;   //当要显示第一行时地址码+0x80;
        else x |= 0xC0;    //在第二行显示是地址码+0xC0;
        WriteOrder(x);    //发送地址码
        WriteData(*p);     //发送要显示的字符编码
        x++;
        p++;
    }   
        */     
}      

多谢指教

懂了么?            

我现在才开始学习单片机,感觉难度有点大!
现在只会一点流水灯,数码管动态扫描等等!

对于这个函数,当时我们C语言老师有讲过,呵呵 看看就恍然醒悟

慢慢来满,我也是最近才开始学51的

我以前做过温度显示,定义个数组变量,然后用拆分的形式将接收到的数据显示出来

嗯嗯 谢谢啦,问题已经解决了

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

网站地图

Top