?? 標準數字表c程序.c
字號:
#include<reg52.h>
#include<math.h>
#include<absacc.h>
//使用共陽數碼管,ADC0809 0-5V量程
number[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //顯示數字0-9
number1[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};//顯示數字0-9和dp
sbit four=P2^0; //數碼管位控端接口
sbit three=P2^1;
sbit two=P2^2;
sbit one=P2^3;
sbit ST=P3^0; //ADC0809 Start(開始轉換模擬信號)控制端,下降沿有效
sbit OE=P3^1; //允許輸出(ADC0809向單片機傳送已轉換好的數字信號)
sbit EOC=P3^2; //ADC0832轉換結束(轉換開始為0,轉換結束為1)標志
unsigned int adcdata, adcdata3;
unsigned int i;
unsigned int adc0[8];
unsigned int k;
unsigned int avedata();
void show();
void delay_2ms();
void main()
{
P2=0xff; //初始化
P3=0xff;
OE=0;
ST=0;
ST=1;
while(1)
{
ST=0; //啟動ADC0809,ST下降沿有效
while(!EOC); //等待轉換結束
OE=1; //輸出使能
adcdata=avedata(); //取0809轉換后的平均數字量
show();
ST=1;
}
}
//----------------------------------
void show() //動態顯示
{
unsigned int adcdata1;
adcdata1=adcdata*19; //adcdata1=1000*(adcdata*5/255)(轉換數字量與模擬量的換算關系) ,adcdata1是轉換的實際電壓值擴大1000倍
four=0;
P1=number1[adcdata1/1000]; //點亮了dp
adcdata1%=1000;
delay_2ms();
four=1;
three=0;
P1=number[adcdata1/100];
adcdata1%=100;
delay_2ms();
three=1;
two=0;
P1=number[adcdata1/10];
delay_2ms();
two=1;
one=0 ;
P1=number[adcdata1%10];
delay_2ms();
one=1;
}
//------------------------------------------
void delay_2ms()
{ unsigned int i;
for(i=0;i<111;i++);
}
//------------------------------------------
unsigned int avedata() //求采樣平均,可多次采樣,注意系統處理數字上限65535
{
unsigned int i,j,max,min,sum=0,a,b,c,d,e,f,g,h;
for(i=0;i<8;i++) //采樣8次
{ k=P0; //采樣值賦值給k
for(j=0;j<20;j++); //緩沖,隔段采樣
a=(k&0x01)*128; //由于0809輸出端與單片機高低位接反(硬件),下列程序高低位調換
b=(k&0x02)*32;
c=(k&0x04)*8;
d=(k&0x08)*2;
e=(k&0x10)/2;
f=(k&0x20)/8;
g=(k&0x40)/32;
h=(k&0x80)/128;
adc0[i]=a+b+c+d+e+f+g+h;
//adc0[i]=(k&0x01)*128+(k&0x02)*32+(k&0x04)*8+(k&0x08)*2+(k&0x10)/2+(k&0x20)/8+(k&0x40)/32+(k&0x80)/128; //{ adc0[i]=P0; delay_2ms(); } ? //放數據
}
for(i=0;i<7;i++) //求數組中最大值
{
if(adc0[i+1]>adc0[i])
max=adc0[i+1];
else max=adc0[i];
}
for(j=0;j<7;j++) //求數組中最小值
{
if(adc0[j+1]>adc0[j])
min=adc0[j];
else min=adc0[j+1];
}
for(i=0;i<8;i++)
sum=sum+adc0[i]; //求和
adcdata3=(sum-max-min)/6; //求平均,丟掉最大和最小值
return(adcdata3) ;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -