单片机c51中断 — 中断扫描法行列式键盘
项目文件
文件
关于项目的内容知识点可以见专栏单片机原理及应用 的第五章,中断
在第4章中已介绍过行列式键盘的工作原理,并编写了相应的键盘扫描程序。但应注意的是,在单片机应用系统中,键盘扫描只是 CPU 工作的内容之一。CPU 在忙于各项工作任务时,需要兼顾键盘扫描,既保证不失时机地响应键操作,又不过多地占用CPU 时间。因此,可以采用中断扫描方式来提高CPU的效率,即只有在键盘有键按下时,才执行键盘扫描程序如果无键按下,则将键盘视为不存在。
首先改写硬件:
当各列电平都为0时,无论压下哪个按键,对应的行线和列线会产生逻辑与运算的结果,与门的输出端都可形成INTO的中断请求信号。这样便可将按键的扫描查询工作放在中断函数中进行,从而就能达到既快速响应按键动作,又提高CPU工作效率的目的。
当按键被按下时,按键所在的行线和列线之间就会产生一个电压差,从而触发行列式键盘电路中的4与门集成元件进行逻辑与运算。具体来说,按键所在的行线会被拉低至地电位,而按键所在的列线则会被拉高至高电位。这样,行线和列线之间就会产生一个电压差,从而触发4与门集成元件的输出端输出一个低电平信号,即INTO引脚的中断请求信号。处理器通过检测INTO引脚的电平变化来判断是否有按键被按下,如果有按键被按下,处理器就会进入中断函数进行按键扫描查询工作,从而快速响应按键动作。
解释一下:U3的4个输入端与行线像并联 (20-23)行线初始为1,输入端为1
设置列电平刚开始为0,如果有按键按下其中一个行线变为0
那么与U3进行与传给INT0非,1*0=0
脉冲触发
然后为1变为0,负跳变脉冲,可以中断IE0=1
- 主函数:
void main(void) {P0 = 0x00; //开机黑屏IT0=1; //脉冲触发EX0=1; //INT0允许EA=1; //总中断允许P2 = 0x0f; //为首次中断做准备,列线全为0,行线全为1while(1); //模拟其他程序功能
}
这里P2=0x0f
P2是跟按键连接起来的
这样0x0f=0000 1111
高4位为0;
27-24是列线为0,行线全为1
- 再写中断函数:
void getKey () interrupt 0{ //中断函数char key_scan[] = {0xef, 0xdf, 0xbf, 0x7f}; //键扫描码char i = 0, j = 0;for (i = 0; i < 4 ; i++) {P2= key_scan[i]; //输出扫描码for (j = 0 ; j < 16 ;j++) {if (key_buf[j]== P2){ //读键值,并判断键号P0= led_mod[j]; //显示闭合键键号break;}}}P2=0x0f; //为下次中断做准备
}
前面的都是行列式键盘的通用
需要注意的是
这里不需要判断行电压是否变换
if ((P2 & 0x0f) != 0x0f)
是因为:
一旦行线变化就是按键按下,中断就会发生,不需要判断,加上也行
注意最后结束后
P2=0x0f; //为下次中断做准备
这里P2=0x0f
P2是跟按键连接起来的
这样0x0f=0000 1111
高4位为0;
27-24是列线为0,行线全为1
- 总代码:
#include <reg51.h>
char led_mod[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, //led字模0x7f,0x6f,0x77,0x7c,0x58,0x5e,0x79,0x71};
char key_buf[] = {0xee, 0xde, 0xbe, 0x7e,0xed, 0xdd, 0xbd, 0x7d,//键值0xeb, 0xdb, 0xbb, 0x7b,0xe7, 0xd7, 0xb7, 0x77};void getKey () interrupt 0{ //中断函数char key_scan[] = {0xef, 0xdf, 0xbf, 0x7f}; //键扫描码char i = 0, j = 0;for (i = 0; i < 4 ; i++) {P2= key_scan[i]; //输出扫描码for (j = 0 ; j < 16 ;j++) {if (key_buf[j]== P2){ //读键值,并判断键号P0= led_mod[j]; //显示闭合键键号break;}}}P2=0x0f; //为下次中断做准备
}void main(void) {P0 = 0x00; //开机黑屏IT0=1; //脉冲触发EX0=1; //INT0允许EA=1; //总中断允许P2 = 0x0f; //为首次中断做准备,列线全为0,行线全为1while(1); //模拟其他程序功能
}
结果:
运行视频:
单片机c51中断 — 中断扫描法行列式键盘
单片机c51中断 — 中断扫描法行列式键盘相关推荐
- c语言T1中断程序编写步骤,用51单片机中断编写的4x4键盘程序
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章 用51单片机中断编写的4x4键盘程序 作者:未知 来源:山涧一溪流 点击数:- 更新时间:2014年06 ...
- 单片机——C51实验含Proteus仿真(独立键盘,矩阵键盘)
文章仅为本人学习记录,如有引用部分会另加说明引用出处 矩阵键盘检测原理:(独立键盘的原理在代码注释中很详细) 线反法的原理为:首先使P1口的高四位输出高电平,P1口低四位输出低电平,这时键盘的行线被拉 ...
- 51单片机(STC89C52)的中断和定时器
STC89C51/STC89C52 Timer 内部不带振荡源, 必须外接晶振 采用11.0592MHz,或22.1184MHz,可方便得到串口通讯的标准时钟. STC89和STC90系列为12T, ...
- PIC单片机入门_中断系统详解
1.中断的基本概念 当单片机正在执行程序时,出现了某些特殊状况,例如定时时间到.有键盘信号输入等,此时CPU须要暂时停止当前的程序,而转去执行处理这些事件的程序,待执行完这些特定的程序之后,再返回到原 ...
- STM32单片机串口空闲中断+DMA接收不定长数据
在上一篇文章STM32单片机串口空闲中断接收不定长数据中介绍了利用串口空闲中断接收不定长数据,这种方式有一个问题就是串口每接收到一个字节就会进入一次中断,如果发送的数据比较频繁,那么串口中断就会不停打 ...
- 【51单片机】外部中断
51的 外部中断 与 定时器(内部中断) 有一个共同特点,那就是与主程序是并行工作的,就是主程序在运行的时候,中断也在等待触发条件,当中断被触发的时候会暂停主程序转而执行中断服务程序,只有中断服务程序 ...
- 应广单片机PFS123按键中断控制数码管显示例程
目录 应广单片机PFS123按键中断控制数码管显示视频 led数码管图片 应广单片机PFS123按键中断控制数码管显示代码 应广科技网址,开发工具,PMS123规格书:http://www.padau ...
- 51单片机之外部中断拙见
外部中断需要注意的点 1. 外部中断其实是包含在中断系统中的,STC89Cx系列单片机提供4个外部中断:外部中断0(INT0),外部中断1(INT1),外部中断2(INT2),外部中断3(INT3) ...
- 51单片机DS18B20与中断冲突解决方式
51单片机DS18B20与中断冲突解决方式 应用场所 在使用51单片机DS18B20的过程中,总会遇到中断(这里的中断主要是指定时器中断和串口中断)与其时序产生冲突,从而导致读取不稳定的情况发生. 问 ...
最新文章
- screen史上最全教程
- Redis的五大数据类型
- 同步本地远程分支 git remote prune origin
- JAVA-1011. A+B和C (15)
- 什么是5G技术-认识5G
- 专转本-数学考试大纲
- excel 文件加密
- [数分笔记]关于有限覆盖定理
- phpstudy和mysql哪个好_Phpstudy升级到Mysql8
- LaTeX 使用心得:节标题(section)中使用数学符号
- Mysql Nested-Loop Join算法和MRR
- Coderwars使用
- 2017福建省计算机一级应用技术,2017年一级计算机信息技术及应用考试试题级答案...
- cocos2dx 更改帧频
- 【KingstVIS】逻辑分析仪连不上竟然是因为电源
- OC 基础 UITextView
- python+selenium+phantomjs 模拟淘宝登陆
- 关于计算机备份的管理规定,电脑管理制度网友投稿(备份存档)
- 曹操传 java_用JAVA写小游戏需要知道,明白什么?
- 【RK3399Pro-firefly】关于可用的gpio的引脚使用(包含芯片手册引脚查询等内容)
热门文章
- APICS与AX的Master Planning(四)---Time Fence时限(时界)
- 如何在EXCEL中的度分秒格式的经纬度转换成度格式的数据
- 环路补偿之单极点分析 ---- 以“反相放大器”为例分析
- izone成员_PRODUCE48女团将出道,IZONE成员团内担当无责任预测!
- 6m缓存和8m缓存差距_iPhone三款免费、无广告、可缓存的视频APP,请查收!
- C++ Primer Plus习题及答案-第十二章
- 二次元博客php,分享wordpress自适应动漫二次元PureViper博客主题
- 苹果CMSv10首款原创支持百度mip技术自适应视频模板
- 中国动画腾飞的关键所在 (转)
- opencv案例: 车辆检测