元器件
元器件 | 名称 |
---|---|
排阻 | RESPACK-8 |
51单片机 | AT89C51 |
数码管 | 7SEG-MPX4-CA-BLUE |
ADC芯片 | ADC0808 |
滑动变阻器 | POT-HG |
原理图部分
ADC0808引脚作用
项目 | Value |
---|---|
ADDA-C | 选择IN通道 |
IN0-7 | 模拟量输入 |
VREF+ | ADC参考电压 |
VREF- | ADC参考地 |
CLOCK | 时钟 |
VREF+ | ADC参考电压 |
OUT1-8 | 数字信号输出 |
START | 起始信号 |
OE | 输出使能 |
EOC | 结束信号 |
ADC0808初始化函数
根据时序图,首先是START信号,由低变高再变低,然后看EOC信号,由高到低,然后再到高时,OUTPUT ENABLE(OE)信号变高,然后读取输出信号,然后输出OUTPUT ENABLE(OE)变低关闭输出。
u8 ADC_Init(void)
{
u8 ad_result=0;
//首先是START信号,由低变高再变低
START=0;
START=1;
START=0;
//然后看EOC信号,由高到低
while(EOC==0);
//OUTPUT ENABLE(OE)信号变高,然后读取输出信号
OE=1;
ad_result=P1;
OE=0;
return ad_result;
}
代码
main.c
代码如下:文章来源:https://www.toymoban.com/news/detail-505955.html
#include <reg51.h>//头文件
#define u8 unsigned char //宏定义
#define u16 unsigned int
sbit START=P2^5;
sbit EOC=P2^6;
sbit OE=P2^7;
void SMG_output(void);
void delay_ms(u16 ms);
u8 ADC_Init(void);
u8 tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xbf}; //数码管码值
u8 SMG[8]={10,10,10,10,10,10,10,10};//存储数码管要显示的码
u8 ad=0;
void main(void)
{
while(1)
{
ad=ADC_Init();
SMG[0]=10;
SMG[1]=ad/100;
SMG[2]=ad%100/10;
SMG[3]=ad%10;
SMG_output();//数码管显示
}
}
u8 ADC_Init(void)
{
u8 ad_result=0;
START=0;
START=1;
START=0;
while(EOC==0);
OE=1;
ad_result=P1;
OE=0;
return ad_result;
}
//数码管显示函数
void SMG_output(void)
{
u8 i; //定义数码管控制位
for(i=0;i<=4;i++) //八次循环
{
P2=1<<i; //第一次选第一根数码管,第二次第二根。。。。 1 0000 0001 0000 0010
P0=tab[SMG[i]];//显示数码管数组对应的值 p0=tab[smg[0]]=tab[2]=2
delay_ms(1); //延时1ms == 显示1ms
}
P2=0xff; //数码管消隐
P0=0xff; //数码管消隐
}
//延时函数
void delay_ms(u16 ms)
{
u16 i,j;
for(i=0;i<ms;i++)
for(j=71;j>0;j--);
}
工程文件
工程文件文章来源地址https://www.toymoban.com/news/detail-505955.html
到了这里,关于Proteus8仿真:51单片机A/D转换(ADC0808)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!