1.先上脚位图,不要问我为什么是stm8f103,stm8f103和stm8s003只有内存的不同。

2.上代码,选用PC4(AIN2)为ADC转换引脚,只提供函数,自己选择调用,不追求精度的话可以不要冒泡排序。(划重点:这个单片机是10位的分辩率,所以不要问我为什么公式是实际电压值(voltage) = adc值*参考电压(3.25V)/1024(10位分辨率))

/*************************************************************************** 函数名:ADC_conf* 描述  :ADC模块初始化* 输入  :无** 输出  :无* 返回  :无 * 调用  :外部调用 *************************************************************************/
void ADC_conf(u8 chn)
{GPIO_Init(GPIOC, GPIO_PIN_4, GPIO_MODE_IN_FL_NO_IT);ADC1_DeInit();//ADC1_CONVERSIONMODE_CONTINUOUSADC1_Init(ADC1_CONVERSIONMODE_SINGLE,      //单次转换 ADC1_CHANNEL_2,                  //通道   ADC1_PRESSEL_FCPU_D4,            //预定标器选择 分频器  fMASTER 可以被分频 2 到 18ADC1_EXTTRIG_TIM,                //从内部的TIM1 TRGO事件转换DISABLE,                         //是否使能该触发方式ADC1_ALIGN_RIGHT,                //对齐方式(可以左右对齐)ADC1_SCHMITTTRIG_CHANNEL2,       //指定触发通道   ENABLE);                         //是否使能指定触发通道ADC1_Cmd(ENABLE);       }/****************************************************************************
* 名    称:
* 功    能:对数据进行冒泡排序
* 入口参数:
* 出口参数:
* 说    明:
* 调用方法:
****************************************************************************/void DataFilter(u16 *data_in,u8 data_len)
{u16 temp;u8 i,j;for(i = 0; i < data_len; i++){for(j = i+1; j <data_len; j++){if(data_in[i] < data_in[j]){temp = data_in[j];data_in[j] = data_in[i];data_in[i] = temp; }}}
}/*************************************************************************** 函数名:ADC_GetConversionValue* 描述  :获取ADC转换结果* 输入  :无** 输出  :无* 返回  :无 * 调用  :内部调用 *************************************************************************/uint16_t ADC_GetConversionValue(void)
{uint16_t value,temph;        uint8_t templ;       ADC1_StartConversion(); // 定义templ存储低8位数据  temph存储高8位数据  while(!(ADC1->CSR & 0x80));     //等待转换完成templ = ADC1->DRL;temph = ADC1->DRH;              //读取ADC转换  在左对齐和右对齐模式下 读取数据的顺序不同  参考STM8寄存器.PDFP371          value = (templ | (temph << 8));   //注意是10位的转换精度 value、temph应为unsigned int 变量return  value;
}/****************************************************************************
* 名    称:
* 功    能:取冒泡排序的10个数组中的中间4个数组,减少误差。
* 入口参数:
* 出口参数:
* 说    明:
* 调用方法:  call in 10ms
****************************************************************************/
void ReadInputVoltege(void)
{u8 i;u16 temp[READ_ADC_LEN];for(i = 0; i < READ_ADC_LEN-1; i ++){adc_input_voltage[i] = adc_input_voltage[i+1];temp[i] = adc_input_voltage[i];} adc_input_voltage[READ_ADC_LEN-1] = ADC_GetConversionValue(); temp[READ_ADC_LEN-1]  = adc_input_voltage[READ_ADC_LEN-1];//0-8DataFilter(&temp[0],READ_ADC_LEN);ReadInputAdc = temp[3]+temp[4]+temp[5]+temp[6];ReadInputAdc >>= 2;        //    /4}/****************************************************************************
* 名    称:获取实际电压函数
* 功    能:计算公式:实际电压值(voltage) = adc值*参考电压(3.25V)/1024(10位分辨率)
* 入口参数:
* 出口参数:
* 说    明:
* 调用方法:
****************************************************************************/
void DisVoltage(void)
{u16 voltage;voltage =  (ReadInputAdc *325)/1024   ;// 配合一下硬件分压,没有分压值voltage =  voltage/100;
}  

分享一个stm8s003单片机的ADC转换,附加一个冒泡算法(用于减少误差)相关推荐

  1. 51单片机初学者分享1使用单片机I/O口点亮一个LED

    [电路原理] LED为一个发光二极管,8个LED的阳极通过限流电阻(保护作用)接高电平(VCC),阴极分别与I/0口P2.0~P2.7相连,当I/O口P2.0~P2.7产生低电平(未设置P2口值时,P ...

  2. PIC16F877A单片机 (ADC)

    PIC16F877A单片机 (ADC) 1 基本原理 1.1 ADC基本原理 1.1.1 单端ADC 1.1.2 差分ADC 1.2 PIC16F877A单片机的ADC模式 2 实现原码 3 prot ...

  3. adc量化单位_单片机外围模块漫谈之二,如何提高ADC转换精度

    在此我们简要总结一下ADC的各种指标如何理解,以及从硬件到软件都有哪些可以采用的手段来提高ADC的转换精度. 1. ADC指标 除了分辨率,速度,输入范围这些基本指标外,衡量一个ADC好坏通常会用到以 ...

  4. 单片机外围模块漫谈之二,如何提高ADC转换精度

    在此我们简要总结一下ADC的各种指标如何理解,以及从硬件到软件都有哪些可以采用的手段来提高ADC的转换精度. 1.ADC指标 除了分辨率,速度,输入范围这些基本指标外,衡量一个ADC好坏通常会用到以下 ...

  5. 2021只剩10%了,分享一个关于单片机自学的秘密

    2021马上就要结束了,你的年度目标实现了么?回首走过的路,有不舍,有感动,有不甘,也有激情澎湃的时刻,甚至收获一些的喜悦.还有10%的时间,也值得用100%的努力,特别是想学单片机的小伙伴,你要抓紧 ...

  6. 单片机学习——ADC讲解(A/D转换、D/A转换)

    单片机必学系列 单片机学习--中断系统 单片机学习--存储器详解(程序存储器.片内RAM.拓展RAM.EEPROM) 单片机学习--定时器/计数器 单片机学习--A/D转换 更新ing 51的单片机- ...

  7. 模数转换,你必须知道的8个经典ADC转换电路方案

    模数转换器即A/D转换器,或简称ADC,通常是指一个将模拟信号转变为数字信号的电子元件.通常的模数转换器是将一个输入电压信号转换为一个输出的数字信号.由于数字信号本身不具有实际意义,仅仅表示一个相对大 ...

  8. rsa 模数 指数转换 c语言_模数转换,你必须知道的8个经典ADC转换电路方案

    模数转换器即A/D转换器,或简称ADC,通常是指一个将模拟信号转变为数字信号的电子元件.通常的模数转换器是将一个输入电压信号转换为一个输出的数字信号.由于数字信号本身不具有实际意义,仅仅表示一个相对大 ...

  9. 如何利用单片机的ADC模块(或者独立的ADC芯片)得到接入ADC管脚上的实际电压值?

    这个问题,是第一次接触ADC时候,大家都会遇到的问题. 会读到什么值 单片机会读到什么值?需要看一个特性,就是几位的ADC,在手册上就会给出,例如,STM32的ADC是12位的.另外,还有8位,10位 ...

最新文章

  1. bzoj 2946 [Poi2000]公共串——后缀自动机
  2. 8.Struts2类型转换器
  3. 少儿故事:小乌鸦智斗老鹰
  4. ​上海AI Lab罗格斯大学港中文提出CLIP-Adapter,用极简方式微调CLIP中的最少参数!...
  5. 【java】ASM代理方式 Byte-Buddy代理方式 Javassist代理方式
  6. Object []转换为double []
  7. 博弈论重要算法:Sprague-Grundy 定理 (SRM 561 Div1 550)
  8. 学以致用十四-----打造一个简单的vim IDE
  9. 心跳脑裂解决方案之Heartbeat的Stonith配置
  10. 使用Mysql执行事务实现模拟银行转账功能
  11. dev-c 语言注释快捷键,devc 使用教程 注释
  12. BJDCTF_2nd PWN复盘
  13. python调包师_为“Python调包侠” 画像
  14. springboot小区公共停车位管理毕业设计-附源码201517
  15. 工作流Activiti初体验—流程撤回【二】
  16. unity优化—资源优化
  17. 【OpenMMLab AI实战营 学习笔记 DAY(四)-- 目标检测基础知识及评估方法】
  18. python爬虫之爬取《贵州农经网》信息
  19. 数据集成平台的特点(Oracle service bus)
  20. 吃透Chisel语言.32.Chisel进阶之硬件生成器(一)——Chisel中的参数化

热门文章

  1. ftp 出现Passive mode refused 解决办法
  2. Popular MVC框架请求响应数据加解密@Decrypt和@Encrypt的使用示例
  3. 某知名新媒体公司(北京/深圳/上海)
  4. 文档模式:标准模式、混杂模式
  5. matlab常见符号运算(计算导数,积分、符号求和等))
  6. 【入门案例系列】学英语太难?这款英语单词小游戏教你一键学会。
  7. 第六天 01-hydra工具windows远程桌面的密码爆破
  8. Visual Studio 2008 安装出错 无法安装 的解决办法
  9. 钝化程序模式SOA架构BPM
  10. Flash Builder4.7极其简单破解方法-三步搞定