標(biāo)題: pwm直流電機(jī)調(diào)速 [打印本頁]

作者: haojiu    時(shí)間: 2016-12-13 13:48
標(biāo)題: pwm直流電機(jī)調(diào)速
最近做了一個(gè)pwm直流電機(jī)調(diào)速
下面是程序



#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++;//統(tǒng)計(jì)高電平的時(shí)間
        }

void key()
{   /*啟動(dòng)和關(guān)閉電機(jī)*/
    if(kaiguan==0)
     {
           dianji=1;
          }
        else
         {
                 dianji=0;
         }
   /**按鍵加**/
          if(jia_key==0)//加速
         {
            delay(5);
                if(jia_key==0)
                gao_num+=5;        //按鍵每按下一次,加5已達(dá)到讓風(fēng)扇轉(zhuǎn)的更快               
                 if(gao_num>99) //當(dāng)gao_num加到100時(shí),時(shí)間正好達(dá)到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();
        }
}




作者: 用當(dāng)以致學(xué)    時(shí)間: 2017-8-3 08:55
感謝分享




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1