5.0 按键控制LED灯

实例3—按键控制LED灯—–程序目的:学会如何配置IO为输入与打开上拉电阻

由原理图而知,KEY1接在P1.0上可设置为外部中断按键,KEY2接在P6.3为普通按键,另一端则接在地,也就是说按键为低电平触发,并且没有外加上拉电阻。这就意味我们要使用内部上拉电阻提供在按键释放时的高电平状态,下面我们具体来看看如何配置按键的IO。
我们单独编写个key.c与key.h文件,下面直接贴出代码:

//独立按键底层驱动文件

#include <msp430f249.h>

#include “delay.h”
#include “key.h”
//按键初始化
void Key_Init(void)
{
        P1SEL &= ~BIT0;//设置P1.0IO口为普通I/O模式
        P1DIR &= ~BIT0;//设置P1.0IO口方向为输入
        P1REN |= BIT0;//使能P1.0的内部电阻
        P1OUT |= BIT0;//设置P1.0内部上拉电阻为上拉方式
        P6SEL &= ~BIT3;//设置P6.3IO口为普通I/O模式
        P6DIR &= ~BIT3;//设置P6.3IO口方向为输入
        P6REN |= BIT3;//使能P6.3的内部电阻
        P6OUT |= BIT3;//设置P6.3内部上拉电阻为上拉方式
}
//按键扫描
u8 Kek_Scan(void)
{
        static u8 KeyUpFlag = 1;//按键按松开标志        
        if(KeyUpFlag && (!KEY1_I || !KEY2_I))
        {
                Delay_ms(10);//软件去抖
                KeyUpFlag = 0;
                if(!KEY1_I) return 1;
                if(!KEY2_I) return 2;
        }
        else if(KEY1_I && KEY2_I) KeyUpFlag = 1;
        return 0;
}
此按键扫描里有一个KeyUpFlag按键松开标记,主要是为了防止按键一直按住不放而影响外设运行。不推荐大家使用用while(KEY1_I ==0)这种语句判断按键释放,因为这样会死在while语句里,如果外设带有需要快速扫描设备时就被影响,比如是数码管,相信大伙都遇过这种现象,特别是初学者,很多时候都不会去释放CPU,对于一些延时建议多用定时器来做。
//独立按键底层驱动头文件
#ifndef __KEY_H
#define __KEY_H
#include “msp430type.h”
//IO口定义
#define KEY1_I  (P1IN & BIT0)//按键1输入
#define KEY2_I  (P6IN & BIT3)//按键2输入
//按键初始化
void Key_Init(void);
//按键扫描
u8 Kek_Scan(void);
#endif
再看就是主函数:
#include <msp430f249.h>
#include “msp430type.h”
#include “system.h”
#include “delay.h”
#include “led.h”
#include “key.h”
//主函数
void main(void)
{
        u8 Key = 0;
        
        Wdt_Off();//关闭看门狗
        Clock_Init();//系统时钟初始化
        Led_Init();//led灯初始化
        Key_Init();//按键初始化       
        while(1)
        {
                Key = Kek_Scan();//按键扫描
                switch(Key)
                {
                case 1:
                        LED_L;//点亮led灯
                        break;
                case 2:
                        LED_H;//熄灭led灯
                        break;
                default:
                        break;                        
                }
        }
}
主函数用到了switch开关语句,只要符合条件就进入,否则我连门都不让你进。实现功能很简单,按下按键1则点亮led灯,按键2就熄灭led灯。
按键输入控制LED灯课程完结。源程序: 

5.0 按键控制LED灯 003 key.rar (222.3 KB, 下载次数: 0)     学习讨论Q群:167390222     2014年7月2日

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2014年6月2日
下一篇 2014年6月3日

相关推荐