void KEYSCAN(); void TUBESCAN();void KEYSLOVE( unsigned int key); unsigned char const table[]={0xff,0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,
0x88,0x83,0xc6,0xa1,0x86,0x8e}; //0~F码值 unsigned int s1=0,s2=0,s3=0,s4=0; //s1~s4保存相应键值,进行显示 unsigned int key;
void delay1(unsigned int i) {
while(i--); }
void main() {
WDTCTL=WDTPW+WDTHOLD; P1DIR=0xff; P1SEL=0x00; P3SEL=0x00; P3DIR=0x0f;
P6DIR=BIT1+BIT2; TUBESCAN(); P3OUT=0xf0; while(1)
{
KEYSCAN(); TUBESCAN(); } }
void KEYSCAN() {
P3OUT=0xf0; if(P3IN!=0xf0) {
switch(P3IN) {
case (0xe0):
P3OUT=0x01;if(P3IN==0xf1) {key=16;break;} P3OUT=0x02;if(P3IN==0xf2) {key=12;break;} P3OUT=0x04;if(P3IN==0xf4) {key=8;break;} P3OUT=0x08;if(P3IN==0xf8) {key=4;break;} case (0xd0):
P3OUT=0x01;if(P3IN==0xf1) {key=15;break;} P3OUT=0x02;if(P3IN==0xf2) {key=11;break;} P3OUT=0x04;if(P3IN==0xf4) {key=7;break;} P3OUT=0x08;if(P3IN==0xf8) {key=3;break;} case (0xb0):
P3OUT=0x01;if(P3IN==0xf1) {key=14;break;} P3OUT=0x02;if(P3IN==0xf2) {key=10;break;} P3OUT=0x04;if(P3IN==0xf4) {key=6;break;} P3OUT=0x08;if(P3IN==0xf8) {key=2;break;} case (0x70):
P3OUT=0x01;if(P3IN==0xf1) {key=13;break;} P3OUT=0x02;if(P3IN==0xf2) {key=9;break;} P3OUT=0x04;if(P3IN==0xf4) {key=5;break;} P3OUT=0x08;if(P3IN==0xf8) {key=1;break;} }
P3OUT=0xf0; KEYSLOVE(key);
} //键盘扫描函数,得到相应的键值key }
void KEYSLOVE( unsigned int key) {
delay1(200); if(P3IN!=0xf0) {
while(P3IN!=0xf0) TUBESCAN(); //键盘去抖,保证当手松开时读取键值 if(s4==0)
{
s4=s3; s3=s2; s2=s1; s1=key; } else {
if(key==16) {
s1=0;s2=0;s3=0;s4=0;key=0; } } }
} void TUBESCAN() {
P6OUT=0x02; P1OUT=table[s4]; P6OUT=0x04; P1OUT=0x01;
delay1(400); P6OUT=0x02; P1OUT=table[s3]; P6OUT=0x04; P1OUT=0x02;
delay1(400); P6OUT=0x02; P1OUT=table[s2]; P6OUT=0x04; P1OUT=0x04;
delay1(400); P6OUT=0x02; P1OUT=table[s1]; P6OUT=0x04; P1OUT=0x08;
delay1(400);
}
//将得到的键值进行处理:移位/重置//数码管扫描,使数码管保持 四. 行列式键盘实验总结
①做行列是键盘重点是键盘扫描确定键值,键盘扫描也有多种方式,要多思考确定最优方式,采用本实验中的键盘扫描方式当没有键子按下时不必执行键盘扫描的其他程序,将更多的时间给了数码管扫描,挺优的,在着手写程序之前一定要筹划如何去写,要寻求简单易行的方法,写程序规划挺重要的。
②之前由于忘记关闭看门狗,程序怎么都调整不好,MSP430的看门狗默认是打开
的,如果在程序开始不关闭程序执行到一定时间就会自动复位,那样程序就无法正常执行。在用msp430时一定要记得关闭看门狗。
③程序的简化也很重要,要尽力把表示繁杂的语句转为循环/判断结构,这样程序能精简,自己也爱看。