第13讲51单片机按键电路
51单片机介绍ppt课件(2024)

2024/1/29
28
其他常用外部设备接口技术
键盘接口
显示接口
通过扫描键盘矩阵或采用专用键盘接口芯 片实现键盘输入。
采用LED数码管、LCD液晶显示屏等显示设 备,通过单片机的I/O端口或专用显示驱动 芯片实现数据显示。
打印机接口
传感器接口
通过并行或串行接口与打印机连接,实现 数据的打印输出。
2024/1/29
片内资源丰富,包括RAM、ROM、定时器/计数器、串行通信接口等。
5
主要特点及应用领域
可扩展性强,可通过外部扩展芯片实现更多功能。
功耗低,适用于便携式设备。
应用领域
2024/1/29
6
主要特点及应用领域
工业控制
仪器仪表
通信设备
汽车电子
如电机控制、温度控制 等。
2024/1/29
如智能仪表、测量仪器 等。
25
并行I/O口扩展方法
2024/1/29
简单I/O口扩展
利用单片机的空闲I/O端口,通过数据总线和控制总线与 扩展芯片连接,实现并行I/O口的扩展。
可编程I/O口扩展
使用可编程并行I/O接口芯片,如8255、8155等,通过编 程设置芯片的工作方式,实现灵活的I/O口扩展。
总线式I/O口扩展
采用总线式结构,将多个I/O接口芯片挂在总线上,通过 总线仲裁和地址译码电路实现I/O口的扩展。
26
串行通信接口技术
1
RS-232C接口
采用负逻辑电平,通过MAX232等电平转换芯片 与单片机的串行口连接,实现串行通信。
2
RS-485接口
采用差分信号传输方式,具有高抗干扰能力和远 距离传输能力,通过专用芯片与单片机的串行口 连接。
51单片机控制继电器

