第13讲51单片机按键电路
- 格式:doc
- 大小:94.51 KB
- 文档页数:8
(51单片机系列)用单片机控制继电器2008-01-13 22:10首先看看继电器的驱动这是典型的继电器驱动电路图,这样的图在网络上随处可以搜到,并且标准教科书上一般也是这样的电路图为什么要明白这个图的原理?单片机是一个弱电器件,一般情况下它们大都工作在5V甚至更低.驱动电流在mA 级以下.而要把它用于一些大功率场合,比如控制电动机,显然是不行的.所以,就要有一个环节来衔接,这个环节就是所谓的"功率驱动".继电器驱动就是一个典型的、简单的功率驱动环节.在这里,继电器驱动含有两个意思:一是对继电器进行驱动,因为继电器本身对于单片机来说就是一个功率器件;还有就是继电器去驱动其他负载,比如继电器可以驱动中间继电器,可以直接驱动接触器,所以,继电器驱动就是单片机与其他大功率负载接口.这个很重要,因为,一直让我们的电气工程师(我指的是那些没有学习过相应的电子技术的)感到迷惑不解的是:一个小小的芯片,怎么会有如此强大的威力来控制像电动机这样强大的东西?怎么样理解这个电路图?要理解这个电路,其实也比较容易.那么请您按照我的思路来,应该没有问题: 首先的,里面的三极管很重要.三极管是电子电路里很重要的一个元件.怎么样理解三极管呢?简单的来说三极管有两个作用一个是放大作用,一个是开关作用.(严格来讲开关作用是放大作用的极限情况,不过没关系,把两者分开,更便于理解它的工作原理).在这里,我们只了解它跟本电路有关的开关作用.首先把三极管想成一个水龙头.上面的Vcc就是水池,继电器是一个水轮机,下面的GND是比水池低的任何一点.刚才说过,三极管就是水龙头,它的把手就是那个带有电阻的引脚.现在,单片机的某一个需要控制这个继电器电路的输出引脚就是一只"手",当单片机的这个引脚输出低电平的时候,就像"手"在打开三极管"水龙头",水就从上往下流,继电器"水轮机"就开始转起来了.反之,如果是输出高电平,"手"就开始关"水龙头",继电器"水轮机"因为没有水流下来,就会停止.这就是三极管的开关作用.简单的理解和记忆就是:三极管是一个开关器件,其实你真的可以将它看成是一个开关,只不过它不是用手来控制,而是用电压(电流)来控制的,因此,三极管有些时候也被称做电子开关(与机械开关相区别).图上还有一个东西,是保护二极管,如果不需要深入理解的话,你大可不必追就为什么有它存在,但是一定得记住,只要是用三极管驱动继电器的场合,一般都有它的存在.需要特别注意的是它的接法:并联在继电器两端阴极一定是接Vcc【电子制作实验室--转】/DJS.htm这里我们先要安装好51试验板上的两个轻触按钮开关,我们采用的是独立式按钮开关,也就是说将开关直接连接到电源的地和单片机的对应引脚之间,这里K1接到单片机的P3.6引脚,K2接到P3.7。
单片机按键程序设计单片机按键的基本原理其实并不复杂。
通常,按键就是一个简单的开关,当按键按下时,电路接通,对应的引脚电平发生变化;当按键松开时,电路断开,引脚电平恢复到初始状态。
在程序设计中,我们需要不断检测引脚的电平变化,从而判断按键是否被按下。
在实际的按键程序设计中,有多种方式可以实现按键检测。
其中一种常见的方法是查询法。
这种方法是通过不断地读取按键对应的引脚状态来判断按键是否被按下。
以下是一个简单的查询法示例代码:```cinclude <reg51h> //包含 51 单片机的头文件sbit key = P1^0; //定义按键连接的引脚void main(){while(1) //无限循环{if(key == 0) //如果按键按下,引脚为低电平{//执行按键按下的操作//比如点亮一个 LED 灯P2 = 0xfe;while(key == 0);//等待按键松开}}}```上述代码中,我们首先定义了按键连接的引脚`key`,然后在主函数的无限循环中不断检测按键引脚的状态。
当检测到按键按下时,执行相应的操作,并通过`while(key == 0)`等待按键松开。
除了查询法,还有中断法可以用于按键检测。
中断法的优点是能够及时响应按键动作,不会因为程序的其他操作而导致按键响应延迟。
```cinclude <reg51h> //包含 51 单片机的头文件sbit key = P1^0; //定义按键连接的引脚void int0_init()//中断初始化函数{IT0 = 1; //下降沿触发中断EX0 = 1; //使能外部中断 0EA = 1; //开总中断}void int0() interrupt 0 //外部中断 0 服务函数{//执行按键按下的操作//比如点亮一个 LED 灯P2 = 0xfe;}void main(){int0_init();//初始化中断while(1);//无限循环,保持程序运行}```在上述代码中,我们首先在`int0_init` 函数中对中断进行了初始化设置,然后在`int0` 函数中编写了按键按下时的处理代码。
单片机的电路原理单片机技术自发展以来已走过了近20年的发展路程。
单片机技术的发展以微处理器(MPU)技术及超大规模集成电路技术的发展为先导,以广泛的应用领域拉动,表现出较微处理器更具个性的发展趋势。
小到遥控电子玩具,大到航空航天技术等电子行业都有单片机应用的影子。
针对单片机技术在电子行业自动化方面的重要应用,为满足广大学生、爱好者、产品开发者迅速学会掌握单片机这门技术,于是产生单片机实验板普遍称为单片机开发板、也有单片机学习板的称呼。
比较有名的例如电子人DZR-01A单片机开发板。
单片机开发板是用于学习51、STC、AVR型号的单片机实验设备。
根据单片机使用的型号又有51单片机开发板、STC单片机开发板、AVR单片机开发板。
常见配套有硬件、实验程序源码、电路原理图、电路PCB图等学习资料。
例如电子人单片机开发板,针对部分学者需要特别配套有VB上位机软件开发,游戏开发等教程学习资料。
开发此类单片机开发板的公司一般提供完善的售后服务与技术支持。
单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。
相当于一个微型的计算机,和计算机相比,单片机只缺少了I/O设备。
概括的讲:一块芯片就成了一台计算机。
它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。
同时,学习使用单片机是了解计算机原理与结构的最佳选择。
单片机的使用领域已十分广泛,如智能仪表、实时工控、通讯设备、导航系统、家用电器等。
各种产品一旦用上了单片机,就能起到使产品升级换代的功效,常在产品名称前冠以形容词——“智能型”,如智能型洗衣机等。
单片机(Microcontrollers)诞生于1971年,经历了SCM、MCU、SoC三大阶段,早期的SCM单片机都是8位或4位的。
其中最成功的是INTEL的8051,此后在8051上发展出了MCS51系列MCU系统。
基于这一系统的单片机系统直到现在还在广泛使用。
51单片机独立按键工作原理
51单片机独立按键是单片机常用的一种输入方式,其工作原理主要包
括按键输入、按键扫描和按键判断三个部分。
一、按键输入
在51单片机独立按键的输入中,按键一般都是使用电子开关实现的。
当按下按键时,电子开关会闭合,形成一条通路。
通路中的电流会使
得连接在单片机输入引脚上的电容充电,使得电容电压迅速上升。
二、按键扫描
在51单片机独立按键的输入过程中,按键的状态需要被单片机不断地
进行扫描。
为了使得扫描的速度变快,通常会将扫描的引脚定义为优
先级较高的中断引脚。
因此,当按键按下的时候,单片机会处理中断
请求,并在相应的寄存器中保存按键的状态。
三、按键判断
在51单片机独立按键输入的最后一步,就是根据按键的状态来判断其
具体的操作。
这个判断过程需要我们设置一个合适的延迟时间,以保
证扫描程序不会出现错误。
总之,51单片机独立按键的工作原理包括按键输入、按键扫描和按键
判断三个部分。
这个过程中,电子开关的闭合和断开会形成一条通路,将电容充电,引脚定义为中断引脚,优先级较高。
最后,根据按键的
状态进行相应的判断来完成各种不同的操作。
第一章51单片机的基本端口操作主要对单片机最简系统在实际应用中的使用方法,从简单到复杂地实现单片机最简系统的基本功能.“点亮最简单的单片机系统”从单片机原理上介绍单片机的基本组成和最简单系统的典型电路,以及有关单片机C51编程方法和例程.“更加明亮的小灯”从功能上介绍如何使LED发光稳定,从原理上介绍单片机I/O口的电气特性和使用方法。
“定时亮灭的小灯”介绍如何使LED灯定时亮、灭,从单片机原理上介绍定时器的使用和编程方法。
“小灯亮灭的人工控制”从功能上介绍如何通过按键控制LED灯的亮灭,从单片机原理上介绍单片机中断的使用和编程方法。
先复习下Keil 51的操作。
1.1点亮最简单的单片机系统常用MCS-51系列单片机引脚功能说明提问:什么是单片机系统、提问:单片机中晶振有什么作用?回答:单片机访问一次存储器的时间,称之为一个及其周期,是一个时间基准。
一个机器周期包括12个时钟周期。
如果一个单片机选择了12MHz 晶振,它的时钟周期是1/12us ,它的一个机器周期是12X (1/12us ),也就是1us.若是12MHz 的晶振,当单片机中定时/计数器的数值加1时,实际经过的时间就是1us 。
提示:晶振电路,复位电路基本电路图:发光二极管导通压降通常为1。
7V—1。
9V;为什么要接电阻?电路原理及器件选择?89C51:单片机,控制发光二极管亮灭OSC:晶振,在本例中选择12MHz的立式晶振C3,C2:晶振电路的起振电容,容值为22pF L1:发光二极管R1:限流电阻,阻值为1k欧地址分配和连接?P1。
0:与发光二极管电路相连,控制LED发光二极管阴极的电平高低RESET:复位引脚X1,X2:单片机的晶振引脚程序设计:延时程序:我们先不使用单片机的定时器,而是直接采用软件的延时程序定时控制发光二极管的亮灭。
在12M晶振时,一个指令周期为1us,那么1M次就是1s。
程序代码:#include<reg51。
浙江理工大学《单片机系统设计及应用实验》设计报告题目:基于51单片机的温控智能电风扇专业:机械电子工程班级:机电11(1)班姓名:叶惠芳学号:2011330300302指导教师:袁嫣红机械与自动控制学院2014 年7 月3 日目录摘要 (4)第一章课程设计的目标及主要内容 (5)1.1课程设计的目标及意义 (5)1.2温控智能电风扇的主要内容和技术关键 (5)1.2.1课程设计的主要内容 (5)1.2.2技术关键 (5)第二章温控智能电风扇控制系统硬件设计 (6)2.1课程设计总体硬件设计 (6)2.2芯片及主要器件选择 (6)2.2.1控制核心的选择 (6)2.2.2温度传感器的选用 (7)2.2.3显示电路 (7)2.3芯片及器件介绍 (7)2.3.1 AT89C51单片机 (7)2.3.2 L298芯片介绍 (8)2.3.3 DS18B20温度传感器 (9)2.3.4LED数码管简介 (11)2.4主要硬件电路 (12)2.4.1温度检测电路设计 (12)2.4.2 电机调速电路设计 (12)2.4.3 PWM调速原理 (13)2.4.4 LED数码管显示电路及按键电路 (13)第三章温控智能电风扇控制系统软件设计与实现 (14)3.1 主程序 (14)3.2 数字温度传感器模块 (14)3.3电机调速与控制子模块 (16)第四章调试结果与总结 (16)4.1 调试结果 (16)4.2 课程设计总结 (20)参考文献 (21)附录一 (23)附录二 (24)附录三 (25)摘要电风扇与空调的降温效果不同,相较于空调的迅速降低环境温度不同,电风扇更加温和,适宜于体质较弱的老人与小孩。
并且,电风扇价格实惠,使用简单。
现在市面上的电风扇大多只能手动调速,还外加一个定时功能。
对于温差较大的夜晚,若不能及时改变风速大小后停止,很容易感冒着凉。
所以本课程设计以AT89C51为核心控制系统根据外界温度的变化对电风扇进行转速控制,以实现自动换挡功能。
晨辉教你轻松学51--------按键篇对于一个由单片机为核心构成的系统而言。
输入通道是相当重要的。
可以看到几乎每一样基于单片机的产品都有人机交互的部分。
如各种仪器设备上的各种按钮和开关,以及我们手机上的键盘,MP3上的按键等等。
最常见的输入部分,莫非就是按键了。
对于大多数初学者而言,编写一个好的按键程序是一件颇为头疼的事情。
于是乎在网上乱搜一气,程序倒是找到了不少,但是看了半天依然是不明白。
或者在某某论坛上面发帖“跪求XX按键程序,大虾帮忙……”如果你偶然间进了这个论坛,又偶然看到了这个帖子,而且恰好你对按键程序的写法也不是很清楚,那么我希望你能够静静的看完这个帖子。
如果你觉得对你很有帮助,那么我希望你能够在以后的日子中能够坚持到这个论坛来,一起交流学习,分享自己学习过程中的喜悦或者一起探讨棘手的问题,这是我写这个帖子的最大的初衷了。
OK,不能再说了,再说就变成水帖了。
那么我们开始吧。
按键的种类很多。
不过原理基本相似。
下面我们以一种轻触开关为例讲解按键程序的写法。
这种轻触开关大家不陌生吧^_^一般情况下,按键与单片机的连接如下面这幅图所示。
(图中电阻值一般去4.7k~10k之间,对于内部端口有上拉电阻的单片机则可省略此电阻) 单片机对于按键的按下与否则是通过检测相应引脚上的电平来实现的。
对于上图而言,当P17引脚上面的电平为低时,则表示按键已经按下。
反之,则表明按键没有按下。
我们在程序中只要检测到了P17引脚上面的电平为低了,就可以判断按键按下。
呵呵,简单吧。
等会,您先别乐呵,话还没说完呢。
下面我们来看看,当按键按下时,P17引脚上面的波形是怎么变化的。
上图是一个理想波形图,当按键按下时,P17口的电平马上被拉低到0V了。
当然理想的东西都是不现实的。
所以我们还是看看现实的波形图吧。
看出什么区别来了没。
呵呵,只要你不是傻子我相信都能看出其中的区别。
由于按键的机械特性。
当按键闭合时,并不能马上保存良好的接触,而是来回弹跳。
c51单片机电路原理
单片机是一种集成电路,它集成了CPU、内存、输入输出接口等组成部分,广泛应用于各种电子设备中。
C51单片机是一种经典且常用的单片机型号,具有强大的处理能力和广泛的应用领域。
C51单片机的电路原理是指将C51单片机与其他组件(如传感器、显示器、电
机等)进行相连的电路。
这些电路包括供电电路、时钟电路、复位电路、引脚连接电路等。
C51单片机需要一个稳定的电源供电。
一般情况下,我们会使用5V直流电源
来供电,通过稳压器和滤波电容确保电压的稳定性。
C51单片机内部需要一个精确的时钟频率来进行工作。
为了提供稳定的时钟信号,我们需要添加一个晶体振荡器电路,通常通过连接一个石英晶体和补偿电容来实现。
晶体振荡器的频率可以根据具体应用需求选择。
C51单片机还需要一个复位电路来确保在上电或其他异常情况下能够正确启动。
复位电路一般由复位电路芯片和电阻电容组成,当电路上电或复位信号触发时,通过自动复位电路将C51单片机复位。
最重要的是,C51单片机的引脚需要连接到其他外部组件,以实现输入输出功能。
引脚连接电路包括输入电路和输出电路。
输入电路可以通过电阻分压、开关电路等方式将外部信号输入C51单片机。
而输出电路一般需要添加电流放大器或者
继电器等元件,以控制外部设备的动作。
C51单片机的电路原理主要包括供电电路、时钟电路、复位电路和引脚连接电路。
这些电路的设计和连接要符合C51单片机的规格要求,以确保其正常运行和
稳定性。
在实际应用中,我们需要根据具体需求进行相应的电路设计和调试。
51独立按键检测原理
51单片机独立按键检测原理是利用I/O口的输入功能,将按键的一端接地,另一端接I/O口。
在开始时给I/O口赋高电平,然后不断检测I/O口是否变为低电平。
如果按键按下,相当于I/O口通过按键与地相连,变成低电平,程序一旦检测到I/O口变为低电平就说明按键被按下,然后执行相应的指令。
由于使用的是弹性小按键,在按下时会有微观上的机械抖动,反应到电平就是高、低、高、低,抖动的长短与机械特性有关,一般在5~10ms。
所以在检测键盘是否按下时要加上去抖动操作。
如需了解更多关于51单片机独立按键检测原理的信息,建议查阅相关资料
或咨询专业人士。
单片机的按键控制电路原理
单片机的按键控制电路原理如下:
1. 按键连接:按键通过两个引脚(通常是输入引脚)与单片机相连。
一个引脚连接到单片机的输入引脚,另一个引脚连接到地。
2. 按键操作:当按键按下时,按键两个引脚之间的电阻减小,导致电流从单片机的输入引脚流向地。
而当按键未按下时,两个引脚之间的电阻变大,导致电流无法流过,单片机的输入引脚处于高电平状态。
3. 单片机输入引脚设置:单片机输入引脚一般采用上拉电阻或下拉电阻来保持输入引脚的电平状态。
在按键未按下时,上拉电阻连接到单片机的电源电压上,将输入引脚上拉至高电平;在按键按下时,通过按键连接到地,产生低电平。
4. 电平检测:单片机在程序中通过读取输入引脚的电平状态来判断按键是否按下。
一个常见的做法是使用中断,当检测到按键按下时,中断服务程序会被触发执行相关操作。
5. 消抖:由于按键被按下或弹起时可能会产生抖动,为了消除抖动影响,常在按键控制电路中加入消抖电路,例如RC电路或者软件延时等。
总结:按键通过连接到单片机输入引脚实现电平状态的检测,单片机通过对输入
引脚的电平状态进行判定来实现按键操作的控制。
标题:键盘接口电路教学目标与要求:1.键盘去抖动和连接、控制方式2.独立式按键及其接口电路3.矩阵式键盘及其接口电路授课时数:2教学重点:.矩阵式键盘及其接口电路教学内容及过程:一、键盘接口概述1、按键开关去抖动问题机械式按键再按下或释放时,由于机械弹性作用的影响,通常伴随有一定时间的触点机械抖动,然后其触点才稳定下来。
其抖动过程如图9-11所示,抖动时间的长短与开关的机械特性有关,一般为5 10 ms在触点抖动期间检测按键的通与断状态,可能导致判断出错,即按键一次按下或释放被错误地认为是多次操作,这种情况是不允许出现的。
为了克服按键触点机械抖动所致的检测误判,必须采取去抖动措施。
这一点可从硬件、软件两方面予以考虑。
在键数较少时,可采用硬件去抖,而当键数较多时,采用软件去抖。
在硬件上可采用在键输出端加R-S触发器(双稳态触发器)或单稳态触发器构成去抖动电路。
图9-12是一种由R-S触发器构成的去抖动电路,当触发器一旦翻转,触点抖动不会对其产生任何影响。
软件上采取的措施是:在检测到有按键按下时,执行一个10 ms左右(具体时间应视所使用的按键进行调整)的延时程序后,再确认该键电平是否仍保持闭合状态电平,若仍保持闭合状态电平,则确认该键处于闭合状态。
同理,在检测到该键释放后,也应采用相同的步骤进行确认,从而可消除抖动的影响。
2.编制键盘程序一个完善的键盘控制程序应具备以下功能:(1) 检测有无按键按下,并采取硬件或软件措施,消除键盘按键机械触点抖动的影响。
(2) 有可靠的逻辑处理办法。
每次只处理一个按键,其间对任何按键的操作对系统不产生影响,且无论一次按键时间有多长,系统仅执行一次按键功能程序。
(3) 准确输出按键值(或键号),以满足跳转指令要求。
二、独立式按键单片机控制系统中,往往只需要几个功能键,此时,可采用独立式按键结构。
1. 独立式按键结构独立式按键是直接用I/O口线构成的单个按键电路,其特点是每个按键单独占用一根I/O口线,每个按键的工作不会影响其它I/O口线的状态。
独立式按键的典型应用如图7.4所示。
独立式按键电路配置灵活,软件结构简单,但每个按键必须占用一根I/O口线,因此,在按键较多时,I/O口线浪费较大,不宜采用。
2.矩阵式键盘I/O端线分为行线和列线,按键跨接在行线和列线上,按键按下时,行线与列线发生短路。
特点:①占用I/O端线较少;②软件结构教复杂。
适用于按键较多的场合。
3.键盘扫描控制方式⑴程序控制扫描方式键处理程序固定在主程序的某个程序段。
特点:对CPU工作影响小,但应考虑键盘处理程序的运行间隔周期不能太长,否则会影响对键输入响应的及时性。
⑵定时控制扫描方式利用定时/计数器每隔一段时间产生定时中断,CPU响应中断后对键盘进行扫描。
特点:与程序控制扫描方式的区别是,在扫描间隔时间内,前者用CPU工作程序填充,后者用定时/计数器定时控制。
定时控制扫描方式也应考虑定时时间不能太长,否则会影响对键输入响应的及时性。
⑶中断控制方式中断控制方式是利用外部中断源,响应键输入信号。
特点:克服了前两种控制方式可能产生的空扫描和不能及时响应键输入的缺点,既能及时处理键输入,又能提高CPU运行效率,但要占用一个宝贵的中断资源。
三、独立式按键及其接口电路1、按键直接与I/O口连接【例9-8】按图9-13(a)、(b),试分别编制按键扫描子程序。
解:按图9-13(a)编程如下:KEYA:ORL P1,#07H ;置P1.0~P1.2为输入态MOV A,P1 ;读键值,键闭合相应位为0CPL A ;取反,键闭合相应位为1ANL A,#00000111B;屏蔽高5位,保留有键值信息的低3位JZ GRET ;全0,无键闭合,返回LCALL DY10ms ;非全0,有键闭合,延时10ms,软件去抖动MOV A,P1 ;重读键值,键闭合相应位为0CPL A ;取反,键闭合相应位为1ANL A,#00000111B;屏蔽高5位,保留有键值信息的低3位JZ GRET ;全0,无键闭合,返回;非全0,确认有键闭合JB Acc.0,KA0 ;转0#键功能程序JB Acc.1,KA1 ;转1#键功能程序JB Acc.2,KA2 ;转2#键功能程序GRET:RETKA0: LCALL WORK0 ;执行0#键功能子程序RETKA1: LCALL WORK1 ;执行1#键功能子程序RETKA2: LCALL WORK2 ;执行2#键功能子程序RET按图9-13(b)编程如下:KEYB:ORL P1,#07H ;置P1.0~P1.2为输入态MOV A,P1 ;读键值,键闭合相应位为1ANL A,#00000111B ;屏蔽高5位,保留有键值信息的低3位JZ GRET ;全0,无键闭合,返回LCALL DY10ms ;非全0,有键闭合,延时10ms,软件去抖动MOV A,P1 ;重读键值,键闭合相应位为1ANL A,#00000111B ;屏蔽高5位,保留有键值信息的低3位JZ GRET ;全0,无键闭合,返回;非全0,确认有键闭合JB Acc.0,KB0 ;转0#键功能程序JB Acc.1,KB1 ;转1#键功能程序JB Acc.2,KB2 ;转2#键功能程序GRET:RETKB0: LCALL WORK0 ;执行0#键功能子程序RETKB1: LCALL WORK1 ;执行1#键功能子程序RETKB2: LCALL WORK2 ;执行2#键功能子程序RET四、矩阵式键盘及其接口电路矩阵式键盘中,行、列线分别连接到按键开关的两端,行线通过上拉电阻接到+5V上。
当无键按下时,行线处于高电平状态;当有键按下时,行、列线将导通,此时,行线电平将由与此行线相连的列线电平决定。
这是识别按键是否按下的关键。
然而,矩阵键盘中的行线、列线和多个键相连,各按键按下与否均影响该键所在行线和列线的电平,各按键间将相互影响,因此,必须将行线、列线信号配合起来作适当处理,才能确定闭合键的位置。
2. 矩阵式键盘按键的识别识别按键的方法很多,其中,最常见的方法是扫描法。
下面以图7.5中8号键的识别为例来说明扫描法识别按键的过程。
按键按下时,与此键相连的行线与列线导通,行线在无键按下时处在高电平。
显然,如果让所有的列线也处在高电平,那么,按键按下与否不会引起行线电平的变化,因此,必须使所有列线处在低电平。
只有这样,当有键按下时,该键所在的行电平才会由高电平变为低电平。
CPU根据行电平的变化,便能判定相应的行有键按下。
8号键按下时,第2行一定为低电平。
然而,第2行为低电平时,能否肯定是8号键按下呢?回答是否定的,因为9、10、11号键按下,同样会使第2行为低电平。
为进一步确定具体键,不能使所有列线在同一时刻都处在低电平,可在某一时刻只让一条列线处于低电平,其余列线均处于高电平,另一时刻,让下一列处在低电平,依此循环,这种依次轮流每次选通一列的工作方式称为键盘扫描。
采用键盘扫描后,再来观察8号键按下时的工作过程,当第0列处于低电平时,第2行处于低电平,而第1、2、3列处于低电平时,第2行却处在高电平,由此可判定按下的键应是第2行与第0列的交叉点,即8号键。
3. 键盘的编码对于独立式按键键盘,因按键数量少,可根据实际需要灵活编码。
对于矩阵式键盘,按键的位置由行号和列号惟一确定,因此可分别对行号和列号进行二进制编码,然后将两值合成一个字节,高4位是行号,低4位是列号。
如图9-15中的8号键,它位于第2行,第0列,因此,其键盘编码应为20H。
采用上述编码对于不同行的键离散性较大,不利于散转指令对按键进行处理。
因此,可采用依次排列键号的方式对按排进行编码。
以图7.5中的4×4键盘为例,可将键号编码为:01H、02H、03H、…、0EH、0FH、10H等16个键号。
编码相互转换可通过计算或查表的方法实现。
【例9-10】按图9-15及图9-16,试编制矩阵式键盘扫描程序。
解:KEY: MOV P1,#0F0H ;行线置低电平,列线置输入态KEY0: MOV A,P1 ;读列线数据CPL A ;数据取反,“1”有效ANL A,#0F0H ;屏蔽行线,保留列线数据MOV R1,A ;存列线数据(R1高4位)JZ GRET ;全0,无键按下,返回KEY1: MOV P1,#0FH ;行线置输入态,列线置低电平MOV A, P1 ;读行线数据CPL A ;数据取反,“1”有效ANL A, #0FH ;屏蔽列线,保留行线数据MOV R2,A ;存行线数据(R2低4位)JZ GRET ;全0,无键按下,返回JBC F0,WAIT ;已有消抖标志,转SETB F0 ;无消抖标志,置消抖标志LCALL DY10ms ;调用10ms延时子程序(参阅例4.13),消抖SJMP KEY0 ;重读行线列线数据GRET: RETWAIT: MOV A,P1 ;等待按键释放CPL A ;ANL A,#0FH ;JNZ W AIT ;按键未释放,继续等待KEY2: MOV A,R1 ;取列线数据(高4位)MOV R1,#03H ;取列线编号初值MOV R3,#03H ;置循环数CLR C ;KEY3: RLC A ;依次左移入C中JC KEY4 ;C=1,该列有键按下,(列线编号存R1)DEC R1 ;C=0,无键按下,修正列编号DJNZ R3,KEY3 ;判循环结束否?未结束继续寻找有键按下的列线KEY4: MOV A,R2 ;取行线数据(低4位)MOV R2,#00H ;置行线编号初值MOV R3,#03H ;置循环数CLR C ;KEY5: RRC A ;依次右移入C中JC KEY6 ;C=1,该行有键按下,(行线编号存R2)INC R2 ;C=0,无键按下,修正行线编号DJNZ R3,KEY5 ;判循环结束否?未结束继续寻找有键按下的行线KEY6: MOV A,R2 ;取行线编号CLR C ;RLC A ;行编号×2RLC A ;行编号×4ADD A,R1 ;行编号×4+列编号=按键编号KEY7: CLR C ;RLC A ;按键编号×2RLC A ;按键编号×4(LCALL+ RET共4字节)MOV DPTR,#TABJ ;JMP @A+DPTR ;散转,执行相应键功能子程序TABJ: LCALL WORK0 ;调用执行0#键功能子程序RET ;LCALL WORK1 ;调用执行1#键功能子程序RET ;……LCALL WORK15 ;调用执行15#键功能子程序RET【例9-11】按图9-17,试编制中断方式键盘扫描程序,将键盘序号存入内RAM 30H。
解:ORG 0000H ;复位地址LJMP STAT ;转初始化ORG 0003H ;中断入口地址LJMP PINT0 ;转中断服务程序ORG 0100H ;初始化程序首地址STA T: MOV SP,#60H ;置堆栈指针SETB IT0 ;置为边沿触发方式MOV IP,#00000001B ;置为高优先级中断MOV P1,#00001111B ;置P1.0~P1.3置为输入态,置P1.4~P1.7输出0 SETB EA ;CPU开中SETB EX0 ;开中LJMP MAIN ;转主程序,并等待有键按下时中断OGR 2000H ;中断服务程序首地址PINT0: PUSH Acc ;保护现场PUSH PSW ;MOV A,P1 ;读行线(P1.0~P1.3)数据CPL A ;数据取反,“1”有效ANL A, #0FH ;屏蔽列线,保留行线数据MOV R2,A ;存行线(P1.0~P1.3)数据(R2低4位)MOV P1,#0F0H ;行线置低电平,列线置输入态MOV A,P1 ;读列线(P1.4~P1.7)数据CPL A ;数据取反,“1”有效ANL A,#0F0H ;屏蔽行线,保留列线数据(A中高4位)MOV R1,#03H ;取列线编号初值MOV R3,#03H ;置循环数CLR C ;PINT01:RLC A ;依次左移入C中JC PINT02 ;C=1,该列有键按下,(列线编号存R1)DEC R1 ;C=0,无键按下,修正列编号DJNZ R3,PINT01 ;判循环结束否?未结束继续寻找有键按下列线PINT02:MOV A,R2 ;取行线数据(低4位)MOV R2,#00H ;置行线编号初值MOV R3,#03H ;置循环数PINT03:RRC A ;依次右移入C中JC PINT04 ;C=1,该行有键按下,(行线编号存R2)INC R2 ;C=0,无键按下,修正行线编号DJNZ R3,PINT03 ;判循环结束否?未结束继续寻找有键按下行线PINT04:MOV A,R2 ;取行线编号CLR C ;RLC A ;行编号×2RLC A ;行编号×4ADD A,R1 ;行编号×4+列编号=按键编号MOV 30H,A ;存按键编号POP PSW ;POP Acc ;RETI思考题(作业):课后小记:。