#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的更多相关文章

  1. ADC0832的应用

    ADC0832是美国国家半导体公司生产的一种8位逐次比较型CMOS双通道A-D转换器,采用5V电源电压供电,模拟电压输入范围为0~5V,内部时钟250KHz时转换速度为32微秒. 仿真图为: 程序为: ...

  2. 树莓派通过模数转换芯片ADC0832读取LM35温度传感器数据

    树莓派通过模数转换芯片ADC0832读取LM35温度传感器数据 今天和小朋友一起玩树莓派,打算来做一个测量室温的小实验.经过几个小时的研究和测试,终于能够成功读取LM35传感器的温度数据了.本文主要记 ...

  3. 学习AD、DA的体会

    AD转换器的转换是指模拟信号输入转化为数字信号输出,而DA转换器是把数字信号转换为模拟信号,在ADC0832.TLC549和TLC5615程序设计中,通过使用中断服务函数每0.5s对ADC0832进行 ...

  4. PM2.5环境检测系统的设计与分析

    PM2.5环境检测系统的设计与分析   摘要: 大气颗粒物污染对人类健康和生态环境造成了很大的影响,这让人们逐渐重视起对细颗粒物PM2.5检测技术的研究.本文阐述了PM2.5浓度检测的五种方法,在对上 ...

  5. tlc549

    #include <reg51.h> #include "TLC549.c" code uchar seven_seg[] = {0xc0, 0xf9, 0xa4, 0 ...

随机推荐

  1. 康托(Cantor)展开

    直接进入正题. 康托展开 Description 现在有"ABCDEFGHIJ”10个字符,将其所有的排列中按字典序排列,给出任意一种排列,说出这个排列在所有的排列中是第几小的? Input ...

  2. python模块之junos-eznc

    一.简介 本文将使用python模块中的junos-eznc来控制juniper的 Junos OS系统,此模块可以在windows平台和UNIX平台上使用 二.实验环境 1.操作系统:win10 2 ...

  3. Django上线部署之IIS

    环境: 1.Windows Server 2016 Datacenter 64位 2.SQL Server 2016 Enterprise 64位 3.Python 3.6.0 64位 4.admin ...

  4. 【数据结构】9.java源码关于HashTable

    1.hashtable的内部结构 基础存储数据的hash桶由Entry结构的数组存放而entry数据结构,有hash,key和value,还有一个指向下一个节点的引用next对象 这里就和hashma ...

  5. 宝塔安装Lsky Pro图床教程

    欢迎访问我的个人博客皮皮猪:http://www.zhsh666.xyz Lsky Pro图床是一个支持本地.阿里云 OSS.腾讯云 COS.七牛云.又拍云等储存方式的基于PHP的开源图床. 项目主页 ...

  6. 对IOC和DI的通俗理解

    学习过spring框架的人一定都会听过Spring的IoC(控制反转) .DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC .DI这两个概念是模糊不清的,是很难理解的,今天和大家 ...

  7. C#使用iTextSharp给PDF文件加水印

    给PDF添加水印,可以用iTextSharp. 步骤1:下载iTextSharp 步骤2:在项目中添加引用itextsharp.dll 步骤3:在程序中使用iTextSharp.text.pdf us ...

  8. 转载 江南一点雨 一键部署docker

    一键部署 Spring Boot 到远程 Docker 容器,就是这么秀!   不知道各位小伙伴在生产环境都是怎么部署 Spring Boot 的,打成 jar 直接一键运行?打成 war 扔到 To ...

  9. 业务代码的救星——Java 对象转换框架 MapStruct 妙用

    简介 在业务项目的开发中,我们经常需要将 Java 对象进行转换,比如从将外部微服务得到的对象转换为本域的业务对象 domain object,将 domain object 转为数据持久层的 dat ...

  10. ObjectMapper2

    ObjectMapper mapper = new ObjectMapper();                try {                    user = mapper.read ...