导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→C51编程:快来帮帮我呀,我的程序哪里有问题呀?工作指示灯闪[红蚂蚁]

 *第3388篇: C51编程:快来帮帮我呀,我的程序哪里有问题呀?工作指示灯闪,其他的不行

  
楼 主:红蚂蚁 2002年5月23日11:38
 C51编程:快来帮帮我呀,我的程序哪里有问题呀?工作指示灯闪,其他的不行
/*p1.0~p1.3 接按键,低电平有效,防抖40ms。按一次亮,再按一次灭。四个键不可一起按
着。
  p2.0~p2.3 接led, 低电平有效
  p3.7      工作灯,低电平有效。周期0.4s
  key 为键值积存器
  _tt1为防抖使用时间积存器
  _tt2为工作灯使用时间积存器
  p1reg为p1口上次值积存器
*/


#include <reg51.h>

unsigned char key=0xff;
unsigned char _tt1=0;
unsigned char _tt2=0;
unsigned char p1reg=0xff;  

sbit p20=P2^0;
sbit p21=P2^1;
sbit p22=P2^2;
sbit p23=P2^3;

sbit p37=P3^7;


/*TO中断服务子程序 */
void  timer0(void) interrupt 1 using 2
{   
   TH0=-2000/256;
   TL0=-2000%256;
   if(P1^p1reg!=0)
     { if(_tt1=0) _tt1=1;
         else { if(_tt1>20)   /*防抖动*/
                 { key=P1;
                   switch(key)
                   { case 1:p20=!p20;break;
                     case 2:p21=!p21;break; 
                     case 4:p22=!p22;break;
                     case 8:p23=!p23;break;
                     default :break;
                   }
                 }
                _tt1=0;
              }          
        p1reg=P1;        
     } 
   else if(_tt1>0) _tt1++;
   _tt2++;
}

/*T0中断设置  2ms*/
void sett0()

  TH0=-2000/256;
  TL0=-2000%256;
  TMOD=0x01;  /*T0方式1*/ 
  EA=1;
  ET0=1;  
  TR0=1;      /*启动订时器T0*/
}  

/*指示灯子程序*/
void led()

 
  if(_tt2>100) 
       { p37=!p37;
         _tt2=0;         
       }
  
}


/* 调用子程序*/
void main()

   P1=0xff;
   P2=0xff;
   p37=1 ;
   sett0();
   while(1) led();
}

  
2楼:红蚂蚁 2002年5月23日11:45
 老古在吗?
  
3楼:红蚂蚁 2002年5月23日11:47
 来人呀,救救我呀
  
4楼:红蚂蚁 2002年5月23日12:01
 有人帮我吗?555555555
  
5楼:红蚂蚁 2002年5月23日12:54
 这里速度很快,怎么就没人呢?那个C51BBS人很多,但速度太太慢了
  
6楼:yjh_xtz 2002年5月23日15:36
 我正在看呢!
中断中{ if(_tt1=0) _tt1=1;
应改为{ if(_tt1==0) _tt1=1;
是吗?
  
7楼:红蚂蚁 2002年5月23日20:29
 这是一个,但还是有问题呀?
  
8楼:幽游梦蝶 2002年5月23日18:28
 你的定时器中断程序有问题,我改动了一些,自己再找
/*TO中断服务子程序 */
void  timer0(void) interrupt 1 using 2
{   
    TR0=0;
    if(p1reg^P1)
    {
        if(_tt1==0)//不是if(_tt1=0)!!!!!!!!!
            _tt1=1;
        else
        {
            if(_tt1>20)   /*防抖动*/
            {
                key=P1;
                key|=0xF0;
                key=~key;
                switch(key)
                {
                    case 1:
                        p20=!p20;
                        break;
                    case 2:
                        p21=!p21;
                        break; 
                    case 4:
                        p22=!p22;
                        break;
                    case 8:
                        p23=!p23;
                        break;
                    default:
                        break;
                }
            }
            _tt1=0;
        }          
        p1reg=P1;        
     } 
    else
        if(_tt1>0) _tt1++;
   _tt2++;
   sett0();
}
  
9楼:红蚂蚁 2002年5月23日13:20
 谁来帮我看一下?谢谢

>>>>>>对该主题发表你的看法

本主题贴数9,分页: [第1页]


[上一篇主题]:初学者:c-96编程拜托!!!

[下一篇主题]:C51编程:各位请看