- #include <msp430x14x.h>
- typedef unsigned char uchar;
- typedef unsigned int uint; /***************全局变量***************/
- uchar key_pressed; //按键是否被按下:1--是,0--否
- uchar key_val;//存放键值
- uchar key_flag;//按键是否已放开:1--是,0--否
- uchar key_map[]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
- /*******************************************
- 函数名称:Init_Keypad
- 功 能:初始化扫描键盘的IO端口
- 参 数:无
- 返回值 :无
- ********************************************/
- void Init_Keypad(void)
- {
- P1DIR=0X3f; //P1.0-P1.5设置为输出
- P1OUT |=0X3f; //置P1.0-P1.5为高电平
- P2DIR=0XC0; //P2.6-P2.7设置为输出
- P2OUT |=0XC0; //置P2.6-P2.7为高电平
- key_flag=0;
- key_pressed=0;
- key_val=0;
- }
- /*******************************************
- 函数名称:Check_Key
- 功 能:扫描键盘的IO端口,获得键值
- 参 数:无
- 返回值 :无
- ********************************************/
- void check_key(void)
- {
- uchar row,col,tmp1,tmp2;
- tmp1=0x20;
- for(row=0;row<6;row++) //行扫描
- {
- P1OUT=0X3F; //P1.0-P1.5全输出1
- P1OUT -=tmp1; //P10-P1.5输出六位中有一个为0
- tmp1>>=1;
- if((P2IN&0X3F)<0X3F) //是否P2IN的P2.0-P2.5中有一个为0
- {
- tmp2=0x01; //tmp2用于检测出哪一位为0
- for(col=0;col<6;col++)
- {
- if((P2IN&tmp2)==0x00)
- {
- key_val=key_map[row*6+col];
- return;
- }
- tmp2<<=1;
- }
- }
- }
- }
- /*******************************************
- 函数名称:delay
- 功 能:延时约15ms,完成消抖功能
- 参 数:无
- 返回值 :无
- ********************************************/
- void delay()
- {
- uint tmp;
- for(tmp=12000;tmp>0;tmp--);
- }
- /*******************************************
- 函数名称:Key_Event
- 功 能:检测按键,并获取键值
- 参 数:无
- 返回值 :无
- ********************************************/
- void key_event(void)
- {
- uchar tmp;
- P1OUT&=0X00; //设置P1OUT全是0,等待按键输入
- tmp=P2IN; //获取P2IN
- if((key_pressed==0x00)&&((tmp&0x3f)<0x3f))
- {
- key_pressed=1;
- delay();
- check_key();
- }
- else if((key_pressed==1)&&((tmp&0x3f)==0x3f))
- {
- key_pressed=0;
- key_flag=1;
- }
- else
- {
- _NOP();
- }
- }
-
这样改能实现6*6么?大神帮忙看看
|