该程序由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(); }
上一篇:MSP430按键控制LED闪烁频率
下一篇:MSP430串口接收程序(使用中断)
推荐阅读
史海拾趣
Eurofarad,作为Exxelia Technologies旗下的知名品牌,自1965年成立以来,就专注于电子元件的设计和制造。在创立初期,Eurofarad凭借对电子技术的深入研究和对市场需求的敏锐洞察,迅速推出了多款高性能、高质量的电子元件产品。这些产品在市场上获得了广泛的认可,为Eurofarad的后续发展奠定了坚实的基础。
除了优秀的产品外,Antenova公司还提供一系列专业的服务,包括产品结构确认和指导、主板Gerber文件和PCB堆叠预审和检查等。这些服务帮助客户更好地使用Antenova的产品,并提高了客户的满意度和忠诚度。通过提供卓越的服务,Antenova赢得了众多客户的信赖和支持,为公司的长期发展奠定了坚实基础。
随着公司的发展壮大,博流积极寻求与全球知名企业的合作机会。其中,与谷歌的合作尤为引人注目。作为Google Matter EAP合作伙伴,博流与谷歌共同推动Matter协议在智能家居生态系统中的应用,为用户提供更加便捷、智能的家居体验。此外,博流还与多家产业链上下游企业建立了紧密的合作关系,共同推动物联网产业的发展。
CYANLITE公司非常重视产品品质的管理和控制。他们建立了严格的质量检测体系,确保每一件产品都符合高标准的质量要求。此外,公司还注重客户反馈的收集和分析,不断改进产品和服务以满足客户的需求。这种对品质的执着追求使得CYANLITE公司赢得了客户的信任和忠诚。许多客户都表示愿意长期与CYANLITE公司合作,并推荐他们的产品给其他人。
在1935年,DURAKOOL公司在Durakool成立,由几位电子工程师和发明家共同创立。他们的初衷是为电气和电子市场提供高质量的组件和系统。起初,公司面临着资金短缺和市场竞争激烈的挑战,但他们凭借对技术的热情和不懈的努力,逐渐开发出了一系列具有竞争力的产品,如Durakool水银继电器和功率继电器,赢得了客户的认可。
除了在智能手机和IoT市场取得突破外,AGM还深耕工业和消费类市场。公司自主研发并量产的可编程逻辑SoC产品系列广泛应用于工业和消费类市场,满足了客户对高容积率、低成本、高品质的市场需求。通过不断的技术创新和产品优化,AGM在工业和消费类市场逐渐形成了自己的竞争优势,并赢得了越来越多客户的认可和信赖。
一个单片机程序性能优化的小例子 好久没玩51了,昨天帮人看一个点阵屏的程序 屏是64*16的 用2片138做行选择(8*2=16),用8片4094做列输出(8*8=64) 原来程序的关键数据发送部分如下 void xianshi() { unsigned char out_data = 0xff; unsigned ch ...… 查看全部问答∨ |
|
像语音识别这样的AP怎么写啊?捕捉线程跟识别线程怎么通信?他们通信的时间点怎么界定?就是捕捉线程什么时候去通知识别线程?在什么情况下? 像语音识别这样的AP怎么写啊?捕捉线程跟识别线程怎么通信?他们通信的时间点怎么界定?就是捕捉线程什么时候去通知识别线程?在什么情况下?… 查看全部问答∨ |
|
我在使用hive注册表保存方式的时候。。在系统进入到定位程序的时候就不动了。点屏幕定位针不动。。按esc也不行。。。但是点屏幕的时候在pb的debug中可以看到点的坐标。。。。按道理说系统应该是卡死了才对。。可是为什么那里还可以打印出来坐标了? ...… 查看全部问答∨ |
设计资源 培训 开发板 精华推荐
- 2024上海国际嵌入式展报名通道开启
- 【开发板试用】89美金FPGA开发板试用风暴来袭!
- 免费下载|PathWave帮您迎接高速数字设计复杂性的挑战
- 降碳行动:寻找身边8位单片机,抢楼赢ST最新M0开发板!
- 安世半导体&世平集团 高效能&小型化, Nexperia MOSFET的5G解决方案 观看、下载 闯关赢好礼!
- 【EEWORLD第三十二届】2011年11月社区明星人物揭晓!
- 选你所爱,TI 19款模拟芯片超低价团购!
- STM32全国巡回研讨会!(走进11城,9/12-10/27)
- 预约有礼:以光代电,硅光芯片了解一下~ 走进工程师网络学堂直播,赢好礼
- 有奖直播|安森美全新 ADAS 电源 IC 提升 ADAS 系统的清晰度及安全性