ad转换的数据在lcd1602上呈现非线性,怎么让其呈线性?
while(1) //无限循环
{
ST=0; //使采集信号为低
ST=1; //开始数据转换
ST=0; //停止数据转换
while(~EOC); //等待数据转换完毕
OE=1; //允许数据输出信号
AD0809=P1; //读取数据
OE=0; //关闭数据输出允许信号
// if(AD0809>=251) //电压显示不能超过5V
// AD0809=250;
date=AD0809; //数码管显示的数据值,其中20为采集数据的毫安值
voldata = date*1.0/255*500;
LED1=1,LED2=1,LED3=1,LED4=1,LED5=1,X=1;
switch(voldata/100)
{
case 0: LED1=0,X=0; break;
case 1: LED2=0; break;
case 2: LED3=0; break;
case 3: LED4=0; break;
case 4: LED5=0,X=0; break;
}
// voldata=voldata*4*0.7;
dis4[3] = voldata%10;
dis4[2] = voldata/10%10;
dis4[1] = voldata/100%10;
dis4[0] = voldata/1000;
lcd_wcmd(0x06);//向右移动光标
lcd_pos(0x86);//设置显示位置为第一行的第1个字符
// lcd_wdat('0'+dis4[ 0 ]);
// lcd_pos(0x87);
// lcd_wdat('0'+dis4[ 1 ]);
// lcd_pos(0x88);
// lcd_wdat('0'+dis4[ 2 ]);
// lcd_pos(0x89);
// lcd_wdat('0'+dis4[ 3 ]);
// lcd_pos(0x8A);
// lcd_wdat('0'+dis4[ 4 ]);
for(i=0;i<4;i++)
{
lcd_wdat('0'+dis4[ i ]);
delay(10);//控制两字之间显示速度
}
lcd_pos(0x40);//设置显示位置为第二行第1个字符
i = 0;
while(dis3[ i ] != '\0')
{
lcd_wdat(dis3[ i ]);
i++;
delay(30);//控制两字之间显示速度
}
|