找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2006|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

51單片機(jī)pwm多級調(diào)試源程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:366678 發(fā)表于 2018-7-7 10:08 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
pwm多級調(diào)試
單片機(jī)源程序如下:
  1. #include <reg51.h>
  2. #include <math.h>
  3. #include <intrins.h>

  4. #define uchar unsigned char
  5. #define uint unsigned int
  6. /*PWM控制端*/
  7. sbit DIM2 = P1^0;
  8. sbit DIM1 = P1^1;
  9. /*使能端*/
  10. sbit EN1 = P3^7;
  11. sbit EN2 = P3^6;
  12. sbit dianyuan = P1^4;
  13. /*按鍵*/
  14. sbit key1 = P3^4;
  15. sbit key2 = P3^5;

  16. uchar t = 0;                  //每次定時器溢出加1
  17. uchar PWM = 0;                //占空比控制

  18. void delayms(uint x)
  19. {
  20.         uchar i,j;
  21.         for(i=x;i>0;i--)
  22.          for(j=110;j>0;j--);
  23. }
  24. void Delay10ms()                //@11.0592MHz
  25. {
  26.         unsigned char i, j;

  27.         i = 108;
  28.         j = 145;
  29.         do
  30.         {
  31.                 while (--j);
  32.         } while (--i);
  33. }

  34. void keyscan()
  35. {
  36.         if((key1 == 0)&&(key2 == 0))
  37.                 {
  38.                         delayms(10);
  39.                         if((key1 == 0)&&(key2 == 0))
  40.                         {
  41.                                 PWM = 250;        //0mA
  42.                         }
  43.                 }

  44.         else if((key1 == 0)&&(key2 == 1))
  45.                 {
  46.                         delayms(10);
  47.                         if((key1 == 0)&&(key2 == 1))
  48.                         {
  49.                                 PWM = 125;        //60mA
  50.                         }
  51.                 }
  52.                
  53.         else if((key1 == 1)&&(key2 == 0))
  54.                 {
  55.                         delayms(10);
  56.                         if((key1 == 1)&&(key2 == 0))
  57.                         {
  58.                                 PWM = 83;        //80mA
  59.                         }
  60.                 }

  61.         else
  62.                         PWM = 0;//120mA       

  63. }



  64. void main()
  65. {
  66.         TMOD = 0x00;            //定時器0,工作模式2,8位定時模式
  67.         TH0 = 0xff;              //寫入預(yù)置初值(取值1-255,數(shù)越大PWM頻率越高)
  68.         TL0 = 0xf5;              //寫入預(yù)置值 (取值1-255,數(shù)越大PWM頻率越高)
  69.         TR0 = 1;                //啟動定時器
  70.         ET0 = 1;                //允許定時器0中斷
  71.         EA = 1;                 //允許總中斷
  72. // PWM = 125;              //初始速度
  73.         EN1 = 1;
  74.         EN2 = 1;
  75.         while(1)
  76.         {
  77. /*                PWM += 1;
  78.                 Delay10ms();
  79.                 Delay10ms();
  80.                 Delay10ms();
  81.                 if(PWM == 250)
  82.                 {
  83.                         PWM=0;
  84.                 }
  85.                 */
  86.                 keyscan();
  87.         }

  88. }
  89. /*定時器0中斷模擬PWM*/
  90. void timer0() interrupt 1  
  91. {
  92.          t++;    //每次定時器溢出加1         
  93.          if(t == 250)   //PWM周期 100個單位
  94.                  {
  95.                           t=0;  //使t=0,開始新的PWM周期
  96.                           DIM1=0;  //輸出低
  97.                           DIM2=0;  //輸出低
  98.                  }         
  99.          if(PWM==t)  //按照當(dāng)前占空比切換輸出為高電平
  100.                  {  
  101.                                 DIM1=1;        //輸出高
  102.                                 DIM2=1;
  103.                  }

  104. }
復(fù)制代碼

所有資料51hei提供下載:
PWM.zip (21.04 KB, 下載次數(shù): 19)


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表