收藏 分享(赏)

msp430-5438 键扫描.doc

上传人:dzzj200808 文档编号:2293277 上传时间:2018-09-09 格式:DOC 页数:6 大小:50KB
下载 相关 举报
msp430-5438 键扫描.doc_第1页
第1页 / 共6页
msp430-5438 键扫描.doc_第2页
第2页 / 共6页
msp430-5438 键扫描.doc_第3页
第3页 / 共6页
msp430-5438 键扫描.doc_第4页
第4页 / 共6页
msp430-5438 键扫描.doc_第5页
第5页 / 共6页
点击查看更多>>
资源描述

1、/*工程名:msp430_project作者:模块名称:键扫描模块(Nx(N-1)型键盘,N=5) 模块描述:通过 TIMER1A0 中断定时启动键扫描.。 - -|msp430| p10.0 |5x4keyboard|5438 | | | | | p10.4 | |版本:*/ #include “msp430x54x.h“ #DEFINE uchar unsigned char#DEFINE uint unsigned int/*定义每个按键名及对应值*/#DEFINE num0 0xf0 /*#DEFINE num0 0x00 不行, keybuff,keybufs 初始化 0x00*/#

2、DEFINE num1 0x01#DEFINE num2 0x02#DEFINE num3 0x03#DEFINE num4 0x04#DEFINE num5 0x05#DEFINE num6 0x06#DEFINE num7 0x07#DEFINE num8 0x08#DEFINE num9 0x09#DEFINE dirup 0x0a#DEFINE dirdown 0x0b#DEFINE dirleft 0x0c#DEFINE dirright 0x0d#DEFINE ctlenter 0x0e#DEFINE ctlshift 0x0f#DEFINE ctlclear 0x10#DEFIN

3、E ctlexit 0x11#DEFINE ctlreset 0x12#DEFINE ctlstop 0x13/*定义全局变量*/ uchar keybuff=0x00;uchar keybufs=0x00;uchar keyvalue=0xff;uchar keyflag=0x00;/*timerA0 初始化*/void init_timera0(void)WDTCTL=WDTPW+WDTHOLD;/*CCR0 中断允许*/TA1CCTL0 = CCIE; /*捕获/比较寄存器设 50ms 中断, (50/1000)*32768=1638*/ TA1CCR0 = 1638;/*使用 3276

4、8hz 时钟,增计数模式,ta 清零*/ TA1CTL = TASSEL_1 + MC_1 + TACLR; #progma vector=TIMER1_A0_ISR(void)_interrupt void TIMER1_A0_ISR(void)keyscan();/*每 50ms 更新一次 max7219 数据*/led_show();/*键刚按下*/*第一次扫描到电平有变化时,按键值给 keybuff,再 keybufs=keybuff*/*50ms 后扫描到电平有变化时,按键值给 keybuff,再比较 keybufs 与 keybuff 是否相等:若相等,确定有键按下,值赋给 key

5、value,keyflag=0xff,keybuff,keybufs 清零;不等 keybuff,keybufs 清零*/*健刚松开*/ /*第一次扫描到无变化时即 keybuff=0x00,keybufs,keyflag 清零,按键过程结束*/*键盘扫描模块*/void keyscan(void) /*设置 P10.0 为输出且输出高电平,p10.1-p10.4 为输入*/P10DIR | =0X01;P10OUT | =0x01;if(P10IN /*按键 9*/else if(P10IN /*按键 exit*/else if(P10IN /*按键 right*/else if(P10IN

6、 /*设置 P10.1 为输出且输出高电平,p10.0/p10.2/p10.3/p10.4 为输入*/P10DIR | =0X02;P10OUT | =0x02;if(P10IN /*按键 8*/else if(P10IN /*按键 up*/else if(P10IN /*按键 down*/else if(P10IN /*设置 P10.2 为输出且输出高电平,p10.0/p10.1/p10.3/p10.4 为输入*/P10DIR | =0X04;P10OUT | =0x04;if(P10IN /*按键 7*/else if(P10IN /*按键 shift*/else if(P10IN /*按

7、键 left*/else if(P10IN /*设置 P10.3 为输出且输出高电平,p10.0/p10.1/p10.2/p10.4 为输入*/P10DIR | =0X08;P10OUT | =0x08;if(P10IN /*按键 6*/else if(P10IN /*按键 reset*/else if(P10IN /*按键 enter*/else if(P10IN /*设置 P10.4 为输出且输出高电平,p10.0/p10.1/p10.2/p10.3 为输入*/P10DIR | =0X10;P10OUT | =0x10;if(P10IN /*按键 5*/else if(P10IN /*按键

8、 clear*/else if(P10IN /*按键 stop*/else if(P10IN /*判断是第一次还是第二次按下,做出对应动作 */*是第一次按下 或 按键进入稳定状态 */ if(keybuffs=0x00)keybuffs=keybuff;if(keybuff=0)/*没键按下 或 已经取键值(keybuff,keybufs 复位,keyflag=0xff ),再次扫描到无按键按下 */ keyflag=0x00;/*按下键中间时间段扫描时,清零 keybufs,使满足上一层 if 条件,进入本过程*/if(keyflag=0xff)keybufs=0x00;keybuff=0x00; /*是第二次按下*/else if(keybuffs ! =0) keybuff=0x00;keybufs=0x00;keyflag=0xff;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 大学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报