欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 讓沒有PWM功能的單片機實現(xiàn)PWM功能 [打印本頁]

作者: wangming    時間: 2015-2-11 01:51
標題: 讓沒有PWM功能的單片機實現(xiàn)PWM功能
  1.         AT89S51本身沒有PWM接口,程序采用軟件模擬PWM,P1口控制LED亮度,模擬PWM輸出控制燈的10個亮度級。
  2. #include <reg51.h>
  3. #define uInt unsigned int
  4. #define uchar unsigned char
  5. uchar PWM_T = 0;   //占空比控制變量  
  6. //////////////////主程序入口//////////////////////
  7. void main(void)        
  8. {  
  9.       bit flag = 1; //控制燈漸亮漸熄方式
  10.       uInt n;
  11.       TMOD=0x02;   //定時器0,工作模式2,8位定時模式  
  12.       TH0=241;     //寫入預(yù)置初值241到定時器0,使15微秒溢出一次(11.0592MHz)  
  13.       TL0=241;     //寫入預(yù)置值  
  14.       TR0=1;       //啟動定時器  
  15.       ET0=1;       //允許定時器0中斷   
  16.       EA=1;        //允許總中斷
  17.       P1=0xff; //初始化P1  
  18.       while(1)      
  19.       {      
  20.              for(n=0;n<300;n++);  //延時,將響應(yīng)定時器中斷,燈會自動加/減一個檔次的亮度  
  21.              if(flag==1)       //燈漸亮
  22.              PWM_T++;
  23.              else          //燈漸熄
  24.              PWM_T--;
  25.              if(PWM_T>=10) //設(shè)置燈亮度級別為10
  26.              flag=0;
  27.              if(PWM_T==0)   //限定最低亮度級別為0
  28.              flag = 1;
  29.       }         
  30. }  
  31. ///////////////////定時器0中斷模擬PWM////////////////////
  32. timer0() interrupt 1 using 2   
  33. {  
  34.       static  uchar   t ;   //t用來保存當(dāng)前時間在一秒中的比例位置  
  35.        t++;    //每15微秒增加1  
  36.        if(t==10)   //1.5毫秒的時鐘周期  
  37.       {  
  38.              t=0;  //使t=0,開始新的PWM周期  
  39.              P1=0x00;  //使LED燈亮               
  40.       }
  41.      if(PWM_T==t)  //按照當(dāng)前占空比切換輸出為高電平  
  42.      P1=0xff;        //使LED燈滅           
  43. }
復(fù)制代碼







歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1