• 实现 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);
        }                
    }

     效果

  • 相关阅读:
    Java Sping 第一章——初识 Spring
    C++设计模式——状态模式 State
    线性代数思维导图(3)——向量组
    基于Servlet实现简单系统登录
    优秀博客汇总
    整理一些开源项目
    Android UI性能优化详解
    (原创)如何在spannableString中使用自定义字体
    (原创)用讯飞语音实现人机交互的功能
    (原创)speex与wav格式音频文件的互相转换(二)
  • 原文地址:https://www.cnblogs.com/wjw1014/p/10137939.html
Copyright © 2020-2023  润新知