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

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

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

單片機(jī)C語(yǔ)言實(shí)例-185-直流電機(jī)調(diào)速

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

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

/********************************************************************
* 名稱 : Delay_1ms()
* 功能 : 延時(shí)子程序,延時(shí)時(shí)間為 1ms * x
* 輸入 : x (延時(shí)一毫秒的個(gè)數(shù))
* 輸出 : 無(wú)
***********************************************************************/
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í)器設(shè)置 1ms in 12M crystal
        TH0=(65536-1000)/256;
        TL0=(65536-1000)%256; //定時(shí)1mS
        IE= 0x82;                            //打開(kāi)中斷
        TR0=1;                                  //定時(shí)器打開(kāi)
}
main()
{
        uchar PWM_Num;        //定義檔位
        Time0();
        CYCLE = 10;                //時(shí)間可以調(diào)整 這個(gè)是10步調(diào)整 周期10ms 8位PWM就是256步
        PWM = 0;
        while(1)
        {
                if(!KEY1)
                  {
                           Delay(15);
                           if(!KEY1)
                     {
                              PWM_Num++;              //按一下P3.2口,就給直流電機(jī)換一個(gè)檔位
                                  if(PWM_Num==4)
                                {
                                        PWM_Num=0;
                        }
                                switch(PWM_Num)
                                {
                                case 00=0x06;                PWM_ON=0;break;                        //低電平時(shí)長(zhǎng)     //給P0口賦值,是讓P0口顯示:1,2,3,4 這四個(gè)檔位
                                       case 10=0x5B;                PWM_ON=2;break;
                                       case 20=0x4F;                PWM_ON=4;break;
                                       case 30=0x66;                PWM_ON=6;break;
                                 default:break;
                             }
                          }
                }
        }
}
/********************************/
/*      定時(shí)中斷                */
/********************************/
void tim(void) interrupt 1 using 1
{
        static unsigned char count;
        TH0=(65536-1000)/256;
        TL0=(65536-1000)%256;//定時(shí)1mS
        if(count==PWM_ON)
        {
                PWM = 1;                 //直流電機(jī)轉(zhuǎn)
        }
        count++;
        if(count == CYCLE)
        {
                count=0;
                if(PWM_ON!=0)   //如果左右時(shí)間是0 保持原來(lái)狀態(tài)
                {
                        PWM = 0;    //直流電機(jī)不轉(zhuǎn)
                }
        }
}


更多詳情參考附件文檔

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

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

本版積分規(guī)則

關(guān)閉

站長(zhǎng)推薦上一條 /1 下一條


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