C51单片机入门——按键篇

发布者:古通闲人最新更新时间:2022-05-26 来源: eefocus关键字:C51  单片机  按键 手机看文章 扫描二维码
随时随地手机看文章

按键的抖动现象

按键按下时都会发出一声响,虽然有的按键声音很轻微,但这都是金属导体碰撞产生的震动;——称这种现象为:按键的抖动。


如果不对按键的抖动进行处理,按键就会对系统电路或程序产生意外的干扰。因此,我们要对按键进行“消抖”。

按键按下后抬起有效

利用延时函数,按键key1按下后抬起有效,控制LED闪烁;


#include

sbit key1 = P1^4; //实验板上key1

sbit LED0 = P0^0;

unsigned char key1_down;

void delay(unsigned int delay_time)

   unsigned int j = 0;

   for(;delay_time > 0;delay_time --)

   { 

  for(j = 0;j < 125;j ++); 

   }

}

void key_pressed(void)//按键扫描函数

{

    if(key1 == 1); //如果按键按下

{

delay(20); //消除键盘抖动

if(key1 == 1) //如果确实按键按下

key1_down = 1; //记忆key1按下的状态

}

if((key1 == 0) && (key1_down == 1)) //key1曾经按下过,且这时又抬起

{

LED0 = !LED0;    //LED闪烁

key1_down = 0;   //按键按下的状态清零

}

}

void main(void) 

{

    P0 = 0x00; //让P0驱动的LED全灭

  while(1)

key_pressed(); //调用函数    

}


按键按下即有效

当确定按键真的按下后即生效


/*   软件去抖  */                                                                                                                                  

if (0 == K1)         //如果有键按下                                                                                                                  

{                                                                                                                                             

    delay_ms(8);     //延时一段时间去抖                                                                                                    

    if (0 == K1)     //如果真的有键按下,检测到得是稳定闭合状态                                                                                       

    {                                                                                                                               

        //语句块; //按键以后需要做的事情                                                                                

    }                                                                                                                              

    while (!K1);     //松手检测,如果按住不放则一直在循环里                                                                                      

}

关键字:C51  单片机  按键 引用地址:C51单片机入门——按键篇

上一篇:C51单片机LCD1602驱动程序
下一篇:蜂鸣器(HC6800-EM3 V2.2开发板)

推荐阅读最新更新时间:2024-11-09 11:34

