基于51单片机按键按下改变流水灯方向源程序

[复制链接]
查看2 | 回复0 | 2021-5-5 23:43:42 | 显示全部楼层 |阅读模式
2口接8个LED流水灯,P3.0接一个按键
按键按下一次流水灯方向改变一次
1.png
单片机源程序如下:
  1. #include<reg52.h>             //51系列单片机头文件
  2. #include<intrins.h>           //51系列单片机头文件
  3. #define uint unsigned int     //宏定义
  4. #define uchar unsigned char   //宏定义
  5. sbit k1=P3^0;
  6. uchar a,b,c,d,y=0;            //定义一个变量,用来给P2口赋值
  7. void delayms(uint xms)        //延时子函数
  8. {
  9.   uint i,j;
  10.   for(i=xms;i>0;i--)          //i=xms即延时约xms毫秒
  11.   for(j=110;j>0;j--);      
  12. }
  13. void key()
  14. {
  15.   uchar x;
  16.   if(k1==0)
  17.   {
  18.     delayms(10);              //延时10ms 去抖
  19.     if(k1==0)                                  //再判断k1按键是否按下
  20.     {
  21.       while(!k1);
  22.       x++;
  23.       if(x==4)
  24.       x=1;
  25.       if(y==4)
  26.       x=0;
  27.       switch(x)                                  //条件选择
  28.       {
  29.         case 1: y=1; break;
  30.         case 2: y=2; break;
  31.         case 3: y=3; break;
  32.         default: break;  
  33.       }
  34.     }
  35.   }
  36. }
  37. void display()
  38. {   
  39.     if(y==0)
  40.         {
  41.           P2=a;
  42.           delayms(500);
  43.           a=~a;                                 //状态0时 LED闪烁
  44.         }  
  45.     if(y==1)
  46.     {      
  47.       P2=b;            
  48.       delayms(500);                     
  49.       b=_crol_(b,1);           //状态1时 LED选择左移
  50.     }
  51.     if(y==2)
  52.     {
  53.       P2=c;            
  54.       delayms(500);                     
  55.       c=_cror_(c,1);         //状态2时 LED选择右移
  56.     }      
  57.     if(y==3)
  58.     {
  59.       P2=d;           
  60.       delayms(500);                     
  61.       d=d;                     //状态3时  LED全亮
  62.     }
  63.   }
  64. void main()            
  65. {
  66.   a=0xff;                         //高4位和低4位都置为1
  67.   b=0x01;                                //只有低4位的最低位为1
  68.   c=0xfe;                                //低4位的最低位为0
  69.   d=0xff;  
  70.   while(1)            
  71.   {  
  72.     key();
  73.     display();                   //按键显示
  74.   }
  75. }
复制代码

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则