打印

求指导2个问题,1个单片机发数据,1个LCD显示

[复制链接]
620|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zack_ying|  楼主 | 2015-6-10 21:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1、我设置了个数组,进行模数转换的时候往里面写数据,按键用中断服务程序是通过串口往PC发送数据,现在的问题是:经常字符串还没完全写入那个数组,我就按发送按钮把数据发了出去,求指导程序应该怎么改
2、LCD显示:我是用sprintf把double数据保留小数点后3位写入数组中,以字符串方式在LCD显示,现在问题是经常上次显示的数字有6位,下组数据只有4位,上组数据的值还在显示屏上,怎么让后半部分的数字没有,只显示小数点后3位。程序如下!急!!!!
void main()
{                 
           uchar i=0;
        LCD1602();
    InitLcd();                                                //初始化LCD
        InitUart();                     //初始化串口
    InitADC();                      //初始化ADC
        INT_CLKO |= 0x10;
        EA = 1;
        display_text(1,1,dis1);
        Delayms(200);
        display_text(2,1,dis2);


    while (1)
    {
                ShowResult(0);              //显示通道0
                Delayms(50);
    }
}

/************字符串发送*****table是存数据的数组,定义方式uchar table[5]***********/
void exint2() interrupt 10
{
        Delayms(5);
        if(0 == P36)
        {
                display_text(2,1,dis3);
                SendString(table);
                while(0 == P36);
        }
}
void SendData(uchar dat)
{
    while (!TI);                    //等待前一个数据发送完成
    TI = 0;                         //清除发送标志
    SBUF = dat;                     //发送当前数据
}

void SendString(uchar *s)
{
        while(*s)
        {
                SendData(*s++);
        }
}

/*****************LCD显示部分************/
void LcdBusy()
{
        P0 =0xff;
        RS = 0;
        RW = 1;
        EN = 1;
        while(P0&0x80);
        EN = 0;       
}

void LCD1602()
{
        EN =0;
        RS =1;
        RW = 1;
        P0 = 0xff;
}
void InitLcd()                                 //LCD初始化
{
        Delayms(1);
        write(0x38,0);  //8位数据显示16X2,5X7点阵
        Delayms(1);
        write(0x38,0);  //开显示,关光标
        write(0x08,0);                  //移动光标
        write(0x01,0);          //清屏
        write(0x06,0);
        write(0x0c,0);

}

void write(uchar i,bit j)

{
        LcdBusy();
       
        RS = j;
        RW = 0;
        EN = 0;
        P0 = i;
        Delayus(1);
        EN = 1;
        Delayus(1);
        EN = 0;
}

void display_byte(uchar y,uchar x, uchar z)
{
        if(y==2)
        {
                x += 0x40;
        }
        x += 0x80;
        write(x,0);
        Delayms(5);
        write(z,1);
}

void display_text(uchar y, uchar x, uchar table[])
{
        uchar z=0;
        uchar t;
        t = strlen(table)+x;
        while(x<t)
        {
                 display_byte(y,x,table[z]);
                x++;
                z++;
        }
}

相关帖子

沙发
dirtwillfly| | 2015-6-10 22:30 | 只看该作者
现有的这些代码楼主弄懂都是什么意思了吗?

使用特权

评论回复
板凳
zack_ying|  楼主 | 2015-6-10 23:05 | 只看该作者
dirtwillfly 发表于 2015-6-10 22:30
现有的这些代码楼主弄懂都是什么意思了吗?

我懂啊,就是不晓得在哪更改,让我现在出现的两个问题完善

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

12

帖子

0

粉丝