当前位置:   article > 正文

51单片机独立按键控制LED(二)_按键控制led灯亮灭程序

按键控制led灯亮灭程序

目录

一、独立按键模块原理图详解

二、独立按键控制LED亮灭

1、编写程序

2、实物展示

三、独立按键控制LED状态

1、按键抖动

2、编写程序

3、实物展示

四、独立按键控制LED显示二进制

1、编写程序

2、实物展示

五、独立按键控制LED移位

1、编写程序

2、实物展示


一、独立按键模块原理图详解

 右边接地,左边四个口分别连接到单片机的P3.0~P3.3;

要注意RXD与TXD的顺序与上面不一致。K1对应P3.1,K2对应P3.0,K3对应P3.2,K4对应P3.3

因为单片机上电时,I/O默认为高电平,所有按键没有按下时,则I/O口为高电平;按键按下时,I/O变为低电平


二、独立按键控制LED亮灭

1、编写程序

  1. #include <REGX52.H>
  2. void main()
  3. {
  4. while(1)
  5. {
  6. if(P3_1==0) //如果K1按键按下,P3.1口为低电平
  7. {
  8. P2_0=0; //则P2.0口为低电平,LED灯D1亮
  9. }
  10. else
  11. {
  12. P2_0=1; //K1按键没有按下,P3.1口为高电平
  13. } //则P2.O为高电平,LED灯D1灭
  14. }
  15. }

 

2、实物展示

独立按键控制LED灯亮灭


三、独立按键控制LED状态

1、按键抖动

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

 所以需要用软件延时消除按键抖动

 

2、编写程序

  1. #include <REGX52.H>
  2. void Delay(unsigned int xms) //@12.000MHz,延迟1ms,x为无符号整数参数
  3. {
  4. unsigned char i, j; //定义i、j为无符号字符
  5. while(xms) //将延迟1ms函数循环x次
  6. {
  7. i = 2;
  8. j = 239;
  9. do
  10. {
  11. while (--j);
  12. } while (--i); //将程序延迟1ms
  13. xms--; //每循环一次,x自动减1
  14. }
  15. }
  16. void main()
  17. {
  18. while(1)
  19. {
  20. if(P3_1==0) //如果独立按键K1被按下,则P3_1==0
  21. {
  22. Delay(20); //延时20ms,为了消除按键抖动
  23. while(P3_1==0); /*如果延时后,K1还是被按下,程序会一直执行空循环
  24. 循环体不执行程序,则等同while后加分号*/
  25. Delay(20); //程序跳出循环,说明K1按键被松手
  26. P2_0=~P2_0; //将D1灯取反
  27. }
  28. }
  29. }

 

3、实物展示

独立按键控制LED状态


四、独立按键控制LED显示二进制

1、编写程序

  1. #include <REGX52.H>
  2. void Delay(unsigned int xms)
  3. {
  4. unsigned char i, j;
  5. while(xms--) //--在后,则是操作完xms的循环体,自动减1
  6. {
  7. i = 2;
  8. j = 239;
  9. do
  10. {
  11. while (--j); //--在前,则是在操作j前,自动减1
  12. } while (--i);
  13. }
  14. }
  15. void main()
  16. {
  17. unsigned char LEDNum=0; //无符号字符型,正好是8位二进制
  18. while(1)
  19. {
  20. if(P3_1==0)
  21. {
  22. Delay(20);
  23. while(P3_1==0);
  24. Delay(20);
  25. LEDNum++; //每按键一次,LEDNum就自动加1
  26. P2=~LEDNum; //因为LED灯是0才亮,1为灭,所以需要取反才是刚好显示二进制
  27. }
  28. }
  29. }

 

2、实物展示

独立按键控制LED显示二进制


五、独立按键控制LED移位

1、编写程序

  1. #include <REGX52.H>
  2. void Delay(unsigned int xms); //函数放后面,一定要再前面声明这个函数
  3. unsigned char LEDNum; //全局变量,所有函数都可用
  4. //没有给初始值,默认为0
  5. void main()
  6. {
  7. P2=~0x01;
  8. while(1)
  9. {
  10. if(P3_0==0)
  11. {
  12. Delay(20);
  13. while(P3_0==0);
  14. Delay(20);
  15. LEDNum++; //每按键一次,LEDNum自动加1
  16. if( LEDNum>=8)
  17. LEDNum=0; //如果中括号中只有一句程序,可以省略
  18. P2=~(0x01<<LEDNum); //每按键一次K2,就将0000 0001中的1向左移一位
  19. //每按键一次K2,就将D1灯向右移一位
  20. }
  21. if(P3_1==0)
  22. {
  23. Delay(20);
  24. while(P3_1==0);
  25. Delay(20);
  26. if(LEDNum==0)
  27. LEDNum=7;
  28. else
  29. LEDNum--; //每按键一次,LEDNum自动减1
  30. P2=~(0x01<<LEDNum); //每按键一次K1,就将0000 0001中的1向右移一位
  31. //每按键一次K1,就将D1灯向左移一位
  32. }
  33. }
  34. }
  35. void Delay(unsigned int xms) //@12.000MHz,延迟1ms,x为无符号整数参数
  36. {
  37. unsigned char i, j; //定义i、j为无符号字符
  38. while(xms--) //将延迟1ms函数循环x次
  39. { //--在后,则是操作完xms的循环体,自动减1
  40. i = 2;
  41. j = 239;
  42. do
  43. {
  44. while (--j); //--在前,则是在操作j前,自动减1
  45. } while (--i); //将程序延迟1ms
  46. }
  47. }

 

2、实物展示

独立按键控制LED移位

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/685591
推荐阅读
相关标签
  

闽ICP备14008679号