单片机实例之按键原理剖析

合集下载

单片机按键工作原理

单片机按键工作原理

单片机按键工作原理
单片机按键是单片机常用的一种输入设备,它可以将人类的输入信息转化为数字信号,供单片机进行数据处理,实现各种功能。

那么单片机按键是如何工作的呢?
一般来说,单片机按键通常由按键本身、按键连接电路和单片机引脚组成。

按键本身是一个机械式开关,通常有两个触点,通过按键上的物理按下或松开触点来实现输入操作。

按键连接电路一般由电阻、电容、二极管等元件组成,它们的作用是为按键提供稳定的电源和信号滤波,防止按键接触不良或噪声干扰。

单片机引脚则是将按键的输入信号引入到单片机内部,供程序处理。

在单片机按键使用过程中,按键的状态通常分为两种:按下和松开。

当按键按下时,按键上的触点会短接,电阻值发生变化,形成一个低电平信号,此时单片机引脚上的电压值会降低。

当按键松开时,触点断开,电阻值恢复原状,电压值也会回升,形成一个高电平信号。

单片机根据引脚电平状态的变化来判断按键状态,进而进行相应的处理。

由于单片机引脚本身具有一定的电容,当按键状态变化时,引脚上的电容也会发生变化,从而引起信号的抖动。

为了避免这种抖动对程序造成影响,我们通常会在按键连接电路中添加一个二极管,利用其单向导通的特性,将信号滤波,使其变得更加稳定。

单片机按键是一种常见的输入设备,通过按键本身、按键连接电路和单片机引脚组成,将人类的输入信息转化为数字信号,供单片机进行数据处理。

在使用过程中,我们需要注意按键状态的变化及其对信号的影响,以保证程序的正确性和稳定性。

单片机独立按键控制led灯实验原理

单片机独立按键控制led灯实验原理

主题:单片机独立按键控制LED灯实验原理目录1. 概述2. 单片机独立按键控制LED灯实验原理3. 实验步骤4. 结语1. 概述单片机在现代电子设备中起着至关重要的作用,它可以通过编程实现各种功能。

其中,控制LED灯是单片机实验中常见的任务之一。

本文将介绍单片机独立按键控制LED灯的实验原理及实验步骤,希望对初学者有所帮助。

2. 单片机独立按键控制LED灯实验原理单片机独立按键控制LED灯的实验原理主要涉及到单片机的输入输出端口及按键和LED的连接方式。

在单片机实验中,按键与单片机的输入端口相连,LED与单片机的输出端口相连。

通过按键的按下和松开来改变单片机输出端口电平,从而控制LED的亮灭。

3. 实验步骤为了完成单片机独立按键控制LED灯的实验,需要按照以下步骤进行操作:步骤一:准备材料- 单片机板- 按键- LED灯- 连线- 电源步骤二:搭建电路- 将按键与单片机的输入端口相连- 将LED与单片机的输出端口相连- 连接电源步骤三:编写程序- 使用相应的单片机开发软件编写程序- 程序中需要包括按键状态检测和LED控制的部分步骤四:烧录程序- 将编写好的程序烧录到单片机中步骤五:运行实验- 按下按键,观察LED的亮灭情况- 确保按键可以正确控制LED的亮灭4. 结语通过上述实验步骤,我们可以实现单片机独立按键控制LED灯的功能。

这个实验不仅可以帮助学习者了解单片机的输入输出端口控制,还可以培养动手能力和程序设计能力。

希望本文对单片机实验初学者有所帮助,谢谢阅读!实验步骤在进行单片机独立按键控制LED灯实验时,需要按照一定的步骤进行操作,以确保实验能够顺利进行并取得预期的效果。

下面将详细介绍实验步骤,帮助读者更好地理解和掌握这一实验过程。

1. 准备材料在进行单片机独立按键控制LED灯实验前,首先需要准备相应的材料。

这些材料包括单片机板、按键、LED灯、连线和电源。

在选择单片机板时,需要根据具体的实验需求来确定,常见的有51单片机、Arduino等,不同的单片机板具有不同的特性和使用方法,因此需要根据实验要求来选择适合的单片机板。

单片机之键盘工作原理

