查看: 3125|回复: 1

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

[复制链接]
  • TA的每日心情
    无聊
    2014-5-18 22:32
  • 签到天数: 257 天

    连续签到: 1 天

    [LV.8]以坛为家I

    发表于 2014-1-15 22:00:43 | 显示全部楼层 |阅读模式
    分享到:
    【Energia开发环境】MSP430 LAUNCHPAD学习笔记2--Lab2 KEY control LED1
    材料:
    MSP430 LAUNCHPAD x 1
    LED1(P1.0)
    KEY(P1.3)
    实验目的:让MSP430 LAUNCHPAD的P1.0 Y有按键S2控制亮灭
    原理图如下:
    图片1.png
    原理分析:为保持按键在没有按下时,P1.3引脚保持高电平,所以在引脚上加了一个上拉电阻。如果有按键按下,S2又与GND相连,所以引脚P1.3会由原来的高电平转变为低电平,由此可以判断有按键按下了。
    捕获.PNG
    程序如下
    /******************************************************************
      KEY control
      【Energia开发环境】MSP430 LAUNCHPAD学习笔记2--Lab2 KEY control LED1
       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);
        }
      }
    }
    程序写完了,编译下载,观看实验现象吧。
    在处理按键相应的程序时,为防止按键抖动造成误操作,一般都作一个延时去抖处理。
    按键去抖_副本.jpg
    延时一般都在5ms~20ms,这样单片机能够正确读取高低电平。
    QQ截图20140115215619.png
    在程序一定要将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。
    本次实验所用到的语法请自行查阅
                                                                      
    By qinkaiabc
    【Energia开发环境】MSP430 LAUNCHPAD学习笔记2--Lab2 KEY control LED2.pdf (260.21 KB, 下载次数: 25)
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2023-12-3 18:51
  • 签到天数: 772 天

    连续签到: 1 天

    [LV.10]以坛为家III

    发表于 2014-1-16 04:21:53 | 显示全部楼层
    顶顶顶,我顶顶顶
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-5-18 16:15 , Processed in 0.120276 second(s), 17 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.