新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 89C52和L298控制直流電機

        89C52和L298控制直流電機

        作者: 時間:2016-11-24 來源:網(wǎng)絡(luò) 收藏
        本例采用了兩種方法來輸出PWM波形,分別是軟件延時法和定時器0,電機驅(qū)動芯片是L298,它的中文資料見IC學(xué)習(xí)筆記。

        本文引用地址:http://www.104case.com/article/201611/320854.htm


        程序代碼:

        #include
        #define uchar unsigned char
        #define uint unsigned int
        sbit IN1=P2^0;
        sbit IN2=P2^1;
        sbit key1=P2^3;//電源
        sbit key2=P2^4;//急停
        sbit key3=P2^5;//正高
        sbit key4=P2^6;//正低
        sbit key5=P2^7;//反高
        sbit key6=P3^4;//反低
        sbit power=P3^6;//電源控制
        uchar choice=0;
        uchar an1=0;
        uchar count=0;

        void delay1ms(uint z)
        {
        uint x;
        uint y;
        for(x=z;x>0;x--)
        for(y=122;y>0;y--);
        }

        void PWMZ()
        {
        IN1=1;
        delay1ms(1);
        IN1=0;
        delay1ms(2);
        }

        void PWMF()
        {
        TR0=1;
        while(!TF0);
        }

        void keyscan()
        {
        if(key1==0)
        {
        delay1ms(10);
        if(key1==0)
        {
        while(!key1);
        an1++;
        if(an1==2) an1=0;
        choice=1;
        }
        }
        if(key2==0)
        {
        delay1ms(10);
        if(key2==0)
        {
        while(!key2);
        choice=2;
        }
        }
        if(key3==0)
        {
        delay1ms(10);
        if(key3==0)
        {
        while(!key3);
        choice=3;
        }
        }
        if(key4==0)
        {
        delay1ms(10);
        if(key4==0)
        {
        while(!key4);
        choice=4;
        }
        }
        if(key5==0)
        {
        delay1ms(10);
        if(key5==0)
        {
        while(!key5);
        choice=5;
        }
        }
        if(key6==0)
        {
        delay1ms(10);
        if(key6==0)
        {
        while(!key6);
        choice=6;
        }
        }
        switch(choice)
        {
        case 1:if(an1) power=1;else power=0;break;
        case 2:IN1=0;IN2=0;break;
        case 3:IN2=0;IN1=1;break;
        case 4:TR0=0;IN2=0;PWMZ();break;
        case 5:IN1=0;IN2=1;break;
        case 6:IN1=0;PWMF();break;
        }
        }

        void main()
        {
        power=0;
        TMOD=0x01;
        TH0=0xff;
        TL0=0xff;
        ET0=1;
        EA=1;
        while(1)
        {
        keyscan();
        }
        }

        void time0() interrupt 1
        {
        TR0=0;
        IN2=~IN2;
        if(IN2)//高電平脈寬
        {
        TH0=0xfc;
        TL0=0x18;
        }
        else//低電平脈寬
        {
        TH0=0xf4;
        TL0=0x48;
        }
        }



        關(guān)鍵詞: 89C52L298控制直流電

        評論


        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 西林县| 天水市| 康保县| 丹巴县| 伊宁县| 南乐县| 西宁市| 格尔木市| 克什克腾旗| 和龙市| 汉阴县| 株洲县| 普宁市| 霍林郭勒市| 从江县| 商洛市| 原平市| 竹北市| 富锦市| 永吉县| 泽州县| 元江| 昌宁县| 新田县| 德兴市| 辽阳县| 房山区| 新营市| 永福县| 墨江| 南投市| 宿州市| 定西市| 浏阳市| 融水| 荣成市| 钦州市| 东兴市| 孟村| 名山县| 息烽县|