新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 基于C51單片機的遙控小車設計與制版

        基于C51單片機的遙控小車設計與制版

        作者: 時間:2016-11-27 來源:網絡 收藏

        六、參考文獻

        [1]閻石.數字電子技術基礎[M].北京:高等教育出版社,1998:348-352.

        [2] 徐銘澤,武明西,范展.遙控啟停電動車[Z].哈爾濱:哈爾濱工程大學.

        [3] 曹偉華. 一款遙控車的電路剖析[DB].

        [4] http://www.znczz.com/forum-40-1.html, 2013-06-22.

        [5]http://www.fxdzw.com/dzjs.asp

        [6]王良軍,呂云曾,王學剛.遙控啟停電動車[Z].哈爾濱:哈爾濱工程大學.

        [7] 孫燕,劉二明,等.Protel99 設計與實例[M].北京:機械工業出版社.

        [8] http://bbs.dianyuan.com/topic/218024, 2013-06-22.

        附錄1

        #include

        #define uchar unsigned char

        #define uint unsigned int

        sbit PW1=P1^0 ;

        sbit PW2=P1^1 ; //控制電機的兩個輸入

        sbit PW3=P1^2 ;

        sbit PW4=P1^3 ; //控制電機的兩個輸入

        sbit accelerate=P2^2 ;//調速按鍵

        sbit stop=P2^3 ; //停止按鍵

        sbit move=P2^4 ; //左轉按鍵

        sbit back=P2^5 ; //右轉按鍵

        sbit right=P2^6 ;

        sbit left=P2^7 ;

        #define end_turn PW1=1;PW2=1;PW3=1;PW4=1//停轉

        uint t0=25000,t1=25000; //初始時占空比為50%

        uint a=25000; // 設置定時器裝載初值 25ms 設定頻率為20Hz

        uchar flag=1; //此標志用于選擇不同的裝載初值

        uchar dflag; //左右轉標志

        uchar count; //用來標志速度檔位

        void delay(uchar z);

        void time_init(); //定時器的初始化

        void adjust_speed(); //通過 調整占空比來調整速度

        void main()

        {

        time_init(); //定時器的初始化

        while(1)

        {

        P2=0x00;

        keyscan();//不斷掃描鍵盤程序,以便及時作出相應的響應

        }

        }

        void timer0() interrupt 1 using 0

        {

        if(flag)

        {

        flag=0;

        end_turn;

        a=t0; //t0的大小決定著低電平延續時間

        TH0=(65536-a)/256;

        TL0=(65536-a)%6; //重裝載初值

        }

        else

        {

        flag=1; //這個標志起到交替輸出高低電平的作用

        if(dflag==0)

        {

        PW1=0;PW2=1;PW3=0;PW4=1; //前進

        }

        else if(dflag==1)

        {

        PW1=1;PW2=0;PW3=1;PW4=0 ;//后退

        }

        else if(dflag==2)

        {

        PW1=0;PW2=1;PW3=1;PW4=1;;//左轉

        }

        else if(dflag==3)

        {

        PW1=1;PW2=1;PW3=0;PW4=1;;//右轉

        }

        a=t1; //t1的大小決定著高電平延續時間

        TH0=(64536-a)/256;

        TL0=(65536-a)6; //重裝載初值

        }

        }

        void time_init()

        {

        TMOD=0x01; //工作方式寄存器 軟件起動定時器 定時器功能方式 1 定時器0

        TH0=(65536-a)/256;

        TL0=(65535-a)%6; //裝載初值

        ET0=1; //開啟定時器中斷使能

        EA=1; // 開啟總中斷

        TR0=0;

        }

        void delay(uchar z) //在12M下延時z毫秒

        {

        uint x,y;

        for(x=z;x>0;x--)

        for(y=110;y>0;y--);

        }

        void keyscan()

        {

        if(stop==1)

        {

        TR0=0; //關閉定時器0即可停止轉動

        end_turn;

        }

        if(move==1)

        {

        TR0=1;

        dflag=0; //轉向標志復位則右轉

        }

        if(back==1)

        {

        TR0=1;

        dflag=1; //轉向標志復位則右轉

        }

        if(left==1)

        {

        TR0=1;

        dflag=2; //轉向標志置位則左轉

        }

        if(right==1)

        {

        TR0=1;

        dflag=3; //轉向標志復位則右轉

        }

        if(accelerate==1)

        {

        delay(5) ; //延時消抖

        if(accelerate==0)

        {

        while(accelerate==0) ; //等待松手

        count=0;

        count++;

        if(count==1)

        {

        t0=20000;

        t1=30000; //占空比為百分之60

        }

        if(count==2)

        {

        t0=15000;

        t1=35000; //占空比為百分之70

        }

        if(count==3)

        {

        count=0;

        }

        }

        }

        }


        上一頁 1 2 下一頁

        關鍵詞: C51單片機遙控小

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 宁明县| 德化县| 峡江县| 自贡市| 建阳市| 交口县| 攀枝花市| 嘉峪关市| 比如县| 凤阳县| 冷水江市| 乌鲁木齐市| 万盛区| 新疆| 岑溪市| 务川| 盐源县| 汉源县| 永川市| 沅江市| 德庆县| 五莲县| 定襄县| 泾源县| 麟游县| 历史| 志丹县| 瑞昌市| 时尚| 全椒县| 临沧市| 嵊泗县| 稻城县| 土默特左旗| 东乌珠穆沁旗| 台东市| 沁水县| 浮梁县| 南岸区| 中江县| 镇原县|