頻率370Hz,用手機攝像頭看,沒有頻閃
仿真LED會閃爍,主要看波形;實物不會閃爍,很穩定;代碼簡短
有完整代碼如下- /***********************************************************************/
- /***功能:按鍵控制PWM對LED燈調光,短按開關,長按調光 亮---暗 ----亮 循環 ***********/
- /***改變j的值就改變了占空比,初值50% */
- /*** STC89C52 @ 12MHz */
- /***********************************************************************/
- #include<reg52.h>
- typedef unsigned char U8;
- typedef unsigned int U16;
- /*---------------------------------------------------------------------*/
- /*-- 端口定義 ---------------------------------------*/
- /*---------------------------------------------------------------------*/
- #define PORT_1 P1
- sbit KEY1 = P3^0;
- U8 j,knum,temp=127;
- /*----------按鍵掃描--------------------*/
- void keyscan()
- {
- static U16 x; //消抖延時變量
-
- if(KEY1==0) //
- {
- x++; //按鍵消抖
- if(x>500) //長按亮度調節
- { knum=0;
-
- if(knum==0)
- {
- if(j<251)
- j+=5;
- else
- j=3; //寫j=3;加到最大亮度后回到最小亮度,又開始加,如此循環
- temp=j;
- }
- x=450;
- }
-
- }
- else
- {
- if(x>50 && x<500) //短按 開關燈
- {
- x=0;
- if(knum==1)
- {
- if(j>3)
- { j=0;} //關燈
- else j=temp; //開燈,保持前次設置的亮度
- }
- knum ++;
- if(knum>1)
- knum=1;
- }
- }
- }
- /*---------------------------------------------------------------------*/
- /*-- 主程序 ---------------------------------------*/
- /*---------------------------------------------------------------------*/
- void main()
- {
- U8 i;
- PORT_1=0Xff;
- j=127; //改變j的值就改變了占空比,初值50%
- while(1)
- {
- for(i=255;i>0;i--)
- // PORT_1=(j<i)?0x00:0xff; //三目運算 這句用在拉電流
- PORT_1=(j<i)?0xff:0x00; //這句用在灌電流
- keyscan();
- }
- }
- /*---------------------------------------------------------------------*/
- /*-- 程序結束 ---------------------------------------*/
- /*---------------------------------------------------------------------*/
復制代碼
|