欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 485|回復: 0
收起左側

單片機八層電梯控制系統代碼

[復制鏈接]
ID:1137639 發表于 2026-2-11 17:03 | 顯示全部樓層 |閱讀模式
  • #include <reg52.h>                 //調用單片機頭文件
  • #define uchar unsigned char  //無符號字符型 宏定義        變量范圍0~255
  • #define uint  unsigned int         //無符號整型 宏定義        變量范圍0~65535
  • //數碼管段選定義       0    1    2    3   4           5        6         7          8           9
  • uchar code smg_du[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0xdf,0xdb
  • //                                           A        B         C          D           E   F        不顯示
  •                                          };         //斷碼
  • uchar dis_smg[8] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8};
  • bit flag_100ms,flag_1s;
  • bit flag_stop = 1;   //用做到了相應的樓停下
  • sbit beep  = P2^6;
  • sbit xia   = P2^0;
  • sbit zhong = P2^1;
  • sbit shang = P2^2;
  • uchar value2;
  • sbit led1 = P1^7;          //8個發光二極管定義
  • sbit led2 = P1^6;
  • sbit led3 = P1^5;
  • sbit led4 = P1^4;
  • sbit led5 = P1^3;
  • sbit led6 = P1^2;
  • sbit led7 = P1^1;
  • sbit led8 = P1^0;
  • uchar dt_1;  //1樓電梯標志位
  • uchar dt_2;  //2樓電梯標志位
  • uchar dt_3;  //3樓電梯標志位
  • uchar dt_4;  //4樓電梯標志位
  • uchar dt_5;  //5樓電梯標志位
  • uchar dt_6;  //6樓電梯標志位
  • uchar dt_7;  //7樓電梯標志位
  • uchar dt_8;  //8樓電梯標志位
  • uchar dt_value = 1;  //電梯到哪一層的變量
  • uchar dt_s_x ;    //電梯上下的標志位
  • /***********************1ms延時函數*****************************/
  • void delay_1ms(uint q)
  • {
  •         uint i,j;
  •         for(i=0;i<q;i++)
  •                 for(j=0;j<120;j++);
  • }
  • /********************獨立按鍵程序*****************/
  • uchar key_can;         //按鍵值
  • void key()         //獨立按鍵程序
  • {
  •         static uchar key_new;
  •         key_can = 20;                   //按鍵值還原
  •         P3 |= 0xff;
  •         if(P3 != 0xff)                //按鍵按下
  •         {
  •                 delay_1ms(1);                     //按鍵消抖動
  •                 if((P3 != 0xff) && (key_new == 1))
  •                 {                                                //確認是按鍵按下
  •                         key_new = 0;
  •                         switch(P3)
  •                         {
  •                                 case 0xfe: key_can = 1; break;          //得到按鍵值
  •                                 case 0xfd: key_can = 2; break;          //得到按鍵值
  •                                 case 0xfb: key_can = 3; break;          //得到按鍵值
  •                                 case 0xf7: key_can = 4; break;          //得到按鍵值
  •                                 case 0xef: key_can = 5; break;          //得到按鍵值
  •                                 case 0xdf: key_can = 6; break;          //得到按鍵值
  •                                 case 0xbf: key_can = 7; break;          //得到按鍵值
  •                                 case 0x7f: key_can = 8; break;          //得到按鍵值
  •                         }
  •                 }
  •         }
  •         else
  •                 key_new = 1;
  • }
  • void key_with()
  • {
  •         if(key_can == 1)
  •         {
  •                 led1 = 1;         //點亮發光二極管
  •                 dt_1 = 1;         //
  •         }
  •         if(key_can == 2)
  •         {
  •                 led2 = 1;         //點亮發光二極管
  •                 dt_2 = 1;
  •         }
  •         if(key_can == 3)
  •         {
  •                 led3 = 1;        //點亮發光二極管
  •                 dt_3 = 1;
  •         }
  •         if(key_can == 4)
  •         {
  •                 led4 = 1;        //點亮發光二極管
  •                 dt_4 = 1;
  •         }
  •         if(key_can == 5)
  •         {
  •                 led5 = 1;        //點亮發光二極管
  •                 dt_5 = 1;
  •         }
  •         if(key_can == 6)
  •         {
  •                 led6 = 1;        //點亮發光二極管
  •                 dt_6 = 1;
  •         }
  •         if(key_can == 7)
  •         {
  •                 led7 = 1;
  •                 dt_7 = 1;
  •         }
  •         if(key_can == 8)
  •         {
  •                 led8 = 1;
  •                 dt_8 = 1;
  •         }
  • }
  • /*********************當電梯不動時、判斷是向上、還是向下**********************/
  • void tiandi_shang_xia()
  • {
  •         static uchar value;
  •         if(dt_s_x == 0)
  •         {
  •                 flag_stop = 1;
  •                 if(dt_value == 1)         //電梯在第1層停下不走了
  •                 {
  •                         value = dt_2 + dt_3 + dt_4 + dt_5 + dt_6 + dt_7 + dt_8;
  •                         if(value != 0)
  •                         {
  •                                 dt_s_x = 1;   //電梯向上
  •                                 shang = 0;          //顯示上
  •                                 zhong = 0;
  •                                 xia = 1;
  •                         }
  •                 }
  •                 if(dt_value == 2)         //電梯在第2層停下不走了
  •                 {
  •                         value = dt_3 + dt_4 + dt_5 + dt_6 + dt_7 + dt_8;
  •                         if(value != 0)
  •                         {
  •                                 dt_s_x = 1;   //電梯向上走
  •                                 shang = 0;          //顯示上
  •                                 zhong = 0;
  •                                 xia = 1;
  •                         }
  •                         value = dt_1;
  •                         if(value != 0)
  •                         {
  •                                 dt_s_x = 2;   //電梯向下走
  •                                 xia = 0;          //顯示下
  •                                 zhong = 0;
  •                                 shang = 1;
  •                         }
  •                 }
  •                 if(dt_value == 3)         //電梯在第3層停下不走了
  •                 {
  •                         value = dt_4 + dt_5 + dt_6 + dt_7 + dt_8;
  •                         if(value != 0)
  •                         {
  •                                 dt_s_x = 1;   //電梯向上走
  •                                 shang = 0;          //顯示上
  •                                 zhong = 0;
  •                                 xia = 1;
  •                         }
  •                         value = dt_1 + dt_2;
  •                         if(value != 0)
  •                         {
  •                                 dt_s_x = 2;   //電梯向下走
  •                                 xia = 0;          //顯示下
  •                                 zhong = 0;
  •                                 shang = 1;
  •                         }
  •                 }
  •                 if(dt_value == 4)         //電梯在第4層停下不走了
  •                 {
  •                         value = + dt_5 + dt_6 + dt_7 + dt_8;
  •                         if(value != 0)
  •                         {
  •                                 dt_s_x = 1;   //電梯向上走
  •                                 shang = 0;          //顯示上
  •                                 zhong = 0;
  •                                 xia = 1;
  •                         }
  •                         value = dt_1 + dt_2 + dt_3;
  •                         if(value != 0)
  •                         {
  •                                 dt_s_x = 2;   //電梯向下走
  •                                 xia = 0;          //顯示下
  •                                 zhong = 0;
  •                                 shang = 1;
  •                         }
  •                 }
  •                 if(dt_value == 5)         //電梯在第5層停下不走了
  •                 {
  •                         value = dt_6 + dt_7 + dt_8;
  •                         if(value != 0)
  •                         {
  •                                 dt_s_x = 1;   //電梯向上走
  •                                 shang = 0;          //顯示上
  •                                 zhong = 0;
  •                                 xia = 1;
  •                         }
  •                         value = dt_1 + dt_2 + dt_3 + dt_4;
  •                         if(value != 0)
  •                         {
  •                                 dt_s_x = 2;   //電梯向下走
  •                                 xia = 0;          //顯示下
  •                                 zhong = 0;
  •                                 shang = 1;
  •                         }
  •                 }
  •                 if(dt_value == 6)         //電梯在第6層停下不走了
  •                 {
  •                         value =  dt_7 + dt_8;
  •                         if(value != 0)
  •                         {
  •                                 dt_s_x = 1;   //電梯向上走
  •                                 shang = 0;          //顯示上
  •                                 zhong = 0;
  •                                 xia = 1;
  •                         }
  •                         value = dt_1 + dt_2 + dt_3 + dt_4 + dt_5;
  •                         if(value != 0)
  •                         {
  •                                 dt_s_x = 2;   //電梯向下走
  •                                 xia = 0;          //顯示下
  •                                 zhong = 0;
  •                                 shang = 1;
  •                         }
  •                 }
  •                 if(dt_value == 7)         //電梯在第7層停下不走了
  •                 {
  •                         value = dt_8;
  •                         if(value != 0)
  •                         {
  •                                 dt_s_x = 1;   //電梯向上走
  •                                 shang = 0;          //顯示上
  •                                 zhong = 0;
  •                                 xia = 1;
  •                         }
  •                         value = dt_1 + dt_2 + dt_3 + dt_4 + dt_5 + dt_6;
  •                         if(value != 0)
  •                         {
  •                                 dt_s_x = 2;   //電梯向下走
  •                                 xia = 0;          //顯示下
  •                                 zhong = 0;
  •                                 shang = 1;
  •                         }
  •                 }
  •                 if(dt_value == 8)          //電梯在第8層停下不走了
  •                 {
  •                         value = dt_8;
  •                         if(value != 0)
  •                         {
  •                                 dt_s_x = 1;   //電梯向上走
  •                                 shang = 0;          //顯示上
  •                                 zhong = 0;
  •                                 xia = 1;
  •                         }
  •                         value = dt_1 + dt_2 + dt_3 + dt_4 + dt_5 + dt_6;
  •                         if(value != 0)
  •                         {
  •                                 dt_s_x = 2;   //電梯向下走
  •                                 xia = 0;          //顯示下
  •                                 zhong = 0;
  •                                 shang = 1;
  •                         }
  •                 }
  •         }
  • }
  • /****************電梯向上、做最后的判斷是否還要繼續向上****************/
  • void dt_shang_guan()
  • {
  •         uchar value;
  •         if(dt_s_x == 1)    //電梯向上  做最后的判斷是否還要繼續向上
  •         {
  •                 if(dt_value == 1)        //在第1層
  •                 {
  •                         value = dt_2 + dt_3 + dt_4 + dt_5 + dt_6 + dt_7 + dt_8;
  •                         if(value == 0)         //說明上面沒有人按下
  •                         {
  •                                 dt_s_x = 0;  //電梯停下不動了
  •                                 shang = 1;                //關閉上字
  •                                 zhong = 1;
  •                         }else
  •                                 flag_stop = 1;
  •                 }
  •                 else if(dt_value == 2)        //在第2層
  •                 {
  •                         value = dt_3 + dt_4 + dt_5 + dt_6 + dt_7 + dt_8;
  •                         if(value == 0)         //說明上面沒有人按下
  •                         {
  •                                 dt_s_x = 0;  //電梯停下不動了
  •                                 shang = 1;                //關閉上字
  •                                 zhong = 1;
  •                         }else
  •                                 flag_stop = 1;
  •                 }
  •                 else if(dt_value == 3)        //在第3層
  •                 {
  •                         value = + dt_6 + dt_7 + dt_8;
  •                         if(value == 0)         //說明上面沒有人按下
  •                         {
  •                                 dt_s_x = 0;  //電梯停下不動了
  •                                 shang = 1;                //關閉上字
  •                                 zhong = 1;
  •                         }else
  •                                 flag_stop = 1;
  •                 }
  •                 else if(dt_value == 4)        //在第4層
  •                 {
  •                         value = dt_5 + dt_6 + dt_7 + dt_8;
  •                         if(value == 0)         //說明上面沒有人按下
  •                         {
  •                                 dt_s_x = 0;  //電梯停下不動了
  •                                 shang = 1;                //關閉上字
  •                                 zhong = 1;
  •                         }else
  •                                 flag_stop = 1;
  •                 }
  •                 else if(dt_value == 5)        //在第5層
  •                 {
  •                         value = dt_6 + dt_7 + dt_8;
  •                         if(value == 0)         //說明上面沒有人按下
  •                         {
  •                                 dt_s_x = 0;  //電梯停下不動了
  •                                 shang = 1;                //關閉上字
  •                                 zhong = 1;
  •                         }else
  •                                 flag_stop = 1;
  •                 }
  •                 else if(dt_value == 6)        //在第6層
  •                 {
  •                         value = dt_7 + dt_8;
  •                         if(value == 0)         //說明上面沒有人按下
  •             {
  •                                 dt_s_x = 0;  //電梯停下不動了
  •                                 shang = 1;                //關閉上字
  •                                 zhong = 1;
  •                         }else
  •                                 flag_stop = 1;
  •                 }
  •                 else if(dt_value == 7)        //在第7層
  •                 {
  •                         value = dt_8;
  •                         if(value == 0)         //說明上面沒有人按下
  •                         {
  •                                 dt_s_x = 0;  //電梯停下不動了
  •                                 shang = 1;                //關閉上字
  •                                 zhong = 1;
  •                         }else
  •                                 flag_stop = 1;
  •                 }
  •                 else if(dt_value == 8)        //在第8層
  •                 {
  •                         dt_s_x = 0;  //電梯停下不動了
  •                         shang = 1;                //關閉上字
  •                         zhong = 1;
  •                 }
  •         }
  • }
  • /****************電梯向下、做最后的判斷是否還要繼續向下****************/
  • void dt_xia_guan()
  • {
  •         uchar value;
  •         if(dt_s_x == 2)    //電梯向下  做最后的判斷是否還要繼續向下
  •         {
  •                 if(dt_value == 1)        //在第1層
  •                 {
  •                         dt_s_x = 0;  //電梯停下不動了
  •                         xia = 1;                //關閉上字
  •                         zhong = 1;
  •                         flag_stop = 1;
  •                 }
  •                 else if(dt_value == 2)        //在第2層
  •                 {
  •                         value = dt_1;
  •                         if(value == 0)         //說明上面沒有人按下
  •                         {
  •                                 dt_s_x = 0;  //電梯停下不動了
  •                                 xia = 1;                //關閉上字
  •                                 zhong = 1;
  •                         }else
  •                                 flag_stop = 1;
  •                 }
  •                 else if(dt_value == 3)        //在第3層
  •                 {
  •                         value = dt_1 + dt_2;
  •                         if(value == 0)         //說明上面沒有人按下
  •                         {
  •                                 dt_s_x = 0;  //電梯停下不動了
  •                                 xia = 1;                //關閉上字
  •                                 zhong = 1;
  •                         }else
  •                                 flag_stop = 1;
  •                 }
  •                 else if(dt_value == 4)        //在第4層
  •                 {
  •                         value = dt_2 + dt_3;
  •                         if(value == 0)         //說明上面沒有人按下
  •                         {
  •                                 dt_s_x = 0;  //電梯停下不動了
  •                                 xia = 1;                //關閉上字
  •                                 zhong = 1;
  •                         }else
  •                                 flag_stop = 1;
  •                 }
  •                 else if(dt_value == 5)        //在第5層
  •                 {
  •                         value = dt_1 + dt_2 + dt_4;
  •                         if(value == 0)         //說明上面沒有人按下
  •                         {
  •                                 dt_s_x = 0;  //電梯停下不動了
  •                                 xia = 1;                //關閉上字
  •                                 zhong = 1;
  •                         }else
  •                                 flag_stop = 1;
  •                 }
  •                 else if(dt_value == 6)        //在第6層
  •                 {
  •                         value = dt_1 + dt_2 + dt_3 + dt_4 + dt_5;
  •                         if(value == 0)         //說明上面沒有人按下
  •             {
  •                                 dt_s_x = 0;  //電梯停下不動了
  •                                 xia = 1;                //關閉上字
  •                                 zhong = 1;
  •                         }else
  •                                 flag_stop = 1;
  •                 }
  •                 else if(dt_value == 7)        //在第7層
  •                 {
  •                         value = dt_1 + dt_2  + dt_4 + dt_5+ dt_6;
  •                         if(value == 0)         //說明上面沒有人按下
  •                         {
  •                                 dt_s_x = 0;  //電梯停下不動了
  •                                 xia = 1;                //關閉上字
  •                                 zhong = 1;
  •                         }else
  •                                 flag_stop = 1;
  •                 }
  •                 else if(dt_value == 8)        //在第8層
  •                 {
  •                         value =   dt_3 + dt_4 + dt_5 + dt_6 + dt_7;
  •                         if(value == 0)         //說明上面沒有人按下
  •                         {
  •                                 dt_s_x = 0;  //電梯停下不動了
  •                                 xia = 1;                //關閉上字
  •                                 zhong = 1;
  •                         }else
  •                                 flag_stop = 1;
  •                 }
  •         }
  • }
  • /***********************電梯處理函數************************/
  • void td_dis()
  • {
  •         uchar value,value1;
  •         value = dt_1 + dt_2 + dt_3 + dt_4 + dt_5 + dt_6 + dt_7 + dt_8;
  •         if(value != 0)
  •         {                   //100ms
  •                 if(flag_stop == 1)        //到相應的樓了  要停下
  •                 {
  • /***************************向上走電梯***********************************/
  •                         if(dt_s_x != 0)                  //向上走電梯
  •                         {
  •                                 value1 ++;
  •                                 if(value1 >= 10)  //1s
  •                                 {
  •                                         value1 = 0;
  •                                         if(dt_s_x == 1)                  //向上走電梯
  •                                         {
  •                                                 dt_value ++;
  •                                                 shang = 0;                //顯示上字
  •                                                 zhong = 0;
  •                                         }
  •                                         if(dt_s_x == 2)                  //向下走電梯
  •                                         {
  •                                                 dt_value --;
  •                                                 xia = 0;                //顯示下字
  •                                                 zhong = 0;
  •                                         }
  •                                         if(dt_value == 1)           //當到了第一層的時候
  •                                         {
  •                                                 if(dt_1 == 1)
  •                                                 {
  •                                                         led1 = 0;                 //關閉第一層發光二極管
  •                                                         dt_1 = 0;        //清零電機在的標志
  •                                                         flag_stop = 0;   //到停下
  •                                                         beep = 0;        //打開蜂鳴器
  •                                                 }
  •                                         }
  •                                         else if(dt_value == 2)           //當到了第二層的時候
  •                                         {
  •                                                 if(dt_2 == 1)
  •                                                 {
  •                                                         led2 = 0;                 //關閉第二層發光二極管
  •                                                         dt_2 = 0;        //清零電機在的標志
  •                                                         flag_stop = 0;   //到停下
  •                                                         beep = 0;        //打開蜂鳴器
  •                                                 }
  •                                         }
  •                                         else if(dt_value == 3)           //當到了第3層的時候
  •                                         {
  •                                                 if(dt_3 == 1)
  •                                                 {
  •                                                         led3 = 0;                 //關閉第3層發光二極管
  •                                                         dt_3 = 0;        //清零電機在的標志
  •                                                         flag_stop = 0;   //到停下
  •                                                         beep = 0;        //打開蜂鳴器
  •                                                 }
  •                                         }
  •                                         else if(dt_value == 4)           //當到了第4層的時候
  •                                         {
  •                                                 if(dt_4 == 1)
  •                                                 {
  •                                                         led4 = 0;                 //關閉第4層發光二極管
  •                                                         dt_4 = 0;        //清零電機在的標志
  •                                                         flag_stop = 0;   //到停下
  •                                                         beep = 0;        //打開蜂鳴器
  •                                                 }
  •                                         }
  •                                         else if(dt_value == 5)           //當到了第5層的時候
  •                                         {
  •                                                 if(dt_5 == 1)
  •                                                 {
  •                                                         led5 = 0;                 //關閉第5層發光二極管
  •                                                         dt_5 = 0;        //清零電機在的標志
  •                                                         flag_stop = 0;   //到停下
  •                                                         beep = 0;        //打開蜂鳴器
  •                                                 }
  •                                         }
  •                                         else if(dt_value == 6)           //當到了第6層的時候
  •                                         {
  •                                                 if(dt_6 == 1)
  •                                                 {
  •                                                         led6 = 0;                 //關閉第6層發光二極管
  •                                                         dt_6 = 0;        //清零電機在的標志
  •                                                         flag_stop = 0;   //到停下
  •                                                         beep = 0;        //打開蜂鳴器
  •                                                 }
  •                                         }
  •                                         else if(dt_value == 7)           //當到了第7層的時候
  •                                         {
  •                                                 if(dt_7 == 1)
  •                                                 {
  •                                                         led7 = 0;                 //關閉第7層發光二極管
  •                                                         dt_7 = 0;        //清零電機在的標志
  •                                                         flag_stop = 0;   //到停下
  •                                                         beep = 0;        //打開蜂鳴器
  •                                                 }
  •                                         }
  •                                         else if(dt_value == 8)           //當到了第8層的時候
  •                                         {
  •                                                 if(dt_8 == 1)
  •                                                 {
  •                                                         led8 = 0;                 //關閉第8層發光二極管
  •                                                         dt_8 = 0;        //清零電機在的標志
  •                                                         flag_stop = 0;   //到停下
  •                                                         beep = 0;        //打開蜂鳴器
  •                                                 }
  •                                         }
  •                                 }
  •                         }
  •                 }
  •         }
  •         if(flag_stop == 0)
  •         {
  •                 value2 ++;
  •                 if(value2 % 5 == 0)
  •                 {
  •                         if(dt_s_x == 1)           //上
  •                         {
  •                                 shang = ~shang;
  •                                 zhong = ~zhong;
  •                         }
  •                         if(dt_s_x == 2)           //下
  •                         {
  •                                 zhong = ~zhong;
  •                                 xia = ~xia;
  •                         }
  •                 }
  •                 if(value2 >= 10) //1.0s
  •                 {
  •                         beep = 1;  //關閉蜂鳴器
  •                 }
  •                 if(value2 >= 20)         //100ms*20 = 2秒
  •                 {
  •                         value2 = 0;
  •                         dt_shang_guan();  //電梯向上  做最后的判斷是否還要繼續向上
  •                         dt_xia_guan();          //電梯向下  做最后的判斷是否還要繼續向下
  •                 }
  •         }
  • }
  • /*************定時器0初始化程序***************/
  • void time_init()
  • {
  •         EA   = 1;                   //開總中斷
  •         TMOD = 0X01;          //定時器0、工作方式1
  •         ET0  = 1;                  //開定時器0中斷
  •         TR0  = 1;                  //允許定時器0定時
  • }
  • /******************主程序**********************/
  • void main()
  • {
  •         P1 = 0x00;
  •         P0 = 0X00;           //單片機IO口初始化
  •         time_init();   //定時器初始化
  •         while(1)
  •         {
  •                 key();                  //按鍵程序
  •                 if(key_can < 20)
  •                 {
  •                         if(dt_s_x == 0)
  •                         {
  •                                 value2 = 0;
  •                                 flag_stop = 1;
  •                         }
  •                         key_with();
  •                 }
  •                 tiandi_shang_xia();          //當電梯不動時、判斷是向上、還是向下
  •                 P0 = smg_du[dt_value];          //顯示
  •                 if(flag_100ms  == 1)
  •                 {
  •                         flag_100ms = 0;
  •                         td_dis();                 //電梯處理函數
  •                 }
  •         }
  • }
  • /*************定時器0中斷服務程序***************/
  • void time0_int() interrupt 1
  • {
  •         static uchar value;
  •         TH0 = 0x3c;
  •         TL0 = 0xb0;     // 50ms
  •         value ++;
  •         if(value % 2 == 0)
  •         {
  •                 flag_100ms = 1 ;
  •         }
  • }

回復

使用道具 舉報

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

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表