久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5210|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

自動門控制程序共享

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:159277 發(fā)表于 2017-1-3 21:09 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
#include <reg52.h>
#define  uchar unsigned char
#define  uint unsigned int

#define TIME_COUNT 11//22.1184MHz晶振10us定時中斷
#define FOSC 11059200L//22118400L

sfr P2M1=0x95;
sfr P2M0=0x96;

sbit sb=P3^2;//開門信號
sbit sq1=P3^3;//開門限位
sbit sq2=P3^4;//關(guān)門限位
sbit s4=P3^5;//關(guān)門防夾

sbit x0=P1^0; //延時關(guān)門時間選擇
sbit x1=P1^1;
sbit x2=P1^2;
sbit x3=P1^3;
sbit x4=P1^4;
sbit x5=P1^5;
sbit x6=P1^6;
sbit x7=P1^7;//延時關(guān)門時間選擇

sbit kai=P2^1;//開門(正轉(zhuǎn))
sbit guan=P2^0;//關(guān)門(反轉(zhuǎn))

uchar aa[3],bb; //串口收到數(shù)據(jù)寄存器
uchar z0,z1,z2,z3,z4,z5,z6,z7,z8,z9,z10; //時間繼電器
uint t0,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10;        //時間繼電器
uint num1,n,n1,n2,n3,n4,n5,n6,n7,n8;//延時關(guān)門設(shè)置
uchar a=0,m;//門當(dāng)前狀態(tài)

void delayms(uint xms);
void kaimen();
void guanmen();

void delayms(uint xms)            //延時函數(shù)
{
   uint i,j;
   for(i=xms;i>0;i--)
       for(j=330;j>0;j--);
}
void init()
{

        P2=0; P2M0=0xff;P2M1=0;       
        TMOD=0x01;
        TH0=(65536-45872)/256;
        TL0=(65536-45872)%256;                                                                                                                                          
        EA=1;ET0=1;TR0=1;
        if(x0==0){delayms(5);if(x0==0)n1=20;}        if(x0==1){delayms(5);if(x0==1)n1=0;}
        if(x1==0){delayms(5);if(x1==0)n2=40;}        if(x1==1){delayms(5);if(x1==1)n2=0;}
        if(x2==0){delayms(5);if(x2==0)n3=60;}        if(x2==1){delayms(5);if(x2==1)n3=0;}
        if(x3==0){delayms(5);if(x3==0)n4=100;}        if(x3==1){delayms(5);if(x3==1)n4=0;}
        if(x4==0){delayms(5);if(x4==0)n5=160;}        if(x4==1){delayms(5);if(x4==1)n5=0;}
        if(x5==0){delayms(5);if(x5==0)n6=200;}if(x5==1){delayms(5);if(x5==1)n6=0;}
        if(x6==0){delayms(5);if(x6==0)n7=300;}if(x6==1){delayms(5);if(x6==1)n7=0;}
        if(x7==0){delayms(5);if(x7==0)n8=400;}if(x7==1){delayms(5);if(x7==1)n8=0;}
        n=n1+n2+n3+n4+n5+n6+n7+n8+1;
//        while(!sb||!s4);guanmen();
}


void USART_Init(uint BAUD)//初始化串行口和波特率發(fā)生器
{                    
        SCON =0x50;           //選擇串口工作方式1,打開接收允許
        TMOD=0x21;           //定時器1工作在方式2,定時器0工作在方式1
    TH1 =TL1 = (256 - (FOSC/12/32/BAUD));   //設(shè)置波特率重裝值
        TR1 =1;               //啟動定時器T1
        ES=1;                 //允許串行口中斷
        EA=1;
}
void kaimen()                                                //開門函數(shù)
{
        t0=0;  //計時器清零
        z0=1;        //打開計時器
        kai=1;        //開門
        while(1)
        {
                if(a==3&&z4==0){SBUF=0x3b;while(!TI);SBUF=P0;while(!TI);SBUF=0xe7;while(!TI);a=3;z4=1;}        //正在開門信號發(fā)出
                if(sq1==0){delayms(5);if(sq1==0){kai=z0=t0=0;m=1;break;}}         //開門到位
                if(t0>=300)     //計時保護(hù)30秒
                {
                        kai=0;guan=0;while(!sq2);while(1)
                        {
                                if(sq1==0||sq2==0||t0>3000){delayms(5);if(sq1==0||sq2==0||t0>3000){z0=t0=0;break;}}
                        }break;
                }
        }
        z2=1;
        while(!sb||z2||!s4)
                {
                        if(a==3&&z3==0){SBUF=0x72;while(!TI);SBUF=P0;while(!TI);SBUF=0x69;while(!TI);z3=1;}           //開門完成信號發(fā)出
                        if(a==1){SBUF=0x72;while(!TI);SBUF=P0;while(!TI);SBUF=0x69;while(!TI);a=0;}        //門開到位信號發(fā)出
                        if(a==2){z3=t3=0;}         //AGV收到開門完成信號
                        if(t3>50)t3=z3=0;//AGV沒有收到開門完成信號 重復(fù)發(fā)送開門信號
                        if(t2>=n)z2=t2=0;//延時關(guān)門       
                }
        if(a==4){SBUF=0x75;while(!TI);SBUF=P0;while(!TI);SBUF=0x36;while(!TI);a=0;}//收到關(guān)門信號發(fā)出
        m=a=0;
        guanmen();
}
void guanmen()                                                //關(guān)門函數(shù)
{
        t0=0;z0=1;guan=1;
        while(1)
        {
                if(a==4){SBUF=0x75;while(!TI);SBUF=P0;while(!TI);SBUF=0x36;while(!TI);a=0;}//收到關(guān)門信號發(fā)出
                if(sq2==0){delayms(5);if(sq2==0){guan=t0=z0=0;break;}}        //關(guān)門到位
                if(t0==300)     //計時保護(hù)
                {
                        kai=0;guan=0;while(!sq1);while(1)
                        {
                                if(t0>=3000){num1++;if(num1==4){while(sq2);num1=0;}t0=z0=0;break;}
                                if(sq1==0||sq2==0){delayms(5);if(sq1==0||sq2==0){t0=z0=0;break;}}
                        }break;
                }
                if(sb==0||s4==0){delayms(5);if(sb==0||s4==0){guan=0;delayms(2000);kaimen();}}//開門信號
        }
}                                                               
void main()
{
        init();
        USART_Init(9600);
        while(1)
        {       
                if(sb==0){delayms(5);if(sb==0)kaimen();}//感應(yīng)有人
                if(sq2==1){delayms(5);if(sq2==1)guanmen(); }//沒關(guān)好門
                if(a==4){SBUF=0x75;while(!TI);SBUF=P0;while(!TI);SBUF=0x36;while(!TI);a=0;}//收到關(guān)門信號發(fā)出       
        }         
}

