文章目录
- 一、ADC0808调温报警器
- 1. 简单介绍
- 2. 电路连接图
- 3. 源代码
- 4. 实验效果
- 二、DAC0808直流电机调速器
- 1. 简单介绍
- 2. 电路连接图
- 3. 源代码
- 4. 实验效果
一、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;}elseTR1=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);}
}