51单片机学习教程第5章 按键
- 格式:ppt
- 大小:1.93 MB
- 文档页数:20
扫描法:以4*4矩阵按键为例,将全部行线置低电平,然后检测列线的状态。
只要有一列的电平为低,则表示键盘中有键被按下,而且闭合的键位于低电平线与4根行线相交叉的4个按键之中。
若所有列线均为高电平,则键盘中无键按下。
判断闭合键所在的位置:在确认有键按下后,即可进入确定具体闭合键的过程。
其方法是:依次将行线置为低电平,即在置某根行线为低电平时,其它线为高电平。
在确定某根行线位置为低电平后,再逐行检测各列线的电平状态。
若某列为低,则该列线与置为低电平的行线交叉处的按键就是闭合的按键。
#include "reg52.h"#define uchar unsigned char#define uint unsigned intvoid Delay_1ms(uint i);uchar keyScan(void);void Main(void){uchar keyValue;//存放键值,第一行的第一个为1第二行第一个为5,依次排列while(1){P1 = 0xf0;if(P1 != 0xf0)//判断是否有键按下{Delay_1ms(20);//消除键抖动if(P1 != 0xf0)//在此判断是否有键按下{keyValue = keyScan(); //逐行扫描,判断是哪个按键按下}}//此处用于对不同键值做出不同反应}}uchar keyScan(void){uchar temp,i,j,lineSelect[4]={0xef, 0xdf, 0xbf, 0x7f}; //数组用于线选for(j=0;j<4;j++)//循环四次用于四个行线依次拉低{P1=lineSelect[j];//每根行线依次拉低temp=1;for(i=0;i<4;i++)//循环四次用于判断哪列有键按下{if(!(P1&temp))//判断此列是否有键按下return (i+j*4);//返回键值,行*4+列,行和列的交叉处temp<<=1;//将目标移为下一列}}}void Delay_1ms(uint i)//延时函数{uchar x,j;for(j=0;j<i;j++)for(x=0;x<=148;x++);}线翻转法:Step 1:将列线作为输出线,行线作为输入线。
51单片机C教程键盘专题学习笔记(原创)-图文第五课键盘专题一、键盘分为编码键盘和非编码键盘:键盘上闭合键的识别又专用的硬件编码器实现,并产生键编码号或键值的称为编码键盘,如计算机键盘。
靠软件编程来识别的键盘称为非编码键盘。
在单片机组成的各种系统中,用的较多的是非编码键盘。
非编码键盘又分为独立键盘和行列式(又称矩阵式)键盘。
二、独立键盘检测1. 弹性小按键(弹性小按键被按下时闭合,松手后自动断开;单片机的外围输入控制用小弹性按键较好)、贴片式小按键、自锁式小按键(自锁式按键按下时闭合且会自动锁住,只有再次按下时才弹起断开。
通常当做开关使用,比如TX-1C实验板上的电源开关)。
2. 单片机检测按键的原理3. 为什么单片机在检测键盘时需要去抖动操作?去抖动操作有哪些方法?通常我们用哪种方法?为什么?4. 编写单片机的键盘检测程序时,一般在检测按下时加入去抖动延时,检测松手时就不用加了(不过有加,会使程序显得更严密!)。
5. TX-1C实验板独立键盘与单片机连接原理图三、矩阵键盘检测1. 典型的“矩阵键盘与单片机”的接法2. TX-1C上的矩阵键盘模块3. 矩阵键盘的工作原理和检测方法四、键盘专题例程1. 在TX - 1C 实验板上,实现一个数码管变化范围为0~9,开始时显示0,当按下S2键一次,数值加1;当加到9时,数值回0重新计。
2. 用数码管的前两位显示一个十进制数,变化范围为00~59,开始时显示00;每按下S2键一次,数值加1;每按下S3键一次,数值减1;每按下S4键一次,数值归00;每按下S5键一次,利用定时器功能使数值开始自动每秒加1,再次按下S5键,数值停止自动加1,保持显示原数。
3. 在TX-1C实验板上实现如下描述:实验板上电时,数码管不显示,顺序按下矩阵键盘后,在数码管上依次显示0~F,6个数码管同时静态显示即可。
4. 按下16个矩阵键盘依次在数码管上显示1-16的平方。
如按下第一个显示1,第二个显示4...5. 数码管前三位显示一个跑表,从000到999之间以1%秒速度运行,当按下第一个独立键盘时跑表停止,松开手后跑表继续运行。
单片机教程原作:进墨者目录单片机教程第一课:单片机概述 (2)单片机教程第二课:单片机的内部、外部结构(一) (2)单片机教程第三课:几个基本概念 (5)单片机教程第四课:第一个小程序 (8)单片机教程第五课:延时程序分析 (10)单片机教程第六课:单片机的内外部结构分析(四) (12)单片机教程第七课:单片机内部结构分析(五) (15)单片机教程第八课(寻址方式与指令系统) (19)单片机教程第九课:数据传递指令 (22)单片机教程第十课数据传递类指令指令 (25)单片机教程第十一课:算术运算类指令 (28)单片机教程第十二课:逻辑运算类指令: (32)单片机教程第十三课:逻辑与指令 (34)单片机教程第十四课:条件转移指令 (38)单片机教程第十五课:位及位操作指令 (41)单片机教程第十六课:计数器与定时器 (44)单片机教程第十七课:定时/计数器的方式控制字 (46)单片机教程第十八课:中断系统 (49)单片机教程第十九课:定时、中断练习一 (52)单片机教程第二十课:定时/计数器实验2 (57)单片机教程第二十一课:串行接口 (60)单片机教程第二十二课:串行口应用编程实例 (65)单片机教程第二十三课:LED数码显示器的连接与编程 (68)单片机教程第二十四课:动态扫描显示接口 (72)单片机教程第二十五课:键盘接口与编程 (78)单片机教程第二十六课:矩阵式键盘接口技术及编程 (83)单片机教程第二十七课:初学单片机几个不易掌握的概念 (87)单片机教程第二十八课:单片机音乐程序的设计与实验 (90)单片机教程第一课:单片机概述1、何谓单片机一台能够工作的计算机要有这样几个部份构成:CPU(进行运算、控制)、RAM(数据存储)、ROM(程序存储)、输入/输出设备(例如:串行口、并行输出口等)。
在个人计算机上这些部份被分成若干块芯片,安装一个称之为主板的印刷线路板上。
而在单片机中,这些部份,全部被做到一块集成电路芯片中了,所以就称为单片(单芯片)机,而且有一些单片机中除了上述部份外,还集成了其它部份如A/D,D/A等。
\\\§8.3 键盘接口技术一、键盘输入应解决的问题键盘是一组按键的集合,它是最常用的单片机输入设备.操作人员可以通过键盘输入数据或命令,实现简单的人机通讯。
键是一种常开型按钮开关,平时(常态)键的二个触点处于断开状态,按下键时它们才闭合(短路)。
键盘分编码键盘和非编码键盘。
键盘上闭合键的识别由专用的硬件译码器实现并产生编号或键值的称为编码键盘,如:ASCⅡ码键盘、BCD码键盘等;靠软件识别的称为非编码键盘。
在单片机组成的测控系统及智能化仪器中用得最多的是非编码键盘。
本节着重讨论非编码键盘的原理、接口技术和程序设计。
键盘中每个按键都是—个常开关电路,如图所示。
1.按键的确认:P1.7=1 无按键;P1.7=0 有按键;2.去抖动去抖动的方法:①硬件去抖动采用RS触发器:优点: 速度快,实时,缺点: 增加了硬件成本②软件去抖动采用延时方法延时5—10ms 延时5—10ms P1.7=0 确认P1.7=0 P1.7=1 (去前沿抖动) (去后沿抖动)二、独立式键盘每个I/O口连接一个按,S1 P1.0S2 P1.1……………………….S8 P1.7软件:START:MOV P1,#0FFH ;置P1口为高电平JNB P1.0, RS1 ; S1按下,程序去执行RS1JNB P1.1, RS2 ; S2按下,程序去执行RS2JNB P1.2, RS3 ; S3按下,程序去执行RS3JNB P1.3, RS4 ; S4按下,程序去执行RS4JNB P1.4, RS5 ; S5按下,程序去执行RS5JNB P1.5, RS6 ; S6按下,程序去执行RS6JNB P1.6, RS7 ; S7按下,程序去执行RS7JNB P1.7, RS8 ; S8按下,程序去执行RS8AJMP START ; 继续扫描按键………….RS1: AJMP PK1 ;RS2: AJMP PK2 ;RS3: AJMP PK3 ;RS4: AJMP PK4 ;RS5: AJMP PK5 ;RS6: AJMP PK6 ;RS7: AJMP PK7 ;RS8: AJMP PK8 ;AJMP START ; 无键按下,继续扫描…………………PK1: ……….. ;按键S1功能处理程序AJMP START ;处理S1按键后, 继续扫描PK2: ……….. ;按键S2功能处理程序AJMP START………………….PK8: ………………;按键S8功能处理程序AJMP START ; 处理S8按键后, 继续扫描优点: 连线简单,程序容易.缺点: 太浪费资源适用于按键较少、I/O口空闲的场合。
第05章 单片机定时计数器 习题解答一、 填空题1.1. MCS-51单片机中有单片机中有 2 2 个 16 16 位的定时器位的定时器//计数器。
器。
2.2. 定时器定时器//计数器T0可以工作于方式可以工作于方式 0、1、2、3 3 。
3.3. 方式0为 13 位定时器位定时器//计数器。
计数器。
4.4. 若系统晶振频率为12MHz ,则T0工作于定时方式1时最多可以定时 65536 65536 µs。
µs。
5.5. 欲对300个外部事件计数,可以选用定时器个外部事件计数,可以选用定时器//计数器T1的模式的模式 0 0 或模或模式 1 。
6.6. TMOD 中的M1M0= 11时,定时器工作于方式时,定时器工作于方式 3 3。
7.7. 若系统晶振频率为6MHz 6MHz,则定时器可以实现的最小定时时间为,则定时器可以实现的最小定时时间为,则定时器可以实现的最小定时时间为 2 2 µs。
8.8. MCS-51单片机工作于定时状态时,计数脉冲来自单片机内部的机器周期 。
9.9. MCS-51单片机工作于计数状态时,计数脉冲来自单片机工作于计数状态时,计数脉冲来自 单片机外部事件单片机外部事件单片机外部事件 。
10.10. 当GATE=0时,时, 则当软件控制位则当软件控制位TR0TR0==1时 启动T0开始工作。
开始工作。
二、 简答题1.1.定时器定时器定时器//计数器T0和T1各有几种工作方式?简述每种工作方式的特点。
如何控制定时器/计数器的工作方式?计数器的工作方式?答:答:T0T0可以工作于方式0,1,2,3;T1可以工作于方式0,1,2方式0:是13位定时位定时//计数器,由TLX 的低5位(位(TLX TLX 的高3位未用)和THX 高8位组成。
成。
方式1:TLX 和THX 组成16位定时位定时//计数器。
计数器。
方式2:方式2为自动重装初值的8位定时位定时//计数器。
晨辉教你轻松学51--------按键篇对于一个由单片机为核心构成的系统而言。
输入通道是相当重要的。
可以看到几乎每一样基于单片机的产品都有人机交互的部分。
如各种仪器设备上的各种按钮和开关,以及我们手机上的键盘,MP3上的按键等等。
最常见的输入部分,莫非就是按键了。
对于大多数初学者而言,编写一个好的按键程序是一件颇为头疼的事情。
于是乎在网上乱搜一气,程序倒是找到了不少,但是看了半天依然是不明白。
或者在某某论坛上面发帖“跪求XX按键程序,大虾帮忙……”如果你偶然间进了这个论坛,又偶然看到了这个帖子,而且恰好你对按键程序的写法也不是很清楚,那么我希望你能够静静的看完这个帖子。
如果你觉得对你很有帮助,那么我希望你能够在以后的日子中能够坚持到这个论坛来,一起交流学习,分享自己学习过程中的喜悦或者一起探讨棘手的问题,这是我写这个帖子的最大的初衷了。
OK,不能再说了,再说就变成水帖了。
那么我们开始吧。
按键的种类很多。
不过原理基本相似。
下面我们以一种轻触开关为例讲解按键程序的写法。
这种轻触开关大家不陌生吧^_^一般情况下,按键与单片机的连接如下面这幅图所示。
(图中电阻值一般去4.7k~10k之间,对于内部端口有上拉电阻的单片机则可省略此电阻) 单片机对于按键的按下与否则是通过检测相应引脚上的电平来实现的。
对于上图而言,当P17引脚上面的电平为低时,则表示按键已经按下。
反之,则表明按键没有按下。
我们在程序中只要检测到了P17引脚上面的电平为低了,就可以判断按键按下。
呵呵,简单吧。
等会,您先别乐呵,话还没说完呢。
下面我们来看看,当按键按下时,P17引脚上面的波形是怎么变化的。
上图是一个理想波形图,当按键按下时,P17口的电平马上被拉低到0V了。
当然理想的东西都是不现实的。
所以我们还是看看现实的波形图吧。
看出什么区别来了没。
呵呵,只要你不是傻子我相信都能看出其中的区别。
由于按键的机械特性。
当按键闭合时,并不能马上保存良好的接触,而是来回弹跳。
51单⽚机教程:按键输⼊、矩阵按键(按键巧⽤)proteus仿真+keil⽂章⽬录IO⼝原理(P1⼝最简单,所以这⾥只介绍P1,其他IO⼝原理类似)P1⼝原理可以看到的是P1⼝的⼯作原理⽐较简单,⾸先⽤P1⼝做输⼊输出较为好理解。
1、内部总线:就是内部P1.X位寄存器的值,⽐如说内部总线P1.0上电压为0V,那么对应P1.0=0;内部总线P1.0上电压为5V,那么对应P1.0=1;2、P1.X引脚:对应单⽚机引脚接⼝3、读锁存器:读锁存器为1,允许读锁存器。
为0,不允许读锁存器。
4、读引脚:为0不允许读引脚,为1允许读引脚5、写锁存器:提供⼀个上升沿锁存数据(写数据到单⽚机IO⼝上时⾃动提供⼀个脉冲)⼏个核⼼问题:1、读锁存器与读引脚区别是什么?读锁存器:读锁存器Q的电平读引脚:读P1.X引脚的电平2、读锁存器与读引脚能不能同时读?不能,两个输⼊缓冲器只能同时打开⼀个,所以只能同时读取⼀个电平。
3、什么时候读锁存器,什么时候读引脚?凡属于读-修改-写⽅式的指令,从锁存器读⼊信号,其它指令则从端⼝引脚线上读⼊信号。
也就是说遇到读指令时,相应的输⼊缓冲器才会打开,⼀般是出于关闭状态4、如果P1.0⼝⼀开始置⼀,然后⽤按键拉低,松开按键后P1.0⼝会是低电平吗?不会,锁存器锁1,没有写⼊0之前⼀直输出1,按下按键只不过P1.0引脚变低了,松开后依然是⾼电平(有了以上知识,我们就可以轻松解决很多问题了)按键输⼊按键由于是机械结构,按下的时候难免产⽣抖动,⼀般抖动会在按下的时候与松开的时候产⽣,抖动时间⼤概是10ms⼆、打开proteus仿真,绘制电路功能:利⽤⼀个按键对⼀个发光⼆极管进⾏控制。
这个可以说是最简单的按键输⼊实验了!由于是51单⽚机,内部有上拉电阻,我们就不要浪费材料在按键上接上拉了三、打开keil,编写如下代码sbit key=P1^0;//定义key为P1.0sbit led=P2^0;//定义LED为P2.0void delay10(void)//延时10ms{int n=1000;while(n--);}void main(void){while(1){if(key==0)//读P1.0引脚,如果引脚为低电平,则进⼊if{delay10();//延时10ms消抖if(key==0)//再次判断按键是否按下,防⽌⼲扰,增强稳定{led =!led;//led状态改变while(key==0);//等待按键松开,防⽌往下执⾏}}}}博主有个疑问也很不解,当"key"换成"P2^0"后程序就不能正常运⾏了,知道的⼩伙伴能不能给我解解惑。
51单片机学习之5独立按键和矩阵键盘51单片机学习之5-独立按键和矩阵键盘第14集键盘的原理键盘分编码键盘(例如电脑键盘)和非编码键盘(自己用程序去识别)。
非编码键盘分:独立式非编码键盘(独立按键)、行列式非编码键盘(4*4阵列键盘)独立键盘的电路图。
因为51单片机的IO口不是双向口而是准双向口,要让IO口具备输入功能,必须将IO口置1,置1之后当按键按下时IO口的电平会被拉低,即被置0。
当检测到IO 口为0时即可判断该按键已经按下。
按键按下时会有一个抖动的过程(弹片会抖动),由于单片机检测IO口速度非常快,超过弹片抖动的频率,所以当单片机检测到IO口为0时需延时一小段时间再检测IO是否为0,如果仍为0就确认该按钮被按下。
因为IO口里面有上拉电阻,所以当松开按钮时,IO口又被拉高。
例程:#include;#defineuintunsignedint#defineucharunsignedcharsbitKey=P3^4;//按键sbitLed=P1^0; //Led灯voiddelay(uintz);/********主函数********/voidmain(){while(1){if(!Key){delay(10);//消抖操作if(!Key)Led=0; //按下时Led亮elseLed=1;}}}voiddelay(uintz){uintx,y;for(x=z;x>;0;x--)for(y=110;y>;0;y--);}第15集4*4矩阵键盘上图中,1个按键占用一个IO口,如果有16个按键就占用了16个IO口。
为了减少IO口的使用,就需要用矩阵的方式连线。
如下图矩阵扫描原理从图可以看出P30、P31、P32、P33为行(低四位),P34、P35、P36、P37为列(高四位)。
假设我们按下的是S6按钮。
第一步,我们先确定列,给P3口赋值0xF0=11110000,那么P37、P36、P35、P34都被置1,P33、P32、P31、P30都被置0,当S6被按下时,由于S6按钮的一边P31为0,所以跟S6另一边相连的P35被拉低,即等于0。
实验5 按键功能的实现一、实验目的1、理解按键电路的作用;2、学习按键功能的编程方法;3、熟悉单片机I/O口连接独立式按键的编程应用方法。
二、实验说明按键在单片机应用系统中实现向单片机输入数据、传送命令等功能,是人工干预单片机工作的主要手段。
如果需要较多数量的按键,可以采用按键矩阵和专门的接口器件扩展按键。
实际的单片机应用系统中,用到的按键数量一般不多,通常采用单片机I/O口和独立式按键即能满足需要。
实验箱核心板上有 4 个按键,其一端全部与地线相连,另一端顺次与P1.4~P1.7 相连。
本实验需要用到核心板上的3 个按键、3 个指示灯和6 个数码管,所用到的实验电路原理如图 3.1.6 所示。
本实验中 3 个按键设计的功能,是一个实用的简单温度控制系统的按键功能,要求通过按键设定一个温度上限值和一个温度下限值。
本实验只涉及按键和显示功能,在今后的实验中,将进一步增加硬件和软件功能,利用单片机实现实际的温度控制系统,使温度维持在上、下限值之间。
①“功能”键:在内存数据区定义一个名称为“KBM”的字节,存放功能编号,共有 3 种功能,分别对应编号为0,1,2。
每按一次“功能”键,“KBM”中的值在这三个数字中循环改变一次。
与三种功能对应,设计三个LED(发光二极管)指示灯,由单片机P3 口控制,当处于某种功能状态时,相应的指示灯亮。
本实验的内容,实际上是后面进一步做温度测量控制系统的一部分。
三种功能的含义如下:功能号0:显示测量的温度值;功能号1:对温度上限值进行修改;功能号2:对温度下限值进行修改。
②“↑”键:每按一次“↑”键,内存数据区中指定变量单元的值增1,持续按住则连续增1。
③“↓”键:与“↑”键对应,每按一次“↓”,内存数据区中指定变量单元的值减1,持续按住则连续减1。
功能号为0 时,数码管显示被测温度值,此时按另外两个按键不起作用。
功能号为 1 时,数码管显示设定温度的上限值,按另外两个按键可以修改温度上限值。