各位帮忙看下我的程序,如何做到松开按键P1口灯闪烁

2019-07-15 09:15发布

本人在学习51单片机,现在在做按键松开可以闪烁,如果下次再按就熄灭。代码如下,请各位大神帮忙分享下,最好给改进的代码,key1是另外一个按键,想按下这个按键,松开就可以闪烁,现在这个程序是要一直按住闪烁,松开无任何反映。

  • #include <STC90.H>
  • #include<intrins.h>
  • #define uchar unsigned char
  • #define uint unsigned char
  • sbit key=P2^0;
  • sbit key1=P2^1;
  • void Delay200ms()                //@12.000MHz
  • {
  •         unsigned char i, j, k;
  •         _nop_();
  •         _nop_();
  •         i = 3;
  •         j = 189;
  •         k = 92;
  •         do
  •         {
  •                 do
  •                 {
  •                         while (--k);
  •                 } while (--j);
  •         } while (--i);
  • }
  • void Delay40ms()                //@12.000MHz
  • {
  •         unsigned char i, j, k;
  •         _nop_();
  •         _nop_();
  •         i = 2;
  •         j = 95;
  •         k = 43;
  •         do
  •         {
  •                 do
  •                 {
  •                         while (--k);
  •                 } while (--j);
  •         } while (--i);
  • }
  • void Delay10ms()                //@12.000MHz
  • {
  •         unsigned char i, j;
  •         i = 117;
  •         j = 184;
  •         do
  •         {
  •                 while (--j);
  •         } while (--i);
  • }
  • void main()
  • {
  •          uchar  a;
  •          P1=0Xff;
  •         while(1)
  •         {
  •                 if(key==0)
  •                 {
  •                   Delay10ms();
  •                   if(key==0)
  •                   {
  •                           a++;
  •                         if(a==9)          //如果a=9,那么就进行清零
  •                         {
  •                         a=0;
  •                         while(key==0);         //循环在按键判断
  •                   }
  •                  }
  •                 switch(a)
  •                         {
  •                                 case 1:P1=0X00;        Delay200ms();break;          //灯全亮
  •                                 case 2:P1=0X7f;        Delay200ms();break;          //第一亮
  •                                 case 3:P1=0Xbf;        Delay200ms();break;         //第二个亮
  •                                 case 4:P1=0Xdf;        Delay200ms();break;
  •                                 case 5:P1=0Xef;        Delay200ms();break;
  •                                 case 6:P1=0Xf7;        Delay200ms();break;
  •                                 case 7:P1=0Xfb;        Delay200ms();break;
  •                                 case 8:P1=0Xfd;        Delay200ms();break;
  •                                 case 0:P1=0Xfe;        Delay200ms();break;        //第8个亮
  •                         }
  •                 }
  •                 if(key1==0)
  •                 {
  •                   Delay10ms();
  •                   if(key1==0)
  •                   {
  •                           P1=0X00;
  •                         Delay40ms();
  •                         P1=0Xff;
  •                         Delay10ms();
  •                         //while(1);
  •                         while (key==0);
  •                   }
  •                 }
  •         }
  • }


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
6条回答
打杂的
2019-07-16 09:44
人中狼 发表于 2017-11-30 09:48
你现在的程序要求需要设置一个定时器,通过定时器来进行闪烁操作的启动和关闭。按键部分通过按键按下的次数来决定启动或关闭闪烁。
程序改动比较多,要增加一个定时器的中断程序

中断程序还不会写,所以用中断和定时,写不出来,麻烦写一下给我看看,再跟据书理解中断用法和定时器用法

一周热门 更多>