170 likes | 306 Views
智能控制电路项目实践. 单片机开发工具的使用. 简易仪器仪表设计制作. 秒表的设计制作. 里程表的设计制作. LED 电子显示屏的设计制作. LED 流水灯设计制作. 五. 三. 七. 八. 二. 六. 学习项目. 单片机最小应用系统构建. 一. 简易计算器的设计制作. 四. 项目四 简易计算器设计制作. 任务 1. 一位数码显示. 任务 2. 四位数码显示. 数码管. 任务 3. 独立按键识别. 计算器. 任务 4. 矩阵按键识别. 任务 5. 简易计算器设计实现. 任务 4 矩阵 按键识别. 任务要求.
E N D
单片机开发工具的使用 简易仪器仪表设计制作 秒表的设计制作 里程表的设计制作 LED电子显示屏的设计制作 LED流水灯设计制作 五 三 七 八 二 六 学习项目 单片机最小应用系统构建 一 简易计算器的设计制作 四
项目四 简易计算器设计制作 任务1 一位数码显示 任务2 四位数码显示 数码管 任务3 独立按键识别 计算器 任务4 矩阵按键识别 任务5 简易计算器设计实现
任务4 矩阵按键识别 • 任务要求 独立式按键是直接用I/O口线构成的单个按键电路,当需要按键个数较多时可采用矩阵按键。本任务要求是设计一个4×4个独立按键,编号为“0~F”,当按下某键时,数码管显示该键所对应的编号。
任务4 矩阵按键识别 • 仿真演示
矩阵按键 硬 件 软 件 任务4 矩阵按键识别 • 任务分析 单片机最小应用系统 + 数码管显示电路 + 矩阵按键电路
任务4 矩阵按键识别 完成本任务需要掌握的知识: (1)矩阵式键盘的结构及原理 (2)矩阵式键盘按键的识别 (3)键盘的编码 (4)键盘扫描程序设计
任务4 矩阵按键识别 复习: 独立按键 分支结构if语句、switch语句 按键消抖
任务4 矩阵按键识别 新课: 矩阵式键盘的结构及原理、按键识别 4×4的行、列结构的矩阵键盘,按键数量较多时,节省I/O口。以按键8为例,说明识别过程。
任务4 矩阵按键识别 键盘的编码 • 矩阵式键盘,按键的位置由行号和列号唯一确定,因此可分别对行号和列号进行二进制编码。一般情况下,采用依次排列键号的方式对按键进行编码,以图中的4×4键盘为例,可将键号编码为:00H、01H、02H、…、0EH、0FH等16个键号。 • 编码的相互转换可通过计算或查表的方法实现。
任务4 矩阵按键识别 矩阵键盘识别电路
任务4 矩阵按键识别 矩阵扫描程序设计思路 (1)判别有无按键按下。 (2)键盘扫描取得闭合键的行、列值。 (3)用计算法或查表法得到键值。 (4)判断闭合键是否释放,如没释放则继续等待。 (5)将闭合键键号保存,同时转去执行该闭合键的功能。
unsigned char keyscan(void) { unsigned char sccode, recode, a; Key_Port = 0xf0; if((Key_Port & 0xf0) != 0xf0) { delay(5); if((Key_Port & 0xf0) != 0xf0) { sccode = 0xfe; while((sccode & 0x10) != 0) {Key_Port = sccode; if((Key_Port & 0xf0) != 0xf0) { recode = Key_Port & 0xf0; a = sccode&0x0f + recode; while((Key_Port & 0xf0) != 0xf0); 任务4 矩阵按键识别 矩阵按键识别程序: 键盘扫描函数 #include <reg51.h> #define Key_Port P1 unsigned char code ledsegcode[]= {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88, 0x83,0xC6,0xA1,0x86,0x8E}; void delay(unsigned int t) { unsigned int m,n; for(m=0;m<t;m++) for(n=0;n<110;n++); }
} else sccode = (sccode << 1) | 0x01; } } } return 0xff; } void main(void) {unsigned char keyID; P2=0xfe; while(1) { keyID = keyscan(); if(keyID!=0xff) P0= ledsegcode[keyID]; } } 任务4矩阵按键识别 键盘扫描函数 switch (a) { case 0xEE : return 0; case 0xDE : return 1; case 0xBE : return 2; case 0x7E : return 3; case 0xED : return 4; case 0xDD : return 5; case 0xBD : return 6; case 0x7D : return 7; case 0xEB : return 8; case 0xDB : return 9; case 0xBB : return 10; case 0x7B : return 11; case 0xE7 : return 12; case 0xD7 : return 13; case 0xB7 : return 14; case 0x77 : return 15; default : break; } 主函数
任务4 矩阵按键识别 • 思考 1、独立式键盘和矩阵式键盘有何区别?分别说明它们的优缺点。 2、说明矩阵键盘的识别过程。
任务4 矩阵按键识别 • 总结 1、矩阵按键识别电路原理; 2、矩阵按键识别程序思路总结;