51单片机学习29-ADC0804
ADC0804芯片 把模拟转换成数字量
芯片操作步骤:
// 1 步骤S0:CS=0、WR=0、RD=1(由CPLD发出信号要求ADC0804开始进 行模拟/数字信号的转换)。
// 2 步骤S1:CS=1、WR=1、RD=1(ADC0804进行转换动作,转换完毕后INTR 将高电位降至低电位,而转换时间>100us)。
// 3 步骤S2:CS=0、WR=1、RD=0(由CPLD发出信号以读取ADC0804的转 换资料)。
// 4 步骤S3:CS=1、WR=1、RD=1(由CPLD读取DB0~DB7上的数字转换资 料)。
仿真图:用的是我自己做的一个51单片机开发板 图纸比较大,截图可能看不清,需要的话可以私信联系我。
程序:
源代码:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit adcs=P3^5;
sbit adrd=P2^7;
sbit adwr=P3^3;
sbit P23=P2^3;
sbit dsrst=P3^6;
unsigned char code smg_du[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,
0x7c,0x39,0x5e,0x79,0x71,0x00};
unsigned char code smg_we[]={0x08,0x18,0x28,0x38,0x48,0x58,0x68,0x78};
uchar table1[3];
uchar advalue;
//************************************************
//延时函数,在12MHz 的晶振频率下
//大约50us 的延时
//************************************************
void delay_50us(uint t)
{ uchar j; for(;t>0;t--) for(j=19;j>0;j--); }
//************************************************
//延时函数,在12MHz 的晶振频率下//大约50ms 的延时
//************************************************
void delay_50ms(uint t)
{
uint j;
for(;t>0;t--)
for(j=6245;j>0;j--);
}
void main()
{
uchar j,k;
uchar i,l;
P23=1;
P1=0x00;
P23=1;
adcs=0;
while(1)
{
dsrst=0; //禁止实时时钟
P23=0; //禁止数码管
adcs=0; adwr=0; delay_50us(20); adwr=1; delay_50us(20); adrd=0; delay_50us(20); P1=0xff; // 释放P1
advalue=P1; //从P1 中读取数据
delay_50us(20); adrd=1; //禁止ADC 数据传输,防止影响数码管显示
adcs=1;
j=advalue/100; // 处理ADC 的数据,准备显示
k=advalue%100;
table1[2]=j;
j=k/10;
table1[1]=j;
j=k%10;
table1[0]=j;
P1=0; // 将P1 拉低准备显示
delay_50us(10);
P23=1;
for(l=0;l<20;l++) //在数码管上显示读取到的数据
{
for(i=0;i<3;i++)
{
P1=smg_du[table1[i]];
P2=smg_we[i];
delay_50us(100);
P1=0; //这句不加PROTUES显示不正常!!
}
P23=0;
}
}
}
仿真结果: 通过调节ADC0804外部接的滑动变阻器,不同的电压,数码显示不同的数值。
基于51单片机ADC0804亮度采集 功能描述: 1、adc0804采集亮度值
基于51单片机ADC0804亮度采集。
这是一个基于51单片机还有ADC0804的光敏采集系统。
·介绍一下硬件,这个是液晶显示器,用来显示当前的亮度以及设置的阈值。这个就是51单片机STC52,这个是ADC0804,这个就是蜂鸣器,这个就是光敏电阻,用它来采集环境的亮度。这两个是用来设置阈值,第一个是加,第二个是减。
·演示一下,当前的阈值默认是80,按第一个就是81,可以加按也可以减。当阈值低于当前的亮度就会报警,比如调到73,开始报警。报警的时候纸撕掉,噪音就比较大,可以把它盖上去。阈值超过当前的亮度阈值就报警,就会停止。
·光敏电阻,比如用手把它遮住,现在的亮度就只有11%,拿开就是75。比如用手电筒照一下,达到96%开始报警。
相关问答
adc 0804 和adc0808区别?一、adc0804和adc0809区别adc0809是八个单端输入,参考电压:5V,即Vref=5V。adc0804是一个差分输入,参考电压:2.5V,即Vref=2.5V。其它参数一样。ADC...