找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1918|回復: 0
收起左側(cè)

pwm直流電機調(diào)速

[復制鏈接]
ID:334144 發(fā)表于 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};    //定義字模檔數(shù)為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;              //定義數(shù)碼管控制位
uchar time=0;                       //定時循環(huán)初始化
uchar i=1;                            //初始化
void deplay(uchar s)               //延時函數(shù)聲明
  {
     uint j=500;                        //定義自變量
         for(;j>0;j--)                        //for循環(huán),
            for(;s>0;s--);                            //嵌套for循環(huán)
   }
void itime ()interrupt 1         //定義中斷函數(shù)
{
            TH0=0xff;                        //重裝計數(shù)初值
     TL0=0x9c;
         ++time;                            //定時加1
          if(time==anjian[i-1])           //高電平滿足此條件變低電平
                 maichong=0;
          if(time==10)                 //當循環(huán)到10次時,周期時間為1000us時變高電平
              {
                time=0;                    //定時初始化
                     maichong=1;                //將脈沖設置為高電平
                 }  
}
void main()                             //主函數(shù)
{
   TMOD=0x01;                    //T0定時方式1
   TH0=0xff;                            //計數(shù)初值設為100us
   TL0=0x9c;
   TR0=1;                            //啟動T0
   shumaguan=0;                         //數(shù)碼管顯示置零
while(1) {                             //死循環(huán)
    shumaguan=1;                       //數(shù)碼管開啟
    if(jiasu==0){                //軟件消抖,檢測加速按鍵是否按下
            deplay(5);                   //延時
   if(jiasu==0)                    //若按鍵按下
          {         
                        if(i<5)i++;                          //按鍵按下一次檔位加一
                        else                            //若數(shù)值大于5,則速度控制在5檔
                        i=5;
                         P1=led[i-1];           //數(shù)碼管顯示
                  while(jiasu==0);           //等待松開按鍵
          } }
        if(jiansu==0){                              //軟件消抖,檢測減速按鍵是否按下
          deplay(5);
    if(jiansu==0)                              //若按鍵按下
   {
                  if(i>0)        i--;                        //按鍵按下一次檔位減一
                  if(i==0)i=1;                        //若數(shù)值等于0,則速度控制在1檔
                  P1=led[i-1];                         //數(shù)碼管顯示
                   while(jiansu==0);            //等待松開按鍵
        } }
         ET0=1;                                //開T0中斷
         EA=1;                                 //開啟總中斷
          }
}


回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表