实现 AD 采样,使用 LCD1602 显示 AD 数值

实现 AD 采样,使用 LCD1602 显示 AD 数值

写在前面

单片机内集成的A/D转换,一般都有相应的特殊功能寄存器来设置A/D的使能标志,参考电压,转换频率,通道选择,A/D输入口的属性(模拟量输入还是普通的I/O),启动,停止控制等。有了这些寄存器,使得我们控制单片机的模拟量采集变得非常方便。

A/D转换的基本原理是:将参考电平按最大的转换值量化,再利用输入模拟电平与参考电平的比例来求得输入电平的测量值(V=V*(AD量化值/AD转换的最大值))。有些MCU A/D转换的参考电平可以选择由一个外部引脚输入,这样使得用户可以对A/D转换进行更好的控制。值得注意的一点就是A/D转换的输入电平必须比参考电平低或相等,不然测试的结果就会有很大的偏差。

要求

将电位器的输出电压进行AD转换,然后把转换的结果在1602上进行展示。

源码

 

#include "reg52.h"             //此文件中定义了单片机的一些特殊功能寄存器
#include "lcd.h"
#include"XPT2046.h"    

typedef unsigned int u16;      //对数据类型进行声明定义
typedef unsigned char u8;

u8 disp[4];
u8 code smgduan[10]={0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A};

/*******************************************************************************
* 函 数 名         : delay
* 函数功能           : 延时函数,i=1时,大约延时10us
*******************************************************************************/
void delay(u16 i)
{
    while(i--);    
}


/*******************************************************************************
* 函数名         :datapros()
* 函数功能         :数据处理函数
* 输入           : 无
* 输出              : 无
*******************************************************************************/
void datapros()
{
    u16 temp;
    static u8 i;
    if(i==50)
    {
        i=0;
        temp = Read_AD_Data(0x94);        //   AIN0 电位器
    }
    i++;
    disp[0]=smgduan[temp/1000];//千位
    disp[1]=smgduan[temp%1000/100];//百位
    disp[2]=smgduan[temp%1000%100/10];//个位
    disp[3]=smgduan[temp%1000%100%10];        
}

/*******************************************************************************
* 函 数 名         : main
* 函数功能           : 主函数
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/
void main(void)
{
    u8 i;
    while(1)
    {
        datapros();     //数据处理函数
        LcdInit();
        for(i=0;i<4;i++)
        {
            LcdWriteData(disp[i]);    
        }
        delay(100);
    }                
}

 效果

实现 AD 采样,使用 LCD1602 显示 AD 数值_第1张图片

 

转载于:https://www.cnblogs.com/wjw1014/p/10137939.html

你可能感兴趣的:(实现 AD 采样,使用 LCD1602 显示 AD 数值)