单片机之键盘工作原理
Unsigned char key_val[]={0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d, 0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xb7,0x77}
利用循环变量i控制比对过程,两者相等时的i就是闭合键的键值。
for(i=0;i<16;i++) { if(key_val[i]==P3) return i; }
③判别闭合键的键值 其方法为:对键盘的行线进行扫描,P3口依次循环输 出0xfe、0xfd、0xfb和0xf7,相应地读P3口,若高4位 P3.7~P3.4全为“1”,则说明该行上没有键闭合;否则, 这一行上有键闭合,而且就是行线为0,列线为0的交叉键。 高4位和低四位合并即得到键模。
键模——按键压下时形成的电平编码值 键值——按键的人为定义值
当按键未按下压时,Px.n端口为高电平;按压按键后为 低电平。
按键在闭合和断开时,触点会存在抖动现象:
+5V
无抖动
理想波形 A 实际波形
按下抖动
B 稳定闭合
释放抖动
+5V
有抖动
图为键闭合时列线电压波形。键闭合和断开过程中存在抖 动期(呈现一串负脉冲),抖动时间长短与开关的机械特性有关, 一般为5~10 ms之间;稳定闭合期由操作员的按键动作所确定, 一般为数百毫秒到几秒。为了保证CPU对键的闭合做一次处理, 必须去除抖动,在键的稳定闭合或断开时,读键的状态。
①判断是否有键压下 写P3端口0xf0(行线电平=0,列线电平=1) 读P3端口:若P3 = 0xf0→无按键压下,不必后续判断; 若P3 ≠0xf0 →有键压下
②去除键的机械抖动 其方法为:当判别到键盘上有键闭合后,延时一段时 间再判别键盘的状态,若仍有键闭合,则认为键盘上有一 个键处于稳定的闭合状态,否则认为键抖动。

单片机按键实验实训报告

单片机按键实验实训报告

一、实验目的1. 理解单片机按键的工作原理和电路连接方法;2. 掌握按键消抖原理及其实现方法;3. 学会使用单片机编程控制按键功能,实现简单的输入控制;4. 提高单片机实验操作能力和编程能力。

二、实验仪器及设备1. 单片机开发板(如STC89C52);2. 按键;3. 万用表;4. 电脑;5. Keil C编译器。

三、实验原理1. 按键原理:按键是一种电子开关,按下时导通,松开时断开。

在单片机应用中,按键常用于输入控制信号。

2. 按键消抖原理:由于按键机械弹性,闭合和断开时会有一连串的抖动。

若直接读取按键状态,容易导致误操作。

因此,需要进行消抖处理。

3. 消抖方法:主要有软件消抖和硬件消抖两种方法。

本实验采用软件消抖方法,即在读取按键状态后,延时一段时间再读取,若两次读取结果一致,则认为按键状态稳定。

四、实验步骤1. 硬件连接:将按键一端接地,另一端与单片机的某个I/O口相连。

2. 编写程序:使用Keil C编译器编写程序,实现以下功能:(1)初始化I/O口,将按键连接的I/O口设置为输入模式;(2)读取按键状态,判断按键是否被按下;(3)进行消抖处理,若按键状态稳定,则执行相应的功能。

3. 编译程序:将编写好的程序编译成HEX文件。

4. 烧录程序:将编译好的HEX文件烧录到单片机中。

5. 实验验证:观察实验现象,验证按键功能是否实现。

五、实验结果与分析1. 硬件连接正确,程序编译无误。

2. 实验现象:当按下按键时,单片机执行相应的功能;松开按键后,按键功能停止。

3. 分析:通过软件消抖处理,有效避免了按键抖动导致的误操作。

六、实验总结1. 本实验成功实现了单片机按键控制功能,掌握了按键消抖原理及实现方法。

2. 通过实验,提高了单片机编程和实验操作能力。

3. 在后续的单片机应用中,可以灵活运用按键控制功能,实现各种输入控制需求。

4. 本次实验为单片机应用奠定了基础,为进一步学习单片机技术打下了良好基础。

单片机按键模块设计(二)2024

单片机按键模块设计(二)2024

单片机按键模块设计(二)引言概述:本文将介绍单片机按键模块设计的相关内容。

按键模块在嵌入式系统中被广泛应用,能够方便地实现对系统的控制和操作。

本文将从五个大点进行阐述,包括按键模块原理介绍、按键类型选择、按键电路设计、按键功能实现和按键模块调试。

通过详细介绍和分析,将帮助读者更好地理解和使用单片机按键模块。

正文:1. 按键模块原理介绍- 按键模块是通过触发按键开关来产生不同信号的模块。

它由按键开关和其它电路组成,可以实现按键信号的检测和处理。

- 常见的按键模块原理包括矩阵式按键、独立式按键和编码式按键。

