首页 基于msp430f5438的矩阵按键扫描法度模范[讲义]

基于msp430f5438的矩阵按键扫描法度模范[讲义]

举报
开通vip

基于msp430f5438的矩阵按键扫描法度模范[讲义]基于msp430f5438的矩阵按键扫描法度模范[讲义] 基于msp430F5438的矩阵按键扫描程序 ** 功能: 矩阵按键扫描程序 *************************************************/ #include "msp430x54x.h" /************************************************* **宏定义 *************************************************/ #defi...

基于msp430f5438的矩阵按键扫描法度模范[讲义]
基于msp430f5438的矩阵按键扫描法度模范[讲义] 基于msp430F5438的矩阵按键扫描程序 ** 功能: 矩阵按键扫描程序 *************************************************/ #include "msp430x54x.h" /************************************************* **宏定义 *************************************************/ #define uint unsigned int // 定义数据 类型缩写 #define uchar unsigned char #define KEY_IN P4IN // 定义端 口寄存器 #define KEY_OUT P4OUT #define KEY_DIR P4DIR #define B0 (0x01) // 位定义 #define B1 (0x02) #define B2 (0x04) #define B3 (0x08) #define B4 (0x10) #define B5 (0x20) #define B6 (0x40) #define B7 (0x80) /************************************************* **函数申明 *************************************************/ uchar Scan(void); // 矩阵键盘扫描 void Delay(uint delay_num); // 延时函数 uint Translate(uchar code); // 扫描码翻译 /************************************************* **全局变量定义 *************************************************/ uchar key_code; // 返回的键盘扫描码 uint key_value; // 键盘对应的数字 const uchar key_table[17]={ // 扫描码译码 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 0xFF, // 无按键按下 // 高四位为扫描行,低四位为扫描列 0x7E, // K1 0x7D, // K2 0x7B, // K3 0x77, // K4 0xBE, // K5 0xBD, // K6 0xBB, // K7 0xB7, // K8 0xDE, // K9 0xDD, // K10 0xDB, // K11 0xD7, // K12 0xEE, // K13 0xED, // K14 0xEB, // K15 0xE7, // K16 }; /************************************************* **函数(模块)名称: main() **功能: 调用对键盘扫描程序,初始化I/O口 **调用函数清单: scan(),Translate() **调用本函数清单: 无 **输入参数: 无 **输出参数: 无 **函数返回值说明: 无 **使用的资源 看门狗 I/O端口模块 **其它说明: 无 *************************************************/ void main(void) { WDTCTL = WDTPW + WDTHOLD; // 停止看门狗 KEY_DIR = (B7 + B6 + B5 + B4); // 设置IO 口高4位为输出,低4位为输入 KEY_OUT = 0x00; // IO口高4位输出低电平 while(1) { key_code = Scan(); // 调用扫描程序,返回扫描码 key_value = Translate(key_code); // 调用扫描码翻译函数,返回键盘数字 if(key_value != 0) // 是否有键按下 { _NOP(); // 在这里设置断点,观察扫描码和键盘数字 } } } /************************************************* **函数(模块)名称: Scan() **功能: 查询按键状态,返回键值 **调用函数清单: Delay(); **调用本函数清单: 无 **输入参数: 无 **输出参数: 键盘扫描码 **函数返回值说明: 无 **使用的资源 I/O端口 **其它说明: *************************************************/ uchar Scan(void) { uint i; uchar col_scan = 0; // 行扫描变量 uchar key_code = 0xFF; // 扫描码 KEY_OUT = 0x00; // 4行全部置零,判断是否有键按下 if((KEY_IN & 0x0F) != 0x0F) // 判断是否有键按下 { Delay(5000); // 延时20毫秒键盘消抖 if((KEY_IN & 0x0F) != 0x0F) // 再次判断按键是否有效 { key_code = KEY_IN & 0x0F; // 保存列扫描码 col_scan = B7; // 先扫描第一行 for(i=4 ;i>0; i--) // 扫描行 { KEY_OUT = 0xFF & (~col_scan); // 扫描的相 应行置低电平 if((KEY_IN & 0x0F) != 0x0F) // 是否这一行有键按下 { break; } col_scan = col_scan >> 1; // 扫描下一行 } col_scan = (~col_scan) & 0xF0; // 得到行扫描码 key_code |= col_scan; // 得到完整键盘扫描码 KEY_OUT = 0x00; // 4行全部置零,判断是否有键按下 while((KEY_IN & 0x0F) != 0x0F); // 等待按键释放 } } return (key_code); // 返回键值 } /************************************************* **函数(模块)名称: Translate **功能: 扫描码翻译 **调用函数清单: 无 **调用本函数清单: 无 **输入参数: 无 **输出参数: 键盘对应的数字,如果输出为0说明无键按下 **函数返回值说明: 无 **使用的资源 无 **其它说明: *************************************************/ uint Translate(uchar code) { uchar key_cd = code; // 扫描码 uint key_val; // 键盘数 字 for(key_val=0; key_val<=16; key_val++) // 查找扫描码表,得到键盘数字 { if(key_table[key_val] == key_cd) // 扫描码是否相符 { break; } } return (key_val); } /************************************************* **函数(模块)名称: Delay() **功能: 延时 **调用函数清单: 无 **调用本函数清单: 无 **输入参数: 延时循环次数 **输出参数: 无 **函数返回值说明: 无 **使用的资源 无 **其它说明: *************************************************/ void Delay(uint delay_num) { uint i; for(i=delay_num; i>0; i--); // 循环延时 }
本文档为【基于msp430f5438的矩阵按键扫描法度模范[讲义]】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_954223
暂无简介~
格式:doc
大小:21KB
软件:Word
页数:0
分类:生活休闲
上传时间:2017-10-16
浏览量:10