标题: 51单片机按键长按和短按功能的实现 附仿真与源码 [打印本页]

作者: kinggm    时间: 2018-5-3 12:07
标题: 51单片机按键长按和短按功能的实现 附仿真与源码
分为2个例子
一个是单片机按键短按,实现led灯的上下移动

一个是单片机按键长按led灯亮,松开,led灯灭

附件里有仿真图,源码,以及hex文件

仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


单片机源程序如下:
  1. #include<reg51.h>
  2. #include<intrins.h>
  3. #define LEDR P0
  4. #define LEDG P2
  5. sbit PB1=P1^4;
  6. sbit PB2=P1^5;
  7. sbit PB3=P1^6;
  8. sbit PB4=P1^7;

  9. char tamp,tp;

  10. void delay (int);
  11. void debouncer(void);


  12. main() {
  13.     PB1=1;
  14.     PB2=1;
  15.     PB3=1;
  16.     PB4=1;
  17.     LEDR=0x00;
  18.     LEDG=0xff;
  19.     tamp=0xfd;
  20.     tp=0xfd;
  21.     while(1) {


  22.         if(PB1==0) {
  23.             debouncer();
  24.             tamp=_cror_(tamp,1); //变量右移函数
  25.             delay(20);

  26.             while(PB1==0);
  27.             debouncer();
  28.             LEDR=tamp;
  29.         }
  30.         if(PB2==0) {
  31.             debouncer();
  32.             tamp=_crol_(tamp,1);//变量左移函数
  33.             delay(20);

  34.             while(PB2==0);
  35.             debouncer();
  36.             LEDR=tamp;

  37.         }
  38.         if(PB3==0) {
  39.             debouncer();
  40.             tp=_cror_(tp,1);
  41.             delay(20);

  42.             while(PB3==0);
  43.             debouncer();
  44.             LEDG=tp;

  45.         }
  46.         if(PB4==0) {
  47.             debouncer();
  48.             tp=_crol_(tp,1);
  49.             delay(20);

  50.             while(PB4==0);
  51.             debouncer();
  52.             LEDG=tp;

  53.         }






  54.     }


  55. }



  56. void debouncer(void)
  57. {
  58.     int i;
  59.     for(i=0; i<2400; i++);
  60. ……………………

  61. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
51单片机实现按键长按和短按.zip (30.87 KB, 下载次数: 80)



作者: 守候枫林红叶时    时间: 2018-5-9 22:22
学习学习,谢谢楼主的分享!
作者: 25433    时间: 2020-12-9 17:03
好资料,51黑有你更精彩!!!





欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1