当前位置:文档之家› 基于51单片机的高速数据采集系统

基于51单片机的高速数据采集系统

图6.1 程序流程图6.2 源程序
/*ADC0809.C*/
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
//定义数码管位码端口
sbit P2_0=P2^0;
sbit P2_1=P2^1;
sbit P2_2=P2^2;
sbit P2_3=P2^3;
//定义ADC0808端口
sbit OE=P3^0;
sbit EOC=P3^1;
sbit ST=P3^2;
sbit P3_4=P3^4;
sbit P3_5=P3^5;
sbit P3_6=P3^6;
//带小数点的0-5的段码
uchar leddata_dot[]={0x40,0x79,0x24,0x30,0x19,0x12};
uchar
leddata[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};//共阳极0-9段码
//uchar
leddata[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//共阴极0-9
//延时子程序
void delay(uchar n)
{
uchar i,j;
for(i=0;i<n;i++)
for(j=0;j<125;j++);
}
//将A/D转换输出的数据转换成相应的电压值并且显示出来
void convert(uchar volt_data)
{
uchar temp,tmp;
P0=leddata_dot[volt_data/51]; //个位;模拟量/5=数字量/255。

P2_0=1;
delay(3);
P2_0=0;
P0=(leddata[(volt_data%51)*10/51]);//小数点后第一位P2_1=1;
delay(3);
P2_1=0;
temp=(((volt_data%51)*10)/51)*10%51;
tmp=temp;
P0=(leddata[temp*10/51]);//小数点后第二位P2_2=1;
delay(3);
P2_2=0;
tmp=temp*10%51;
P0=(leddata[tmp*10/51+5]); //小数点后第三位
P2_3=1;
delay(3);
P2_3=0;
}
void main()
{
uchar volt_data;
P3_4=1;
P3_5=1;
P3_6=0;
while(1)
{
ST=0;
_nop_();
ST=1;
_nop_();
ST=0; //启动AD转换
if(EOC==0)
delay(100); //等待转换结束
OE=1; //允许输出
volt_data=P1; //暂存转换结果
OE=0; //关闭输出
convert(volt_data); //调用数据处理子程序}
}。

相关主题