新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 基于51單片機太陽能電池太陽跟蹤裝置程序設計

        基于51單片機太陽能電池太陽跟蹤裝置程序設計

        作者: 時間:2016-11-23 來源:網絡 收藏
        #include
        #include
        #include
        #define uchar unsigned char
        #define uint unsigned int
        #define ysfs 600 //宏定義 預設風速
        #define shuiping 1500 //宏定義 水平位置AD轉換結果
        #define fuyang 1500 //宏定義 俯仰位置AD轉換結果
        #define PA XBYTE [0x7CFF] //8255芯片端口4個基地址宏定義
        #define PB XBYTE [0x7FFD]
        #define PC XBYTE [0x7FFE]
        #define CONTROL XBYTE [0x7FFF]
        sbit OE=P1^0; //以下為關于AD0808與單片機的八個接口定義
        sbit EOC=P1^1;
        sbit START=P1^2;
        sbit CLK=P1^3;
        sbit ALE=P1^4;
        sbit C0=P1^5;
        sbit C1=P1^6;
        sbit C2=P1^7;
        sbit gdkg=P2^3; //用于復位光電開關端口定義
        sbit clock=P2^0; //定義水平俯仰步進電機的速度端口,頻率越快,速度越快,不給頻率電機不轉
        sbit cw1=P2^1; //定義水平步進電機的轉向端口,1正轉,0反轉
        sbit enable1=P2^2; //定義水平步進電機的使能端口,1轉,0不轉
        sbit cw2=P2^4; //定義俯仰步進電機的轉向端口,1正轉,0反轉
        sbit enable2=P2^5; //定義俯仰步進電機的使能端口,1轉,0不轉
        uint ad_result_fenshu,ad_result_shuiping,ad_result_fuyang;
        void timer_init()
        {
        TMOD=0x11; //定時器模式設置
        TH0=(65536-5000)/256;
        TL0=(65536-5000)%6;
        TH1=0xFF;
        TL1=0x9C;
        ET0=1; //允許定時器0中斷
        TR0=1; //啟動定時器0
        ET1=1; //允許定時器1中斷
        TR1=1; //啟動定時器1
        EA=1; //允許總中斷
        }
        void AD_chane(int x)
        {
        if(x==0)
        {
        C0=0;
        C1=0;
        C2=0;
        }
        else if(x==1)
        {
        C0=1;
        C1=0;
        C2=0;
        }
        else if(x==2)
        {
        C0=0;
        C1=1;
        C2=0;
        }
        ALE=1;
        }
        int Get_AD_Sd()
        {
        int Sd;
        START=0;START=1;START=0;
        while(EOC==0);
        OE=1;
        Sd=P3;
        OE=0;
        return Sd;
        }
        void reset()
        {
        while(gdkg!=1)
        {
        cw2=0;
        enable2=1;
        }
        enable2=0;
        }
        void shuiping_tiaozheng(int date)
        {
        if(date>shuiping)
        {
        do
        {
        cw1=1;
        enable1=1;
        }
        while(date==shuiping);
        enable1=0;
        }
        else if(date
        {
        do
        {
        cw1=0;
        enable1=1;
        }
        while(date==shuiping);
        enable1=0;
        }
        }
        void fuyang_tiaozheng(int date)
        {
        if(date>fuyang)
        {
        do
        {
        cw2=1;
        enable2=1;
        }
        while(date==fuyang);
        enable2=0;
        }
        else if(date
        {
        do
        {
        cw2=0;
        enable2=1;
        }
        while(date==fuyang);
        enable2=0;
        }
        }
        void main()
        {
        CONTROL = 0x80;
        ALE=0;
        timer_init();
        enable1=0;
        enable2=0;
        while(1) //進入循環
        {
        AD_chane(0);
        ad_result_fenshu=Get_AD_Sd();
        ALE=0;
        AD_chane(1);
        ad_result_shuiping=Get_AD_Sd();
        ALE=0;
        AD_chane(2);
        ad_result_fuyang=Get_AD_Sd();
        ALE=0;
        if(ad_result_fenshu>ysfs) //如果風速大于預設風速,則復位
        {
        reset();
        }
        shuiping_tiaozheng(ad_result_shuiping);
        fuyang_tiaozheng(ad_result_fuyang);
        }
        }
        void timer0() interrupt 1
        {
        TH0=(65536-5000)/256;
        TL0=(65536-5000)%6;
        CLK=~CLK;
        }
        void timer1() interrupt 3
        {
        static uchar i=0;
        TH1=0xFF;
        TL1=0x9C;
        ++i;
        if (i>10) i=0;
        if (i<=6)
        clock=0;
        else
        clock=1;
        }


        評論


        技術專區

        關閉
        主站蜘蛛池模板: 大姚县| 张家川| 郯城县| 庆安县| 方正县| 札达县| 洛阳市| 贡觉县| 宁城县| 寿宁县| 玛曲县| 霸州市| 上杭县| 威海市| 普定县| 墨竹工卡县| 大埔县| 习水县| 隆回县| 浠水县| 阜南县| 调兵山市| 潜山县| 怀仁县| 山阴县| 越西县| 浮梁县| 林口县| 乐陵市| 古交市| 民丰县| 象州县| 焉耆| 蛟河市| 墨玉县| 鸡泽县| 岳阳市| 库尔勒市| 丰镇市| 新乡市| 汤阴县|