1.   51单片机独立按键的位置:

独立按键的定义:独立按键相当于一种电子开关,按下时开关接通,松开时开关断开,实现原理是通过轻触按键内部的金属弹片受力弹动来实现接通和断开;

在整个51开发板的左下角,有4个独立按键,这一篇文章主要对这4个按键进行理解;

2.使用位寄存器控制LED开关

寄存器内部存在位寄存器   Bit Registers  可单独定义每一位-----P2_0   P2_1  等等;

#include <REGX52.H>
#include <INTRINS.H>void main()
{P2_0=0;//表示第一个灯P2_1=1;//表示第二个灯P2_2=0;//表示第三个灯P2_3=1;//表示第四个灯P2_4=0;//表示第五个灯P2_5=1;//表示第六个灯P2_6=0;//表示第七个灯P2_7=0;//表示第八个灯while(1){}
}

其中:

P2_0 = 0xA0;     P2_1 = 0xA1;     P2_2 = 0xA2;    P2_3 = 0xA3;    P2_4 = 0xA4;
P2_5 = 0xA5;     P2_6 = 0xA6;     P2_7 = 0xA7;   再一次验证了51单片机接收十六进制位;

2.用第一个独立按键去控制LED灯的亮灭:

 原理:首先我们要懂,任何代码的表示方式都基于我们的原理图;也就是说原理图上显示LED灯的引脚接到芯片P3_1上,所以我们的循环语句用到  P3_1   ,   p3_1==0的意思引脚工作状态下,也就是我们按下第一个独立按键的时候,默认不按第一个独立按键的时候,就是if语句的否则状态,也就是else,所有灯都是灭的状态;

