MSP430单片机输入/输出模块—通用I/O端口GPIO—LED&按键

发布者:水云间梦最新更新时间:2021-02-05 来源: eefocus关键字:MSP430  单片机  输入  输出模块  GPIO  LED 手机看文章 扫描二维码
随时随地手机看文章

一、原理图

 ●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


void LED_init(void);


void main(void)

{

    volatile unsigned int delay;


WDTCTL = WDTPW | WDTHOLD; // stop watchdog timer

LED_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


#define Pulse_Width 600


void LED_init(void);


void main(void)

{

    volatile unsigned int delay;


    unsigned int tH;


WDTCTL = WDTPW | WDTHOLD; // stop watchdog timer

LED_init();


while(1)

{

    for(tH=Pulse_Width;tH>0;tH--)   //由强到弱

    {

             P1OUT |= BIT0;  //输出1,亮灯

             for(delay=0;delay

             P1OUT &= ~BIT0;  //输出0,灭灯

             for(delay=0;delay<(Pulse_Width - tH);delay++);

     }


        for(tH=0;tH        {

             P1OUT |= BIT0;  //输出1,亮灯

             for(delay=0;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


#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 timer

LED_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)

{

    //S1

    P2DIR &= ~BIT1;  //置0 ,方向输入(默认)

    P2REN |= BIT1;  //置1 ,启用上下拉

    P2OUT |= BIT1;  //置1 ,选择上拉


    //S2

    P1DIR &= ~BIT1;  //置0 ,方向输入(默认)

    P1REN |= BIT1;  //置1 ,启用上下拉

    P1OUT |= BIT1;  //置1 ,选择上拉

}


关键字:MSP430  单片机  输入  输出模块  GPIO  LED 引用地址:MSP430单片机输入/输出模块—通用I/O端口GPIO—LED&按键

上一篇:IAR(MSP430)中的精确延时函数
下一篇:单片机MSP430入门理论⑧--定时器模块-定时器A③

推荐阅读最新更新时间:2024-11-09 11:49

LED显示幕选择指南
LED显示幕选择指南 LED大萤幕分类: (1)按使用环境分,室内显示幕,半室外显示幕,室外显示幕 (2)按色彩分,单色显示幕,双色显示幕,全彩显示幕 根据不同LED显示幕的特点,结合用户的实际需求,选择合适的显示幕。 一般来说,对於车站、码头、大的市场的出入口、电梯口的人流引导,使用φ5.0单色显示幕。具有字体清晰,价格低廉、机群控制的优点.对於银行,商场等场合展示企业形象、广告等应用,要求价格低廉,使用φ3.75双基色显示幕. 要求显示效果,使用φ5全彩色显示幕。对於大厅面积大的场合使用φ5双基色显示幕.要求显示效果,使用φ1O全彩色显示幕。对於银行、邮政、电力等营业大厅的服务视窗的功能定义,以前使用贴纸的方法,很不灵活。
[嵌入式]
单片机设计 电子琴音乐盒(AT89C51)
一、电路设计 此电路由AT89C51最小系统、按键模块、数码管显示和蜂鸣器组成。 实现功能:七个按键代表Do La Mi So Re La Si 最后一个按键代表切换音乐。 二、运行结果 三、部分代码 #include reg52.h #define uchar unsigned char #define uint unsigned int //#include main.h sbit BeepIO = P0^7; //定义音频输出管脚 sbit KEY1 = P1^0; //按键1 do sbit KEY2 = P1^1; //按键2 re sbit KEY3 = P1^2; //按键3 mi sbit KEY
[单片机]
<font color='red'>单片机</font>设计 电子琴音乐盒(AT89C51)
STM32系列MCU,写寄存器Or利用固件库
写在开头的话: 最近心血来潮,打算重新捡起老本行,结果发现很多都忘记了。干脆重新开始学习,并做个从零开始的笔记了。 STM32系列MCU STM32系列芯片包括F0/F1/F2/F3/F4/F7/L0/L1/L4/H7等系列芯片芯片。不同系列的芯片适用于不同的应用场景。F0/L0基于ARM Cortex®-M0,F1/F2/L1系列基于ARM Cortex®-M3,F3/F4/L4系列基于ARM Cortex®-M4,F7/H7基于ARM Cortex®-M7。L系列表示超低功耗,H表示超高性能(对应就是高功耗了),F就是个折中方案了,性能不错,功耗也不高。 其他的先不管,F1系列芯片主要分类如下: ·超值型STM32F100
[单片机]
STM32系列<font color='red'>MCU</font>,写寄存器Or利用固件库
单片机基础(二):单片机并行I/O口工作原理
并行I/O口的工作原理   此处的工作原理指:电路如何把逻辑上的0和1表示为引脚上的低电位和高电位,及如何把引脚上的高低电位转化为电路内部的高低电位来表示0和1 P1口 P1.0~P1.7的八个锁存器组成特殊功能寄存器P1(90H) P1口既可输出用,又可输入用 输出 内部总线输出0时,即D为0时,非Q为1,V1处为1,则场效应管导通,电位等于其等压降约等于零,则引脚P1.x为接近于地的0V电平 内部总线输出1时,即D为1时,非Q为0,V1栅极为0V,则场效应管V1断开,场效应管输出端的电平由Vcc和上拉电阻决定,Vcc5V经过上拉电阻,引脚P1.x出输出5V高电平 输入   信号走向如图示经锁存器到D触发器,则需
[单片机]
<font color='red'>单片机</font>基础(二):<font color='red'>单片机</font>并行I/O口工作原理
51单片机STC89C52定时器中断法扫描数码管及秒表的实现
定时器中断法扫描数码管及秒表的实现 程序源码 /*-----------------------包含头文件区域-------------------------*/ #include reg52.h //单片机头文件 /*-----------------------数据类型定义区域-----------------------*/ typedef unsigned char u8; //定义类型unsigned char别名为u8 typedef unsigned int u16; //定义类型unsigned int别名为u16 /*-----------------------用户自定义数据区域----
[单片机]
51<font color='red'>单片机</font>STC89C52定时器中断法扫描数码管及秒表的实现
STC15单片机测频率
测量频率 我这里用到了一个计数器,一个定时器,看一下图片 C/T 主要是用来选择是定时器还是计数器,置0为定时器使用,置1为计数器使用,这里我把定时器0作为计数器,定时器1作为定时器来使用,可以令TMOD=0X04; P34引脚是定时器0作为计数器时对外部脉冲进行计数,每来一个脉冲就让计数的值加1,定时器1定时1s后脉冲的个数就是测得的频率 #include typedef unsigned char uchar; typedef unsigned int uint; uchar code smg ={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};
[单片机]
STC15<font color='red'>单片机</font>测频率
定时计数器_单片机_普中
1 定时/计数器介绍 定时/计数器的实质是加1计数器(16位),由高8位和低8位两个寄存器THX和TLX组成。它随着计数器的输入脉冲进行自加1,也就是每来一个脉冲,计数器就自动加1,当加到计数器为全1时,再输入一个脉冲就使计数器回零,且计数器的溢出使相应的中断标志位置1(产生一个溢出标志),向CPU发出中断请求(定时/计数器中断运行时)。如果定时/计数器工作于定时模式,则表示定时时间已到;如果工作于计数模式,则表示计数值已满。 (1)CPU时序的有关知识 ①时钟周期/振荡周期:时钟周期又叫做振荡周期、节拍周期,定义为时钟晶振频率的倒数。时钟周期是计算机中最基本的、最小的时间单位。在一个时钟周期内,CPU仅完成一个最基本的动作。例如
[单片机]
51单片机好学嘛?学完51单片机学什么?
作为一个资深的老工程师,我还是要客观地回答一下这个问题。 关于的“0基础15天学会单片机”等一些相关话题,我还是不能苟同的。 如果是0基础,没有1-2个月,是不可能掌握单片机开发的,甚至要花更多的时间。 我和大家一样,也是从0基础开始学习的,那个时候没有人带,仅C语言这块的学习就花了2个月,单片机的内部资源又花了2个月,前前后后花了大概半年时间,才入门单片机的开发。 51单片机 好学不好学? 必须要看个人的实际情况和学习的恒心。 如果理科毕业的学生,电路基础、C语言比较好的同学,学习单片机相对是比较容易的。 当然,好学不好学是一个话题,能不能学会又是另外一个话题,如果你是0基础,如果你愿意多花点时间去学习,学会单片机是没有问题
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved