单片机按键程序与电路设计
单片机按键模块设计
![单片机按键模块设计](https://img.taocdn.com/s3/m/48ac3816e418964bcf84b9d528ea81c758f52ef8.png)
单片机按键模块设计一、硬件设计1、按键的类型选择按键的类型有很多种,常见的有机械按键和触摸按键。
机械按键通过金属触点的闭合和断开来产生电信号,具有成本低、可靠性高的优点,但寿命相对较短,容易产生抖动。
触摸按键则通过电容感应或电阻感应来检测触摸动作,寿命长、外观美观,但成本相对较高,且容易受到外界干扰。
在一般的单片机应用中,机械按键通常是更经济实用的选择。
2、按键的连接方式按键可以采用独立式连接或矩阵式连接。
独立式连接适用于按键数量较少的情况,每个按键单独连接到单片机的一个 I/O 口上,这种方式简单直观,但占用的 I/O 口资源较多。
矩阵式连接则适用于按键数量较多的情况,通过将按键排列成矩阵形式,利用行线和列线的交叉点来识别按键,大大节省了 I/O 口资源,但编程相对复杂。
以 4×4 矩阵按键为例,我们需要 8 个 I/O 口,其中 4 个作为行线,4 个作为列线。
当某个按键被按下时,对应的行线和列线会接通,通过扫描行线和列线的状态,就可以确定被按下的按键。
3、上拉电阻的使用为了保证单片机能够正确检测按键的状态,通常需要在按键连接的I/O 口上加上拉电阻。
上拉电阻将I/O 口的电平拉高,当按键未按下时,I/O 口处于高电平;当按键按下时,I/O 口被拉低为低电平。
上拉电阻的阻值一般在10KΩ 左右。
4、消抖处理由于机械按键在按下和释放的瞬间,触点会产生抖动,导致单片机检测到的电平不稳定。
为了消除这种抖动,通常采用软件消抖或硬件消抖的方法。
软件消抖是在检测到按键状态变化后,延迟一段时间(一般为10ms 20ms),再次检测按键状态,如果状态保持不变,则认为按键有效。
这种方法简单易行,但会增加程序的执行时间。
硬件消抖则是通过在按键两端并联电容或使用专用的消抖芯片来实现。
电容可以吸收触点抖动产生的尖峰脉冲,使电平稳定。
但硬件消抖会增加硬件成本和电路复杂度。
二、软件编程1、按键扫描程序在软件编程中,需要编写按键扫描程序来检测按键的状态。
51单片机按键控制电路设计内容总结
![51单片机按键控制电路设计内容总结](https://img.taocdn.com/s3/m/c76c3d575e0e7cd184254b35eefdc8d376ee14ec.png)
51单片机按键控制电路设计内容总结一、引言在现代电子产品中,按键控制是一种常见的操作方式。
通过按下不同的按键,可以实现不同的功能。
而在电子设备的控制电路中,需要一种可靠的方式来检测按键的状态,并根据按键的状态来进行相应的操作。
本文将介绍基于51单片机的按键控制电路设计。
二、按键控制电路的基本原理按键控制电路的基本原理是通过检测按键的状态来确定按键是否被按下。
当按键被按下时,按键的状态会发生改变,通过检测这种状态的改变,可以触发相应的操作。
在51单片机中,可以通过外部中断来实现对按键状态的检测。
当按键被按下时,会触发外部中断,从而通知单片机按键的状态发生了改变。
三、按键控制电路的设计步骤1. 硬件设计在按键控制电路的硬件设计中,需要确定使用的按键数量,并选择合适的按键类型。
常见的按键类型有机械按键和触摸按键。
根据实际需求,选择合适的按键类型,并将其连接到51单片机的外部中断引脚上。
2. 软件设计在按键控制电路的软件设计中,需要编写相应的程序来实现对按键状态的检测和相应操作的执行。
在51单片机中,可以通过中断服务程序来实现对外部中断的响应。
当外部中断触发时,中断服务程序会被执行,并根据按键的状态来执行相应的操作。
四、案例分析下面以一个简单的案例来说明按键控制电路的设计。
假设我们需要设计一个LED灯的开关控制电路,通过按下按键可以控制LED灯的开关状态。
1. 硬件设计选择一个机械按键作为控制按键,并将其连接到51单片机的外部中断引脚上。
同时,将一个LED灯连接到51单片机的IO口上。
2. 软件设计编写相应的程序来实现按键状态的检测和LED灯开关状态的控制。
当按键被按下时,外部中断触发,中断服务程序被执行。
在中断服务程序中,通过读取按键的状态来确定按键是否被按下,并根据按键的状态来控制LED灯的开关状态。
五、总结通过本文的介绍,我们了解了按键控制电路的基本原理和设计步骤。
在51单片机中,可以通过外部中断来实现对按键状态的检测。
单片机按键程序设计
![单片机按键程序设计](https://img.taocdn.com/s3/m/c2daf845c4da50e2524de518964bcf84b9d52db9.png)
单片机按键程序设计单片机按键的基本原理其实并不复杂。
通常,按键就是一个简单的开关,当按键按下时,电路接通,对应的引脚电平发生变化;当按键松开时,电路断开,引脚电平恢复到初始状态。
在程序设计中,我们需要不断检测引脚的电平变化,从而判断按键是否被按下。
在实际的按键程序设计中,有多种方式可以实现按键检测。
其中一种常见的方法是查询法。
这种方法是通过不断地读取按键对应的引脚状态来判断按键是否被按下。
以下是一个简单的查询法示例代码:```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` 函数中编写了按键按下时的处理代码。
1-单片机键盘与显示电路设计
![1-单片机键盘与显示电路设计](https://img.taocdn.com/s3/m/ddeffba0f524ccbff12184fb.png)
独立式按键 单片机控制系统中,往往只需要几个 功能键,此时,可采用独立式按键结构。 1.独立式按键结构 独立式按键是直接用I/O口线构成的单 个按键电路,其特点是每个按键单独占 用一根I/O口线,每个按键的工作不会影 响其它I/O口线的状态。独立式按键的典 型应用如图9-3所示。
V CC
P 1.0 P 1.1 P 1.2 P 1.3 P 1.4 P 1.5 P 1.6 P 1.7
P1口某位结构
P1口电路中包含有一个数据输出锁存器、一个三态数据输入缓冲器 、一个数据输出的驱动电路。 P1口的功能和驱动能力
P1口只可以作为通用的I/O口使用;
P1可以驱动4个标准的TTL负载电路; 注意在P1口作为通用的I/O口使用时,在从I/O端口读入数据时,应 该首先向相应的I/O口内部锁存器写“1”。 举例:从P1口的低四位输入数据 MOV MOV P1,#00001111b ;;先给P1口底四位写1 A,P1 ;;再读P1口的底四位
依此规律循环,即可使各位数码管显 示将要显示的字符。虽然这些字符是在不 同的时刻分别显示,但由于人眼存在视觉 暂留效应,只要每位显示间隔足够短就可 以给人以同时显示的感觉。 采用动态显示方式比较节省I/O口,硬 件电路也较静态显示方式简单,但其亮度 不如静态显示方式,而且在显示位数较多 时,CPU要依次扫描,占用CPU较多的时 间。
矩阵式按键 单片机系统中,若使用按键较多时,通 常采用矩阵式(也称行列式)键盘 1.矩阵式键盘的结构及原理 矩阵式键盘由行线和列线组成,按键位 于行、列线的交叉点上,其结构如下图9-4 所示。
+5 V 0 4 8 12 0 1 5 9 13 1 2 6 10 14 2 3 7 11 15 3 0 1 2 3
单片机c语言程序设计---矩阵式键盘实验报告
![单片机c语言程序设计---矩阵式键盘实验报告](https://img.taocdn.com/s3/m/54cd1a460a1c59eef8c75fbfc77da26924c59657.png)
单片机c语言程序设计---矩阵式键盘实验报告课程名称:单片机c语言设计实验类型:设计型实验实验项目名称:矩阵式键盘实验一、实验目的和要求1.掌握矩阵式键盘结构2.掌握矩阵式键盘工作原理3.掌握矩阵式键盘的两种常用编程方法,即扫描法和反转法二、实验内容和原理实验1.矩阵式键盘实验功能:用数码管显示4*4矩阵式键盘的按键值,当K1按下后,数码管显示数字0,当K2按下后,显示为1,以此类推,当按下K16,显示F。
(1)硬件设计电路原理图如下仿真所需元器件(2)proteus仿真通过Keil编译后,利用protues软件进行仿真。
在protues ISIS 编译环境中绘制仿真电路图,将编译好的“xxx.hex”文件加入AT89C51。
启动仿真,观察仿真结果。
操作方完成矩阵式键盘实验。
具体包括绘制仿真电路图、编写c源程序(反转法和扫描法)、进行仿真并观察仿真结果,需要保存原理图截图,保存c源程序,总结观察的仿真结果。
完成思考题。
三、实验方法与实验步骤1.按照硬件设计在protues上按照所给硬件设计绘制电路图。
2.在keil上进行编译后生成“xxx.hex”文件。
3.编译好的“xxx.hex”文件加入AT89C51。
启动仿真,观察仿真结果。
四、实验结果与分析void Scan_line()//扫描行{Delay(10);//消抖switch ( P1 ){case 0x0e: i=1;break;case 0x0d: i=2;break;case 0x0b: i=3;break;case 0x07: i=4;break;default: i=0;//未按下break;}}void Scan_list()//扫描列{Delay(10);//消抖switch ( P1 ){case 0x70: j=1;break;case 0xb0: j=2;break;case 0xd0: j=3;break;case 0xe0: j=4;break;default: j=0;//未按下break;}}void Show_Key(){if( i != 0 && j != 0 ) P0=table[ ( i - 1 ) * 4 + j - 1 ];else P0=0xff;}五、讨论和心得。
4.3 单片机键盘接口电路设计
![4.3 单片机键盘接口电路设计](https://img.taocdn.com/s3/m/de59c0a9360cba1aa811daa0.png)
//函数功能:键盘扫描 //检测到有键按下 //延时10ms再去检测 //按键k1被按下 //按键k2被按下 //按键k3被按下 //按键k4被按下
▲▲▲
独立式键盘接口设计案例
void forward(void) { P3=0xfe; led_delay(); P3=0xfd; led_delay(); P3=0xfb; led_delay(); P3=0xf7; led_delay(); P3=0xef; led_delay(); P3=0xdf; led_delay(); P3=0xbf; led_delay(); P3=0x7f; led_delay(); }
break;
}
}
}
▲▲▲
独立式键盘接口设计案例
void key_scan(void) { P1=0xff; if((P1&0x0f )!=0x0f ) { delay10ms(); if(S1==0) keyval=1; if(S2==0) keyval=2; if(S3==0) keyval=3; if(S4==0) keyval=4; }
//处理按下的k1键,“……”为处理程序 //跳出switch语句 //处理按下的k2键 //跳出switch语句 //处理按下的k3键 //跳出switch语句 //处理按下的k4键 //跳出switch语句 //处理按下的k5键 //跳出switch语句
独立式键盘接口设计案例
1.独立式键盘的查询工作方式
{
case 1:forward(); //键值为1,调用正向流水点亮函数
break;
case 2:backward(); //键值为2,调用反向流水点亮函数
break;
case 3:Alter(); //键值为3,调用高、低4位交替点亮函数
单片机外围电路设计
![单片机外围电路设计](https://img.taocdn.com/s3/m/570106256ad97f192279168884868762caaebb16.png)
单片机外围电路设计单片机外围电路设计是嵌入式系统开发中的重要环节,它关乎到整个系统的稳定性和性能。
在本文中,我们将探讨单片机外围电路设计的基本原理和要点,以及一些常见的设计方案。
一、单片机外围电路的作用单片机外围电路的作用主要有三个方面:供电、信号输入与输出、与其他外部设备的通信。
首先,供电电路提供稳定的电源给单片机,确保其正常工作;其次,信号输入与输出电路将外部信号转化为单片机可以处理的电信号,或将单片机处理后的信号输出给外部设备;最后,通信电路用于单片机与其他外部设备的数据交互,例如串口通信、SPI通信等。
二、单片机外围电路的基本原理1.供电电路设计供电电路设计要求提供稳定、可靠的电源给单片机,通常采用稳压电路。
常见的稳压电路有线性稳压电路和开关稳压电路。
线性稳压电路简单易用,但效率低,散热大;开关稳压电路效率高,但设计和调试难度较大。
2.信号输入与输出电路设计信号输入电路通常需要考虑防抖和信号变换。
防抖电路用于消除开关输入引脚的抖动,常用的方法有RC电路、Schmitt触发器等。
信号变换电路用于将外部信号转化为单片机可以处理的电信号,例如模拟信号的AD转换和数字信号的电平转换。
信号输出电路一般需要考虑电流放大和电平转换。
电流放大电路用于驱动外部设备,例如LED、继电器等,常用的方法有三极管、MOS管等。
电平转换电路用于将单片机处理后的信号转化为外部设备可以接受的电平,例如TTL与RS232之间的电平转换。
3.通信电路设计通信电路设计要根据具体通信接口的特点来选择合适的电路方案。
例如,串口通信常用的电路方案有MAX232芯片、电容耦合等;SPI通信常用的电路方案有74HC595移位寄存器、74HC165移位寄存器等。
1.按键输入电路设计按键输入电路设计要考虑按键防抖和按键电平转换。
防抖电路可以采用RC电路或Schmitt触发器,电平转换电路可以采用三极管或MOS管。
2.数码管驱动电路设计数码管驱动电路设计要考虑数码管的电流和电压需求,常用的驱动芯片有74HC595移位寄存器。
基于单片机的按键控制LED数码管共阴极动态显示电路设计报告毕业论文
![基于单片机的按键控制LED数码管共阴极动态显示电路设计报告毕业论文](https://img.taocdn.com/s3/m/ab60fe08e55c3b3567ec102de2bd960590c6d900.png)
基于单片机的按键控制LED数码管共阴极动态显示电路设计报告毕业论文本篇报告将详细介绍基于单片机的按键控制LED数码管共阴极动态显示电路的设计。
一、引言LED数码管是一种常用的数字显示器件,广泛应用于各种计数器、时钟和计时器等电子设备中。
本设计旨在利用单片机实现对LED数码管的动态显示,并通过按键控制显示的数字。
二、设计方案1.系统结构本系统采用基于单片机的数字显示方案,其中包括一个单片机、数码管显示模块和按键模块。
单片机负责接收按键输入信号,并根据输入信号控制数码管显示相应的数字。
2.系统设计(1)数码管显示模块:该模块由共阴极LED数码管组成,共阴极接地,通过接通不同的端口线来控制数码管显示不同的数字。
(2)按键模块:该模块由多个按键组成,用于用户输入指定的数字。
每个按键接一个IO脚,通过按下不同的按键,触发不同的端口输入。
(3)单片机:本设计选用51单片机作为控制核心,通过IO口与数码管显示模块和按键模块连接。
单片机根据按键输入信号的变化,对数码管进行动态显示。
3.设计过程(1)针对单片机的接线设计:将单片机的IO口分别与数码管显示模块和按键模块连接。
将数码管的共阳极接电源正极,数码管的各段(即a、b、c、d、e、f、g)接单片机的IO脚。
(2)针对单片机软件设计:设计单片机程序实现按键输入的检测和数码管动态显示的控制。
首先初始化IO口,设置按键引脚为输入端口,设置数码管引脚为输出端口。
然后循环检测按键的状态。
当检测到按键被按下时,根据按键的不同选择分别显示不同的数字。
4.功能要求(1)按下不同的按键,数码管能够显示相应的数字,实现动态显示。
(2)按键输入具有去抖功能,避免误触发。
(3)程序运行稳定,能够正确响应按键输入,显示正确的数字。
三、实验结果经过实验验证,本设计实现了按键控制LED数码管共阴极动态显示的功能要求。
按下不同的按键,数码管能够正确显示相应的数字,程序运行稳定,无误触发现象。
单片机独立按键实验报告总结
![单片机独立按键实验报告总结](https://img.taocdn.com/s3/m/379b3b2115791711cc7931b765ce050876327591.png)
单片机独立按键实验报告总结本次实验我们使用了单片机进行了独立按键实验,通过学习掌握了单片机输入输出口的基本使用方法以及独立按键的使用方法和技巧。
以下是本次实验的总结:一、实验内容本次实验的主要内容是独立按键的使用方法和技巧。
通过学习,我们掌握了独立按键的接法原理和基本应用方法。
在实验中,我们首先通过理论学习了按键的工作原理,了解了按键在电路中的应用和接法方法,然后实际动手进行了按键电路的搭建和单片机程序的编写,最后进行了按键测试和实验结果分析。
二、实验步骤1.理论学习:首先,我们学习了独立按键的工作原理和接法原理,了解按键在电路中的应用和接法方法,掌握了按键接口的输入输出方式,并对具体实现过程和技巧进行了分析和探讨。
2.电路搭建:根据学习到的按键接法原理和电路图,我们使用面包板和导线搭建了独立按键电路,将按键连接到单片机的输入端口上,并设置相应的电阻来保护电路和单片机芯片。
3.程序编写:通过阅读单片机说明书和参考其他资料,我们学习了单片机输入输出口的基本使用方法和指令,编写了程序代码,实现了独立按键操作的功能。
我们实现了多种按键操作方式,包括单击、长按等方式,并添加了相应的提示和保护措施,以确保程序的可靠性和稳定性。
4.测试实验:最后,我们进行了独立按键测试实验,通过按键操作,观察测试实验结果,进行了数据分析和结论汇总。
实验结果表明,我们的按键电路和程序代码都实现了预期的功能和效果,证明了我们在实验中掌握的独立按键技巧和方法是正确和有效的。
三、实验结论通过本次实验,我们掌握了单片机输入输出口的基本使用方法和独立按键的使用方法和技巧,了解了按键在电路中的应用和接法方法,探索了独立按键实现的多种方式和技巧,提高了我们的电路设计能力和程序设计能力。
同时,本次实验还加强了我们的实验动手操作能力,增强了我们的实际应用能力和创新思维能力,为我们以后的学习和工作打下了坚实的基础。
51单片机矩阵键盘设计
![51单片机矩阵键盘设计](https://img.taocdn.com/s3/m/f96379d5dc88d0d233d4b14e852458fb770b3898.png)
51单片机矩阵键盘设计
一、引言
AT89C51单片机矩阵键盘设计是嵌入式系统中一个重要的技术,它的
作用是以矩阵形式把外部按键与MCU相连,使得系统可以对外部的按键进
行检测和响应。
矩阵键盘设计在可编程嵌入式系统的设计中占有重要的地位,如智能交通系统、智能家居系统、航空电子系统等。
本文主要介绍了矩阵键盘设计中硬件电路的设计,包括按键、拉电阻、和矩阵编码等,同时给出系统的控制算法,使得系统可以实现有效的按键
检测和响应。
二、矩阵键盘概述
矩阵键盘是将多个按键排布成列行形式进行连接,一般来说,矩阵键
盘是由按键、拉电阻、矩阵编码器和控制器组成,按键是系统中重要的部件,其作用是将外部输入信号传递给控制器。
拉电阻起到的作用是防止按
键耦合,一般可以使用4.7KΩ拉电阻来防止按键耦合。
矩阵编码器用来
识别按键的状态,通常通过硬件把按键信号编码为数字信号,输入到处理
器或控制器。
控制器用来实现按键信号的检测,通过定义硬件定时器和软
件定时器,实现按键检测和处理。
1、硬件电路设计
应用AT89C51单片机矩阵键盘。
单片机按键模块设计(二)
![单片机按键模块设计(二)](https://img.taocdn.com/s3/m/3ad69167ec630b1c59eef8c75fbfc77da26997d9.png)
单片机按键模块设计(二)引言概述:本文将介绍单片机按键模块设计的相关内容。
按键模块在嵌入式系统中被广泛应用,能够方便地实现对系统的控制和操作。
本文将从五个大点进行阐述,包括按键模块原理介绍、按键类型选择、按键电路设计、按键功能实现和按键模块调试。
通过详细介绍和分析,将帮助读者更好地理解和使用单片机按键模块。
正文:1. 按键模块原理介绍- 按键模块是通过触发按键开关来产生不同信号的模块。
它由按键开关和其它电路组成,可以实现按键信号的检测和处理。
- 常见的按键模块原理包括矩阵式按键、独立式按键和编码式按键。
每种原理都有其适用的场景和特点。
2. 按键类型选择- 按键的类型包括机械按键和触摸按键。
机械按键通常使用弹簧结构,稳定可靠,适用于精确操作。
触摸按键使用电容或电阻感应原理,触摸灵敏,外观简洁。
- 在选择按键类型时,需要根据具体应用场景和用户需求,综合考虑按键的性能、可靠性、成本等因素。
3. 按键电路设计- 按键电路设计要考虑按键的接入、滤波、去抖动等问题。
接入问题包括按键引脚的连接和布局。
滤波问题可以通过外部电容电路实现,防止因按键抖动引起的干扰。
去抖动问题可以通过软件或硬件的方式解决,确保按键信号的稳定和准确。
4. 按键功能实现- 按键的功能实现可以通过编程来完成。
根据按键的不同组合或按下时间等条件,可以触发不同的功能操作。
- 常见的按键功能包括开关控制、菜单选择、模式切换等。
通过编程,可以灵活地定制按键功能,满足不同应用的需求。
5. 按键模块调试- 按键模块的调试主要包括按键动作测试、按键信号检测和按键功能验证。
通过合理的测试和验证,可以确保按键模块的正常工作。
- 调试可以通过示波器、调试工具等设备来实现。
通过观察按键信号的波形和分析按键功能的实现情况,可以排查和解决可能存在的问题。
总结:本文从按键模块原理介绍、按键类型选择、按键电路设计、按键功能实现和按键模块调试五个大点进行了详细阐述。
通过本文的介绍,读者可以了解到单片机按键模块设计的基本原理和实现方法,从而能够更好地应用于具体的嵌入式系统中。
单片机课程实验二: 独立按键电路设计
![单片机课程实验二: 独立按键电路设计](https://img.taocdn.com/s3/m/a3be188bdd88d0d233d46a71.png)
单片机课程实验二:独立按键电路设计专业:通信工程学号:1610111183 姓名:石万里一、实验步骤:在实验一STC89C52单片机控制8个流水灯的实验的基础上进行此实验。
本次实验目标:通过两个独立按键控制流水灯的变化,使得8个流水灯代表的8进制数,在按下K1键后自动加一,按下K2键后,自动减一,采用下降沿外部中断触发。
电路图在实验一的基础上进行改装,让P32与P33各自通过一个独立按键接地,手绘电路图如图1.1所示:图1.1独立按键电路图1.2独立按键电路焊接成果实验程序编写烧录后,在keil软件中生产hex文件,再烧录到单片机芯片中,再给电路板上电即可。
之后是实验程序的编写,流水灯程序编写好并在学习板上测试成功后,即可把芯片放到自己焊接的电路板上上电测试电路板,如果成功即可找老师验收,不成功需要用万用表对电路板进行测试,测试时先把万用表档位调到欧姆档,测试本实验焊接的独立按键电路是否存在开路,并检查是否存在有未焊接的部分,是否有虚焊漏焊的情况,是否上电测试时晶振未安装,电路板检查后继续进行测试,然后再检查、测试,直到自己焊接的电路板功能正常。
若是在学习板上程序未成功,则需要对程序进行修改,重新编译、烧录,不断测试。
二、流水灯程序:org 0000Hljmp mainorg 0003hljmp jiayiorg 0013hljmp jianyiorg 100h main:setb ex0setb IT0setb ex1setb IT1setb eamov r4,#07hmov r3,#07hmov r2,#02hmov a,#0fehmov p1,aloop2:acall delay next: rl aacall delaymov p1,adjnz r4,next here: acall delay//mov a,p1rr amov p1,adjnz r3,heremov r4,#07hmov r3,#07hdjnz r2,loop2acall delay loop1:mov a,#07chmov p1,asjmp loop1 delay:mov r5,#19h delay1:mov r6,#19h delay2:mov r7,#0ffhdjnz r7,$djnz r6,delay2djnz r5,delay1 retjiayi:mov a,p1dec aacall delaymov p1,asjmp jiayiretijianyi:mov a,p1inc aacall delaymov p1,asjmp jianyiretiend三、实验总结:实验结果如下图所示:前五张图片是加一结果,最后两张图片是减一结果因为拍照速度太慢,故加一减一在图中看起来可能不连续,但程序完全正确,已经过实验验证,本人建议最好录视频作为作业上交此实验是建立在实验一的基础上进行的,故相对较为简单,只需要P32与P33各自加独立按键接地即可。
单片机课程设计--基于51单片机的万年历
![单片机课程设计--基于51单片机的万年历](https://img.taocdn.com/s3/m/c2c917827e192279168884868762caaedc33ba7f.png)
单片机课程设计--基于51单片机的万年历单片机课程设计基于 51 单片机的万年历一、引言在现代生活中,时间的准确记录和显示对于我们的日常生活和工作具有重要意义。
万年历作为一种能够同时显示年、月、日、星期、时、分、秒等信息的设备,给人们带来了极大的便利。
本次课程设计旨在利用 51 单片机实现一个简单实用的万年历系统。
二、系统设计方案(一)硬件设计1、单片机选型选择经典的 51 单片机,如 STC89C52 单片机,其具有性能稳定、价格低廉、资源丰富等优点,能够满足本设计的需求。
2、显示模块采用液晶显示屏(LCD1602)作为显示设备,能够清晰地显示数字和字符信息。
3、时钟芯片选用DS1302 时钟芯片,它可以提供精确的实时时钟数据,包括年、月、日、星期、时、分、秒等。
4、按键模块设置三个按键,分别用于调整时间、选择调整项(年、月、日、时、分、秒等)以及切换显示模式(正常显示和设置模式)。
(二)软件设计1、主程序流程系统初始化后,首先读取 DS1302 中的时间数据,并将其显示在LCD1602 上。
然后进入循环,不断检测按键状态,根据按键操作进行相应的时间调整和显示模式切换。
2、时间读取与显示程序通过与 DS1302 进行通信,读取实时时间数据,并将其转换为适合LCD1602 显示的格式进行显示。
3、按键处理程序检测按键的按下状态,根据不同的按键执行相应的操作,如调整时间、切换显示模式等。
三、硬件电路设计(一)单片机最小系统单片机最小系统包括单片机芯片、晶振电路和复位电路。
晶振电路为单片机提供时钟信号,复位电路用于系统初始化时将单片机的状态恢复到初始值。
(二)显示电路LCD1602 显示屏通过数据总线和控制总线与单片机相连。
数据总线用于传输要显示的数据,控制总线用于控制显示屏的读写操作和显示模式。
(三)时钟电路DS1302 时钟芯片通过串行通信接口与单片机进行通信。
单片机通过发送特定的指令和数据,对 DS1302 进行读写操作,获取或设置时间信息。
单片机按键实验报告
![单片机按键实验报告](https://img.taocdn.com/s3/m/afbe667d0b1c59eef8c7b4b7.png)
单片机按键实验报告篇一:单片机按键扫描实验报告键盘扫描一.实验目的(1)掌握矩阵键盘接口电路和键盘扫描编程方法。
(2)掌握按键值处理与显示电路设计。
二.实验任务(1)设计4*4键盘,编写各个键的特征码和对应的键值(0~F);(2)编程扫描按键,将按键对应的数字值使用数码管显示出来。
三.实验电路及连线方法1.采用动态显示连线方法:电路由2 片74LS573,1 个六字一体的共阴数码管组成。
由U15 输出段选码,U16 做位选码,与单片机的采用I/O 口连接方式,短路片J22 连接P2.0,J23 连接P2.3,做输出信号锁存。
(实际电路连接是d7-d6-d5-d4-d3-d2-d1-d0?h-c-d-e-g-b-a-f)。
PW12 是电源端。
2.键盘电路连线方法:电路由16 个按键组成,用P1 口扩展4×4 行列式键盘。
J20 是键盘连接端,连接到P1 口。
J21 是行列键盘、独立键盘选择端,当J21 的短路片连接2-3脚时,构成4×4 行列式键盘;当J21 的短路片连接2-1 脚时,可形成3×4 行列式键盘,4 个独立式按键S4、S8、S12、S16,这4 个独立按键分别连接P1.4~P1.7;其他12 个键3×4 行列式键盘。
PW15 是电源端。
四.编程思路1.采用反转法识别按键的闭合。
2.采用动态显示将键值显示出来。
五.算法流程图六.资源分配1.用P1口进行查找按键2.用R3做键值指针3.用R1做动态显示为选码指针。
4.R5为延时指针。
七.程序设计KPIN:ORG MOV MOV ANL MOV 0000H P1,#0F0H A,P1 A,#0F0H B,AMOVP1,#0FHMOVA,P1ANLA,#0FHORLA,BCJNE A,#0FFH,KPIN1AJMP EXITKPIN1: MOVB,AMOVDPTR,#TABKPMOVR3,#0KPIN2: MOVA,R3MOVC A,@A+DPTRCJNE A,B,KPIN3MOVA,R3LOOP: MOVR1,#0FEH;键盘动态显示 LOOP1: MOVA,R3ANLA,#0FHMOV DPTR,#TABMOVC A,@A+DPTRCLRP2.0CLRP2.1MOVP0,ASETB P2.0NOPCLRP2.0LOOP2: MOVA,R1;位选码MOVP0,ASETB P2.1MOVR5,#250LOOP3: DJNZ R5,LOOP3CLRP2.1SJMP LOOPKPIN3: INCR3CJNE A,#0FFH,KPIN2EXIT: RETTABKP: DB0EEH,0DEH,0BEH,7EH,0EDH,0DDH,0BDH,7DH,0EBHDB 0DBH,0BBH,7BH,0E7H,0D7H,0B7H,77H,67H,0FFHTAB: DB77H,44H,3EH,6EH,4DH,6BH,7BH,46H,7FH,6FH,5FHDB 79H,33H,7CH,3BH,1BHEND八.调试出现的问题及解决问题1:程序正常运行,但按键显示出现乱码解决:动态显示笔形码错误,并改正。
单片机与键盘输入的接口设计与应用解析
![单片机与键盘输入的接口设计与应用解析](https://img.taocdn.com/s3/m/6ce4880c842458fb770bf78a6529647d27283423.png)
单片机与键盘输入的接口设计与应用解析引言:单片机是一种集成电路芯片,具有处理器核、存储器和输入输出引脚等组成部分,可以控制各种外部设备。
键盘是计算机和其他电子设备的常用输入设备,通过按下不同的按键来输入信息。
在许多应用中,需要将键盘与单片机相连接,以实现键盘输入的功能。
本文将深入探讨单片机与键盘输入的接口设计与应用,包括接口电路的设计原理、接口方式的选择以及相关应用案例的分析。
一、接口电路设计原理1. 键盘扫描原理键盘通常是由一系列按键按排成矩阵状的结构,每个按键都有两个触点,当按键按下时,两个触点短接,形成闭合电路。
为了检测到具体按下的按键,需要通过扫描的方式来逐个检测。
2. 电路连接方式通常,键盘与单片机之间可以通过行列式和矩阵式两种方式实现连接。
行列式连接方式即将键盘的行和列通过引脚分别连接到单片机的IO口,通过单片机的输入输出控制来检测按键信号。
矩阵式连接方式则是采用矩阵键盘的形式,将所有的按键都连接到行和列的交叉点上,通过扫描的方式来检测按键信号。
二、接口方式的选择1. 行列式连接方式的优势和劣势行列式连接方式相对简单,常用于按键较少的情况下。
它的优势在于节省IO 口的使用,通过编写简单的行列扫描程序即可实现对按键的检测。
然而,它的劣势在于不能同时检测多个按键,当同时有多个按键按下时,只能检测到其中一个。
2. 矩阵式连接方式的优势和劣势矩阵式连接方式可以同时检测多个按键,因为所有的按键都连接到行和列的交叉点上。
它的优势在于可以通过编写复杂的扫描程序,实现同时检测多个按键,并且可以检测到按键的精确位置。
然而,它的劣势在于需要占用较多的IO口,且对于按键较多的情况下,编写扫描程序较为复杂。
三、相关应用案例的分析1. 数字密码锁数字密码锁是常见的应用之一,通过将键盘与单片机连接,可以实现输入密码的功能,比如开启或关闭某个装置。
在设计中,可以选择行列式连接方式,通过扫描程序来检测按键,进而判断输入的密码是否匹配。
单片机按键电路工作原理
![单片机按键电路工作原理](https://img.taocdn.com/s3/m/847612be7d1cfad6195f312b3169a4517723e5b6.png)
单片机按键电路工作原理一、引言单片机作为现代电子技术中的重要组成部分,广泛应用于各个领域。
其中,按键电路是单片机应用中常见的一个模块。
本文将介绍单片机按键电路的工作原理。
二、按键电路的组成按键电路由按键开关、上拉电阻、滤波电容和连接线组成。
1. 按键开关:按键开关是按键电路的核心部件,用于接通或断开电路。
它一般由金属片、按钮和触点组成。
当按下按键时,金属片与触点接触,电路闭合;松开按键时,金属片与触点分离,电路断开。
2. 上拉电阻:上拉电阻是为了保证按键开关在松开时,电路仍然处于高电平状态。
它与按键开关并联连接,一端接地,另一端连接到单片机引脚,通过将引脚拉高电压,实现松开按键时的高电平状态。
3. 滤波电容:滤波电容用于稳定按键信号,降低噪声干扰。
它与按键开关并联连接,一端接地,另一端连接到单片机引脚,通过滤波电容的作用,可以减少外部干扰对按键信号的影响。
4. 连接线:连接线将上述组件连接起来,构成完整的按键电路。
三、按键电路的工作原理按键电路的工作原理可以分为两个阶段:按下和松开。
1. 按下阶段:当按键被按下时,按键开关闭合,连接线上的电路形成一条通路。
此时,单片机引脚接收到低电平信号,通过程序判断按键被按下。
2. 松开阶段:当松开按键时,按键开关断开,电路断开。
此时,上拉电阻起作用,将引脚拉高电压,使得引脚接收到高电平信号,通过程序判断按键被松开。
通过上述两个阶段的工作,单片机可以准确地捕捉到按键的按下和松开事件,并做出相应的响应。
四、按键电路的应用按键电路广泛应用于各种电子设备中,如遥控器、手机、电脑等。
通过按键电路,用户可以与设备进行交互,实现各种功能。
以遥控器为例,遥控器上的按键电路可以让用户通过按下不同的按键,控制电视机的开关、音量大小、频道切换等。
当用户按下遥控器上的按键时,按键电路会发送相应的信号给电视机,电视机接收到信号后,执行相应的操作。
同样,手机上的按键电路也起到了类似的作用。
单片机键盘显示接口电路设计
![单片机键盘显示接口电路设计](https://img.taocdn.com/s3/m/34048e802dc58bd63186bceb19e8b8f67c1cefe2.png)
单片机键盘显示接口电路设计设计单片机键盘显示接口电路,需要考虑到键盘输入与显示输出两个方面。
以下是一个简单的设计示例,供参考:键盘通常采用矩阵键盘连接电路的方式,通过扫描矩阵的方式读取键盘输入信息。
以下是矩阵键盘接口电路的设计流程:1.确定键盘的规格和类型:键盘一般有正方形、矩形、圆形等几种形状,需要根据键盘的规格和类型选择适合的扫描方式。
2.确定键盘的逻辑矩阵大小:根据键盘的布局和规格,确定键盘的逻辑矩阵的行和列数,例如4行4列。
3.确定键盘的连接方式:键盘的连接方式一般有行列扫描、列行扫描、行列+列行扫描等几种方式,需要根据键盘的输出信号特点和单片机的输入要求进行适当的选择。
4.设计按键输入的译码电路:将键盘的输出信号通过译码电路解码成易于读取的二进制数,以便单片机的输入端口读取。
显示输出接口电路设计一般有两种方式:数码管和液晶显示。
1.数码管显示电路设计:数码管是通过控制各个数码管的段选和位选,实现数字或字符的显示。
以下是数码管显示电路的设计流程:a.确定显示的数字或字符类型:根据设计需求,确定要显示的数字或字符类型,例如整数、小数、字母等。
b.确定数码管的位数和类型:根据显示需求,确定数码管的位数和类型,有共阴数码管和共阳数码管两种类型,需要选择适合的数码管。
c.设计数码管的译码电路:根据数码管的类型和位数,设计数码管的译码电路,将输入的数字或字符转换为控制各个数码管的段选和位选的电信号。
2.液晶显示电路设计:液晶显示器是一种常见的显示设备,通过控制液晶的极性来实现图形和字符的显示。
以下是液晶显示电路设计的流程:a.确定显示的内容类型:根据设计需求,确定要显示的内容,例如字符、图像等。
b.选择适合的液晶显示器:根据显示的内容和要求,选择适合的液晶显示器,有字符型液晶显示器和图形型液晶显示器两种类型。
c.设计液晶的驱动电路:根据液晶显示器的类型和特性,设计液晶的驱动电路,将输入的数字或字符转换为控制液晶的电信号。
按键功能实验报告总结(3篇)
![按键功能实验报告总结(3篇)](https://img.taocdn.com/s3/m/cbb5537efe00bed5b9f3f90f76c66137ee064f83.png)
第1篇一、实验背景按键作为电子设备中常见的输入装置,其功能丰富,应用广泛。
本实验旨在通过设计和实现一系列按键功能,加深对按键工作原理的理解,并提高电子设计实践能力。
二、实验目的1. 掌握按键的基本原理和电路设计方法。
2. 熟悉按键在不同应用场景下的功能实现。
3. 培养电子设计实践能力,提高问题解决能力。
三、实验内容1. 实验器材:51单片机最小核心电路、按键、LED灯、电阻、电容、面包板等。
2. 实验内容:(1)单按键控制LED灯闪烁(2)按键控制LED灯点亮与熄灭(3)按键控制LED灯亮度调节(4)按键实现数字时钟调整(5)按键实现多功能计数器(6)按键实现密码输入与验证四、实验步骤1. 根据实验要求,设计电路图,并选择合适的元器件。
2. 使用面包板搭建实验电路,包括单片机、按键、LED灯、电阻、电容等。
3. 编写程序,实现按键功能。
4. 对程序进行调试,确保按键功能正常。
5. 实验完成后,撰写实验报告。
五、实验结果与分析1. 单按键控制LED灯闪烁实验结果:按下按键,LED灯闪烁;松开按键,LED灯停止闪烁。
分析:本实验通过单片机定时器实现LED灯的闪烁。
当按键按下时,定时器开始计时;当定时器达到设定时间后,LED灯点亮;定时器继续计时,当达到设定时间后,LED灯熄灭。
如此循环,实现LED灯的闪烁。
2. 按键控制LED灯点亮与熄灭实验结果:按下按键,LED灯点亮;再次按下按键,LED灯熄灭。
分析:本实验通过单片机的I/O口控制LED灯的点亮与熄灭。
当按键按下时,单片机将I/O口置为高电平,LED灯点亮;当按键再次按下时,单片机将I/O口置为低电平,LED灯熄灭。
3. 按键控制LED灯亮度调节实验结果:按下按键,LED灯亮度逐渐增加;松开按键,LED灯亮度保持不变。
分析:本实验通过单片机的PWM(脉宽调制)功能实现LED灯亮度的调节。
当按键按下时,单片机调整PWM占空比,使LED灯亮度逐渐增加;松开按键后,PWM占空比保持不变,LED灯亮度保持不变。
单片机课程设计—8个按键控制8个LED自动设定控制流水灯
![单片机课程设计—8个按键控制8个LED自动设定控制流水灯](https://img.taocdn.com/s3/m/8aef2752580216fc700afdd2.png)
实用标准东北石油大学实习总结报告实习类型生产实习实习单位东北石油大学实习基地实习起止时间 2018 年 7 月 7 日至 2018 年 7 月 16 日指导教师刘东明、孙鉴所在院(系) 电子科学学院班 级 电子科学与技术 15-2学生姓名学号1509012402文案大全2018 年 7 月 16 日实用标准目录第 1 章 按键控制流水灯设计 ........................................ 1 1.1 实习目的 ................................. 错误!未定义书签。
1.2 实习要求 ................................. 错误!未定义书签。
第 2 章 电路工作原理 .............................................. 2 2.1 STC89C52 单片机工作原理 ................................... 2 2.2 LED 工作原理 .............................................. 3 2.3 按键工作原理 .............................................. 3 2.4 整体电路图 ................................................ 5 2.5 本章小结 .................................................. 6第 3 章 C 程序设计 ................................................. 7 3.1 程序设计流程图 ............................................ 7 3.2 实验结果 .................................................. 8 3.3 本章小结 .................................................. 9总结及体会 ...................................................... 10 参考文献 ........................................................ 11 附录 ............................................................ 12文案大全实用标准第1章 按键控制流水灯设计1.1 实习目的本次实习以 STC89C52 单片机为控制核心。
单片机原理(按键识别 )实验报告
![单片机原理(按键识别 )实验报告](https://img.taocdn.com/s3/m/d0bacd7f0066f5335a8121b7.png)
教育资料
.
while (1) {
if(key==0) {
delay(1000); if(key==0) {
led=~led; while(key==0); }
} } } (2)按键识别 ( 按下灭,再按闪) #include<reg51.h> #define uint unsigned int #define uchar unsigned char sbit led=P2^6; sbit key=P2^7;
.
switch(j) { case 0 : led=0;break; case 1 : led=~led;delay(100);break; default:break; }
}
}
(3)按键识别 ( 按下数码管数值加 1) #include<reg51.h> #define uint unsigned int #define uchar unsigned char uchar code LedCode[]={ 0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f,0x00}; uchar DispBuf[8]; sbit led=P2^6;
教育资料
.
if(hour>=24) {
hour=0; }
}
void main() {
uint i=2; while (1) {
if(key==0) {
delay(1000); if(key==0) {
i++; while(key==0); i=i%3;
教育资料
.
} } switch(i)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单片机键盘接口全接触作者:杜洋2005-10-25一般的具有人机对话的单片机系统少不了会有键盘。
键盘接口的原理与应用许多的教材都有介绍,但通常各有各的方法,各有各的优劣。
下面就我现有的对单片机键盘接口的了解和应用将众家的单片机直接驱动键盘的接口原理及应用作一个总结,并附加相应键盘的汇编子程序和C语言子函数。
希望大家可以从中受益。
本文我们以键盘的数目来选择键盘最适合的接法和最佳的编程方法,对各键盘接口的方法的优缺点加以说明。
本文旨在让大家掌握一种方法,而不要读死书,举一反三创造更新更好的接口方式才是学习的极致。
我最喜欢爱因斯坦的一句话:“想象力比知识更重要,想象力可以创造知识,而知识却只是别人的想象”。
1~4按键的单片机键盘接口:当键盘的数目最多为4个时,我们最佳的接口方案当然是独立式接法了,即每一个I/O口上只接一个按键,按键的另一端接电源或接地(一般接地)。
占用的I/O口数最大为4条。
(注意:1~4按键的键盘的接法许多,如果接成扫描式可以占用更少的I/O口,但从程序复杂性和系统稳定性的综合考虑的话,独立式键盘接法应该是首选)独立式键盘的实现方法是利用单片机I/O口读取口的电平高低来判断是否有键按下。
例如,我们将常开按键的一端接地,另一端接一个I/O口,程序开始时将此I/O口置于高电平,平时无键按下时I/O口保护高电平。
当有键按下时,此I/O口与地短路迫使I/O口为低电平。
按键释放后,单片机内部的上拉电阻使I/O 口仍然保持高电平。
我们所要做的就是在程序中查寻此I/O口的电平状态就可以了解我们是否有按键动作了。
值得注意的事,我们在用单片机对键盘处理的时候涉及到了一个重要的过程,那就是键盘的去抖动。
这里说的抖动是机械的抖动,是当键盘在未按到按下的临界区产生的电平不稳定正常现象,并不是我们在按键时通过注意可以避免的。
这种抖动一般在10~200毫秒之间,这种不稳定电平的抖动时间对于人来说太快了,而对于时钟是微秒级的单片机而言则是慢长的。
为了提高系统的稳定,我们必须去除或避开它。
目前的技术有硬件去抖动和软件去抖动,硬件去抖动就是用部分电路对抖动部分加之处理,但是实现的难度较大又会提高了成本。
软件去抖动不是去掉抖动,而是避开抖动部分的时间,等键盘稳定了再对其处理。
这里我们只研究软件去抖动,实现方法是先查寻按键当有低电平出现时立即延时10~200毫秒以避开抖动(经典值为20毫秒),延时结束后再读一次I/O口的值,这一次的值如果为1表示低电平的时间不到10~200毫秒,视为干扰信号。
当读出的值是0时则表示有按键按下,调用相应的处理程序。
图14~16按键的单片机键盘接口:当键盘数为4~16键时再用独立方法实现就得占用4~16的I/O口,显然是一种浪费。
这时我们就用行列扫描式方案,行数加上列数就等于我们的按键总数,这样我们要16个按键时只要8个I/O口,也就是占用了一个字节I/O口,这种16键行列扫描是最常用的一种了。
下面就16个按键的键盘为例,说一下行列键盘的扫描方法。
逐点扫描法:设P1口的低4位置为0,高4位置为1,当无按键时P1口的数据始终保持F0H不变。
当有按键时,高位中的高电平会和低位中的低电平短路。
此时高位中的高电平就会被拉低(任何高电平遇到低电平都为低),即高4位中有0出现。
当单片机读P1口的值不为F0H时则表示有键按下,经过去抖处理后就开始扫描这一个键的位置了。
先把P1的高4位置0,低4位置1,下面置低第1列线并置高第1行,之后再读第1行的电平,为高说明不是第1行第1列的键被按下,跳到下一个点的扫描(第1列第2列)。
当其为0时表示第1行第1列的键被按下,调用相应处理程序。
逐点扫描的优点是它的编程简单,易于理解,可以作同时按多个键的识别。
缺点是它的速度慢,处理程序代码较长。
逐行扫描法:和逐点扫描的方法相似,只是数据的处理是以一行的4位数据直接处理,也就是先使能第1行(置低电平),然后看哪一列的数据变成低电平了,如果高4位数据没有变为低电平则使能下一行。
找到了按键所在的行并测出列数据就可以调用相应处理程序。
逐行扫描的照逐点扫描要好的多,程序相对简单,速度快,也支持同时多按键处理。
一般的扫描键盘多用此法。
全局扫描法:全局扫描是只先设P1的高4位为1,低4位为0,即F0H,然后读取P1口的数据如果不为F0H说明有键按下,经过延时去抖处理后读出P1口的值,因为低4位是0无论按键如果都不会影响它,只有高4位被改变。
将数据寄存起来后再把P1的状态反过来,将P1的高4位置0,低4位置1,即0FH,再读一次数据。
这时高4位的值是0依然不变。
这样两次读取我们就得到了2个字节的数据(XXXX0000和0000XXXX,X为读到的数据),最后我们将这两个数相或(将两个半字节数据溶合为一个字节),就得到了一个新的字节,用这个字节和我们的设定的数据比较来决定键值。
全局扫描只用两次扫描,速度快,易学易用,程序简单,可是它不支持同时多键处理,最佳适用4*4扫描键盘,可以用在一般的用途。
图2大于16按键的单片机键盘接口:当按键数目大于16时用行列扫描方式驱动是比较常用的,增加I/O口来达到行列扫描的键盘数,扫描方法多为逐行扫描,这里不多介绍。
下面来了解一个用8个I/O口接36个按键的方法(参考《电子制作》杂志139期的“扩展单片机输入键的另一种方法”)。
它采用了独特的硬件接法和逐点扫描的方法完成对36个按键的扫描,是一种很好的节省硬件资源的方法。
8个I/O口的任意两个都有一个按键的同时,其各I/O口对地也都有一个按键,可以说是一个非常有新意的方法。
(详见原文)图31-1、独立键盘接口程序:ORG 0000HJMP MAIN程序开始,从MAIN执行ORG 0030HMAIN:JNB P1.0, KEY1查寻P1.0接的独立键盘是否有键接下,为低电平按下。
JNB P1.1, KEY2同上JNB P1.2, KEY3同上······JMP MAIN查寻键盘的循环体KEY1:CALL DL20MS调用延时20毫秒,去除机械抖动JB P1.0, MAIN重新查寻,亦去抖。
CALL PRO1确认有键按下,调用真正处理程序JMP MAIN执行结束,返回查寻循环KEY2:CALL DL20MS同上JB P1.1, MAINCALL PRO2JMP MAIN·······DL20MS:20毫秒延时子程序,去抖用。
MOV R6,#100DL20MS_1:MOV R7,#100DJNZ R7,$DJNZ R6, DL20MS_1RET1-2、独立式键盘接口程序:键盘接在P1口,P2口LED显示ORG 0000HAJMP MAIN真正的程序入口ORG 030HMAIN:MOV P2,#0FFH显示初始化MOV A,#0FFH设定累加器值MOV P1,A P1口全置“1”MOV A,P1将P1口键盘值送入ACJNE A,#0FFH,GO1查键值查看A中是否有键按下,有键则跳到GO1 AJMP MAIN P1口全为“1”表示无键,返回循环查寻程序GO1:ACALL DEL延时去抖动P1口中有“0”出现,则延时去抖动。
CJNE A,#0FFH,GO2再次查寻AJMP MAIN为干扰则返回循环程序GO2:MOV DPTR,#TAB DPTR装入散转表的首址MOV R0,#00H键值查寻R0初始化,以备累加L1: RRC A累加器带C右移JNC N1查每一个位,如果为0则跳出INC R0键值寄存器SJMP L1此位不为“0”继续查下一位N1:MOV A,R0取得键值RLC A乘3处理,用于散转JMP @A+DPTR散转TAB:AJMP PR0散转表AJMP PR1AJMP PR2AJMP PR3AJMP PR4AJMP PR5AJMP PR6AJMP PR7PR0:MOV P2,#0FEH真正处理程序ACALL DELAJMP MAINPR1:MOV P2,#0FCHACALL DELAJMP MAINPR2:MOV P2,#0F8HACALL DELAJMP MAINPR3:MOV P2,#0F0HACALL DELAJMP MAINPR4:MOV P2,#0E0HACALL DELAJMP MAINPR5:MOV P2,#0C0HACALL DELAJMP MAINPR6:MOV P2,#80HACALL DELAJMP MAINPR7:MOVP2,#00HACALL DELAJMP MAINDEL:MOV R7,#0FFH延时程序DEL1:MOV R6,#0FFHDEL2:DJNZ R6,DEL2DJNZ R7,DEL1RET逐行扫描程序:;===============;4*4行列键盘程序;=================;;; 键盘接P3口,高4位接5.1K上拉电阻; 用2号实验板完成,在按各键时,从LED屏上显示0~F.; dy 20050511pm;=================================================;ORG 0000HJMP MAINORG 30HMAIN:;----------------------------------------------------初始化定义MOV P2,#0HMOV P0,#00HMOV R0,#00HMOV R1,#00HSTART:;---------------------------------------------------扫描程序开始MOV P3,#0FHMOV A,P3CJNE A,#0FH,GO1 ;是否有键接下JMP START ;无键时返回GO1:CALL DL20MS ;延时去抖CJNE A,#0FH,GO2 ;再次查寻JMP START ;为干扰则返回GO2:MOV R2,#0EFH ;行列扫描初始化MOV R0,#00HST:MOV P3,R2 ;送入首列使能信号MOV A,P3 ;得到数据送入AJB ACC.0,ONE ;行读键值,为“0”表示有键MOV A,#01HJMP LKPJB ACC.1,TWO ;同上MOV A,#05HJMP LKPTWO:JB ACC.2,THRMOV A,#09HJMP LKPTHR:JB ACC.3,NEXT ; 如行无键时,则使能下一列MOV A,#0DHLKP:ADD A,R0 ; 得到键值处理CJNE A,#0FH,LKP1MOV A,#00HLKP1:MOV R1,A ;将键值送入R1并退出JMP STARTNEXT: ;列使能控制INC R0CJNE R0,#04H,L1MOV R0,#00HJMP STL1: ;列初值键码CJNE R2,#0EFH,L2MOV R2,#0DFHJMP STL2:CJNE R2,#0DFH,L3MOV R2,#0BFHJMP STL3:CJNE R2,#0BFH,L4MOV R2,#7FHJMP STCJNE R2,#7FH,REMOV R2,#0EFHRE: ;未扫描到键值则返回JMP STARTTAB_TT:;----------------------------------------------------散转表处理JMP PPY9JMP PPY00JMP PPY15JMP PPY14JMP PPY13JMP PPY1JMP PPY4JMP PPY7JMP PPY10JMP PPY2JMP PPY5JMP PPY8JMP PPY0JMP PPY3JMP PPY6JMP PPY9JMP PPY11RETPPY: ;真正处理程序PPY0:MOV P0,#0C0HLJMP STARTPPY1:MOV P0,#0F9HLJMP STARTPPY2:MOV P0,#0A4HLJMP STARTPPY3:MOV P0,#0B0HLJMP START·······PPY15:MOV P0,#8EH-DYDIY-LJMP STARTPPY00:MOV P0,#0FFHLJMP STARTDL20MS: MOV R6,#100;-----------------------延时子程序DL1: MOV R7,#100DL2: DJNZ R7,DL2DJNZ R6,DL1RETEND==END==E-mail: dydiy@主页:- 11 -。