(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单片机独立按键的工作原理包括按键输入、按键扫描和按键
判断三个部分。
这个过程中,电子开关的闭合和断开会形成一条通路,将电容充电,引脚定义为中断引脚,优先级较高。
最后,根据按键的
状态进行相应的判断来完成各种不同的操作。
普中科技-51单片机教程配套PPT

1:CPU脉冲输入端,端口对应一个信号输出端16。 2:CPU脉冲输入端。 3:CPU脉冲输入端。 4:CPU脉冲输入端。 5:CPU脉冲输入端。 6:CPU脉冲输入端。 7:CPU脉冲输入端。 8:接地
9:该脚是内部7个续流二极管负极的公共端,各二极管的正极分别接各达林顿管的集 电极。用于感性负载时,该脚接负载电源正极,实现续流作用。如果该脚接地,实际 上就是达林顿管的集电极对地接通。
普中科技 单片机开发仪视频教程
原理图和连接逻辑图
原理图
连接逻辑图
当一个选通端(G1)为高电平,另两个选通端(/(G2A)和/(G2B))为低电平时,可将地 址端(A、B、C)的二进制编码在一个对应的输出端以低电平译出 ,利用G1、/(G2A)和 /(G2B)可级联扩展成4线-16线译码器或5线-32线译码器
普中科技 单片机开发仪视频教程
轻触按钮开关在开发仪上应用原理图
01
排线连接方法 看视频图像
02
四、知识点 1.intrins.h:_nop_函数在此头文件中,此函数是空指令函数,相当汇编NOP指令。 2.Sbit 关键字:是Keil C增加的关键字,用来定义位变量,它有三种用法: 1. sbit 位变量名 = 地址值 例如: sbit AC = 0xD6 2.sbit 位变量名 = 寄存器名称^寄存器某位的序号 例如:sbit K1 = P0^0 3.Sbit 位变量名 = 寄存器地址^寄存器某位的序号 例如:sbit K2 = 0x80^1 3.While循环语句: while语句用来“当型”循环结构,它的格式:while(表达式) { 语句;} 当表达式为为“真”或“1”时,循环执行while后面{ }内的语句,常称循环体,当为“假”或“0”时,不执行循环体或者退出循环体语句。 4.If条件判断选择语句: if语句是一个条件判断选择语句。这里介绍2种用法。它的格式: ①if(表达式) { 语句; } //表达式为“真”或“1”则执行语句,为“假”或“0” 则 //执行 语句后面的语句 if(表达式) 语句1; //表达式为真或1时,则执行语句1. else 语句2; //表达式为假或0时,则执行语句2.
51单片机教学ppt精选全文完整版

全双工串行口、2个16位定时/计数器。寻址范围64K。
片上还有8路10位ADC、1路PWM输出及高速I/O部件 等。
80C51系列单片机产品繁多,主流地位已经形成,近 年来推出的与80C51兼容的主要产品有:
﹡ATMEL公司融入Flash存储器技术的AT89系列; ﹡Philips公司的80C51、80C552系列; ﹡华邦公司的W78C51、W77C51高速低价系列; ﹡ADI公司的ADμC8xx高精度ADC系列; ﹡LG公司的GMS90/97低压高速系列; ﹡Maxim公司的DS89C420高速(50MIPS)系列; ﹡Cygnal公司的C8051F系列高速SOC单片机。 *ARM公司
EXIT: RET
返
1)编程扫描方式(查询方式) 2)定时扫描方式 3)中断方式
返
1)取得键值的方法 ◆扫描法 ◆线反转法
2)键值与键号的对应
3)通过程序得到键号 分析:
返
中断结构图
返
中
断
处
理
中断请求
流
程
图
中断响应
中断服务
中断返回 返
1.中断源及矢量地址 2.与中断控制相关的寄存器 3.中断处理过程 4.中断请求源的撤销 5.中断服务程序设计(汇编)
IE1
P1.3
25H
26H
例15:设累加器的各位ACC.0-ACC.7分别记为X0-X7 编程 实现以下逻辑表达式功能。
Y=X0 X1 X2+X0 X1 X2+X0 X1 X2 X3+X4 X5 X6 X7
返
例16:用程序实现c=a2+b2,设a、b均小于10。a存 放在
2024年度51单片机超详细教程PPT

实例:按键中断程序设计
3. 在主程序中初始化LED 灯和按键输入端口。
4. 开启外部中断0并等待 按键输入。
5. 当按键按下时,触发外 部中断0并执行中断服务 程序,实现LED灯的闪烁 功能。
2024/3/23
32
Part
06
接口技术与应用扩展
2024/3/23
33
并行I/O口扩展方法
2024/3/23
存放程序代码和常数表格 等,一般使用ROM或 EPROM实现
STEP 03
特殊功能寄存器
用于控制单片机的各种功 能,如定时器、中断等
存放变量、中间结果等, 一般使用RAM实现
9
I/O端口及特殊功能寄存器
要点一
I/O端口
要点二
特殊功能寄存器
与外部设备通信的接口,分为并行I/O和串行I/O两种
用于控制I/O端口的操作,如设置端口模式、读取端口状态 等
优势
51单片机在嵌入式系统领域具有广泛的应用,其稳定的性能和成熟的生态系统使得开发者能够快速开发出高质量 的嵌入式应用。
2024/3/23
5
应用领域与市场需求
应用领域
智能家居、工业自动化、医疗设备、汽车电子、物联网等。
市场需求
随着物联网、人工智能等技术的快速发展,对单片机的性能、功耗、安全性等方面提出了更高的要求 。同时,市场对于单片机的定制化、差异化需求也日益增加。
23
Part
05
中断系统与定时器/计数器应 用
2024/3/23
24
中断概念及中断源识别方法
2024/3/23
中断概念
中断是指在CPU执行程序的过程中,由于某种原因,暂时停止当前正在执行的程序,转 而去执行另一段特殊程序,待特殊程序执行完毕后,再返回原程序继续执行的过程。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
标题:键盘接口电路教学目标与要求: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思考题(作业):课后小记:。