数码之家

 找回密码
 立即注册
搜索
查看: 1721|回复: 28

[C51] 大佬们帮忙改个电压表程序

[复制链接]
发表于 2022-7-29 09:40:24 | 显示全部楼层
/*******************************************************************
函数名:ADC初始化及8位A/D转换函数
返回值:8位的ADC数据
结  果:读出指定ADC接口的A/D转换值,并返回数值
备  注:适用于STC12C2052AD系列单片机(必须使用STC12C2052AD.h头文件)
*******************************************************************/
uchar Read (uchar CHA)
{
uchar i;
uint ADC = 0;
uchar AD_FIN=0; //存储A/D转换标志;若在函数外定义此变量则不能得到连续变化的模拟量的显示
for(i=0;i<10;i++)
{
/******以下为ADC初始化程序****************************/
    CHA &= 0x07;          //选择ADC的8个接口中的一个(0000 0111 清0高5位)
    ADC_CONTR = 0x60;     //ADC转换的速度(0XX0 0000 其中XX控制速度,请根据数据手册设置)
    _nop_();
    ADC_CONTR |= CHA;     //选择A/D当前通道
    _nop_();
    ADC_CONTR |= 0x80;    //启动A/D电源
    delay(1);             //使输入电压达到稳定(1ms即可?
/******以下为ADC执行程序****************************/
    ADC_CONTR |= 0x08;           //启动A/D转换(0000 1000 令ADCS = 1)
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    while (AD_FIN ==0)
        {          //等待A/D转换结束
    AD_FIN = (ADC_CONTR & 0x10); //0001 0000测试A/D转换结束否
    }
    ADC_CONTR &= 0xE7;           //1111 0111 清ADC_FLAG位, 关闭A/D转换,
        ADC += ADC_DATA;
}       
       
        ADC = ADC/10;
       
return ((uchar)ADC);               //返回A/D转换结果(8位)
}
回复 支持 反对

使用道具 举报

发表于 2022-7-29 09:42:56 | 显示全部楼层
elcy 发表于 2022-7-29 09:40
/*******************************************************************
函数名:ADC初始化及8位A/D转换函 ...

简单的取10次采样平均值,可以试下。根据需要也可以加大采样次数,改循环值即可,要避免溢出。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-5-23 05:28 , Processed in 0.093600 second(s), 8 queries , Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

快速回复 返回顶部 返回列表