imcc 发表于 2010-12-29 20:29:18

利用外部中断点亮LED,求延时消抖函数,新手上路

这个是我写的利用外部中断点亮和熄灭LED,但是不能消抖,延时函数一写好,求消抖。

imcc 发表于 2010-12-29 20:30:46

while(1)
        {
             if(rEINTPEND&(1<<8))          //按下key1
             {
       
                   rEINTPEND |= 1<< 8;
                   i++;
                 if(i%2==1)
                   {
                      rGPBDAT=rGPBDAT&(~(1<<5))|(0<<5);    //点亮LED1
                   }
                 else
               {
                      rGPBDAT=rGPBDAT&(~(1<<5))|(1<<5);
                   }
              }
             else if(rEINTPEND&(1<<11))   //按下key2
             {
                    rEINTPEND |= 1<< 11;
                   j++;
                 if(j%2==1)
                   {
                      rGPBDAT=rGPBDAT&(~(1<<6))|(0<<6);    //点亮LED2
                   }
                     else
                     {
                      rGPBDAT=rGPBDAT&(~(1<<6))|(1<<6);
                   }
              }
             else if(rEINTPEND&(1<<13))   //按下key3
             {
                   rEINTPEND |= 1<< 13;
                   m++;
                 if(m%2==1)
                   {
                      rGPBDAT=rGPBDAT&(~(1<<7))|(0<<7);    //点亮LED3
                   }
                 else
                {
                      rGPBDAT=rGPBDAT&(~(1<<7))|(1<<7);   
                }
             }
          else if(rEINTPEND&(1<<14))   //按下key4
             {
                rEINTPEND |= 1<< 14;
                n++;
                if(n%2==1)
                 {
                   rGPBDAT=rGPBDAT&(~(1<<8))|(0<<8);    //点亮LED4
                     }   
                else
                 {
                   rGPBDAT=rGPBDAT&(~(1<<8))|(1<<8);
                 }   
             }
          
          else if(rEINTPEND&(1<<15))   //按下key5
             {
                   rEINTPEND |= 1<< 15;
                   rGPBDAT=rGPBDAT&(~(1<<5))|(1<<5);   
                   rGPBDAT=rGPBDAT&(~(1<<6))|(1<<6);   
                   rGPBDAT=rGPBDAT&(~(1<<7))|(1<<7);   
                   rGPBDAT=rGPBDAT&(~(1<<8))|(1<<8);   
                                                       //熄灭所有的灯
          }
       else if(rEINTPEND&(1<<19)) //按下key6
          {
                   rEINTPEND |= 1<< 19;
                   rGPBDAT=rGPBDAT&(~(1<<5))|(0<<5);   
                   rGPBDAT=rGPBDAT&(~(1<<6))|(0<<6);   
                   rGPBDAT=rGPBDAT&(~(1<<7))|(0<<7);   
                   rGPBDAT=rGPBDAT&(~(1<<8))|(0<<8);   
                                                        //点亮所有的灯
           }
        }
}

void delayms(unsigned char t)//延时函数
{
       rTCFG1 &=rTCFG1&(~0x0F);
       rTCFG1|=0x02;    // 1/8分频
       rTCNTB0 =(PCLK)/8/1000; //时钟频率为PCLK/8
                            //1ms延时 rTCON&= ~0x0F;    //
       rTCON|= (1<<3)|(1<<1)|(1<<0);
       rTCON&= ~(1<<1);

while(t--)
{
       while(rTCNTO0!=(rTCNTB0-1));
}
       rTCON&= ~(1<<0);   //停止定时器0
}
页: [1]
查看完整版本: 利用外部中断点亮LED,求延时消抖函数,新手上路