MSP430单片机矩阵键盘测试程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
MSP430单片机矩阵键盘测试程序
#include unsigned char keybuff[10];unsigned char keypoint=0;
void delay(int v) { while(v!=0)v--; }unsigned char key(void) { unsigned char x=0xff; P1DIR=0X0F; P1OUT=0X01; //扫描第一行if((P1IN&0X70)==0X10) x=0; else if((P1IN&0X70)==0X20) x=1; else if((P1IN&0X70)==0x40) x=2; else { P1OUT=0X2; //扫描第二行if((P1IN&0X70)==0X10) x=3; else if((P1IN&0X70) ==0X20) x=4; else if((P1IN&0X70)==0x40) x=5; else { P1OUT=0X4; //扫描第三行if((P1IN&0X70)==0X10) x=6; else if((P1IN&0X70)==0X20) x=7; else if((P1IN&0X70)==0x40) x=8; else {P1OUT=8; //扫描第四行if((P1IN&0X70) ==0X10) x=9; else if((P1IN&0X70)==0X20) x=10; else if((P1IN&0X70)==0x40) x=11; } } } return(x); }unsigned char keyj(void) {unsigned char x; P1DIR=0x0f; P1OUT=0x0f; //键盘硬件:P10--P13 为行线,最上面一根为P10 x=(P1IN&0X70); // P14--P16 为列线,最左边一根为P14,列线下拉return(x); // 无按键,返回0?; 有按键返回非0 }interrupt[PORT1_VECTOR] void port1key(void) { if(keyj()! =0X00) { delay(300) ; //消抖动if(keyj()!=0X0) { keybuff[keypoint]=key(); //按键
见键值保存到队列keypoint++; // if(keypoint==10) keypoint=0; } } P1OUT=0X0F; P1IFG=0X0; //清除中断标志}
void main(void){ WDTCTL = WDTPW + WDTHOLD; /* // Stop WDT */
P1DIR=0XF; P1OUT=0XF; P1IES=0X0; P1IE=0X70; //列线上升沿允许P1 中断_EINT(); /*/ Enable interrupts */ while(1) { LPM0; _NOP(); }}
tips:感谢大家的阅读,本文由我司收集整编。
仅供参阅!。