ADC0832

#include <reg51.h>
#include "ADC0832.c"
code uchar seven_seg[]={0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90};//共阳数码管0--9(0时为有效断)
uchar cp, j;
uint dat_ad;
void timer0_isr(void); //声明中断服务函数
void timer0_init(void); //声明中断初始化函数 void main(void) /**************************主函数**************************/
{
timer0_init(); //中断初始化函数
adc0832_init(); //adc0832初始化函数
while(); //表示一个死循环,循环一直运行下去
}
/***********************中断服务函数************************/
void timer0_isr(void) interrupt
{
TH0 = 0xf8;
TL0 = 0x2f;
cp++;
if(cp > ) //0.5秒·
{
cp = ;
dat_ad = adc0832_cho();//0.5秒让ADC0832转换一次
dat_ad = dat_ad * 1.96;//模拟信号转化为数字信号
}
P0 = 0xff;
switch(j)
{
case : P0 = seven_seg[dat_ad % ]; P2 = ~0x01;break; // 模拟信号
case : P0 = seven_seg[dat_ad % /]; P2 = ~0x02;break;//
case : P0 = seven_seg[dat_ad / ]& 0x7f; P2 = ~0x04;break;//
case : P0 = seven_seg[adc0832_cho()% ]; P2 = ~0x08; break; //、 数字信号
case : P0 = seven_seg[adc0832_cho()% / ]; P2 = ~0x10;break;//
case : P0 = seven_seg[adc0832_cho() / ]; P2 = ~0x20; break;//
}
j++;
if(j >= )
j = ; //共显示六位
}
/***********************中断初始化函数**********************/
void timer0_init(void)
{
TMOD = 0x01; //中断方式1
TH0 = 0xf8; TL0 = 0x2f; //对机器脉冲计数,2000个计满溢出引发中断
EA = ; //开总中断
ET0 = ; //开T0中断
TR0 = ; //启动定时器T0
} /****************************************************************************************/
/*************************************ADC0832的驱动程序***********************************/
/*ADC0832模数转换将连续变化的模拟信号转换为离散的数字信号V = 5 / 256 = 0.01953v = 19.53mv*/
/****************************************************************************************/
#include <intrins.h>
#define nop _nop_()
#define uchar unsigned char //宏定义用uchar 代替 unsigned char
#define uint unsigned int //宏定义用uint 代替 unsigned int
sbit CS = P3^;
sbit CLK = P3^;
sbit DIDO = P3^; void adc0832_init(void) /*****ADC0832初始化函数*****/
{
CS = ; //adc0832未工作时,CS端为高电平,此时芯片禁用
nop; //对于延时很短的,要求在us级的,采用“_nop_”函数
CLK = ;
CS = ;
} uchar adc0832_cho(void) //包含11个CLK下降沿 /**对转换CHO通道的模拟信号**/
{
uchar i, dat;
adc0832_init();
DIDO = ; CLK = ; nop; CLK = ; nop; //SCLK第一个下降沿来到时,DI = 1启动ADC0832
DIDO = ; CLK = ; nop; CLK = ; nop; //SCLK第二个下降沿
DIDO = ; CLK = ; nop; CLK = ; nop; //SCLK第三个下降沿,发送1,0选择通道cho
DIDO = ; //释放总线
for(i = ; i < ; i++) //第四个下降沿到第11个下降沿
{
CLK = ; //clk处于下降沿,每一个下降沿DO端输入下一个
nop; //对于延时很短的,要求在us级的,采用“_nop_”函数
if(DIDO) dat |= 0x01; // dat = dat | 0x01,dat和0x01做“或”的运算,意思是最低位置1,其它位保持不变。
CLK = ; nop; //clk处于上升沿
dat <<= ; //数据左移
}
return (dat);
CS = ; //adc0832停止工作
}
ADC0832应用
()adc0832的作用
ADC0832 为8位分辨率A/D转换芯片,其最高分辨可达256级,可以适应一般的模拟量转换要求。其内部电源输入与参考电压的复用,使得芯片的模拟电压输入在0~5V之间。芯片转换时间仅为32μS,据有双数据输出可作为数据校验,以减少数据误差,转换速度快且稳定性能强。独立的芯片使能输入,使多器件挂接和处理器控制变的更加方便。通过DI 数据输入端,可以轻易的实现通道功能的选择。
adc0832能将连续变化的模拟信号转化为离散的数字信号,以便于数字系统进行处理储存控制和显示。
(2)对ADC0832的认识
ADC0832 是美国生产的一种8 位分辨率、双通道A/D转换芯片。由于它体积小,兼容性,性价比高而深受单片机爱好者及企业欢迎,其目前已经有很高的普及率。学习并使用ADC0832 可使我们了解A/D转换器的原理,有助于我们单片机技术水平的提高。ADC0832将三位的0~5V的模拟信号转化为数字信号,通过单片机显示在数码管上。
(3)adc0832工作原理
当ADC0832未工作时其CS输入端应为高电平,此时芯片禁用,CLK 和DO/DI 的电平可任意。当要进行A/D转换时,须先将CS使能端置于低电平并且保持低电平直到转换完全结束。此时芯片开始转换工作,同时由处理器向芯片时钟输入端CLK 输入时钟脉冲,DO/DI端则使用DI端输入通道功能选择的数据信号。在第1 个时钟脉冲的下沉之前DI端必须是高电平,表示起始信号。在第2、3个脉冲下沉之前DI端应输入2 位数据用于选择通道功能。当此2 位数据为""、""时,只对CH0 进行单通道转换。当2位数据为""、""时,只对CH1进行单通道转换。当2 位数据为""、""时,将CH0作为正输入端IN+,CH1作为负输入端IN-进行输入。当2 位数据为""、""时,将CH0作为负输入端IN-,CH1 作为正输入端IN+进行输入。到第三个脉冲的下沉之后DI端的输入电平就失去输入作用,此后DO/DI端则开始利用数据输出DO进行转换数据的读取。从第4个脉冲下沉开始由DO端输出转换数据最高位DATA7,随后每一个脉冲下沉DO端输出下一位数据。直到第11个脉冲时发出最低位数据DATA0,一个字节的数据输出DC0832封装以及各端子 完成。也正是从此位开始输出下一个相反字节的数据,即从第11个字节的下沉输出DATA0。随后输出8位数据,到19个脉冲时数据输出完成,也标志着一次A/D转换的结束。最后将CS置高电平禁用芯片,直接将转换后的数据进行处理就可以了。
()器件作用
adc0832:将连续变化的模拟信号转化为离散的数字信号,以便于数字系统进行处理储存控制和显示。
7404反相器:增大电流
pothg这是微调电阻,中心抽头位置改变,整个电阻的阻值是没变的。只是,中心抽头和上端间的电阻最小,和下端间的电阻最大,在这里产生的是0~5V的模拟信号
Respack_8:驱动,电流不够,加排阻增加电流,排阻一般有九个脚,一个脚接VCC,其他脚接单片机I/o口,比如说P0口,一般需要加排阻。
ADC0832的更多相关文章
- ADC0832的应用
ADC0832是美国国家半导体公司生产的一种8位逐次比较型CMOS双通道A-D转换器,采用5V电源电压供电,模拟电压输入范围为0~5V,内部时钟250KHz时转换速度为32微秒. 仿真图为: 程序为: ...
- 树莓派通过模数转换芯片ADC0832读取LM35温度传感器数据
树莓派通过模数转换芯片ADC0832读取LM35温度传感器数据 今天和小朋友一起玩树莓派,打算来做一个测量室温的小实验.经过几个小时的研究和测试,终于能够成功读取LM35传感器的温度数据了.本文主要记 ...
- 学习AD、DA的体会
AD转换器的转换是指模拟信号输入转化为数字信号输出,而DA转换器是把数字信号转换为模拟信号,在ADC0832.TLC549和TLC5615程序设计中,通过使用中断服务函数每0.5s对ADC0832进行 ...
- PM2.5环境检测系统的设计与分析
PM2.5环境检测系统的设计与分析 摘要: 大气颗粒物污染对人类健康和生态环境造成了很大的影响,这让人们逐渐重视起对细颗粒物PM2.5检测技术的研究.本文阐述了PM2.5浓度检测的五种方法,在对上 ...
- tlc549
#include <reg51.h> #include "TLC549.c" code uchar seven_seg[] = {0xc0, 0xf9, 0xa4, 0 ...
随机推荐
- 纯 CSS 实现绘制各种三角形(各种角度)
一.前言 三角形实现原理:宽度width为0:height为0:(1)有一条横竖边(上下左右)的设置为border-方向:长度 solid red,这个画的就是底部的直线.其他边使用border-方向 ...
- centos7 下面python2 共存python3
第一步.查看python的版本号以及安装路径: 通过以上的查看可以看到,python默认是指向到python2的,所以这里我们不动它,保持现状态即可. 备注:(因为现在还有很多的系统更新都需要使用到p ...
- Requests+正则表达式爬取猫眼电影(TOP100榜)
猫眼电影网址:www.maoyan.com 前言:网上一些大神已经对猫眼电影进行过爬取,所用的方法也是各有其优,最终目的是把影片排名.图片.名称.主要演员.上映时间与评分提取出来并保存到文件或者数据库 ...
- 一文搞懂Python中的所有数组数据类型
关于我 一个有思想的程序猿,终身学习实践者,目前在一个创业团队任team lead,技术栈涉及Android.Python.Java和Go,这个也是我们团队的主要技术栈. Github:https:/ ...
- (前端常考面试题)从敲入 URL 到浏览器渲染完成,到底发生了什么 ?
前言 小汪最近在看[WebKit 技术内幕]一书,说实话,这本书写的太官方了,不通俗易懂. 但是看完书,对浏览器内核的 WebKit 有了进一步的了解,所以从浏览器内核出发,写这篇文章以记录学到的知识 ...
- 一键部署 Spring Boot 到远程 Docker 容器,就是这么秀!
不知道各位小伙伴在生产环境都是怎么部署 Spring Boot 的,打成 jar 直接一键运行?打成 war 扔到 Tomcat 容器中运行?不过据松哥了解,容器化部署应该是目前的主流方案. 不同于传 ...
- 配置Office Excel运行Python宏脚本
基本环境 名称 版本 操作系统 Windows 10 x64 Office 2016 安装Python 1.下载Python安装包 登录https://www.python.org/downloads ...
- library not found for -ljpush-ios-3.2.1错误
很多人在更新pod后报 library not found for -ljpush-ios-3.2.1(举例)错误,这其实是包含版本号类型错误. 究其原因:使用了版本号做库名字,pod升级后 Podf ...
- HDU-3695 Computer Virus on Planet Pandora
HDU-3695 Computer Virus on Planet Pandora 题意:电脑中病毒了, 现在n钟病毒指令, 然后有一个电脑指令, 看一下这个电脑指令中了几个病毒, 如果电脑种了某一个 ...
- HDU 5126 stars 4维偏序, CDQ套CDQ
题目传送门 题意:在一个星空中,按着时间会出现一些点,现在john想知道,在某个时间内有多少个星星是的坐标是满足条件的.(x1<=x<=x2, y1 <= y <= y2, z ...