#include <REGX52.H>
#include <INTRINS.H>void main()
{while(1){if(P3_1==0){P2_0=0;//表示第一个灯P2_1=0;//表示第二个灯P2_2=0;//表示第三个灯P2_3=0;//表示第四个灯P2_4=0;//表示第五个灯P2_5=0;//表示第六个灯P2_6=0;//表示第七个灯P2_7=0;//表示第八个灯}else{P2_0=1;//表示第一个灯P2_1=1;//表示第二个灯P2_2=1;//表示第三个灯P2_3=1;//表示第四个灯P2_4=1;//表示第五个灯P2_5=1;//表示第六个灯P2_6=1;//表示第七个灯P2_7=1;//表示第八个灯}}
}

下述代表简单引进第二个独立按键:

 P3_1  表示第一个独立按键; P3_0  表示第二个独立按键;按位与&& 的功能是只有当同时按下 独立按键1  和  独立按键2 的情况下,8个LED灯才会亮;

#include <REGX52.H>
#include <INTRINS.H>void main()
{while(1){if(P3_1==0&&P3_0==0){P2_0=0;//表示第一个灯P2_1=0;//表示第二个灯P2_2=0;//表示第三个灯P2_3=0;//表示第四个灯P2_4=0;//表示第五个灯P2_5=0;//表示第六个灯P2_6=0;//表示第七个灯P2_7=0;//表示第八个灯}else{P2_0=1;//表示第一个灯P2_1=1;//表示第二个灯P2_2=1;//表示第三个灯P2_3=1;//表示第四个灯P2_4=1;//表示第五个灯P2_5=1;//表示第六个灯P2_6=1;//表示第七个灯P2_7=1;//表示第八个灯}}
}

3.按位左移<<  和  按位右移>> 的意思:

0011  1100<<1   ->    0111  1000    按位左移1个字符表示高位移出一个字符,低位补0;

0011  1100>>1   ->    0001  1110    按位右移1个字符表示低位移出一个字符,高位补0;

4.  按键的抖动:

对于机械开关,当机械触点断开、闭合时,由于机械触点的弹性作用,一个开关在闭合时不会马上稳点的接通,在断开时也不会一下子断开,所以在开关闭合及断开的瞬间会伴随一连串的抖动。

5. 独立按键实现按一下亮、按一下灭:   

P3_1==0  表示按下按键 执行亮灯操作;两个延迟Delay表示按下和松开时的抖动;

特别注意:取反~    -------  表示1  0 两种状态相互交替  即按下亮 再按一下灭;

#include <REGX52.H>
#include <INTRINS.H>
void Delay(unsigned int xms)
{unsigned char i,j;while(xms){i=2;j=239;do{while(--j);}while(--i);xms--;}
}
void main()
{while(1){if(P3_1==0){Delay(20);//按下按键以后的抖动延迟while(P3_1==0);Delay(20);//松开按键以后的抖动延迟P2_0=~P2_0;//取反的意思是1号LED亮灭亮灭;}//1  0  进行循环;}
}

    while(P3_1==0)表示判断独立按键的状态,只要按键,我的while语句为空,所以只要判断在按键的状态-----我的灯就没有反映(灯亮就一直亮,知道松开按键;灯灭就一直灭,知道松开按键),只要判断状态为松开按键,我就进行取反操作,灯一亮一灭;

    while(P3_1==0)  如果我按键后没有任何操作,判断一直在按键状态,我让他进行空循环;

延迟函数Delay 延迟的时间为 我按键以后灯的反应时间,也就是我按下按键  假设Delay=1000,我需要等1秒,灯才会有反应;

5.独立按键控制LED显示二进制:

P2_ 表示8位;  P3_  表示1位;

 思路:上面是延迟函数;下面定义一个新函数unsigned char LED_L=0;

8位也就是:0000 0000 每次LED_L++; 二进制加法; 逢二进一;进行运算;

0000 0001;0000 0010;0000 0011;0000  0100;

取反:1111 1110;1111 1101;1111 1100;1111 1011;低电平亮灯   ;注意定义新函数初始化0的这种思路;

#include <REGX52.H>
#include <INTRINS.H>
void Delay(unsigned int xms)
{unsigned char i,j;while(xms){i=2;j=239;do{while(--j);}while(--i);xms--;}
}
void main()
{unsigned char LED_L=0;while(1){if(P3_1==0){Delay(20);//按下按键以后的抖动延迟while(P3_1==0);Delay(20);//松开按键以后的抖动延迟LED_L++;P2=~LED_L;}}
}

6.独立按键控制LED移位:(简单来说就是按下按键流水一次,就是灯往后亮一次)

 思路:上面是延迟函数;下面一样,只要我按键,我就执行语句,定义函数初始值0;++每次加1,只要超过8,我就初始化,8个灯进行循环,在十六进制0X01也就是1的基础上进行移位操作,每次向左移位LED_L个位  , 取反,保证低电平输出;

#include <REGX52.H>
#include <INTRINS.H>
void Delay(unsigned int xms)
{unsigned char i,j;while(xms){i=2;j=239;do{while(--j);}while(--i);xms--;}
}
void main()
{unsigned char LED_L=0;while(1){if(P3_1==0){Delay(20);//按下按键以后的抖动延迟while(P3_1==0);Delay(20);//松开按键以后的抖动延迟LED_L++;if(LED_L>=8)LED_L=0;//保证8个灯开始循环P2=~(0X01<<LED_L);}}
}

实现按下独立按键1,从左向右按位亮灯;按下独立按键2,从右向左按位亮灯;

#include <REGX52.H>
#include <INTRINS.H>void Delay(unsigned int xms)
{unsigned char i,j;while(xms){i=2;j=239;do{while(--j);}while(--i);}}
void main()
{while(1){//实现从左向右按位亮灯if(P3_1==0){unsigned char LED=0;Delay(20);while(P3_1==0);Delay(20);LED++;if(LED>=8)LED=0;P2=~(0X01<<LED);}if(P3_0==0){//实现从右向左按位亮灯unsigned char LED=0;Delay(20);while(P3_0==0);Delay(20);if(LED==0)LED=7;elseLED--;P2=~(0X01<<LED);}}
}

51单片机-独立按键控制LED相关推荐

  1. 51单片机:独立按键控制LED灯

    1. 独立按键控制LED灯状态 亮灭实验完成后,就可以控制LED状态,首先我们知道由于机械结构的弹性作用,按键开关在闭合时不会一瞬间稳定的接通,在断开时,也不会一下子断开.所以就得需要程序消抖,也就是 ...

  2. 51单片机 独立按键控制LED 实现的三人表决器

    有图可以看出,当(K1,K2,K3,K4)按下时(P31,P30P32,P33)短接到地,从高电位被拉到地在数字电路中高电位被看作(1)底电位被看作(0) 可以看出当P2为0时LED上才有电位差,才会 ...

  3. 51单片机独立按键控制LED状态

    1.前言 1.1功能介绍 代码1:按下K1,D1亮,松开D1灭:代码2:按下K1不亮,直到松手才亮,再按一下无变化,直到松手才变化: 1.2按键的抖动 对于机械开关,当机械触点断开.闭合时,由于机械触 ...

  4. 用51单片机实现按键控制LED灯亮灭

    用51单片机实现按键控制LED灯亮灭 #include<reg51.h>//头文件 sbit LED=P2^0;//位定义LED灯 sbit k1=P3^1;//位定义按键 void de ...

  5. 51单片机独立按键控制合集

    实验一:当按键按下led灯亮,松开按键led灯熄灭: 实验二:当按键按下led灯常亮,再次按下按键led灯熄灭: 实验三:按键控制led以二进制形式显示: 实验四:按键控制led按位左移或右移: 实验 ...

  6. 51单片机 4个独立按键控制LED灯 (protues仿真)(C语言版)

    51单片机 4个独立按键控制LED灯 仿真操作及代码展示 _ (protues仿真)_(C语言版) 一.思路及相关问题 1.逻辑思路: 当按下key1时 led1亮起来 因为按下去具有瞬时性不用whi ...

  7. 51单片机入门学习------独立按键控制LED亮灭

    一.独立按键 1.特点:同侧导通,异侧断开 2.独立按键的I/O口  单片机上电后,所有I/O口默认都是高电平.没有按开关时都是高电平,按下后变成低电平. 寄存器通过检测高低电平检测按键是否被按下 1 ...

  8. 51单片机实现独立按键控制LED灯

    本节博客主要实现以下效果: 3-1独立按键控制LED亮灭 本段代码主要使用了if...else...语句实现按下按下灯亮,松开按键时灯灭 #include <REGX51.H>void m ...

  9. 51单片机—独立按键的控制

    目录 一.独立按键的介绍 1.按键介绍 2.按键原理图 3.按键抖动 4.按键的消抖 二.独立按键控制LED指示灯亮灭 三.按键实验视频 总结 一.独立按键的介绍 1.按键介绍 轻触按键,相当于一种电 ...

最新文章

  1. hikvision v2.3控件网页demo_《快速掌握PyQt5》第三十章 网页交互QWebEngineView
  2. php保存附件到指定服务器,如何在PHP中将电子邮件附件保存到服务器?
  3. vs资源视图加载失败
  4. Leetcode 199.二叉树的右视图
  5. webpack5学习与实战-(六)-babel-loader解析js文件
  6. 计算机科学与技术专业毕业答辨问题,计算机科学与技术毕业论文题目参考
  7. 日语简体形与敬体形 - 新版标日22课
  8. LaTeX常用的希腊字符、数学符号、矩阵、公式、排版、中括号、大括号以及插入图片等操作手册
  9. 网站的pv、uv、ip分别是什么意思
  10. 如何在Windows下安装听云NodeJs探针
  11. 高斯帕滑翔机枪matlab,高斯帕滑翔机枪的播种机这么做?
  12. 解决win10显示无线网络已连接但是不能上网的问题
  13. 手把手教您国外如何充值支付宝/微信教程
  14. android hook 第三方app_【MiSRC】技术分享-浅谈android hook技术
  15. 台式计算机usb口不识别鼠标,如何解决插入鼠标提示无法识别USB设备的问题
  16. 山东专科学校排名计算机类,2017计算机专科学校排名一览表,2017计算机专科学校排名一览表...
  17. 利用python模拟ios屏幕点击器_iOS模拟屏幕点击事件
  18. 【项目】关于杉德支付接口对接
  19. 面向对象实验——solitaire纸牌游戏
  20. 对secx,cscx积分的过程

热门文章

  1. Pinterest架构
  2. 自动化测试的目标和投入产出比
  3. 搜索引擎优化提示.对关键词的选择应该学会对它的取舍
  4. 计算机电子电路基础教程视频,电子电路基础详细视频教学(100集)
  5. mysql表格查询方法
  6. SAP-SD-销售订单SO的可用性检查功能
  7. Python调用Gurobi求解简单线性规划问题
  8. WINCE五笔输入法
  9. 程序员爱写脚本是种病
  10. 郑州大学计算机专业本科毕业去向,河南计算机专业实力突出的7所大学,郑大位列次席,榜首实至名归...