实现 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);
    }                
}
复制代码

 效果

 

posted @   叫我+V  阅读(2179)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示