電子產(chǎn)業(yè)一站式賦能平臺

PCB聯(lián)盟網(wǎng)

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

單片機C語言實例-185-直流電機調(diào)速

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 2022-2-15 11:49:30 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
單片機C語言實例-185-直流電機調(diào)速

/********************************************************************
* 名稱 : 電機調(diào)速.c
* 功能 : 通過P1.0口來控制直流電機的旋轉(zhuǎn)的快慢
/***********************************************************************/
#include <reg52.h>
#define uchar unsigned char
#define uint  unsigned int
sbit KEY1 = P3^2;                //定義調(diào)速的按鍵
sbit PWM = P1^0;                //定義直流電機的控制端口
uchar CYCLE;                          //定義周期
uchar PWM_ON ;                        //定義低電平時間

/********************************************************************
* 名稱 : Delay_1ms()
* 功能 : 延時子程序,延時時間為 1ms * x
* 輸入 : x (延時一毫秒的個數(shù))
* 輸出 : 無
***********************************************************************/
void Delay(uint i)
{
        uchar x,j;
        for(j=0;j<i;j++)
        for(x=0;x<=148;x++);       
}

void Time0(void)
{
        TMOD |=0x01;                  //定時器設(shè)置 1ms in 12M crystal
        TH0=(65536-1000)/256;
        TL0=(65536-1000)%256; //定時1mS
        IE= 0x82;                            //打開中斷
        TR0=1;                                  //定時器打開
}
main()
{
        uchar PWM_Num;        //定義檔位
        Time0();
        CYCLE = 10;                //時間可以調(diào)整 這個是10步調(diào)整 周期10ms 8位PWM就是256步
        PWM = 0;
        while(1)
        {
                if(!KEY1)
                  {
                           Delay(15);
                           if(!KEY1)
                     {
                              PWM_Num++;              //按一下P3.2口,就給直流電機換一個檔位
                                  if(PWM_Num==4)
                                {
                                        PWM_Num=0;
                        }
                                switch(PWM_Num)
                                {
                                case 00=0x06;                PWM_ON=0;break;                        //低電平時長     //給P0口賦值,是讓P0口顯示:1,2,3,4 這四個檔位
                                       case 10=0x5B;                PWM_ON=2;break;
                                       case 20=0x4F;                PWM_ON=4;break;
                                       case 30=0x66;                PWM_ON=6;break;
                                 default:break;
                             }
                          }
                }
        }
}
/********************************/
/*      定時中斷                */
/********************************/
void tim(void) interrupt 1 using 1
{
        static unsigned char count;
        TH0=(65536-1000)/256;
        TL0=(65536-1000)%256;//定時1mS
        if(count==PWM_ON)
        {
                PWM = 1;                 //直流電機轉(zhuǎn)
        }
        count++;
        if(count == CYCLE)
        {
                count=0;
                if(PWM_ON!=0)   //如果左右時間是0 保持原來狀態(tài)
                {
                        PWM = 0;    //直流電機不轉(zhuǎn)
                }
        }
}


更多詳情參考附件文檔

游客,如果您要查看本帖隱藏內(nèi)容請回復(fù)

回復(fù)

使用道具 舉報

發(fā)表回復(fù)

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

本版積分規(guī)則

關(guān)閉

站長推薦上一條 /1 下一條


聯(lián)系客服 關(guān)注微信 下載APP 返回頂部 返回列表