51单片机使用PWM调速

PWM说白了就是首先定义一个变量X并且给它赋值为你想要的高电平数量,接着再定义一个变量Y赋值为0,然后再给定时器弄个1ms的定时,每过1msY就加一,假设我要定的PWM是5/20,那么首先给X赋值为5,在定时器中写每过1ms就让Y加一,当Y小于X时输出高电平,当Y大于等于X时输出低电平,当Y>=20时就给Y赋值为0,这样就有5/20的时间是高电平,15/20的时间是低电平。

程序

  1. #include<reg52.h>  
  2. #define uchar unsigned char  
  3. #define uint unsigned int  
  4. sbit key=P3^7;  
  5. sbit fm=P2^3;  
  6. uchar x=0;  
  7. void keyscan();  
  8. void delay(unsigned int xms)                  
  9. {  
  10.     unsigned int i,j;  
  11.     for(i=xms;i>0;i--)             //i=xms即延时约xms毫秒  
  12.     for(j=112;j>0;j--);  
  13. }  
  14. void main()  
  15. {  
  16.     keyscan();  //按键扫描,没有按下K4之前程序一直卡在这里  
  17.     TMOD=0x01;  //定时器0  
  18.     TH0=0xFC;   //设定定时时间为1ms  
  19.     TL0=0x66;     
  20.     EA=1;       //定时器的初始化  
  21.     ET0=1;        
  22.     TR0=1;  
  23.     while(1)  
  24.     {  
  25.         if(x<2)  
  26.         P1=0xfe;  
  27.         else  
  28.         P1=0xff;  
  29.         if(x>=20)  
  30.         x=0;      
  31.     }     
  32. }  
  33. void dinshi() interrupt 1   //定时器  
  34. {  
  35.     TH0=0XFC;  
  36.     TL0=0X66;  
  37.     x=x+1;    
  38. }  
  39. void keyscan()             //健扫描  
  40. {  
  41. A:  if(key==0)  
  42.     {  
  43.         delay(10);  
  44.         if(key==0)  
  45.         {  
  46.             fm=0;  
  47.             while(key==0);  
  48.             fm=1;  
  49.         }  
  50.         else  
  51.         {   
  52.             goto A;  
  53.         }  
  54.     }  
  55.     else  
  56.     {  
  57.         goto A;  
  58.     }  
  59. }  

  • 4
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值