找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1677|回复: 0
收起左侧

pwm直流电机调速

[复制链接]
ID:334144 发表于 2018-5-20 12:49 | 显示全部楼层 |阅读模式
#include<reg52.h>                        //51单片机头文件
#define  uchar unsigned char               //宏定义无符号字符
#define  uint unsigned int                        //宏定义无符号整型
uchar led[]={0x06,0x5b,0x4f,0x66,0x6d,0x7d};    //定义字模档数为1--5挡
uchar anjian[]={2,4,6,8,10};          //占空比20%,40%,60%,80%,100%的PWM
sbit jiasu=P2^0;                    //定义加速按键位
sbit jiansu=P2^1;                         //定义减速按键位
sbit maichong=P1^7;               //定义脉冲输出
sbit shumaguan=P3^4;              //定义数码管控制位
uchar time=0;                       //定时循环初始化
uchar i=1;                            //初始化
void deplay(uchar s)               //延时函数声明
  {
     uint j=500;                        //定义自变量
         for(;j>0;j--)                        //for循环,
            for(;s>0;s--);                            //嵌套for循环
   }
void itime ()interrupt 1         //定义中断函数
{
            TH0=0xff;                        //重装计数初值
     TL0=0x9c;
         ++time;                            //定时加1
          if(time==anjian[i-1])           //高电平满足此条件变低电平
                 maichong=0;
          if(time==10)                 //当循环到10次时,周期时间为1000us时变高电平
              {
                time=0;                    //定时初始化
                     maichong=1;                //将脉冲设置为高电平
                 }  
}
void main()                             //主函数
{
   TMOD=0x01;                    //T0定时方式1
   TH0=0xff;                            //计数初值设为100us
   TL0=0x9c;
   TR0=1;                            //启动T0
   shumaguan=0;                         //数码管显示置零
while(1) {                             //死循环
    shumaguan=1;                       //数码管开启
    if(jiasu==0){                //软件消抖,检测加速按键是否按下
            deplay(5);                   //延时
   if(jiasu==0)                    //若按键按下
          {         
                        if(i<5)i++;                          //按键按下一次档位加一
                        else                            //若数值大于5,则速度控制在5档
                        i=5;
                         P1=led[i-1];           //数码管显示
                  while(jiasu==0);           //等待松开按键
          } }
        if(jiansu==0){                              //软件消抖,检测减速按键是否按下
          deplay(5);
    if(jiansu==0)                              //若按键按下
   {
                  if(i>0)        i--;                        //按键按下一次档位减一
                  if(i==0)i=1;                        //若数值等于0,则速度控制在1档
                  P1=led[i-1];                         //数码管显示
                   while(jiansu==0);            //等待松开按键
        } }
         ET0=1;                                //开T0中断
         EA=1;                                 //开启总中断
          }
}


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表