每种原理都有其适用的场景和特点。

2. 按键类型选择- 按键的类型包括机械按键和触摸按键。

机械按键通常使用弹簧结构,稳定可靠,适用于精确操作。

触摸按键使用电容或电阻感应原理,触摸灵敏,外观简洁。

- 在选择按键类型时,需要根据具体应用场景和用户需求,综合考虑按键的性能、可靠性、成本等因素。

3. 按键电路设计- 按键电路设计要考虑按键的接入、滤波、去抖动等问题。

接入问题包括按键引脚的连接和布局。

滤波问题可以通过外部电容电路实现,防止因按键抖动引起的干扰。

去抖动问题可以通过软件或硬件的方式解决,确保按键信号的稳定和准确。

4. 按键功能实现- 按键的功能实现可以通过编程来完成。

根据按键的不同组合或按下时间等条件,可以触发不同的功能操作。

- 常见的按键功能包括开关控制、菜单选择、模式切换等。

通过编程,可以灵活地定制按键功能,满足不同应用的需求。

5. 按键模块调试- 按键模块的调试主要包括按键动作测试、按键信号检测和按键功能验证。

通过合理的测试和验证,可以确保按键模块的正常工作。

- 调试可以通过示波器、调试工具等设备来实现。

通过观察按键信号的波形和分析按键功能的实现情况,可以排查和解决可能存在的问题。

总结:本文从按键模块原理介绍、按键类型选择、按键电路设计、按键功能实现和按键模块调试五个大点进行了详细阐述。

通过本文的介绍,读者可以了解到单片机按键模块设计的基本原理和实现方法,从而能够更好地应用于具体的嵌入式系统中。

51单片机按键消抖程序原理

51单片机按键消抖程序原理

51单片机按键消抖程序原理一、引言按键消抖是嵌入式系统编程中常见的问题之一,尤其是在使用51单片机时。

51单片机是一款常用的微控制器,广泛应用于各种嵌入式系统中。

按键作为常见的输入设备,在51单片机应用中经常被使用。

由于按键的机械特性,当按键按下或释放时,会产生机械抖动,给系统带来误操作。

因此,了解并编写按键消抖程序对于保证系统的正常运行至关重要。

二、消抖原理按键消抖,简单来说,就是通过一定的算法,消除按键产生的机械抖动,从而准确识别按键的状态。

其原理主要基于以下两点:1.机械抖动的特点:按键的机械抖动主要表现为按键触点之间的快速开关,产生一系列微小的电信号。

这些信号通常包含真实的按键输入信号和噪声信号。

2.消抖算法:通过分析这些信号,识别出真实的按键输入信号,并忽略噪声信号,从而达到消除机械抖动的目的。

常用的消抖算法有阈值比较法、防抖延时法、防抖滤波法等。

三、消抖程序实现下面以51单片机为例,介绍一种简单的阈值比较法消抖程序实现:```cvoidkey_debounce(intkey_pin){//定义按键引脚intdebounce_time=50;//消抖时间,单位毫秒intthreshold=5;//阈值,可以根据实际情况调整intkey_state=0;//按键状态,初始化为0(未按下)intlast_key_state=0;//上一次的按键状态while(1){//读取按键状态key_state=digitalRead(key_pin);last_key_state=key_state;//判断按键是否按下if(key_state==LOW){//按键按下,开始消抖if(millis()-last_key_state>=debounce_time){//经过一定时间,确定按键状态if(key_state==digitalRead(key_pin)){//检测到真实的按键输入信号//这里可以进行相应的操作,例如点亮LED灯等}else{//检测到噪声信号或其他干扰,忽略}}else{//消抖时间不足,忽略当前状态}}else{//按键释放,忽略当前状态}}}```上述程序中,通过设置一个阈值和消抖时间,来判断按键状态是否发生变化。

单片机按键电路工作原理

单片机按键电路工作原理

单片机按键电路工作原理
单片机按键电路是指通过按下按键来控制单片机的工作状态的电路。

按键电路通常由按键、电阻、电容、二极管等元器件组成。

按键电路的工作原理是通过按下按键,使电路中的电流流动,从而改变电路的状态,从而控制单片机的工作状态。

按键电路中的按键是一个开关,当按下按键时,按键的两个触点会接通,电流就会流过按键,从而改变电路的状态。

按键电路中的电阻和电容则起到了稳定电路的作用,防止电路中的电流过大或过小,从而保护单片机的正常工作。

