MSP430 MSP430单片机输入/输出模块 通用I/O端口GPIO LED按键
DO OR DIE
MSP430 MSP430单片机输入/输出模块 通用I/O端口GPIO LED&按键
- 一、原理图
- 二、I/O端口常用操作C语言描述及常用C语言解析
- 1、MSP430头文件中的标准位
- 2、I/O端口常用操作C语言描述
- 三、实验
- 1、LED交替闪烁
- 2、呼吸灯
- 3、独立按键控制LED亮灭
- 4、矩阵按键
一、原理图
●MSP430F5529 LaunchPad实验板上仅有的两个独立按键和LED。
二、I/O端口常用操作C语言描述及常用C语言解析
1、MSP430头文件中的标准位
在每一个具体的430型号单片机的头文件中都可以找到(如msp430F5529.h
)。
/************************************************************
* STANDARD BITS
************************************************************/#define BIT0 (0x0001)
#define BIT1 (0x0002)
#define BIT2 (0x0004)
#define BIT3 (0x0008)
#define BIT4 (0x0010)
#define BIT5 (0x0020)
#define BIT6 (0x0040)
#define BIT7 (0x0080)
#define BIT8 (0x0100)
#define BIT9 (0x0200)
#define BITA (0x0400)
#define BITB (0x0800)
#define BITC (0x1000)
#define BITD (0x2000)
#define BITE (0x4000)
#define BITF (0x8000)/***********************************************************
2、I/O端口常用操作C语言描述
总结:
xxxx |= BITx
//置1
xxxx &= ~BITx
//置0
例1
将P1.0口定义为输出且为高电平:
P1DIR |= 0x01;
P1OUT |= 0x01;
或用标准位表示:
P1DIR |= BIT0;
P1OUT |= BIT0;
例2
将P1.7口定义为输入且为低电平:
P1DIR &= ~BIT7;
P1OUT &= ~BIT7;或
P1DIR |= 0x7F;
P1OUT |= 0x7F;
例3
将P1.0,P1.1口定义为输出且为高电平:
P1DIR |= BIT0+BIT1;
P1OUT |= BIT0+BIT1;或
P1DIR |= 0x03;
P1OUT |= 0x03;
例4
将P1.0,P1.1口定义为输入且为低电平:
P1DIR &= ~(BIT0+BIT1);
P1OUT &= ~(BIT0+BIT1);或
P1DIR |= 0xfc;
P1OUT |= 0xfc;
例5
将一位或几位翻转,比如原来P1.0是高(低)电平,现在要变成低(高)电平
P1OUT ^= BIT0;
例6
检测一位或几位是否为1,一般用于条件或判断语句中。
if(P1IN & BIT0) //检测P1.0是否为1
三、实验
1、LED交替闪烁
#include <msp430F5529.h>void LED_init(void);void main(void)
{volatile unsigned int delay;WDTCTL = WDTPW | WDTHOLD; // stop watchdog timerLED_init();while(1){P1OUT ^= BIT0; //取反P4OUT ^= BIT7; //取反for(delay=0;delay<50000;delay++);}
}void LED_init(void)
{P1DIR |= BIT0; //置1 ,方向输出P1OUT &= ~BIT0; //输出0,灭灯P4DIR |= BIT7; //置1 ,方向输出P4OUT |= BIT7; //输出1,亮灯}
2、呼吸灯
#include <msp430F5529.h>#define Pulse_Width 600void LED_init(void);void main(void)
{volatile unsigned int delay;unsigned int tH;WDTCTL = WDTPW | WDTHOLD; // stop watchdog timerLED_init();while(1){for(tH=Pulse_Width;tH>0;tH--) //由强到弱{P1OUT |= BIT0; //输出1,亮灯for(delay=0;delay<tH;delay++);P1OUT &= ~BIT0; //输出0,灭灯for(delay=0;delay<(Pulse_Width - tH);delay++);}for(tH=0;tH<Pulse_Width;tH++) //由弱到强{P1OUT |= BIT0; //输出1,亮灯for(delay=0;delay<tH;delay++);P1OUT &= ~BIT0; //输出0,灭灯for(delay=0;delay<(Pulse_Width - tH);delay++);}}
}void LED_init(void)
{P1DIR |= BIT0; //置1 ,方向输出P1OUT &= ~BIT0; //输出0,灭灯P4DIR |= BIT7; //置1 ,方向输出P4OUT |= BIT7; //输出1,亮灯}
3、独立按键控制LED亮灭
●MSP430每个IO口都具有方向,读取外部电平时,需要先将IO口设置为输入方向,又由于板子上的按键没有接上拉电阻,为时使读取结果更加准确,使用内部上拉电阻。
●重点在void key_init(void);
函数
●用软件延时去写长按短按,单击双击感觉误差挺大的,意义不大,不如用定时器去写。
●关于独立按键的原理可参考 独立按键的原理
#include <msp430F5529.h>#define Delay10ms() for(delay=0;delay<500;delay++)void LED_init(void);
void key_init(void);void main(void)
{volatile unsigned int delay;WDTCTL = WDTPW | WDTHOLD; // stop watchdog timerLED_init();key_init();while(1){if((P2IN & BIT1) == 0){Delay10ms();if((P2IN & BIT1) == 0){P1OUT ^= BIT0; //取反P4OUT ^= BIT7; //取反while(!(P2IN & BIT1)); //松手检测}}}
}void LED_init(void)
{P1DIR |= BIT0; //置1 ,方向输出P1OUT &= ~BIT0; //输出0,灭灯P4DIR |= BIT7; //置1 ,方向输出P4OUT &= ~BIT7; //输出0,灭灯}void key_init(void)
{//S1P2DIR &= ~BIT1; //置0 ,方向输入(默认)P2REN |= BIT1; //置1 ,启用上下拉P2OUT |= BIT1; //置1 ,选择上拉//S2P1DIR &= ~BIT1; //置0 ,方向输入(默认)P1REN |= BIT1; //置1 ,启用上下拉P1OUT |= BIT1; //置1 ,选择上拉
}
4、矩阵按键
MSP430 MSP430单片机输入/输出模块 通用I/O端口GPIO LED按键相关推荐
- 按键自加自减的c语言数码管编程,设计一个单片机输入显示系统,要求每按一下按键数码管显示数据加1(数码管初始值为0,9加1 后显示0)。...
程序清单如下: #include < reg51.h >// 51单片机头文件 #define uchar unsigned char// 宏定义,用uchar替代无符号字符型 #defi ...
- 【51单片机快速入门指南】2:GPIO LED与按键
目录 硬知识 概念 I/O口配置 准双向口/弱上拉输出配置 开漏输出配置 实战 延时函数的生成 闪烁一个LED灯 源码 实验现象 流水灯 源码 实验现象 按键控制LED灯 按键介绍 源码 实验现象 普 ...
- MSP430系列单片机的DMA使用全面认识
快速参考目录 DMA的解释 MSP430系列单片机中的DMA MSP430 DMA控制器的特性 DMA的应用 明确你得需求 一个能用起来的官方例程 待续 DMA的解释 DMA(Direct Memor ...
- 单片机_CT107D训练平台电路原理图\蓝桥杯训练板\输入输出模块\矩阵按键\蜂鸣器电路\继电器电路\LM386功率放大电路,驱动扬声器
输入/输出模块 配置 4×4 键盘矩阵,其中四个按键可通过跳线配置为独立按键: 配置继电器.蜂鸣器: 配置功率放大电路,驱动扬声器. 1>4×4 键盘矩阵原理图如下: 图片中的按键电路可以切换成 ...
- MSP432输入输出模块
第6章MsP432微控制器输入输出模块 单片机中的输入输出模块是供信号输入.输出所用的模块化单元.MsP432单片机的片内输入输出模块非常丰富,典型的输入输出模块有:通用O端口.模/数转换模块.比较器 ...
- 单片机c语言中void key(void),STC单片机C语言通用万能编程模板
<STC单片机C语言通用万能编程模板>由会员分享,可在线阅读,更多相关<STC单片机C语言通用万能编程模板(23页珍藏版)>请在人人文库网上搜索. 1.8051 单片机 C 语 ...
- 单片机的字节寻址c语言,单片机C语言通用万能编程模板
<单片机C语言通用万能编程模板>由会员分享,可在线阅读,更多相关<单片机C语言通用万能编程模板(30页珍藏版)>请在人人文库网上搜索. 1.8051单片机C语言编程模板 1.函 ...
- ethercat从站io输入输出模块,lan9252,stm32f407,提供原理图,源代码及相关资料
ethercat从站io输入输出模块,lan9252,stm32f407,提供原理图,源代码及相关资料 编号:41419628426794133博文丽娜
- plc开关量输入输出模块的选择
①开关输入模块的选择. 开关输入模块用于接收现场输入设备的开关信号,将信号转换为plc可接受的低压信号,实现PLC内外信号的电气隔离.选择时应考虑以下几个方面. ●输入信号的类型和电压等级开关输入模块 ...
最新文章
- 常用git命令思维图
- aggr代码 cellranger_单细胞转录组测序数据分析流程-数据预处理
- Maven快速创建SpringMVC web(1)
- 深度学习100例-生成对抗网络(GAN)手写数字生成 | 第18天
- react(87)--批量删除进行置空操作
- 会php学java入门要多久_php8(java入门要多久)
- LeetCode MySQL 1454. 活跃用户(连续dense_rank排名函数)
- 微信小程序:页面跳转时传递数据到另一个页面
- zbb20170228_spring_tdt
- 搜索宝典:搜索资料的三重境界【帮助高级篇】
- iText操作Word工具类
- 量子计算是否会终结区块链?
- PAT 乙级 1039. 到底买不买(20)Java版
- DHTML【6】--CSS
- android studio 快捷键修改
- Android deeplink原理解析
- 个人所得税计算java版
- 关于即将到来的软件行业的降维打击的几点想法
- 规范化理论:范式等级
- Kubernetes 三大探针及探针方式
热门文章
- Arduino简单实现两自由度Scara机器人
- 股票作手操盘术-勘误
- 2022年3月青少年软件编程(Python)等级考试试卷(一级真题)
- macbook苹果电脑新手快速上手
- 一个数组实现两个栈(共享栈)
- 这就是2020:全球云计算十一大年度话题盘点
- 微信如何添加企业微信信息服务器地址,企业微信怎么添加管理员 设置方法介绍...
- 基于Ext的开发实例_模拟Windows桌面
- win10家庭版 QQ2021和TIM QQ登入后马上提示恢复上次意外关闭信息,然后就卡死奔溃闪退。
- Centos7下的zabbix安装与部署