导语

最近在用MSP430做i项目,用到了ADC模块(模数转换器)。
在这里分享一下用CCS开发环境使用MSP430F5529中的ADC来读取灰度传感器输出的模拟量,然后读取电压并将其显示在OLED上。

效果展示

MSP430F5529有4个12位ADC通道,分别为P6.0~P6.3。ADC计算公式:

ADC转化结果为0-4095,最大值为2的12次方。
此外MSP430的ADC有4个转换模式:单通道单次转化,多通道单次转化,单通道多次转化和多通道多次转化。在这里用的是多通道多次转化,毕竟要在OLED上显示多个通道的ADC值,这些值是随传感器变化的。

主函数代码

/******************接线********************/
//
//               MSP430F5529
//             -----------------
//         /|\|                 |
//          | |                 |
//          --|RST              |
//            |                 |
//    Vin0 -->|P6.0/CB0/A0  P3.6|-->SDA
//    Vin1 -->|P6.1/CB1/A1  P3.5|-->SCL
//    Vin2 -->|P6.2/CB2/A2      |
//    Vin3 -->|P6.3/CB3/A3      |
//            |                 |
/**************************************/#include <msp430.h>
#include "oled.h"
#include "type.h"
#include "bmp.h"#define   Num_of_Results   8volatile unsigned int A0results[Num_of_Results];
volatile unsigned int A1results[Num_of_Results];
volatile unsigned int A2results[Num_of_Results];
volatile unsigned int A3results[Num_of_Results];int main(void)
{OLED_Init();    //OLED初始化WDTCTL = WDTPW+WDTHOLD;                   // 停止关门狗P6SEL = 0x0F;                             // 使能 A/DADC12CTL0 = ADC12ON+ADC12MSC+ADC12SHT0_8; // 打开ADC12,延长采样时间以避免结果溢出。ADC12CTL1 = ADC12SHP+ADC12CONSEQ_3;       // 使用采样定时器,多通道重复顺序转化。ADC12MCTL0 = ADC12INCH_0;                 // ref+=AVcc, channel = A0ADC12MCTL1 = ADC12INCH_1;                 // ref+=AVcc, channel = A1ADC12MCTL2 = ADC12INCH_2;                 // ref+=AVcc, channel = A2ADC12MCTL3 = ADC12INCH_3+ADC12EOS;        // ref+=AVcc, channel = A3, end seq.ADC12IE = 0x08;                           // Enable ADC12IFG.3ADC12CTL0 |= ADC12ENC;                    // 启用转换ADC12CTL0 |= ADC12SC;                     // 启用转换 -软件触发OLED_Clear();                             //OLED清屏while(1){OLED_ShowString(30,1,"ADC",20);OLED_ShowCHinese(60,0,0);//采OLED_ShowCHinese(80,0,1);//集OLED_ShowString(20,2,"ADC0=",20);OLED_ShowNum(60,2,ADC12MEM0,4,20);OLED_ShowString(20,3,"ADC1=",20);OLED_ShowNum(60,3,ADC12MEM1,4,20);OLED_ShowString(20,4,"ADC2=",20);OLED_ShowNum(60,4,ADC12MEM2,4,20);OLED_ShowString(20,5,"ADC3=",20);OLED_ShowNum(60,5,ADC12MEM3,4,20);//      __delay_cycles(1000000);  //延时1s
//      OLED_DrawBMP(0,0,127,7,BMP);//显示图片}__bis_SR_register(LPM0_bits + GIE);       __no_operation();}#if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
#pragma vector=ADC12_VECTOR__interrupt void ADC12ISR (void)
#elif defined(__GNUC__)
void __attribute__ ((interrupt(ADC12_VECTOR))) ADC12ISR (void)
#else
#error Compiler not supported!
#endif{static unsigned int index = 0;switch(__even_in_range(ADC12IV,34)){case  0: break;                           // Vector  0:  No interruptcase  2: break;                           // Vector  2:  ADC overflowcase  4: break;                           // Vector  4:  ADC timing overflowcase  6: break;                           // Vector  6:  ADC12IFG0case  8: break;                           // Vector  8:  ADC12IFG1case 10: break;                           // Vector 10:  ADC12IFG2case 12:                                  // Vector 12:  ADC12IFG3A0results[index] = ADC12MEM0;           // Move A0 results, IFG is clearedA1results[index] = ADC12MEM1;           // Move A1 results, IFG is clearedA2results[index] = ADC12MEM2;           // Move A2 results, IFG is clearedA3results[index] = ADC12MEM3;           // Move A3 results, IFG is clearedindex++;                                // Increment results index, modulo; Set Breakpoint1 hereif (index == 8){(index = 0);}case 14: break;                           // Vector 14:  ADC12IFG4case 16: break;                           // Vector 16:  ADC12IFG5case 18: break;                           // Vector 18:  ADC12IFG6case 20: break;                           // Vector 20:  ADC12IFG7case 22: break;                           // Vector 22:  ADC12IFG8case 24: break;                           // Vector 24:  ADC12IFG9case 26: break;                           // Vector 26:  ADC12IFG10case 28: break;                           // Vector 28:  ADC12IFG11case 30: break;                           // Vector 30:  ADC12IFG12case 32: break;                           // Vector 32:  ADC12IFG13case 34: break;                           // Vector 34:  ADC12IFG14default: break;}
}

