使用MSP430F5529的ADC测量,并用OLED显示传感器输出的模拟量
导语
最近在用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显示传感器输出的模拟量相关推荐
- 基于Lattice XO2-4000HC FPGA核心板及电子森林综合训练底板的ADC数字电压表及OLED显示设计(Verilog)
目录 :pushpin: 前言 :space_invader: 设计模块及设计思路 :fried_shrimp: ADC驱动及数码管显示模块:adc_driver2seg ADC驱动模块(已验证) 数 ...
- 烧录esp32 并用oled显示
解压flash-download 百度云链接: 双击打开该程序链接:https://pan.baidu.com/s/1h79m6dPlLFkZI86xxC24wg 提取码:8888 解压文件后 选择 ...
- STM32实现0.96寸OLED显示模拟IIC和IIC四种实现(标准库和HAL库)
目录 本文通过四种方法实现OLED显示 设备选择 OLED介绍 接线表设计 OLED应用 1.标准库模拟IIC实现OLED显示 2.标准库IIC实现OLED显示 3.HAL库模拟IIC实现OLED显示 ...
- STM32 Cube ADC 测量土壤湿度
一 .说明 本来想买个温湿度模块,结果买了个湿度 - _ - ! 1. 什么是AD转换 AD转换是把离散的模拟量转换为数字量的过程,其原理就是使用单片机的高频率和时钟来采样x轴的点样,根据电压的变化使 ...
- STM32F407霸天虎HAL库学习笔记——使用ADC采集MQ135的数据并通过OLED显示
STM32F407霸天虎HAL库学习笔记--使用ADC采集MQ135的数据并通过OLED显示 一.软件准备 二.硬件准备 三.CubeMX配置 四.Keil MQ135.c MQ135.h main函 ...
- 血氧心率测量仪(带温湿度测量功能)OLED显示
血氧心率测量仪(带温湿度测量功能)OLED显示 原理图资料 模块说明 测试数据处理图 部分代码展示 资料包 原理图资料 模块说明 数字温湿度传感 DHT11 ►相对湿度和温度测量 ►全部校准,数字输出 ...
- 【开源工程】STM32C8T6+ADC信号采集+OLED波形显示
[开源工程]STM32C8T6+ADC信号采集+OLED波形显示 通过手指皮肤接触探测输入引脚:PA7 PA8引脚上的方波输出 PB13引脚上的方波输出 PB13和PA8:互补型方波输出引脚 硬件搭建 ...
- 基于IIC和SPI协议的温湿度采集与OLED显示
前言 环境 KEIL:5.0 FIyMcu:V0.993 开发板:STM32F103C8T6 器件 AHT-20 温湿度传感器 0.96英寸OLED屏幕 任务1内容 学习I2C总线通信协议,使用STM ...
- MSP430F5529 DriverLib 库函数I2C驱动OLED屏幕
目录 I2C驱动代码 MSP430F5529_I2C.c MSP430F5529_I2C.h OLED初始化及测试 OLED驱动代码 OLED.c OLED.h OLED_Font.h 显示效果 平台 ...
最新文章
- ICLR2020 | 图池化没有考虑图结构?一文带你了解最新图池化STRUCTPOOL
- VTK:相互作用之Picking
- qt designer 插入图片_真的不错,宁波棉服图片
- HTML5中的audio在手机端和微信端的不能自动播放
- 分布式锁用Redis坚决不用Zookeeper?
- 【Elasticsearch】 es 7.6 索引墓碑
- react native ScrollView
- SQL到NoSQL概览性总结之一 数据库应用场景选型
- 动态三角形(动态规划思想入门)
- 《从零开始学Swift》学习笔记(Day 45)——重写方法
- iOS开发中的11种锁以及性能对比
- C++与STL简单介绍( C/C++机试)
- 论文中baseline是什么意思?
- linux系统下安装flash player插件下载安装,Linux16.0.4下安装Adobe Flash Player插件(Firefox)...
- 我看TechEd 2012之App时代降临
- 锐浪报表数据源access_学习锐浪报表之MySQL连接字符串的实际操作步骤汇总
- android 竖屏优先,android 强制设置横屏 判断是横屏还是竖屏
- 工伤单险可以单独缴纳?或者是面对非全用工形式的员工是否可以缴纳工伤单险?
- 农历 java_公历农历互相转换的Java日历工具类详解
- 物联网-移远m26使用MQTT协议,AT指令对接阿里云
热门文章
- Hibernate5的学习笔记(二)
- 程序猿的十年—新猿农计划
- 案例21:Java农产品供求信息系统设计与实现开题报告
- 安卓设备逐步升级Android 9,游戏产品该如何做适配?
- 【VSCode】yarn : 无法加载文件 A:\yuke\node\node_gobal\yarn.ps1,因为在此系统上禁止运行脚本。
- 牛津英语字典pdf下载_从1到18岁,这款牛津认证的免费APP是学英语最好的装备
- z-index细解:一个z-index的值很大为何却在一个很小的值下面?
- ClickOnce 程序安装路径
- Linux Shell 并行
- nginx参数sendfile