附件里有做好源码和仿真
单片机程序:
//功能:晶振11.0592M,通过采集模拟信号,让数码管显示当前电压//作者: 康晓龙
//单位: 单片机协会
//版本号:1.0
#include<reg51.h>
sbit duancun= P2^1 ; //控制锁存器段选
sbit weicun= P2^2; //控制锁存器位选
sbit OE = P1^0; //输出使能,OE=0高阻,OE=1 ADC转换结果输出到单片机
sbit ST = P1^2; //启动信号,上升沿复位清零ADC,下降沿启动转换,低电平保持转换
sbit ALE = P1^1;
sbit OEC = P1^3;
sbit p07 = P0^7;
#define uint unsigned int
#define uchar unsigned char
void delay(uint x)
{
while(x--);
}
/**********************************
函数名:xianshi()
变量:i
功能:处理 i的数据 ,让i能够显示到数码管上
***********************************/
void xianshi(uint i)
{ unsigned char code duan[]={0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,0x80,0x90};
unsigned char code led[]={0x00,0x01,0x02,0x04,
0x08,0x10,0x20,0x40,0x80};
delay(50);
duancun=1;
P0=duan[i%10];
duancun=0;
weicun=1;
P0=led[8];
weicun=0;
P0=0xff;
delay(50);
duancun=1;
P0=duan[i/10%10];
duancun=0;
weicun=1;
P0=led[7];
weicun=0;
P0=0xff;
delay(50);
duancun=1;
P0=duan[i/100%10]&0x7f;
duancun=0;
weicun=1;
P0=led[6];
weicun=0;
P0=0xff;
}
void main()
{ float qq=1.962;
while(1)
{
ALE =1;
ST =1;
delay(5);
ALE = 0;
ST = 0;
delay(5);
ALE = 1;
ST = 1;/*启动A/D转换,上升沿复位清零ADC,下降沿启动转换,低电平保持转换*/
delay(50);
OE = 0; //输出使能,OE=1高阻,OE=0 ADC转换结果允许输出到单片机
xianshi((P3*qq)); //因为P3的数据最大只有255,电压最大是5V,所以乘0.962就约等于500
OE = 1; //输出使能,OE=0高阻
}
}
全部资料51hei下载地址(Proteus8.8版本打开):
AD转换2.0.zip
(85.06 KB, 下载次数: 32)
|