CSDN CCS工程下载
也可以百度网盘 下载 提取码:8888。
感谢支持。
B站视频

MSP430 ADC采样-OLED显示

使用MSP430F5529的ADC测量,并用OLED显示传感器输出的模拟量相关推荐

  1. 基于Lattice XO2-4000HC FPGA核心板及电子森林综合训练底板的ADC数字电压表及OLED显示设计(Verilog)

    目录 :pushpin: 前言 :space_invader: 设计模块及设计思路 :fried_shrimp: ADC驱动及数码管显示模块:adc_driver2seg ADC驱动模块(已验证) 数 ...

  2. 烧录esp32 并用oled显示

    解压flash-download 百度云链接: 双击打开该程序链接:https://pan.baidu.com/s/1h79m6dPlLFkZI86xxC24wg  提取码:8888 解压文件后 选择 ...

  3. STM32实现0.96寸OLED显示模拟IIC和IIC四种实现(标准库和HAL库)

    目录 本文通过四种方法实现OLED显示 设备选择 OLED介绍 接线表设计 OLED应用 1.标准库模拟IIC实现OLED显示 2.标准库IIC实现OLED显示 3.HAL库模拟IIC实现OLED显示 ...

  4. STM32 Cube ADC 测量土壤湿度

    一 .说明 本来想买个温湿度模块,结果买了个湿度 - _ - ! 1. 什么是AD转换 AD转换是把离散的模拟量转换为数字量的过程,其原理就是使用单片机的高频率和时钟来采样x轴的点样,根据电压的变化使 ...

  5. STM32F407霸天虎HAL库学习笔记——使用ADC采集MQ135的数据并通过OLED显示

    STM32F407霸天虎HAL库学习笔记--使用ADC采集MQ135的数据并通过OLED显示 一.软件准备 二.硬件准备 三.CubeMX配置 四.Keil MQ135.c MQ135.h main函 ...

  6. 血氧心率测量仪(带温湿度测量功能)OLED显示

    血氧心率测量仪(带温湿度测量功能)OLED显示 原理图资料 模块说明 测试数据处理图 部分代码展示 资料包 原理图资料 模块说明 数字温湿度传感 DHT11 ►相对湿度和温度测量 ►全部校准,数字输出 ...

  7. 【开源工程】STM32C8T6+ADC信号采集+OLED波形显示

    [开源工程]STM32C8T6+ADC信号采集+OLED波形显示 通过手指皮肤接触探测输入引脚:PA7 PA8引脚上的方波输出 PB13引脚上的方波输出 PB13和PA8:互补型方波输出引脚 硬件搭建 ...

  8. 基于IIC和SPI协议的温湿度采集与OLED显示

    前言 环境 KEIL:5.0 FIyMcu:V0.993 开发板:STM32F103C8T6 器件 AHT-20 温湿度传感器 0.96英寸OLED屏幕 任务1内容 学习I2C总线通信协议,使用STM ...

  9. MSP430F5529 DriverLib 库函数I2C驱动OLED屏幕

    目录 I2C驱动代码 MSP430F5529_I2C.c MSP430F5529_I2C.h OLED初始化及测试 OLED驱动代码 OLED.c OLED.h OLED_Font.h 显示效果 平台 ...

最新文章

  1. ICLR2020 | 图池化没有考虑图结构?一文带你了解最新图池化STRUCTPOOL
  2. VTK:相互作用之Picking
  3. qt designer 插入图片_真的不错,宁波棉服图片
  4. HTML5中的audio在手机端和微信端的不能自动播放
  5. 分布式锁用Redis坚决不用Zookeeper?
  6. 【Elasticsearch】 es 7.6 索引墓碑
  7. react native ScrollView
  8. SQL到NoSQL概览性总结之一 数据库应用场景选型
  9. 动态三角形(动态规划思想入门)
  10. 《从零开始学Swift》学习笔记(Day 45)——重写方法
  11. iOS开发中的11种锁以及性能对比
  12. C++与STL简单介绍( C/C++机试)
  13. 论文中baseline是什么意思?
  14. linux系统下安装flash player插件下载安装,Linux16.0.4下安装Adobe Flash Player插件(Firefox)...
  15. 我看TechEd 2012之App时代降临
  16. 锐浪报表数据源access_学习锐浪报表之MySQL连接字符串的实际操作步骤汇总
  17. android 竖屏优先,android 强制设置横屏 判断是横屏还是竖屏
  18. 工伤单险可以单独缴纳?或者是面对非全用工形式的员工是否可以缴纳工伤单险?
  19. 农历 java_公历农历互相转换的Java日历工具类详解
  20. 物联网-移远m26使用MQTT协议,AT指令对接阿里云

热门文章

  1. Hibernate5的学习笔记(二)
  2. 程序猿的十年—新猿农计划
  3. 案例21:Java农产品供求信息系统设计与实现开题报告
  4. 安卓设备逐步升级Android 9,游戏产品该如何做适配?
  5. 【VSCode】yarn : 无法加载文件 A:\yuke\node\node_gobal\yarn.ps1,因为在此系统上禁止运行脚本。
  6. 牛津英语字典pdf下载_从1到18岁,这款牛津认证的免费APP是学英语最好的装备
  7. z-index细解:一个z-index的值很大为何却在一个很小的值下面?
  8. ClickOnce 程序安装路径
  9. Linux Shell 并行
  10. nginx参数sendfile