|
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);//控制兩字之間顯示速度
}
|
|