搜索
bottom↓
回复: 4

【Energia开发环境】MSP430 LAUNCHPAD学习笔记2--Lab2 KEY control LED1

[复制链接]

出0入0汤圆

发表于 2014-1-15 22:00:57 | 显示全部楼层 |阅读模式
本帖最后由 qinkaiabc 于 2014-1-15 22:01 编辑

【Energia开发环境】MSP430 LAUNCHPAD学习笔记2--Lab2 KEY control LED1
材料:
MSP430 LAUNCHPAD x 1
LED1(P1.0)
KEY(P1.3)

实验目的:让MSP430 LAUNCHPAD的P1.0 Y有按键S2控制亮灭
原理图如下:


   原理分析:为保持按键在没有按下时,P1.3引脚保持高电平,所以在引脚上加了一个上拉电阻。如果有按键按下,S2又与GND相连,所以引脚P1.3会由原来的高电平转变为低电平,由此可以判断有按键按下了。





程序如下
/******************************************************************
  KEY control
  【Energia开发环境】MSP430 LAUNCHPAD学习笔记2--Lab2 KEY control LED1
   网址: http://home.eeworld.com.cn/?action-bbs
   P1.0 -> LED1
   P1.3 -> KEY
********************************************************************/
/*初始化设置函数*/
void setup()
{               
  // 初始化P1.0(LED1)引脚方向为输出
  pinMode(P1_0, OUTPUT);   
  digitalWrite(P1_0,LOW);//先将LED1熄灭
  // 初始化P1.3(KEY)引脚方向为输入
  pinMode(P1_3,INPUT_PULLUP);
  //INPUT_PULLUP表示内部上拉电阻
}
/*循环函数*/
void loop()
{
  if(digitalRead(P1_3)==LOW)
  {
    //延时去抖
    delay(10);
    if(digitalRead(P1_3)==LOW)//有键按下则点亮LED1
    {  
      digitalWrite(P1_0,HIGH);
    }
    else
    {
      digitalWrite(P1_0,LOW);
    }
  }
}
程序写完了,编译下载,观看实验现象吧。






   在处理按键相应的程序时,为防止按键抖动造成误操作,一般都作一个延时去抖处理。


延时一般都在5ms~20ms,这样单片机能够正确读取高低电平。



   
   在程序一定要将P1.3的模式设置为输入并且加上内部上拉电阻(INPUT_PULLUP),以确保P1.3引脚的电平稳定。如果你将程序改成这样:
   /********************************************************
   // 初始化P1.3(KEY)引脚方向为输入
     pinMode(P1_3,INPUT);
   *********************************************************/
   没有设置上拉电阻的话,你会发现你写的程序和你预期的不一样。你试着用手指靠近MSP430 LAUNCHPAD的P1.3的引脚,当你快要碰到引脚的时候,你会发现LED1的状态突然改变了,你又试着靠近,LED1又变了,很神奇吧!对于这个问题,主要就是没有加上拉电阻的原因。关于这样现象,你可以查看这个帖子:是不是有点心灵感应的味道!
   
   
   

没有设置上下拉,是静电在作怪哦
MSP430单片机IO口用来检测高低电平时,是不需要外部上拉下拉的,因为其内部有上拉和下拉。 在用作高低电平检测时,需要开启上拉或下拉。如果有效状态为高电平,则需要配置为REN为上拉使能,且配置OUT为0,即设置为下拉。如果有效状态为低电平,则需啊哟配置REN为使能,且OUT位1,即设置为上拉。 如果不开启内部上则IO可能出现不固定状态。譬如,当IO被输入高后,外部输入被撤除,但IO寄存器仍然为高。
注意:这里出现的情况是给IO输入高电平后,外部输入撤离,但是IO寄存器IN仍然保持高电平,而是用万用表量电压后,IO变为0.
出现这个情况的原因是IO对地串联了一个3K电阻和100nf电容,外部输入是加在电阻和电容的连接处的。应该是由外部输入时,对电容充电,外部输入撤离后电容保持该电压。









digitalRead函数原型:
   digitalRead函数用在引脚为输入的情况下,可以获取引脚的电压情况—HIGH(高电平)或LOW(低电平),参数pin表示所要获取电压值的引脚,该函数返回值为int型,表示引脚的电压情况。函数原型如下:
int digitalRead(uint8_t pin)
{
        uint8_t bit = digitalPinToBitMask(pin);
        uint8_t port = digitalPinToPort(pin);

        if (port == NOT_A_PORT) return LOW;

        if (*portInputRegister(port) & bit) return HIGH;
        return LOW;
}
注意:如果引脚没有链接到任何地方,那么将随机返回HIGH或LOW。

本次实验所用到的语法请自行查阅
http://arduino.cc/en/Reference/DigitalRead

                                                                  

  By qinkaiabc







本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

阿莫论坛才是最爱国的,关心国家的经济、社会的发展、担心国家被别国牵连卷入战争、知道珍惜来之不易的和平发展,知道师夷之长,关注世界的先进文化与技术,也探讨中国文化的博大精深,也懂得警惕民粹主义的祸国殃民等等等等,无不是爱国忧民的表现。(坛友:tianxian)

出0入0汤圆

发表于 2014-2-27 14:37:55 | 显示全部楼层
我之前就是没有内部上拉,导致无法检测按键是否被按下,写的很详细,赞一个

出0入0汤圆

发表于 2014-4-20 10:33:59 | 显示全部楼层
Value Line 系列 ,CCS有免费的版本吧,Energia是什么开发环境?

出0入0汤圆

发表于 2014-4-21 16:48:24 | 显示全部楼层
顶。
打算买一块板子,学习一下。

出0入0汤圆

发表于 2014-4-21 23:30:51 | 显示全部楼层
有空的时候看看
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-16 17:20

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表