1997|0

6809

帖子

0

TA的资源

五彩晶圆(高级)

楼主
 

MSP430单片机按键测试KEY函数 [复制链接]

本帖最后由 Jacktang 于 2019-2-15 20:24 编辑

MSP430单片机KEY函数


单片机源程序如下:
/********************************************************************
//DM430-L型最小系统板4位独立按键测试程序,采用查询模式
//按不同的按键,显示不同的LED灯,具体请看程序
//调试环境:EW430 V5.30
//时间:2014.03.01
********************************************************************/


#include
#include "Config.h"


uchar key;


//*************************************************************************
//        初始化IO口子程序
//*************************************************************************
void Port_init()
{


  P1SEL = 0x00;                   //P1普通IO功能
  P1DIR = 0xF0;                   //P10~P13输入模式,外部电路已接上拉电阻
  P6SEL = 0x00;                   //P6口普通IO功能
  P6DIR = 0xFF;                   //P6口输出模式
}


//**********************************************************************
//        键盘扫描子程序,采用逐键扫描的方式
//**********************************************************************


uchar Key_Scan(void)
{
  uchar key_check;
  uchar key_checkin;
  key_checkin=KeyPort;                  //读取IO口状态,判断是否有键按下
  key_checkin&= 0x0F;                          //读取IO口状态,判断是否有键按下
  if(key_checkin!=0x0F)                    //IO口值发生变化则表示有键按下
    {
      delay_ms(20);                          //键盘消抖,延时20MS
      key_checkin=KeyPort;
      if(key_checkin!=0x1F)
        {  
          key_check=KeyPort;
          switch (key_check & 0x0F)
            {
              case 0x0E:key=1;break;
              case 0x0D:key=2;break;
              case 0x0B:key=3;break;
              case 0x07:key=4;break;
            }
         
        }
      
   }
  else
   {
     key=0xFF;        
   }
  return key;
}
//*************************************************************************
//                主程序
//*************************************************************************


void main(void)
{     
  WDT_Init();                            //看门狗设置
  Clock_Init();                          //系统时钟设置
  Port_init();                           //系统初始化,设置IO口属性
  delay_ms(100);                         //延时100ms
  while(1)
    {
      Key_Scan();                       //键盘扫描,看是否有按键按下
      if(key!=0xff)                     //如果有按键按下,则显示该按键键值1~4
        {
          {
            switch(key)
              {
                case 1: LED8 = 0xFC;break;        //给不同的键赋键值,键值1,亮2个LED灯
                case 2: LED8 = 0xF3;break;        //给不同的键赋键值,键值2,亮2个LED灯
                case 3: LED8 = 0xCF;break;         //给不同的键赋键值,键值3,亮2个LED灯
                case 4: LED8 = 0x3F;break;         //给不同的键赋键值,键值4,亮2个LED灯
              }


          }
        
       }
     else
      {
        //LED=key;                      //没有按键的时候显示上次的键值
      }
    }


}

 
点赞 关注

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

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