按键电路中的二极管则起到了保护电路的作用。

当按键电路中的电压过高时,二极管会自动导通,将多余的电压引到地线上,从而保护电路中的其他元器件不受损坏。

按键电路的工作原理非常简单,但是在实际应用中,需要注意以下几点:
1. 按键的质量要好,触点要接触良好,否则会影响电路的正常工作。

2. 按键电路中的电阻和电容要选用合适的数值,以保证电路的稳定性。

3. 按键电路中的二极管要选用合适的型号,以保证电路的安全性。

4. 按键电路中的电源要稳定,以保证电路的正常工作。

单片机按键电路是单片机控制电路中非常重要的一部分,它的工作原理简单,但是在实际应用中需要注意一些细节问题,以保证电路的正常工作。

单片机按键显示程序及原理图

单片机按键显示程序及原理图

1.KEYLED---按键一位显示ORG 0000HLJMP MAINORG 0030H MAIN:mov a,#010hmov 50h,amain1: LCALL LEDLCALL KEYSJMP MAIN1 KEY: LCALL KSJNZ K1LCALL DELAYLJMP K5K1: LCALL DELAYLCALL DELAYLCALL KSJNZ K2LJMP K5K2: MOV R2,#0FEHMOV R4,#00HK3: MOV A,R2MOV P2,AMOV A,P2ANL A,#0F0HSWAP AJB ACC.0,L1MOV A,#00HLJMP LKL1: JB ACC.1,L2MOV A,#04HLJMP LKL2: JB ACC.2,L3MOV A,#08HLJMP LKL3: JB ACC.3,NEXT MOV A,#0CH LK: ADD A,R4PUSH ACCK4: LCALL DELAYLCALL KSJNZ K4POP ACCmov 50h,aK5: RETNEXT:INC R4MOV A,R2JNB ACC.3,K5RL AMOV R2,ALJMP K3KS: MOV A,#0F0HMOV P2,AMOV A,P2CPL AANL A,#0F0HSWAP ARETLED: mov a,50hmov r1,Amov p3,#0efh LED1: MOV A,r1mov dptr,#tableMOVc A,@a+dptrmov p0,aLCALL DELAYRETDELAY:mov r5,#10HD0: MOV R6,#0FAHD1: DJNZ R6,D1djnz r5,D0RETtable:db0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h,88h,83h,0C6h,0A1h,86h,8Eh,0ch END2.KEYLEDINT1---按键4位显示,中断ORG 0000HLJMP MAINorg 0013hljmp subint1org 001bhljmp subt1ORG 0030HMAIN:mov a,#010hmov 50h,amov 51h,#0hmov 52h,#0hmov 53h,#0chmov 54h,#0hmov 55h,#4clr p1.2setb p1.5CLR RS0CLR RS1//SETB RS0mov r7,#20CLR RS0mov tl0,#00hmov th0,#00hmov tl1,#0B0hmov th1,#3chmov tmod,#11hmov ie,#8chmov tcon,#04h//setb tr0setb tr1clr p1.0main1:mov R0,#4fhmov R2,#0F7h main2:mov R3,#04H main3:mov A,R2RL Amov R2,AINC R0LCALL LEDDJNZ R3,main3SJMP MAIN1 LED: mov a,@R0mov r1,Amov p3,r2LED1: MOV A,r1mov dptr,#tableMOVc A,@a+dptrmov p0,aLCALL DELAYRETDELAY:mov r5,#4HD0: MOV R6,#0faH D1: DJNZ R6,D1djnz r5,D0RETtable:db0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h,88h,83h,0C6h,0A1h,86h,8Eh,0chsubint1:push accinc 54hdec 55hmov a,55hcjne a,#00h,subint10mov 55h,#4cpl p1.5cpl p1.2subint10:pop accretisubt1: mov tl1,#0B0hmov th1,#3Chpush acc//SETB RS0dec r7cjne r7,#00h,subt10mov a,54hmov b,#4div ab //mulmov 54h,#00hmov r7,#20mov b,#0ahdiv abmov 50h,bmov b,#0ahdiv abmov 51h,bmov b,#0ahdiv abmov 52h,bmov b,#0ahdiv abmov 53h,bcpl p1.4 subt10: //CLR RS0pop accreti3.中断脉宽调制PWMOrg 0000hljmp mainorg 000bhljmp subt0org 0030h main: mov 50h,#0hmov 51h,#10hmov 52h,#80hmov 53h,#00hmov tl0,#00hmov th0,#00hmov tmod,#01hmov ie,#82hsetb tr0lp1: sjmp lp1subt0: mov tl0,#00hmov th0,#00hinc 50hmov a,53hcjne A,#0,lp2mov a,50hcjne a,51H,lp4mov 50h,#00hmov 53h,#01hSETB p1.3SJMP LP4LP2: mov a,50hcjne a,52H,lp4mov 50h,#00hmov 53h,#00hCLR p1.3lp4: retiend4.中断脉宽调制PWM扩展Org 0000hljmp mainorg 000bhljmp subt0org 0030hmain: mov 50h,#1hmov 56h,#0hmov 57h,#2hmov 58h,#30hmov 59h,#00hmov tl0,#00hmov th0,#00hmov tmod,#01hmov ie,#82hsetb tr0lp1: LCALL LEDLCALL KEYmov a,50hJZ lp1mov B,Amov A,57hMUL ABmov 58H,Asjmp lp1subt0: PUSH ACCmov tl0,#00hmov th0,#00hinc 56hmov a,59hcjne A,#0,lp2mov a,56hcjne a,57H,lp4mov 56h,#00hmov 59h,#01hSETB p1.3SJMP LP4LP2: mov a,56hcjne a,58H,lp4mov 56h,#00hmov 59h,#00hCLR p1.3lp4: POP ACCretiKEY: LCALL KSJNZ K1LCALL DELAYLJMP K5K1: LCALL DELAYLCALL DELAYLCALL KSJNZ K2LJMP K5K2: MOV R2,#0FEHMOV R4,#00HK3: MOV A,R2MOV P2,AMOV A,P2ANL A,#0F0HSWAP AJB ACC.0,L1MOV A,#00HLJMP LKL1: JB ACC.1,L2MOV A,#04HLJMP LKL2: JB ACC.2,L3MOV A,#08HLJMP LKL3: JB ACC.3,NEXTMOV A,#0CH LK: ADD A,R4PUSH ACCK4: LCALL DELAYLCALL KSJNZ K4POP ACCmov 50h,aK5: RETNEXT:INC R4MOV A,R2JNB ACC.3,K5RL AMOV R2,ALJMP K3KS: MOV A,#0F0HMOV P2,AMOV A,P2CPL AANL A,#0F0HSWAP ARETLED: mov a,50hmov r1,Amov p3,#0efh LED1: MOV A,r1mov dptr,#tableMOVc A,@a+dptrmov p0,aLCALL DELAYRETDELAY:mov r5,#10HD0: MOV R6,#0FAHD1: DJNZ R6,D1djnz r5,D0RETtable:db0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h,88h,83h,0C6h,0A1h,86h,8Eh,0ch endJ11.ADC0809参考电路2.DAC0832参考电路3.4位LED显示参考电路。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