void T0_time() interrupt 1
{
        TH0=(65536-45872)/256;                   //
        TL0=(65536-45872)%256;
        if(z0==1) t0++;   //時間繼電器0        開關(guān)門卡死保護(hù)          
        if(z1==1) t1++;   //時間繼電器1  收信號間隔清零時間          
        if(z2==1) t2++;   //時間繼電器2        延時關(guān)門          
        if(z3==1) t3++;   //時間繼電器3  發(fā)出信號沒回應(yīng)延時再次發(fā)送            
        if(z4==1) t4++;   //時間繼電器4              
        if(z5==1) t5++;   //時間繼電器5              
        if(z6==1) t6++;   //時間繼電器6           
        if(z7==1) t7++;   //時間繼電器7           
        if(z8==1) t8++;   //時間繼電器8               
        if(z9==1) t9++;   //時間繼電器9               
        if(z10==1) t10++; //時間繼電器10
       
        if(t1>=2)z1=t1=bb=0;//間隔超時清零
//        if(t10==0)guan=0;if(t10==5)guan=1;if(t10>10)t10=guan=0;       
}

void USART(void) interrupt 4
{

        if(RI)
        {       
                aa[bb]=SBUF;
                RI=0;
                bb++;
                z1=1;
                t1=0;
                if(bb>=3)
                {
                        bb=z1=t1=0;
                        if(aa[0]==0x1e&&aa[1]==P0&&aa[2]==0x37)        //開門信號
                        {
                                sb=0;
                                if(m==0){z4=0;a=3;}        //正在開門信號發(fā)出
                                if(m==1){a=1;}        //門開到位信號發(fā)出
                        }
                        if(aa[0]==0x37&&aa[1]==P0&&aa[2]==0x6e)          //AGV收到開門信號
                        {
                                sb=0;a=2;
                        }
                        if(aa[0]==0x69&&aa[1]==P0&&aa[2]==0x17)         //關(guān)門信號
                        {
                           a=4;//關(guān)門信號發(fā)出
                           sb=1;
                        }
                }       
        }
        if(TI)
                TI=0;
}

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产中文原创 | 成人夜晚看av | 久久www免费人成看片高清 | 国产精品成人一区 | www.youjizz.com日韩| 最新日韩在线视频 | 91大片| 亚洲伊人精品酒店 | av一区二区三区四区 | 四季久久免费一区二区三区四区 | 国产精品亚洲精品日韩已方 | av天空| 中文字幕一区二区三区在线乱码 | a视频在线观看 | 国产高清在线观看 | 国产精品视频一 | 黄色片网站在线观看 | 免费观看av | 成人精品视频在线观看 | 日韩免费一区 | 日韩看片 | 亚洲视频一区二区 | 一区二区三区四区国产 | 黄网站涩免费蜜桃网站 | 成人a视频片观看免费 | 精品日韩 | 精精久久| 精品国产91乱码一区二区三区 | www四虎影视 | 韩日一区| 色爱综合网 | 国产精品免费在线 | 国产视频中文字幕在线观看 | 亚洲欧洲成人在线 | 欧洲成人 | 深夜爽视频 | 国产区精品 | 午夜精品久久久久久久99黑人 | 黄色在线播放视频 | 午夜二区 | 亚洲成人精选 |