历史上的今天
今天是:2024年09月06日(星期五)
2019年09月06日 | MSP430F149按键检测程序
2019-09-06 来源:eefocus
该程序由IAR编译运行,使用单片机的P1.0~P1.3口作为四个独立按键。由外部中断的下降沿触发。
/**********************************************
*程序描述:单片机的P1.0~P1.3连接四个独立按键,外部中断下触发
*作者 :huasir
*时间 :2017.10.28 22:10
***********************************************/
#include #define keyin (P1IN & 0X0F) unsigned int KeyVal = 0; // 键值,0表示异常,1,2,3,4分别为四个按键按下 void DelayXms(unsigned int i); void keyInit(void); //键盘设置的初始化 int main( void ) { // Stop watchdog timer to prevent time out reset WDTCTL = WDTPW + WDTHOLD; keyInit(); //键盘初始化 LPM0; //进入低功耗模式 return 0; } /**************************************************************************** *函数名: PORT1_ISR() / *作用 :外部中断服务函数 / *返回值:无 / *参数 :无 / *作者 :huasir / *时间 :2017.10.28 / *****************************************************************************/ #pragma vector = PORT1_VECTOR __interrupt void PORT1_ISR(void){ if(P1IFG&0x0f){ switch(P1IFG){ case 0x01: if(keyin==0x0e) { DelayXms(5); //延时消抖 while(keyin==0x0e); //松手检测 KeyVal = 1; LPM0_EXIT; P1IFG = 0; return; } case 0x02: if(keyin==0x0d) { DelayXms(5); //延时消抖 while(keyin==0x0d); //松手检测 KeyVal = 2; LPM0_EXIT; P1IFG = 0; return; } case 0x04: if(keyin==0x0b) { DelayXms(5); //延时消抖 while(keyin==0x0b); //松手检测 KeyVal = 3; LPM0_EXIT; P1IFG = 0; return; } case 0x08: if(keyin==0x07) { DelayXms(5); //延时消抖 while(keyin==0x07); //分手检测 KeyVal = 4; LPM0_EXIT; P1IFG = 0; return; } default: { KeyVal = 0; LPM0_EXIT; P1IFG = 0; } } } } void DelayXms(unsigned int i){ unsigned int j; for( ; i>0; i--){ for(j=0;j<200;j++); } } /**************************************************************************** *函数名: keyInit() / *作用 :设置与四个独立按键相关的IO的配置,包括输入输出方向,中断触发方式 / *返回值:无 / *参数 :无 / *作者 :huasir / *时间 :2017.10.28 / *****************************************************************************/ void keyInit(void){ P1DIR &= ~(BIT0+BIT1+BIT2+BIT3);//设置四个按键的接受口为输入,注意,使用外部中断并不属于第二功能 P1IES |= BIT0+BIT1+BIT2+BIT3; //设置四个按键的中断触发方式为下降沿触发 P1IE |= BIT0+BIT1+BIT2+BIT3; //打开四个按键的外部中断 _EINT(); }
史海拾趣
|
现在的情况如下:我用的AT91sam9261的ARM+三星1G的Nandflash,现在是分为了一个32MB的作为内核的区,剩下的作为WINCE下使用,我现在是想把WINCE下面的这部分分成两块来分别使用,一块拿来存注册表,一块拿来存一些数据。请问有没有人做过类似的,或 ...… 查看全部问答> |
|
现在有这样一个情况,有两个系统,A是votex86,B是ARM 7,A上跑CE 6,B上裸奔,A向B通过串口发送数据,串口采用115200bps,1停止位,1偶校验位. 现象是: A向B发送一个字节,B立刻向A回复两字节,如果在B上不做延时(大概进行1500次加法),A就不能保证收到B发送 ...… 查看全部问答> |
|
LED 的应用面很广,然而芯片本身价格过高和发光效率有待提升的问题,始终困扰着LED照明 技术的推广普及。发光效率要提升,就要有效增加取出效率。而LED的发光??色和发光效率与制作LED的材料和工艺有关,制造LED的材料不同,可以产生具有不同能量的光子 , ...… 查看全部问答> |