由于按键的抖动,使按键对应的 输出电平若干个干扰脉冲,如图6-5 所示。为了保证每按下一次按键,单 片机程序只动作一次,就需要消除因 按键的抖动现象而引起的错误动作, 具体的处理方式分为硬件消除抖动和 软件消除抖动,简称消抖。
二、 硬件消抖 图中两个“与非”门构成 一个RS触发器。当按键未按 下时,输出为1;当键按下时,输 出为0。此时即使因按键的机 械性能,使按键因弹性抖动而 产生瞬时断开(抖动跳开B), 中要按键不返回原始状态A, 双稳态电路的状态不改变,输 出保持为0,不会产生抖动的波 形。 也就是说,即使B点的电压 波形是抖动的,但经双稳态电 路之后,其输出为正规的矩形 波。

键译码(扫描法或反转法)


键结束


键处理

根据键码执行不同按键处理程序段。
键输入

检查键盘是否有键被按下,并消除按键抖动。
代码 flag=0; P1=0x0F;

//高四位是列线输出0,低四位是行线读入前写1
if(P1&0x0F != 0x0F){ delay(); if(P1&0x0F != 0x0F)
100Ω
K0 K1 K2 K3 K4 K5 K6 K7
P3.0 P3.1 P3.2 P3.3 P3.4 P3.5 P3.6 P3.7
P2.7 P2.6 P2.5 P2.4 P2.3 P2.2 P2.1 P2.0
a b c d e f g
dp
com
+5V
89S51
共阳极
任务二
获取矩阵键盘的键值
本任务目标是用矩阵键盘控制LED实现 一个矩阵键盘的按键值。

反转法

键译码——反转法

代码 获取行号 temp = 0; P1=0x0F; temp=P1; //低四位输入 输入前写1 //列为高四位 低电平输出 //读P1口 temp=(~temp&0x0F); //屏蔽高四位 switch(temp){
a b c d e f g
dp
com
+5V
键号
E
P1.5 P1.6 P1.7
行首号
a b c d e f g
dp
com
100Ω× 2
共阳极
一、键盘处理

在单片机程序中,对多个键的处理应包括以下三项内容: 键输入

检查键盘是否有键被按下,并消除按键抖动。 即获取是哪个键按下,得到按键的行号,和列号;有时还需计算键码 (每个按键编号,对于4*4的矩阵按键,键码共16个为[0,15])。 即检查按键是否抬起,这样使得一次按键只做一次处理。
flag=1;
}
键译码
扫描键盘

