⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 MSP430驱动四乘四按键的源程序
💻 C
字号:
//-----------------------函数声明,变量定义--------------------------------------------------------
 #include <msp430x14x.h>
//-----------------------变量声明---------------------------------------------------------------------
unsigned char scan_key(void);    //扫描键盘,返回键值(高四位代表行,低四位代表列)
void delay(unsigned  int n);//延时子程序,实现(16*N+24)us的延时
void key_manage(unsigned char keycode); //键盘散转
void system_init(void);
void init_key(void);
void manage_key1(void);      //按键1处理程序
void manage_key2(void);      //按键2处理程序
void manage_key3(void);      //按键3处理程序
void manage_key4(void);      //按键4处理程序
void manage_key5(void);
void manage_key6(void);
void manage_key7(void);
void manage_key8(void);
void manage_key9(void);
void manage_key10(void);
void manage_key11(void);
void manage_key12(void);
void manage_key13(void);
void manage_key14(void);
void manage_key15(void);
void manage_key16(void);
//...........每个按键对应一个处理程序,这里
#define uchar unsigned char 
#define uint  unsigned int
uchar t;
//-------------------------------- ------------------------------------------------------------------
// 函数名称: delay
// 入口参数: N
// 函数功能:延时子程序,实现(16*N+24)us的延时
// 系统采用11.0592MHz的时钟时,延时满足要求,其它情况需要改动
//--------------------------------------------------------------------------------------------------
  void delay(unsigned  int n)
  {
  int i;
  for(i=0;i<N;i++);
  }
//--------------------------------------------------------------------------------------------------
// 函数名称: system_init()
// 函数功能: 初始化设置
//--------------------------------------------------------------------------------------------------
  void system_init(void )
             {
              init_key();    //初始化按键端口
              _EINT();       //打开全局中断控制端口
               }
//--------------------------------------------------------------------------------------------------
// 函数名称: init_key()
// 函数功能: 初始化设置
//--------------------------------------------------------------------------------------------------
  void  init_key(void)
  {
    P1DIR=0x0f;      //p1.0-.3为输出模式,而p1.4-.7为输入模式
    P1OUT&=0xf0;     //p1.0-.3输出低电平
    P1IES=0xff;      //电平由高到低使标志置位
    P1IE=0xf0;       //允许中断请求
    P1IFG=0x00;      //手动复位中断标志位
  }
//--------------------------------------------------------------------------------------------------
// 函数名称: PORT1_intrupt
// 函数功能: P1中断处理程序
//--------------------------------------------------------------------------------------------------
#pragma  vector=PORT1_VECTOR
  __interrupt void Port1(void)
    { 
      uchar key;
      _DINT();         //系统中断禁止
      delay(1000);     //键盘消抖动
      if((P1IN&&0xf0)!=0xf0)  //判断是否干扰
	{           //的确有健按下
	key=scan_key();
        key_manage(key);
        while((P1IN&0xf0)!=0xf0);//等待键盘释放
	 }
	system_init();
}
//--------------------------------------------------------------------------------------------------
// 函数名称: scan_key
// 函数功能: //扫描键盘,返回键值(高四位代表行,低四位代表列)
//--------------------------------------------------------------------------------------------------
unsigned char scan_key(void)              //扫描键盘,返回键值(高四位代表行,低四位代表列)
  {
   uchar scancode,keycode;
   scancode=0xf7;                    //键盘扫描码,采用逐行扫描的方法
   while(scancode!=0x1e)
   {
   P1OUT=scancode;                       //输入扫描码,扫描P1.4对应的行
   if((P1IN&0xf0)!=0xf0)
   break;                             //扫描到按下的键,则退出
   scancode=(scancode<<1);        //否则,更新扫描码继续扫描
   }
   keycode=~((P1IN&0xf0)|(scancode&0x0f));
   return(keycode);
   }
//--------------------------------------------------------------------------------------------------
// 函数名称: key_manage
// 入口参数: keycode 扫描键盘返回的键值(高四位代表行,低四位代表列)
// 函数功能: 键盘散转
//--------------------------------------------------------------------------------------------------
void key_manage(unsigned char keycode)
     {
	 switch(keycode)
	 {
         case 0x11: manage_key1();break;
	 case 0x12: manage_key2();break;
	 case 0x14: manage_key3();break;
	 case 0x18: manage_key4();break;
	 case 0x21: manage_key5();break;
	 case 0x22: manage_key6();break;
	 case 0x24: manage_key7();break;
	 case 0x28: manage_key8();break;
	 case 0x41: manage_key9();break;
	 case 0x42: manage_key10();break;
	 case 0x44: manage_key11();break;
	 case 0x48: manage_key12();break;
	 case 0x81: manage_key13();break;
	 case 0x82: manage_key14();break;
	 case 0x84: manage_key15();break;
	 case 0x88: manage_key16();break;
	 default:break;
    }
  }
//--------------------------------------------------------------------------------------------------
// 函数名称: manage_key1
// 函数功能: 按键1处理程序
//--------------------------------------------------------------------------------------------------
void manage_key1(void)
     {
     }
void manage_key2(void)
     {
     }
void manage_key3(void)
     {
     }
void manage_key4(void)
     {
     }
void manage_key5(void)
     {
     }                    
void manage_key6(void)
     {
     }
void manage_key7(void)
     {
     }
void manage_key8(void)
     {
     }
void manage_key9(void)
     {
     }
void manage_key10(void)
     {
     }
void manage_key11(void)
     {
     }
void manage_key12(void)
     {
     }
void manage_key13(void)
     {
     }
void manage_key14(void)
     {
     }
void manage_key15(void)
     {
     }
void manage_key16(void)
     {
     }
void   main()
{    
     system_init( );
     delay(1000); 
     while(1);
     }           

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -