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++;
}
} |