行列式键盘的具体识别方法有扫描法和反转法。 扫描法

即用列线输出,行线输入(可交换行线和列线的输入、输出关 系)。其中,列线逐列输出0,某行有键按下,行线有0输入,若 无按键,行线输入全部为1。当有键按下时,根据行线和列线可最 终确定哪个按键被按下。 行线和列线交换输入、输出,分两步获取按键的键号,但是在多 键同时按下时不能准确判断。
课题三(实例) 之按键

任务一
独立式按键控制的数码管显示

任务二
矩阵键盘数码管显示
任务一
独立式按键控制的数码管显示
本任务是利用独立按键实现对数码进行控 制,记录按键的次数,每当按下一次键时, 计数器加1,将计数器的值送数码管显示,当 计数器加到10时,则归零重新计数 。 设P0口连接按键,对Key1进行计数 P1口连接数码管
硬件消抖动一般用于按键较少的情况。
三、软件消抖 如果按键较多,常用软件 方法去抖,即检测出键闭合 后执行一个延时程序,产生 5ms~10ms的延时,让前 沿抖动消失后再一次检测 键的状态,如果仍保持闭合 状态电平,则确认为真正有 键按下。 当检测到按键释放后,也 要给5ms~10ms的延时, 待后沿抖动消失后才能转 入该键的处理程序1 送显

图6-4 键控计数显示流程图
键盘电路原理
一、按键的特性
作为机械按钮,键按下或者放开 时,都存在着接通或断开的不稳定现 象,从而使信号电平具有抖动现象, 这种现象称为抖动。
“1” “0” < 抖动时间 10ms <10ms 开关动作时间 >100ms 图6-5 按键的波形
编写程序使得P0显示按键的行号,P2口显示按键的列号。
+5V
5.1K× 4 3 7
C3 C2 C1 C0 2 6 A E 1 5 9 D 0 4 8 C L0 L1 L2 L3
89S51
P1.0 P1.1 P1.2 P1.3 P1.4
B F
P0.0 P0.1 P0.2 P0.3 P0.4 P0.5 P0.6 P0.7 P2.7 P2.6 P2.5 P2.4 P2.3 P2.2 P2.1 P2.0
void main(void) { while(1) { if(P0_0==0) { delay10ms(); if(P0_0==0) { count++; if(count==10) count=0; while(P0_0==0); P1=table[count]; } } } }
练习: 编写程序使得K0按下时显示1,K7按下时显示8,无键 按下时显示0,有多键按下时显示P。
图6-2
键盘控制原理图
程序设计分析
为了实现用按键控制LED的显示,首先要使 单片机读入按键的状态,再根据键盘的状态去控 制LED的亮灭。对LED的控制,在前面的课题中 已经讲了,这里不再作重点讲解,仅仅作为一个 键盘控制对象的例子。 根据图6-2所示的硬件电路,每当按下按键时, 单片机引脚P0.0将为低电平,程序运行时,需要 检测P0.0引脚是否为低电平,若P0.0引脚为低电 平,表示按键已按下。 当每次按下按键时,则使P1口输出的数据变 化一次,输出不同数据,对应的程序设计框图如 图6-4所示。
思考:为什么要等键释放? 若不等会出现什么情况?
有按键信号? Y 延时等待10ms 仍有按键信号? Y N
N
按键释放? Y 按键处理
图6-7
N
软件消抖的流程图
1、C语言程序:
#include <reg51.H> sbit P0_0=P0^0; unsigned char count; unsigned char code table[]={0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07,0x7f,0x6f}; void delay10ms() { unsigned char i,j; for(i=250;i>0;i--) for(j=248;j>0;j--); }
相关文档
最新文档