数显温度计设计电路图大全(DS18B20/89S51单片机/液晶)
数显温度计设计电路图(一):液晶显示的数字式电脑温度计电路 如图为液晶显示的数字式电脑温度计电路。该八段式四位LCD显示器,内置驱动器,串行数据传送,使用方便。 液晶显示的数字式电脑温度计电路 数显温度计设计电路图(二) 介绍一种具有简单人工智能的温度控制电路,使用该电路进行温度控制时,只需将开关打在2的位置,通过设定控制温度,并通过3位半数显表头所显示的温度值,即可精确地控制温度,使得温控操作变得十分方便。LM35是一种内部电路已校准的集成温度传感器,其输出电压与摄氏温度成正比,线性度好,灵敏度高,精度适中.其输出灵敏度为10.0MV/℃,精度达 0.5℃.其测量范围为-55—150℃。在静止温度中自热效应低.工作电压较
[单片机]
数显温度计设计电路图大全(DS18B20/89S51<font color='red'>单片机</font>/液晶)
基于51单片机的直流电机调速实验
一、实验原理 PWM:即脉冲宽度调制,在具有惯性的系统中,可以通过对一系列脉冲的宽度进行调制,来等效的获得所需要的模拟量,常用于电机调速,灯光亮度调节等。 该实验和之前LED呼吸灯(定时器实现),实验原理本质上是相同的,可以结合之前的文章进行理解学习,这里就不再赘述了。(下图引用LED呼吸灯实验) 二、关键代码 void Timer0_Routine() interrupt 1 { TL0 = 0x66; TH0 = 0xFF; Counter++; Counter%=100; //计数值变化范围限制到0~99 if(Counter Compare) //计数值小于比较值 { Motor
[单片机]
基于51<font color='red'>单片机</font>的直流电机调速实验
提高单片机代码编译速度的几种方法
程序员做软件开发,讨厌一件事,那就是编译代码速度很慢的问题。 编码一分钟,编译十分钟,这谁能受的了? 今天就来说说嵌入式软件开发中,常见的提高编译速度的一些操作或者方法。 换更高配置电脑 可能是绝大部分人首先想到的就是:换更高配置的电脑。 这也是其中一个办法,但是,有几家公司愿意给你换电脑? 所以,这个方法不现实。 减少编译输出文件 有些不必要的调试、浏览信息文件,在编译时可以不用配置输出,比如: 1.Keil MDK Project - Options for Target - Output/Listing: 这里面的的配置,就会影响编译速度,特别是Browse Information(浏览信息),使用Go to Def
[单片机]
51单片机好学嘛?学完51单片机学什么?
作为一个资深的老工程师,我还是要客观地回答一下这个问题。 关于的“0基础15天学会单片机”等一些相关话题,我还是不能苟同的。 如果是0基础,没有1-2个月,是不可能掌握单片机开发的,甚至要花更多的时间。 我和大家一样,也是从0基础开始学习的,那个时候没有人带,仅C语言这块的学习就花了2个月,单片机的内部资源又花了2个月,前前后后花了大概半年时间,才入门单片机的开发。 51单片机 好学不好学? 必须要看个人的实际情况和学习的恒心。 如果理科毕业的学生,电路基础、C语言比较好的同学,学习单片机相对是比较容易的。 当然,好学不好学是一个话题,能不能学会又是另外一个话题,如果你是0基础,如果你愿意多花点时间去学习,学会单片机是没有问题
[单片机]
基于STM32F103入门2——按键点灯
1:按键不带锁存 不带锁存的意思就是 比如你按下按键灯亮,但是你一旦松手了灯就熄灭了,所以你想这个灯一直亮,那么你就一直按着按键不松手。 1.1例程 key.c /*========================key.c=========================*/ #include stm32f10x.h #include key.h /*按键初始化函数*/ void KEY_Init(void) { //1.打开控制GPIOA的时钟(APB2) RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //2.配置结构体
[单片机]
MSP430F5529LP按键点亮LED灯
代码 #include msp430.h void Key11_GPIO_Init(); void Key21_GPIO_Init(); void LED_Init(); void main(void) { WDTCTL = WDTPW | WDTHOLD; // stop watchdog timer Key11_GPIO_Init(); //按键1.1初始化 Key21_GPIO_Init(); //按键2.1初始化 LED_Init(); //LED初始化 _enable_interrupts(); //使能中断 while(1) { } return 0; } voi
[单片机]
基于STM32F407单片机开发了一种定心支片顺性测量系统
摘要: 针对传统的扬声器定心支片顺性测量仪线性范围判断不准确以及无法进行动态测量的问题,设计了一种定心支片顺性测量系统。该系统以STM32F407单片机为核心,硬件部分通过运动控制电路和数据采集电路实现了自动测量的功能,并使用低电压纹波的线性直流稳压电源使得采样结果更加准确。软件部分通过滑动均值滤波算法来减小输出误差,并采用了最小二乘法来提高拟合优度,最后通过线性逼近法来获得定心支片的线性范围。实验结果表明,该系统具有较高的分辨率,能准确获得定心支片的顺性曲线和线性范围。 0 引言 定心支片是扬声器的核心部件之一,它用于保证扬声器工作时,音圈在磁隙中处于正确的位置,并且保证音圈在振动过程中仅沿轴向作往复运动 。受到制作材料和设
[单片机]
基于STM32F407<font color='red'>单片机</font>开发了一种定心支片顺性测量系统
8051系列单片机的特点
单片机(microcontroller,又称微控制器)是在一块硅片上集成了各种部件的微型计算机。这些部件包括中央处理器CPU、数据存储器RAM、程序存储器ROM、定时器/计数器和各种I/O接口电路。8051系列单片机的基本结构见图 8051是MCS-51系列单片机中的一个产品。MCS-51系列单片机是Intel公司推出的通用型单片机。它的基本型产品是8051、8031和8751。这3个产品只是片内程序存储器的制造工艺不同。8051的片内程序存储器ROM为掩膜型的,在制造芯片时已将应用程序固化进去,使它具有了某种专用的功能;8031片内无ROM,使用时需要外接ROM;8751的片内ROM是EPROM的,固化的应用程序可以方便地改
[单片机]
8051系列<font color='red'>单片机</font>的特点
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved