简易数字电压表+ADC0832+串行SPI方式实现1路数据转换

发布者:PeacefulOasis最新更新时间:2024-07-26 来源: cnblogs关键字:数字电压表  ADC0832  数据转换 手机看文章 扫描二维码
随时随地手机看文章

            i=0;

            break;

        default:break;

    }

}


3 定时器T0


#ifndef __Timer0_H__

#define __Timer0_H__


#include


void Timer0_Init(void);


#endif


#include 'Timer0.h'


void Timer0_Init(void)        //1毫秒@11.0592MHz

{

    TMOD &= 0xF0;        //设置定时器模式

    TMOD |= 0x01;        //设置定时器模式

    TL0 = 0x66;            //设置定时初始值

    TH0 = 0xFC;            //设置定时初始值

    TF0 = 0;            //清除TF0标志

    TR0 = 1;            //定时器0开始计时

    

    ET0 = 1;            //定时器0中断开关

//    EA  = 1;             //中断总开关

}



//中断服务函数一定是一个没有返回值的函数

//中断服务函数一定是没有参数的函数

//中断服务函数函数名后跟着关键字interrupt

//interrupt n 0~4 5个中断源,8*n+0003H

// 0003H INT0, 00BH T0, 0013H INT1, 001BH T1, 0023H ES

//中断服务函数不能被主程序或者其他程序所调用

//n后面跟着using m(0~3)工作寄存器


//void Timer0_ISR(void) interrupt 1 

//{

//    TL0 = 0x66;            //设置定时初始值

//    TH0 = 0xFC;            //设置定时初始值

//}


4 主函数(对采集的数据进行均值滤波)


复制代码

#include

#include 'DisplaySmg.h'

#include 'ADC0832.h'

#include 'Timer0.h'


unsigned char  adc_result = 0;

int adc_result_show = 0;


void disp_num(void)            //显示四位十进制数

{

    LedBuf[0]= 23;                    //千位,不显示

    LedBuf[1]= adc_result_show/100;    //百位

    LedBuf[2]= adc_result_show/10%10;//十位    

    LedBuf[3]= adc_result_show%10;    //个位

}


void main()

{

    int adc_result_reg;

    int adc_result_fliter;        //采用均值滤波

    unsigned char adc_cnt;        //采样次数

    

    Timer0_Init();        //定时/计数器T0初始化

    ADC0832_Init();

    EA=1;                //中断总开关

    DotDig1=1;            //点亮第二个数码管的小数点

    while(1)

    {

        adc_result = ADC0832_Conv();    //采集数据,ADC转换后结果

        adc_result_reg = adc_result*1.0*100*5/255;    //数据变换处理(线性标度变换)

        adc_result_fliter = adc_result_fliter +  adc_result_reg;    //数据累加

        adc_cnt++;

        if(adc_cnt > 7)

        {

            adc_result_show = adc_result_fliter >> 3; //等价于除于8,取平均值

            adc_cnt = 0;

            adc_result_fliter = 0;

        }

        disp_num();        //显示数据

    }

}


void Timer0_ISR(void) interrupt 1 

{

    TR0=0;                //关闭定时器

    DisplaySmg();        //每过1ms,刷新一次数码管显示函数

    TL0 = 0x66;            //设置定时初始值,定时1ms

    TH0 = 0xFC;            //设置定时初始值,定时1ms

    TR0=1;                //打开定时器

}


5 参考来源


(1)(141条消息) 【mcuclub】模数转换ADC0832_单片机俱乐部--官方的博客-CSDN博客_adc0832模数转换原理;


(2)单片机应用——利用串行A/D转换器件ADC0832实现模拟电压信号的A/D转换_哔哩哔哩_bilibili;


[1] [2]
关键字:数字电压表  ADC0832  数据转换 引用地址:简易数字电压表+ADC0832+串行SPI方式实现1路数据转换

上一篇:【51单片机】I/O口
下一篇:简易数字电压表+ADC0809+程序查询方式实现8路数据转换

推荐阅读最新更新时间:2024-11-13 14:02

