找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

51單片機(jī)如何寫20khz pwm的頻率?

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
//20kHz PWM 可調(diào),步進(jìn)2%。帶顯示,樓主小菜菜上課溜號了頻率不會寫,下面代碼應(yīng)該是1khz的,該怎么改呢???還請諸位不吝賜教,先行謝過了
  1. /* Main.c file generated by New Project wizard
  2. *
  3. * Created:   周六 5月 30 2020
  4. * Processor: AT89C51
  5. * Compiler:  Keil for 8051
  6. */

  7. #include<reg51.h>


  8. #define uint unsigned int

  9. #define uchar unsigned char

  10. unsigned char num1;

  11. unsigned char dis;

  12. unsigned char code nondis[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//0-9
  13. uchar time;

  14. double count=70; //定義占空比,并初始占空比為70%

  15. sbit PWM=P0^0; //P0^0口輸出PWM

  16. sbit key_add=P3^4; //加的按鍵

  17. sbit key_dec=P3^5; //減的按鍵





  18. void delayxms(uint z); //延時

  19. void Motor_add(); //增加占空比

  20. void Motor_dec(); //減少占空比

  21. void timer0_init(); //定時器0初始化

  22. //顯示函數(shù)
  23.         void display()
  24.         {
  25.         
  26.         
  27.         unsigned char gewei,shiwei,baiwei;
  28.         baiwei=num1/100;
  29.         gewei=num1%10;
  30.         shiwei=(num1/10)%10;
  31.         P2=nondis[gewei];//個位
  32.         P0=0x80;
  33.         delayxms(1);
  34.         P2=0xff;
  35.         P2=nondis[shiwei];//十位
  36.         P0=0x40;
  37.         delayxms(1);
  38.         P2=0xff;
  39.         P2=nondis[baiwei];//百位
  40.         P0=0x20;
  41.         delayxms(1);
  42.         P2=0xff;
  43.         
  44.         }




  45. void main()

  46. {

  47. timer0_init();

  48. delayxms(5);

  49. while(1)

  50. {

  51. Motor_add();

  52. Motor_dec();

  53. num1 = count;
  54. display();//顯示函數(shù)

  55. }

  56. }



  57. //延時xms程序
  58. void delayxms(uint z) //延時xms程序

  59. {

  60. uint x,y;

  61. for(y=z;x>0;x--)

  62. for(y=110;y>0;y--);

  63. }


  64. //加
  65. void Motor_add()

  66. {

  67. if(key_add==0)

  68. {

  69. delayxms(2); //此處時間不能太長,否者會的中斷產(chǎn)生沖突

  70. if(key_add==0)

  71. {

  72. count+=2; //每按一次加速按鍵占空比加2

  73. if(count>=98) //限定占空比上限

  74. {

  75. count=98;

  76. }

  77. }

  78. while(!key_add);

  79. }

  80. }

  81. //減
  82. void Motor_dec()

  83. {

  84. if(key_dec==0)

  85. {

  86. delayxms(2);//此處時間不能太長

  87. if(key_dec==0)

  88. {

  89. count-=2; //每按一次減速按鍵占空比減2

  90. if(count<=25) //限定占空比下限

  91. {

  92. count=25;

  93. }

  94. }

  95. while(!key_dec);

  96. }

  97. }


  98. /***********定時器0初始化***********/

  99. void timer0_init()

  100. {

  101. TMOD=0x01; //定時器0工作于方式1

  102. TH0=(65536-10)/256;

  103. TL0=(65536-10)%256;

  104. TR0=1;

  105. ET0=1;

  106. EA=1;

  107. }


  108. /**************定時0中斷處理******************/

  109. void timer0_int() interrupt 1

  110. {


  111. TR0=0; //設(shè)置定時器初值期間,關(guān)閉定時器

  112. TH0=(65536-10)/256;

  113. TL0=(65536-10)%256;

  114. TR0=1;


  115. time++;

  116. if(time<count) //count為占空比

  117. {

  118. PWM=1; //輸出高電平

  119. }

  120. else

  121. PWM=0;

  122. if(time>=100)//20khz

  123. {

  124. time=0;

  125. }

  126. }
復(fù)制代碼

888.png (180.25 KB, 下載次數(shù): 89)

仿真圖哥哥們

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

使用道具 舉報

沙發(fā)
ID:213173 發(fā)表于 2020-6-1 07:28 | 只看該作者
這個程序根本不可能產(chǎn)生1KHz PWM,更不可能改成20KHz PWM 可調(diào)。樓主仔細(xì)看看仿真波形就明白。
回復(fù)

使用道具 舉報

板凳
ID:765181 發(fā)表于 2020-6-1 09:27 來自手機(jī) | 只看該作者
wulin 發(fā)表于 2020-6-1 07:28
這個程序根本不可能產(chǎn)生1KHz PWM,更不可能改成20KHz PWM 可調(diào)。樓主仔細(xì)看看仿真波形就明白。

啊這,要求是占空比可調(diào),頻率20khz,占空比開始是70%圖片中的是調(diào)到50%的。定時了1ms,然后time加100次啊
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

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