运用3X4机械式按键+使用单片机IO构成矩阵式键盘+行列反转法+中断触发方式

上传人:飞*** 文档编号:53814724 上传时间:2018-09-05 格式:PDF 页数:8 大小:208.30KB
返回 下载 相关 举报
运用3X4机械式按键+使用单片机IO构成矩阵式键盘+行列反转法+中断触发方式_第1页
第1页 / 共8页
运用3X4机械式按键+使用单片机IO构成矩阵式键盘+行列反转法+中断触发方式_第2页
第2页 / 共8页
运用3X4机械式按键+使用单片机IO构成矩阵式键盘+行列反转法+中断触发方式_第3页
第3页 / 共8页
运用3X4机械式按键+使用单片机IO构成矩阵式键盘+行列反转法+中断触发方式_第4页
第4页 / 共8页
运用3X4机械式按键+使用单片机IO构成矩阵式键盘+行列反转法+中断触发方式_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《运用3X4机械式按键+使用单片机IO构成矩阵式键盘+行列反转法+中断触发方式》由会员分享,可在线阅读,更多相关《运用3X4机械式按键+使用单片机IO构成矩阵式键盘+行列反转法+中断触发方式(8页珍藏版)》请在金锄头文库上搜索。

1、微 机 测 控 电 路 课 程 设 计题目 :采用微机的键盘检测与提示电路及程序设计方案A16院(系)机电及自动化学院专业测控技术与仪器2 班学号0911212021 姓名农金德级别2 0 0 9 指导老师孙 炳 阳2012年 6 月Huaqiao university 2 目 录一、绪论3(一) 、设计任务 3(二) 、 4X4 机械式按键 3 (三) 、使用单片机I/O 构成矩阵式键盘3 (四)、行列反转法3(五)、中断触发方式3二、系统设置4(一) 、硬件电路设计4(二)、程序流程图4(三)、51C 语音程序 4参考文献 83 一、绪论(一) 、设计任务:采用微机的键盘检测与提示电路及程

2、序设计,运用 4X4 机械式按键 +使用单片机IO 构成矩阵式键盘 +行列反转法 +中断触发方式。(二) 、4X4 机械式按键:4X4 的行、列结构可以构成16 个按键的键盘,在本方案采用机械式结构键盘。机械式结构键盘一般使用类似金属接触开关的原理,实现触点的导通和断开。实际应用中, 机械式按键的结果形式有很多,最常用的是交叉接触式。(三) 、使用单片机I/O 构成矩阵式键盘:矩阵式键盘是一种扫描式键盘,其工作过程比独立式键盘复杂。矩阵式键盘由行线、列线及位于行列线交叉点的按键等部分组成。矩阵式键盘由于其矩阵式结构,单片机一个I/O 口的状态已不能满足要求,需通过连接到键盘上的两根I/O 口线

3、的状态来共同确定按键的状态。此时采用行线和列线信号的状体分别处理,综合考虑方可确定按键闭合的位置。(四) 、行列反转法:第一步:行线IO P0.4 P0.7 置低电平,列线IO P0.0 P0.3 置高电平假设 K1按下,那么P0.0=0 读 P0口 P0=00001110 第二步:行线IO P0.4 P0.7 置高电平,列线IO P0.0 P0.3 置低电平假设 K1按下,那么P0.7=0 读 P0口 P0=01110000 第三步:两个字节相加,得到新组合数据:01111110(第一行第一列)每按一个键我们都得到不同的字节,通过比对我们制好的表格就可以知道是那个按键按下了。然后返回一个数值

4、,通过这个数值查数码表,就可以相应的显示我们先前设置好的0至 F 中的其中一个值了。(五) 、中断触发方式:当键盘上有键按下时,发出中断请求,CPU响应中断请求后,转中断服务程序,进行键盘扫描,识别键码等。4 二、系统设计(一) 、硬件电路设计5 (二)、程序流程图(三)、 51C语音程序/*- 运用 3X4 机械式按键 +使用单片机IO 构成矩阵式键盘+行列反转法 +中断触发方式-*/ #include /头文件#define KeyPort P0 /键盘端口#define DataPort P1 /定义数据端口程序中遇到DataPort 则用 P1 替换bit KeyPressFlag;

5、/定义按键标志位sbit LED=P20; unsigned char code dofly_DuanMa=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71; / 显示段码值0F void DelayUs2x(unsigned char t);/us级延时函数声明void DelayMs(unsigned char t); /ms级延时函数声明unsigned char KeyScan(void);/键盘扫描函数unsigned char KeyPro(void); void Ini

6、t_INT0(void); /外部中断0 初始化函数/*- 主函数-*/ 6 void main (void) unsigned char num, temp; /定义变量DataPort=0x00; /数据端口赋初值LED=0; Init_INT0(); /调用外部中断0 函数while (1) /主循环 KeyPort=0x0f; / 赋初值用于中断检测if(KeyPressFlag=1) KeyPressFlag=0; /按键标志清零,以便下次检测num=KeyPro(); if(num!=0xff) temp=dofly_DuanManum; DataPort=temp; LED=LE

7、D; /*- uS延时函数 ?T=tx2+5us -*/ void DelayUs2x(unsigned char t) while(-t); /*- mS延时函数-*/ void DelayMs(unsigned char t) while(t-) /大致延时1mS DelayUs2x(245); DelayUs2x(245); 7 /*- 按键扫描函数,使用行列反转法扫描,返回扫描键值,-*/ unsigned char KeyScan(void) /键盘扫描函数,使用行列反转扫描法 unsigned char cord_h,cord_l;/行列值中间变量KeyPort=0x0f; /行线

8、输出全为0 cord_h=KeyPort /读入列线值if(cord_h!=0x0f) /先检测有无按键按下 DelayMs(10); /去抖,延时10ms if(KeyPort /读入列线值KeyPort=cord_h|0xf0; /输出当前列线值cord_l=KeyPort /读入行线值while(KeyPort/等待松开并输出return(cord_h+cord_l);/键盘最后组合码值 return(0xff); /返回该值 /*- 按键值处理函数,返回扫键值-*/ unsigned char KeyPro(void) switch(KeyScan() case 0x7e:return

9、 0;break;/0 按下相应的键显示相对应的码值case 0xbe:return 1;break;/1 case 0xde:return 2;break;/2 case 0xee:return 3;break;/3 case 0x7d:return 4;break;/4 case 0xbd:return 5;break;/5 case 0xdd:return 6;break;/6 case 0xed:return 7;break;/7 case 0x7b:return 8;break;/8 case 0xbb:return 9;break;/9 case 0xdb:return 10;br

10、eak;/a case 0xeb:return 11;break;/b case 0x77:return 12;break;/c 8 case 0xb7:return 13;break;/d case 0xd7:return 14;break;/e case 0xe7:return 15;break;/f default:return 0xff;break; /*- 外部中断0 初始化-*/ void Init_INT0(void) EA=1; /全局中断开EX0=1; /外部中断0 开IT0=1; /边沿触发 /*- 外部中断0 程序-*/ void ISR_INT0(void) interrupt 0 KeyPressFlag=1; /表明按键有动作,可以进行按键扫描 参考文献1.毛谦敏主编单片机原理及应用系统设计国防工业出版社2.朱清慧主编Protues 教程电子线路设计、制版与仿真清华大学出版社3.胡学海主编单片机原理及应用系统设计电子工业出版社4.张道德主编单片机接口技术(C51版) 中国水利水电出版社

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 商业/管理/HR > 其它文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号