找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2415|回复: 1
收起左侧

pwm直流电机调速

[复制链接]
ID:154408 发表于 2016-12-13 13:48 | 显示全部楼层 |阅读模式
最近做了一个pwm直流电机调速
下面是程序



#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar num;
uint speed,count,gao_num=50,gao_count;
sbit lcdrs=P3^5;
sbit lcden=P3^4;
sbit jia_key=P3^0;
sbit jian_key=P3^1;
sbit kaiguan=P3^2;
sbit dianji=P1^0;
uchar code table[]={"0123456789"};
uchar code digit2[]={"speed:    r/min"};
uchar code digit3[]={"Gao_count:     "};
void delay(uint z)
{
uint x;
        for(x=z;x>0;x--) ;
        //        for(y=110;y>0;y--);
}

void write_com(uchar com)
{
        lcdrs=0;
        P0=com;
        delay(5);
        lcden=1;
        delay(5);
        lcden=0;
}

void write_date(uchar date)
{
        lcdrs=1;
        P0=date;
        delay(5);
        lcden=1;
        delay(5);
        lcden=0;
}

  void display()
    {  
                 write_com(0x80+7);
                 write_date(table[speed/100]);   
                 write_com(0x80+8);
                 write_date(table[speed%100/10]);
                 write_com(0x80+9);       
                 write_date(table[speed%10]);
                 write_com(0x80+0x40+12);
                 write_date(table[gao_num/10]);
                 write_com(0x80+0x40+13);
                 write_date(table[gao_num%10]);
     }

void init()
{
        lcden=0;
        write_com(0x38);
        write_com(0x0c);
        write_com(0x06);
        write_com(0x00);
        write_com(0x80);
        for(num=0;num<15;num++)
          {
                write_date(digit2[num]);
                delay(5);
           }
           write_com(0x80+0x40);
                for(num=0;num<15;num++)
          {
                write_date(digit3[num]);
                delay(5);
           }
        TMOD=0x51;
        TH0=(65536-10000)/256;
        TL0=(65536-10000)%256; //12HZ  10ms 中断一次
        EA=1;
        ET0=1;
        TR0=1;
        TR1=1;
        TH1=0;
        TL1=0;

}
void timer0() interrupt 1
   {
        TH0=(65536-10000)/256;
        TL0=(65536-10000)%256;
        count++;
        gao_count++;//统计高电平的时间
        }

void key()
{   /*启动和关闭电机*/
    if(kaiguan==0)
     {
           dianji=1;
          }
        else
         {
                 dianji=0;
         }
   /**按键加**/
          if(jia_key==0)//加速
         {
            delay(5);
                if(jia_key==0)
                gao_num+=5;        //按键每按下一次,加5已达到让风扇转的更快               
                 if(gao_num>99) //当gao_num加到100时,时间正好达到1s
                gao_num=99;
                while(!jia_key);
       
          }
        /**按键减**/
     if(jian_key==0)//减速
                {
                    delay(5);
                        if(jian_key==0)
                     {
                          if(gao_num!=0)
                            gao_num-=5;                       
                          else
                            gao_num=50;
                                while(!jian_key);
                          }
            }
}         
void qudong()
{ if(gao_count>99)
     gao_count=0;
  if(gao_count<gao_num)
    dianji=1;//加速
  else
    dianji=0;//减速
}       
void main()
{   
        init();
        dianji=0;
        while(1)
        {                   
                  key();
                  qudong();       
                  if(count>99)  //1s   
                    {  count=0;
                           speed=(TH1*256+TL1)*60/7;
                           TH1=0;
                   TL1=0;
                           }
                   display();
        }
}



评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:222031 发表于 2017-8-3 08:55 | 显示全部楼层
感谢分享
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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