【STC51系列文章】
STC51-01-开发软件安装与使用
STC51-02-开发版介绍与LED流水灯系列
STC51-03-独立按键系列
STC51-04-数码管系列
STC51-05-矩阵按键系列
STC51-06-中断和定时器系列
STC51-07-DAC转换输出三角波
STC51-08-温度传感器
STC51-09-DS1302时钟
STC51-10-ADC0808与DAC0808的应用
STC51-11-LCD12864相关应用
STC51-12-代码网盘链接
文章目录
一、ADC0808调温报警器
1. 简单介绍
ADC0808 是一款 8 位模数转换器(Analog-to-Digital Converter,简称 ADC),由National Semiconductor(现在是 TI,Texas Instruments)生产。该芯片是一种单通道、逐次逼近型 ADC,用于将模拟信号转换为相应的 8 位数字信号。以下是 ADC0808 的一些基本特性:
- 位数: 8 位
- 通道数: 单通道
- 转换方式: 逐次逼近型(Successive Approximation Type)
- 输入范围: 0 到 5V
- 输入电流: 1 μA
- 转换时间: 大约 100 μs(微秒)
- 数据输出: 二进制编码
- 供电电压: 5V(通常)
ADC0808主要用于将模拟传感器输出的电压信号(0-5V)转换为数字信号,以便微控制器或数字系统进行控制。其工作原理是通过逐次逼近法,逐渐逼近输入模拟信号的值,直至找到相应的数字编码。
2. 电路连接图
3. 源代码
#include <reg51.h>
sbit h_alm=P3^0;
sbit l_alm=P3^1;
sbit sound=P3^7;
sbit CLOCK=P2^4;
sbit START=P2^5; //START为0时开始转换
sbit ECO=P2^6; //为1 时表明数据转换完成
sbit OE=P2^7; //为1时读可以取数据
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //代表显示0-9
unsigned char adc;
void delay() //延时
{
unsigned char i,j;
for(i=0;i<100;i++)
for(j=0;j<15;j++);
}
void main()
{
TMOD=0x12; //方式2即常数自动装入八位定时或计数器,受外部引脚控制
TH0=245;
TL0=0;
TH1=(65536-1000)/256;
TL1=(65536-1000)%256; //给定时器赋初值
IE=0x8a; //允许定时器0和定时器1外部中段
TR0=1; //定时器0开始计数
while(1)
{
h_alm=1; //灯灭
l_alm=1; //灯灭
START=0;
START=1; //产生一个时钟脉冲
START=0;
while(ECO==0); //ECO为1表明数据转换完成
OE=1; //OE为1开始读取数据
adc=P1;
OE=0;
if(adc<60) //当读取数据小于60时灯亮并且蜂鸣器报警
{
l_alm=0;
TR1=1;
}
else if((adc>160)) //当读取数据大于160时灯亮并且蜂鸣器报警
{
h_alm=0;
TR1=1;
}
else
TR1=0;
P2=0xf7; //数码管显示
P0=table[adc%10];
delay();
P2=0xfb;
P0=table[adc/10%10];
delay();
P2=0xfd;
P0=table[adc/100];
delay();
}
}
void T0_srv(void) interrupt 1 //灯闪
{
CLOCK=!CLOCK;
}
void T1_srv(void) interrupt 3
{ //蜂鸣器报警
TH1=(65536-1000)/256;
TL1=(65536-1000)%256;
sound=!sound;
}
4. 实验效果
二、DAC0808直流电机调速器
1. 简单介绍
DAC0808 是一款 8 位数字模拟转换器(Digital-to-Analog Converter,缩写为 DAC),由National Semiconductor(现在是 TI,Texas Instruments)生产。这款芯片用于将数字信号转换为模拟电压输出。以下是 DAC0808 的一些基本特性:
- 位数: 8 位
- 通道数: 单通道
- 转换方式: 逐次逼近型(Successive Approximation Type)
- 输出范围: 0 到 Vref(参考电压)
- 分辨率: 8 位,即 256 个输出级别
- 更新速率: 可高达 1 MHz(取决于时钟频率)
- 供电电压: 通常为 +5V
DAC0808主要用于将数字信号(通常是微控制器或数字系统的输出)转换为相应的模拟电压。通过调整输入的数字值,可以在输出引脚获得相应的模拟电压。
2. 电路连接图
3. 源代码
#include <reg51.h>
sbit k1=P3^0;//共8挡
sbit k2=P3^1;
sbit k3=P3^2;
sbit k4=P3^3;
sbit k5=P3^4;
sbit k6=P3^5;
sbit k7=P3^6;
sbit k8=P3^7;
void delayms(unsigned int ms) /*延时*/
{
unsigned char t;
while (ms--) for(t=0;t<120;t++);
}
void main() /*主程序*/
{
P0=0x00;
while(1)
{
if (k1==0) P0=0;
if (k2==0) P0=40;
if (k3==0) P0=80;
if (k4==0) P0=120;
if (k5==0) P0=160;
if (k6==0) P0=180;
if (k7==0) P0=220;
if (k8==0) P0=240;
delayms(2);
}
}