ADC0832模数转换MSP430单片机程序+电路图
下面是电路图: ADC0832封装图 ADC0832与单片机连接图 ADC0832时序图 程序源码下载: http://www.51hei.com/f/0832430.rar #include msp430f2121.h #define DO (P1IN&BIT7) #define uchar unsigned char #define uint unsigned int /*********************************************** sbit cs=P2^0; sbit clk=P2^1; sbit DI=P2^2; sbit D
[单片机]
<font color='red'>ADC0832</font>模数转换MSP430单片机程序+电路图
MSP430程序库<五>SPI同步串行通信
SPI总线系统是一种同步串行外设接口;是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,现在越来越多的芯片集成了这种通信协议。 许多的芯片都用这种协议通信:EEPROM、Flash、实时时钟、AD转换器、数字信号处理器等:MSP430的USART模块不仅能够实现异步模式(见:MSP430程序库 二 UART异步串口),而且支持同步串行通信(即SPI模式);其SPI支持3线、4线操作,支持主机模式和从机模式,字符长度可以7位或8位等。由于要用AD7708芯片完成AD采样,AD7708是通过SPI与其它设备通信的;本程序比较简化,
[单片机]
MSP430程序库<五><font color='red'>SPI</font>同步<font color='red'>串行</font>通信
基于51单片机和 ADC0808 ADC0809的自动数字电压表
前言: 之前讲过基于数码管显示的自动数字电压表,接下来讲一下基于LCD1602显示的相关设计,分别利用的是TI公司的ADC0808和ADC0809。 硬件和软件设计 基于51单片机+ADC0808+LCD1602 测试电压范围为2.1~25V(超出这个范围,程序会卡死),精度<0.05 仿真图如下: 部分代码如下: #include AT89X52.H #define LEDDATA P0 #define v20_on {s3=0;s2=0;s1=1;} //宏定义不同量程,不同的开关状态 #define v2_on {s3=0;s2=1;s1=0;} #define v02_on {s3=1;s2=0;s
[单片机]
基于51单片机和 ADC0808 ADC0809的自动<font color='red'>数字电压表</font>
SPI串行总线协议
一、SPI接口简介 SPI(Serial Peripheral interface--串行外设接口)总线系统是一种同步串行外设接口,它可以使MCU与各种外围设备以串行方式进行通信以交换信息。该接口一般使用4条线:串行时钟线(SCLK)、主机输入/从机输出线(MISO)、主机输出/从机输入线(MOSI)和从机选择线SS。 SPI是一个环形总线结构,由SS(CS)、SCK、SDI、SDO构成,其时序比较简单,主要是在SCK的控制下,两个双向移位寄存器进行数据交换。 主要概括为: 上升沿发送、下降沿接受,高位在前、低位在后; 上升沿到来时,SDO电平将被送到从设备的寄存器中;下降沿到来时,SDI电平将被接收到主设备的
[单片机]
<font color='red'>SPI</font><font color='red'>串行</font>总线协议
低功耗数字电压表
低功耗数字电压表
[模拟电子]
低功耗<font color='red'>数字电压表</font>
使用STC12C5204AD单片机的数字电压表
这是一块使用STC12C5204AD数字电压表的制作程序,P0.0-P0.3 共阴数码管位驱动端,P2口为共阴数码管段a-g及dp的段驱动端口,P0、P2口设置为推挽输出方式,段输出加470欧限流电阻,AD为8位,转换电压分度5/256=0.0195312V,分流电阻为实测阻值,AD值*0.0195312v/对地分流电阻,算出分流电流,然后用分流电流*分流电阻与限流电阻之和即为要显示的输入电压值。业余使用,精度已经够用了,比那个小的指针的要准确多了。其中涉及到端口设置的地方大家对照芯片手册更正。 #include STC12C52.H //STC12C5204AD头文件 (6 K) 下载次数:15 #include in
[单片机]
数字电压表的检定线路
  (1)直接比较法检定线路 图1示出的是用直接比较法检定直流数字电压表的三种基本线路。如果标准表和被检表的量程正好对上,则可采用图1(a)所示线路。标准表和被检表同时测量可调稳压源的输出,设标准表的读数为UN,被检表的读数为Ux,则被检表误差 为   图1 直接比较法检定直流数字电压表的三种基本线路   图1(b)、(c)示出的是标准表量程与被检表量程对不上时采用的检定线路。设分压箱的分压系数为k,Ux、UN含义同前,则被检表误差为   (2)直流电压校准器法检定线路 直流电压校准器法检定线路如图2所示。量程正好对上或对不上时,分别采用图2(a)、(b)两种线路。被检表的误差计算公式与式(9-16)、式(9-17)
[测试测量]
<font color='red'>数字电压表</font>的检定线路
简易数字电压表+ADC0809+程序查询方式实现8路数据转换
1 实验现象(每间隔1s自动切换模拟信号采集通道,通过数码管显示测量的电压值) 2 硬件设计 3 程序设计 3.1 主函数 #include REG52.H #include DisplaySmg.h #include ADC0809.h #include Timer0.h unsigned char adc_result = 0; //ADC转换后直接采集的数据 int adc_result_show = 0; //线性标度变化 unsigned char adc_flag = 1; //1s时间的标志信号,用来自动切换通道 unsigned char channel = 0; //通道
[单片机]
简易<font color='red'>数字电压表</font>+ADC0809+程序查询方式实现8路<font color='red'>数据转换</font>
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved