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

專注電子技術學習與研究
當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

基于單片機的電梯控制程序

作者:文于鷹   來源:本站原創   點擊數:  更新時間:2013年12月05日   【字體:
#include<reg52.h> //包含頭文件,一般情況不需要改動,

                  //頭文件包含特殊功能寄存器的定義

 

sbit SCL=P2^0;

sbit SDA=P2^1;

sbit led=P2^2;

sbit led1=P1^5;

 

sbit tz=P2^3;         //停止按鈕

sbit lc1=P2^4;        //一層樓按鈕

sbit lc2=P2^5;        //二層樓按鈕

sbit lc3=P2^6;        //三層樓按鈕

sbit lc4=P2^7;        //四層樓按鈕

 

sbit mb=P0^0;         //門保險傳感器處理

 

sbit dw1=P0^1;       //一層樓到位處理

sbit dw2x=P0^2;       //一層樓到位處理

sbit dw2s=P0^3;       //一層樓到位處理

sbit dw3x=P0^4;       //一層樓到位處理

sbit dw3s=P0^5;       //一層樓到位處理

sbit dw4=P0^6;       //一層樓到位處理

 

sbit jd1=P3^5;       // 停止總電源常閉繼電器

sbit jd2=P3^6;       //上升繼電器

sbit jd3=P3^7;       //下降繼電器

 

bit fg,fg1,fg2;      //位處理

bit sb,jb;    // 上升標志位   下降標志位

 

bit dw2,dw3;    //二樓 三樓到位標志

 

bit lch12;     // 1-2樓層之間標志

bit lch23;     // 2-3樓層之間標志

bit lch34;     // 3-4樓層之間標志

 

unsigned char num,num1,num2;

 

unsigned char jylc;                // 記憶層號變量

 

void Delay(unsigned int t); //函數聲明

void Init_Timer0(void);

/*------------------------------------------------

                    主函數

------------------------------------------------*/

void main (void)

{

  char i,a;

  char lch,lch1;                  // 樓層號變量   ,lch1 用在數碼管掃描時只掃描一次

 

  SDA=0;

 

     lch=2; fg=1;

 

        Delay(60);

 

 

    if(dw1==0)

           { lch=1;fg=1;lc1=1; }

 

        if(dw2x==0||dw2s==0)

           { lch=2;fg=1;lc2=1;}

 

        if(dw3x==0||dw3s==0)

           { lch=3;fg=1;lc3=1;}

 

        if(dw4==0)

           { lch=4;fg=1;lc4=1; }

 

  Init_Timer0();        //定時器初始化

 

while (1)         //主循環

  {

 

 

        if(lc1==1&&lc2==1&&lc3==1&&lc4==1)

        a=1;

 

    if(lc1==0&&a==1&&dw1!=0)             //樓層選擇

      {  a=0;jylc=1;lc1=0; }

 

        if(lc2==0&&a==1&&dw2!=0)

      {  a=0;jylc=2;lc2=0; }

 

        if(lc3==0&&a==1&&dw3!=0)

      {  a=0;jylc=3;lc3=0; }

 

    if(lc4==0&&a==1&&dw4!=0)

      {  a=0;jylc=4;lc4=0; } 

 

    if(tz==0||mb==1)                   //停止按鈕按下

          {

              lc1=1;lc2=1;lc3=1;lc4=1;    //樓層按鈕復位

          jylc=0;                     //記憶樓層復位

         

                  if(lch12==0&&lch23==0&&lch34==0&&(sb==1||jb==1))

                 {

                            fg1=1;

 

                            if(lch==1&&sb==1)

                           lch12=1;

                        if(lch==2&&sb==1)

                            lch23=1;

                        if(lch==2&&jb==1)

                           lch12=1;

                        if(lch==3&&sb==1)

                            lch34=1;

                        if(lch==3&&jb==1)

                           lch23=1;

                        if(lch==4&&jb==1)

                           lch34=1;

                        }

 

                  jd2=1;jd3=1;      //  繼電器停止通電  電梯停止

          }

 

    if(dw1==0&&jb==1)

           { lch=1;fg=1;lc1=1; }

 

        if((dw2x==0&&jb==1)||(sb==1&&dw2s==0))

           { lch=2;fg=1;lc2=1;dw2=0; }

        else

           dw2=1;

 

        if((dw3x==0&&jb==1)||(sb==1&&dw3s==0))

           { lch=3;fg=1;lc3=1;dw3=0; }

        else

           dw3=1;

 

        if(dw4==0&&sb==1)

           { lch=4;fg=1;lc4=1; }

 

        if(dw1==0||dw2==0||dw3==0||dw4==0)

            {  fg1=0;lch12=0;lch23=0;lch34=0;  }

 

        if(jylc!=0)

          {

                if(jylc>lch && fg1==0)

                           {  jd2=0;jd3=1; sb=1;jb=0; led=0; }       //電梯上升

 

                if(jylc<lch && fg1==0)

                           {  jd3=0;jd2=1; sb=0;jb=1; led=1;}       //電梯下降

 

                        if(jylc==lch && fg1==0)

                           {  jd2=1;jd3=1; sb=0;jb=0;lc1=1;lc2=1;lc3=1;lc4=1; }        //電梯停止

 

                        if(lch12==1)

                           {

                                 if(jylc==1)

                                           {  jd3=0;jd2=1; sb=0;jb=1; led=1; }       //電梯下降

                                        if(jylc>=2)

                                           {  jd2=0;jd3=1; sb=1;jb=0; led=0; }       //電梯上升

                           }

 

                        if(lch23==1)

                           {

                                 if(jylc<=2)

                                           {  jd3=0;jd2=1; sb=0;jb=1; led=1; }       //電梯下降

                                        if(jylc>=3)

                                           {  jd2=0;jd3=1; sb=1;jb=0; led=0; }       //電梯上升

                           }

 

                        if(lch34==1) 

                           {

                                 if(jylc<=3)

                                           {  jd3=0;jd2=1; sb=0;jb=1; led=1; }       //電梯下降

                                        if(jylc>=4)

                                           {  jd2=0;jd3=1; sb=1;jb=0; led=0; }       //電梯上升

                           }

          }

 

 

 

         

    if(lch!=lch1||fg2==1)

     {

        fg2=0;

 

        switch(lch)

         {       

           case 1:

             {

                  for(i=0;i<8;i++)

                    {

                        SCL=0;

                        Delay(1);

 

                       if(i==0||i==7)

                          SDA=1;

                        else

                          SDA=0;

 

                        SCL=1;

                        Delay(1);

                    }

             }    break;

          case 2:

             {

                  for(i=0;i<8;i++)

                    {

                        SCL=0;

                        Delay(1);

 

                       if(i==2||i==7)

                          SDA=0;

                        else

                          SDA=1;

               

                        SCL=1;

                        Delay(1);

                    }

             }    break;

           case 3:

             {

                  for(i=0;i<8;i++)

                    {                   

                        SCL=0;

                        Delay(1);

 

                                           if(i==2||i==4)

                          SDA=0;

                        else

                          SDA=1;

            

                        SCL=1;

                        Delay(1);

                    }

             }    break;

         case 4:

             {

                  for(i=0;i<8;i++)

                    {

                        SCL=0;

                        Delay(1);

                

                        if(i==1||i==5||i==4)

                          SDA=0;

                        else

                          SDA=1;

 

                        SCL=1;

                        Delay(1);

                    }

             }    break;

         

                  

         }

 

        lch1=lch;

      }

    

          

     

  }

}

 

