标题: 51单片机启停保的逻辑电图 [打印本页]

作者: 888zhjzhj    时间: 2015-3-22 19:37
标题: 51单片机启停保的逻辑电图
          #include<reg52.h>
                           sbit KEY1 = P3^2;   
               sbit KEY2 = P3^3;
               //sbit KEY3 = P3^4;
              //sbit LED1 = P0^0;
               sbit LED2 = P1^0;  

                               
                           void KEY()
                          {
                                if((KEY1==0||LED2==0)&& KEY2==1)                                                                                                                                                          
                                                { LED2=0;}
                                                                                else
                                                                                { LED2=1;}
                          }               
                      void Main(void)
                                                        {
                                                                  while(1)
                                                                        {
                                                                                // P0=0x00;
                                                                                // P3=0x00;
                                                                                 KEY();
                                                                        }
                                                        }
                       
请问各位老师,为什么LED亮保持不住,有时短,有时长,我搞了很久也不明白


作者: admin    时间: 2015-3-23 00:23
按键没有做消抖处理
作者: 野强强    时间: 2015-3-23 09:40
在按键指令后加上延时50ms的指令,或者用一个硬件消除,就是在开关后面加上单稳态多谐震荡器。型号54121。
作者: 888zhjzhj    时间: 2015-3-25 20:09
我改成如下程序,效果还不错。
          #include<reg52.h>
                           sbit KEY1 = P3^2;   
               sbit KEY2 = P3^3;
               sbit LED2 = P0^0;
                           void delay(unsigned int b) //延时约1ms
                                                                                {
                                                                                unsigned int i;
                                                                                while (--b!=0)
                                                                                        for(i=600;i>0;i--);  
                                        }
                               
                           void KEY()
                          {
                                if((KEY1==0||LED2==0)&& KEY2==1)
                                                                                                                                                  
                                                { LED2=0;}
                                                                                else
                                                                                { LED2=1;}
                          }               
                      void Main(void)
                                                        {
                                                          while(1)
                                                                            {

                                                                                            if((KEY1&KEY2) != 1)
           {
                   delay(30) ;       
            KEY();
               
           }
                                                                            }                                                        
                                                   }                               
               




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