问答

汇集网友智慧,解决技术难题

哆啦dd

TA的家园币:12  

  • 51单片机实现呼吸灯

    使用定时器0工作方式1,定时100us,每10ms改变一个占空比,呼吸有效果,但是呼吸几次后会保持长亮或者熄灭,找不到原因,有没有大神解惑。以下为源码:#include#defineuintunsignedint#defineucharunsignedchartypedefbitbool;#definetrue1#definefalse0sbitLED1=P1^0;uintcodeBreathLEDArray[]={0,1,2,3,4,5,6,7,7,7,7,8,10,12,13,13,13,15,15,16,17,22,22,25,25,25,30,33,38,40,40,45,51,55,67,70,72,73,75,77,80,83,90,95,96,97,98,99,99,100};boolBreathLEDFlag;boolBreathLEDPhase;//true:½¥ÁÁ£»false:½¥ÃðucharBreathLEDIndex;ucharBreathSystickCount;ucharFlag_10ms;voidInit();voidBreathLEDHandle();voidmain(){Init();while(1){BreathLEDHandle();}}voidInit(){TMOD=0x01;TH0=(65536-92)/256;TL0=(65536-92)%256;EA=1;ET0=1;TR0=1;BreathLEDFlag=true;BreathLEDPhase=false;BreathLEDIndex=0;BreathSystickCount=0;Flag_10ms=0;}voidBreathLEDHandle(){if(!BreathLEDFlag){return;}if(Flag_10ms%10==0){if((BreathLEDIndex>0)&&BreathLEDPhase)//½¥Ãð{BreathLEDIndex--;if(BreathLEDIndex=49){BreathLEDIndex=49;BreathLEDPhase=true;}}}}voidT0_Interrupt()interrupt1{TH0=(65536-92)/256;TL0=(65536-92)%256;if(BreathLEDFlag){BreathSystickCount++;if(BreathSystickCount>=BreathLEDArray){LED1=0;}else{LED1=1;}if(BreathSystickCount>=100){BreathSystickCount=0;Flag_10ms+=10;if(Flag_10ms>=65535){Flag_10ms=0;}}}}

    单片机 嵌入式 ST

    2022-11-09 2