/*------------------------------------------------

 延時函數,含有輸入參數 unsigned int t,無返回值

 unsigned int 是定義無符號整形變量,其值的范圍是

 0~65535

------------------------------------------------*/

void Delay(unsigned int t)

{

 while(--t);

}

 

/*------------------------------------------------

                    定時器初始化子程序

------------------------------------------------*/

void Init_Timer0(void)

{

 TMOD |= 0x01;          //使用模式1,16位定時器,使用"|"符號可以在使用多個定時器時不受影響                    

 //TH0=0x00;              //給定初值

 //TL0=0x00;

 EA=1;            //總中斷打開

 ET0=1;           //定時器中斷打開

 TR0=1;           //定時器開關打開

}

/*------------------------------------------------

                 定時器中斷子程序

------------------------------------------------*/

void Timer0_isr(void) interrupt 1

{

 

 TH0=(65536-5000)/256;                  //重新賦值 5ms

 TL0=(65536-5000)%256;

 

 num++;

 

 if(num<20)

   {

       led1=0;

           if(jd2==1&&jd3==1&&mb==0)

               led=0;

   }

 else

   {

       led1=1; 

              if(jd2==1&&jd3==1&&mb==0)

             led=1;

   } 

 

 if(mb==1)

   {

       if(num%10==0)

             led=~led;

 

           if(num==200)

             led=1;

   }

 

 if(num==200)

   { 

       num=0;

    

       num2++;       

       if(num2==60)

         { num2=0;fg2=1; }

 

       if(tz==0)      //  長按停止鍵   關閉總電源

         num1++;

       else

         num1=0;

 

       if(num1>2)

          jd1=0;

          

   }

 

}
關閉窗口

相關文章

主站蜘蛛池模板: 久久久精品影院 | 夜夜精品浪潮av一区二区三区 | 99riav国产一区二区三区 | 天天插天天狠天天透 | 瑟瑟视频在线看 | 中文字幕精品视频 | 欧美精品在线一区 | 欧美成人激情 | 成人av播放 | 成人午夜精品 | 日韩欧美第一页 | 久久99国产精品 | 欧美在线视频网站 | 黄色在线免费观看视频 | 久久久久久久久久久久久9999 | av在线视 | 免费精品 | 欧美日韩国产免费 | 久久久久久成人网 | 99riav国产一区二区三区 | 午夜黄色 | 日日干夜夜操 | 成人精品免费视频 | 中国av在线免费观看 | 日韩一区二区三区在线视频 | 免费av手机在线观看 | 伊人最新网址 | 欧洲一区二区在线 | 一二三区在线 | 在线色网| 国产精品黄视频 | 国产yw851.c免费观看网站 | 中文字幕精品视频 | 91精品免费 | 亚洲综合天堂 | 久久久久网站 | 久久久久中文字幕 | 四虎影视免费观看 | 婷婷去俺也去 | 精品国产乱码久久久久久老虎 | 99久久精品一区二区成人 |