早晚也是闲着没事情做~~干脆就发点简单的东西,毕竟所谓的复杂就是一堆简单的堆出来的~~~究其根本,没有什么复杂的~
毕竟ADC这个东西用的比较多,也很成熟,做出来的东西也是挺多的,所以这个东东就用两三个实验来叙述吧~
先说一下ADC0808 这款A/D转换器的介绍:
1、ADC0808的简介
A/D转换器是一种能把输入模拟电压或者电流信息变成与其成正比的数字量信息的电路芯片。A/D转换器用于实现模拟量到数字量的转换。
ADC0808是典型的8通道模拟输入8位并行数字输出的逐次逼近式A/D转换器。该转换器采用COMS工艺,可以实现8路模拟信号的分时采集。片内有8路模拟选通开关,以及相应的通道地址锁存用译码电路。
1)ADC0808芯片的介绍
2)ADC0808的引脚
3)ADC0808的工作流程
4)与51单片机的借口
基本上也就这么点东西~~~很简单吧~~我感觉也是~~
我艹,然我白白调了半天程序,就那么一点点的错误,浪费了好多的时间,真不爽啊~~~
贴图看看~~
由于以后会用模块化编程,便于自己以后直接调用~~~,这个主函数:
//------------------------------------------------------------------------------
//实现由ADC0808作为A/D转换器对电阻进行电压的测试
//数码管显示的数据范围为0~255
#include"reg52.h"
#include"macroandconst.h"
#include"delay.h"
#include"adc0808.h"
//------------------------------------------------------------------------------
uchar code seg_disp[4]={0x10,0x20,0x40,0x00}; //LED显示的控制代码
uchar count; //LED显示位控制
sbit tem=P2^0;
uchar temp_0=0;
//------------------------------------------------------------------------------
//定时器初始化函数
void timer_init()
{
TMOD=0X12; //T0工作在模式2,T1工作在模式1
TH0=(256-50)/256;
TL0=TH0;
TH1=(65536-4000)/256;
TL1=(65536-4000)%6;
ET0=1;
ET1=1;
TR0=1;
TR1=1;
// PT1=1;
EA=1;
}
//------------------------------------------------------------------------------
//main
void main()
{
timer_init();
while(1)
{
ADC0808_init();
}
}
//------------------------------------------------------------------------------
//timer0
void timer0() interrupt 1
{
CLK=~CLK;
if(temp_0==100)
{
temp_0=0;
tem=~tem;
}
}
//------------------------------------------------------------------------------
//timer1
void timer1() interrupt 3
{
TH1=(65536-4000)/256;
TL1=(65536-4000)%6;
for(count=0;count<4;count++)
{
P1=seg_disp[count]|display[count];
delay(10);
}
}
然后就是ADC0808的初始化函数了(一些辅助的函数我就不贴出来了,比如宏定义啊,软件延时啊,引脚定义什么的~~):
//------------------------------------------------------------------------------
//adc0808的文件函数
#include"reg52.h"
#include"delay.h"
#include"macroandconst.h"
//------------------------------------------------------------------------------
sbit START=P3^0; //转换启动信号
sbit OE=P3^1; //输出允许信号
sbit EOC=P3^2; //转换结束状态信号
sbit CLK=P3^7; //时钟信号输入端,ADC0808内部没有时钟电路,所需的时钟信号由外部输入,通常频率为500KHz
uchar get_data; //ADC0808转换后的数值
uchar temp; //用于存储ADC0808转换后处理过程中的临时数值
uchar display[3]; //存储十进制的数值
//------------------------------------------------------------------------------
//ADC0808的启动和转换的初始化函数
void ADC0808_init()
{
START=0; //START信号上升沿,将所有内部寄存器清0
START=1;
START=0; //START信号下降沿,开始A/D转换,在转换过程中START保持为低电平
while(EOC==0); //等待转换结束
OE=1; //允许器件输出转换的结果
get_data=P0; //P0口接ADC0808,你懂得~~
temp=get_data; //暂存转换结果
OE=0;
display[0]=get_data/100; //将转换的结果转换为10进制数
display[1]=get_data0/10;
display[2]=get_data;
}
关键字:51单片机 ADC0808
引用地址:
51单片机—ADC0808—05—①
推荐阅读最新更新时间:2024-03-16 14:33
TM1637四位数码管模块驱动(TM1637.h头文件)51单片机C语言
TM1637四位数码管模块是一个带时钟点的4位共阳数码管(0.36英寸)的显示模块,驱动芯片为TM1637,驱动方式为IIC,因此只需2根信号线即可使单片机控制4位8段数码管(数码管8级灰度可调)。 控制接口:共4个引脚(GND、VCC、DIO、CLK),GND为地,VCC为供电电源,DIO为数据输入输出脚,CLK为时钟信号脚。 TM1637.h单片机源程序如下: sbit CLK= P3^4; //定义模拟IIC总线的时钟线 sbit DIO = P3^5; //定义模拟IIC总线的数据线 code unsigned char tab = { 0x3F,/*0*/ 0x06,/*1*/
[单片机]
51单片机驱动16*16点阵程序带原理图
下面是主程序还有一个包含文件完整版本请到 http://www.51hei.com/bbs/dpj-20624-1.html 下载 #include reg52.h #include 74HC595.h #define uchar unsigned char #define uint unsigned int uchar code table_L ={0xff,0x7f, 0xff,0xbf, 0xff,0xdf, 0xff,0xef, 0xff,0xf7, 0xff,0xfb, 0xff,0xfd, 0xff,0xfe, 0x7f,0xff, 0xbf,0xff, 0xdf,0xff,
[单片机]
【自学51单片机】12 --- 1602液晶初步认识
1、1602液晶硬件接口介绍 1602液晶技术参数 说明:(1) 工作电流:在5v工作电压下液晶的工作电流为2mA,仅仅指液晶,不包括背光。 1602液晶接口原理图及引脚功能 说明:(1) 引脚3:液晶显示偏压信号。用来调整显示黑点与不显示黑点的对比度。(2) 4引脚:数据命令选择引脚。置高电平1,为读写数据,置低电平0,为读写命令。(3) 5引脚:读写选择引脚。置高电平1,为读数据或命令,置低电平0,为写数据或命令。(4) 6引脚:使能信号引脚。高电平有效,低电平无效。(5) 7~14引脚:8个数据引脚。因为总电流不大,直接接到PO口上,不用通过74HC245。 2、1602的读写时序介绍 液晶内部自带80
[单片机]
AT89S51单片机电子门铃的设计
1.实验任务 当按下开关SP1,AT89S51单片机产生“叮咚”声从P1.0端口输出到LM386,经过放大之后送入喇叭。 2.电路原理图 图4.19.1 3.系统板上硬件连线 (1).把“单片机系统”区域中的P1.0端口用导线连接到“音频放大模块”区域中的SPK IN端口上; (2).在“音频放大模块”区域中的SPK OUT端口上接上一个8欧或者是16欧的喇叭; (3).把“单片机系统”区域中的P3.7/RD端口用导线连接到“独立式键盘”区域中的SP1端口上; 4.程序设计方法 (1).我们用单片机实定时/计数器T0来产生700Hz和500HZ的频率,根据定时/计数器T0,我们取定时250us,因此,700HZ的频率要经过
[单片机]
基于51单片机数控恒流源
电路原理图如下: 该项设计的主要目的是设计一种数控稳压电源。它利用单片机STC89C51作为主控芯片,控制数字/模拟转换器(TLC5615)的输出电压的大小,经过运算放大器LM358与IRF9Z24N构成负反馈系统,从而输出恒定电压。最后通过电位器分压将输出信号反馈到运算放大器LM358上,使输出准确度可以调节。此设计通过键盘电路与单片机连接,读入控制数据,利用软件进行判断,从而起到控制电源输出的作用。通过LCD1602(或LED数码管)显示数控电源的输出电压,实现简单的人机对话。该项设计具有设计简单,控制灵活,调节方便,携带方便、成本低等优势,具有较强的实用性。 下图是为了了解整个电路如何工作的,把整个电路拆开。 二
[单片机]
采用AT89C51单片机实现动态车辆检测器系统的设计
引言 随着经济的发展,不停车收费系统(ETC)已在我国悄然兴起。不停车收费系统主要是由通讯、监控、收费三大系统组成。整个系统可靠运行的一个重要环节就是车辆检测器。在不停车收费系统中它是检测驶向通讯区域的车辆并命令天线进行通信的传感器,具有进入检测、车速检测、车型判别等功能;它是检测出离开通信区域的车辆、根据ETC车道控制器的判断控制栏杆、路侧显示器的传感器,具有进入检测功能;它具有检测车辆通过,控制清除针对该车辆的路侧显示器的显示内容以及控制针对后续车辆的显示的功能,并命令栏杆关闭的功能。 考虑到性能、价格、技术复杂性、可靠性、维护要求、适用范围等因素,我们这种车辆检测器是基于地感线圈原理研制的。 1、动态车辆检测器设计
[单片机]
51单片机4种流水灯
程序说明: LED连接在P2引脚上。 程序现象: 1、先从右到左逐个亮灭;再从左到右逐个亮灭; 2、由两侧向中间,再中间向两侧亮灭; 3、先右再左逐个亮起,不熄灭;再从左到右逐个熄灭; 4、先左再右逐个亮起,不熄灭;再从右到左逐个熄灭; #include reg52.h #define led P2 //对整个P2端口进行操作 /* 延时函数 */ void delay(unsigned int del) //10ms * del { unsigned int i,j; for(i=0; i del; i++) for(j=0; j 1827; j++) ; } void Led_Pipeline
[单片机]
51单片机如何实现对CF卡的读写
引言 由于CF卡(Compact Flash Card)具有容量大、体积小、高性能、携带方便等优点,而且读写速度快,可与多种电脑操作系统平台兼容,因此在数据采集系统中的数据记录或与PC机之间的数据转存多采用CF卡。为了在PC机中能方便地进行数据处理,在下位机端必须采用一种标准的格式组织数据,即将数据按照Windows标准文件格式写入,在PC机端通过读卡器将写入CF的内容以标准文件形式读出。Windows标准文件格式有FAT、FAT32和NTFS。考虑到广泛使用的Windows 98系统的CF卡的容量等因素,通常采用FAT(File Allocation Table)文件系统。单片机系统对CF卡的读写,就是从底层对它进行直接操
[单片机]