msp430矩阵式按钮驱动程序
时间:01-21 09:22 阅读:984次
*温馨提示:点击图片可以放大观看高清大图
简介:本文给大家分享了一个msp430矩阵式按钮驱动程序。
#include "msp430x14x.h"
unsigned char LineScan[4]={0xef,0xdf,0xbf,0x7f}; //列值列举
void ADD()
{
P4OUT+=1;
}
void SUB()
{
P4OUT-=1;
}
unsigned int key_check(void) //检测是否有按键按下
{
unsigned char temp;
P1DIR=0xf0; //定义P1.4~P1.7为输出
temp=P1IN & 0x0f;
if(temp!=0x0f)
return 1;
else
return 0;
}
unsigned char scan_key(void) //扫描对应按键的键号
{
P1DIR=0xf0;
unsigned char count;
unsigned char i,temp,m,n; //m为列的值,n为行的值
unsigned int flag=0;
for(i=0;i<4;i++) //列扫描
{
P1OUT=LineScan[i]; //获取扫描的列
temp=P1IN&0x0f;
if(temp==0x07) //为第一行
{n=0; //记录按下按钮的行
flag=1; //标志检测出来
break;}
else if(temp==0x0b) //为第二行
{n=1;
flag=1;
break;}
else if(temp==0x0d) //为第三行
{n=2;
flag=1;
break;}
else if(temp==0x0e) //为第四行
{n=3;
flag=1;
break;}
}
if(flag==1)
{m=i;
flag=0;
count=n*4+m;
switch(count)
{
case 0: {;break;}
case 1: {;break;}
case 2: {;break;}
case 3: {;break;}
case 4: {;break;}
case 5: {;break;}
case 6: {;break;}
case 7: {;break;}
case 8: {;break;}
case 9: {;break;}
case 10:{;break;}
case 11:{SUB();break;}
case 12:{;break;}
case 13:{;break;}
case 14:{;break;}
case 15:{ADD();break;}
}
return;
}
else
return;
}
void Delay(char wDelay) //延时子程序
{
while(wDelay!=0)
wDelay--;
}
int main( void )
{
WDTCTL = WDTPW + WDTHOLD;
P4DIR =0xff;
P4OUT=0X00;
while(1)
{
if(key_check())
{Delay(10000);
if(key_check())
{
scan_key();
while(key_check());
P1OUT=0x0f;
}
}
}
}