找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7736|回复: 20
收起左侧

基于单片机模拟6层电梯控制系统的设计,包括原理图,软件程序源代码,整体文件夹

  [复制链接]
ID:283948 发表于 2018-3-7 14:59 | 显示全部楼层 |阅读模式
设计要求:电梯内外按键,按下任一按键,系统将根据当前位置响应用户要求;
               可显示电梯当前运行状态,包括楼层数的实时显示、电梯升降状态显示:
               电梯无人时,默认停在一楼;
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
360截图20180307145647145.jpg

源程序代码如下:
  1. #include<reg52.h>
  2. #define MAXFLOOR 6
  3. unsigned char code LED_CODES[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d};
  4. sbit F6D=P1^0;
  5. sbit F1U=P1^1;
  6. sbit F2D=P1^2;
  7. sbit F2U=P1^3;
  8. sbit F3D=P1^4;
  9. sbit F3U=P1^5;
  10. sbit F4D=P1^6;
  11. sbit F4U=P1^7;
  12. sbit F5D=P3^0;
  13. sbit F5U=P3^1;
  14. sbit F1=P2^0;
  15. sbit F2=P2^1;
  16. sbit F3=P2^2;
  17. sbit F4=P2^3;
  18. sbit F5=P2^4;
  19. sbit F6=P2^5;

  20. sbit ledu=P3^7;
  21. sbit ledd=P3^6;
  22. sbit ledx=P2^3;

  23. sbit a1=P2^4;
  24. sbit a2=P2^5;
  25. sbit a3=P2^6;
  26. sbit a4=P2^7;
  27. bit dir=1,stop=0;
  28. unsigned char nf=1;
  29. unsigned char cf=1;
  30. unsigned char df;
  31. unsigned char tf;
  32. unsigned char flag,count=0,i=0;
  33. unsigned int timer1=0,timer2=0;

  34. unsigned char call_floor[7]={0,0,0,0,0};
  35. unsigned char const sequencea[8]={0x2F,0x6F,0x4F,0xcF,0x8F,0x9F,0x1F,0x3F};

  36. void select_next();
  37. void step(bit dir);
  38. void delay(unsigned int z);

  39. void main(void)
  40. {P0=LED_CODES[1];
  41. TH0=0x3C;
  42. TL0=0xB0;
  43. TMOD=0x01;
  44. ET0=1;
  45. EA=1;
  46. EX0=1;
  47. IT0=1;
  48.         while(1)
  49.         { if(!flag&&!stop)
  50.                 {select_next();
  51.                  step(dir);
  52.                  }
  53.                  else if(stop)
  54.                  {timer2=0;
  55.                  TR0=1;
  56.                  while(timer2<100&&stop);
  57.                  TR0=0;
  58.                  timer2=0;
  59.                  stop=0;}
  60.         }
  61. }

  62. void select_next()
  63. {char i;
  64. if(nf==MAXFLOOR)
  65.         {
  66.         dir=0;
  67.         }
  68.         else if(nf==1)
  69.         {
  70.         dir=1;
  71.         }
  72.         if(dir==0)
  73.         {
  74.         if(call_floor[nf]==1)
  75.         {call_floor[nf]=0;
  76.         stop=1;
  77.         return;
  78.         }
  79.         for(i=nf-1;i>=1;i--)
  80.                 if(call_floor[i])
  81.                 {cf=i;return;}
  82.                 dir=1;
  83.         for(i=nf+1;i<=MAXFLOOR;i++)
  84.                 if(call_floor[i])
  85.                 {cf=i;return;}
  86.         dir=0;
  87.         cf=1;
  88. }
  89.         if(call_floor[nf]==1)
  90.         {
  91.         call_floor[nf]=0;
  92.         stop=1;
  93.         return;
  94.         }
  95.         for(i=nf+1;i<=MAXFLOOR;i++)
  96.         if(call_floor[i])
  97.                 {cf=i;return;}
  98.                 if(i==7)
  99.            {dir=0;
  100.            }
  101. }

  102. void step(bit dir)
  103. {
  104. if(cf==nf)
  105.         return;
  106. else if(!flag)
  107. {flag=1;
  108. delay(50);
  109.         if(dir==1)
  110.         {ledu=0;
  111.          ledx=0;
  112.          ledd=1;
  113.          {i=i<8?i+1:0;
  114.          switch(i)
  115.          {
  116.          case0:        a1=0;a2=1;a3=0;a4=0;break;
  117.          case1:        a1=0;a2=1;a3=1;a4=0;break;
  118.          case2:        a1=0;a2=1;a3=1;a4=0;break;
  119.          case3:        a1=0;a2=0;a3=1;a4=1;break;
  120.          case4:        a1=0;a2=0;a3=0;a4=1;break;
  121.          case5:        a1=1;a2=0;a3=0;a4=1;break;
  122.          case6:        a1=1;a2=1;a3=0;a4=0;break;
  123.          case7:        a1=1;a2=1;a3=0;a4=0;}
  124.          }
  125.          }
  126.          else
  127.          {ledd=0;
  128.          ledx=0;
  129.          ledu=1;
  130.          {i=i>0?i-1:7;
  131.          switch(i)
  132.          {
  133.          case 0:a1=1;a2=1;a3=0;a4=0; break;
  134.          case 1:a1=1;a2=0;a3=1;a4=0; break;
  135.          case 2:a1=1;a2=0;a3=0;a4=1; break;
  136.          case 3:a1=0;a2=0;a3=0;a4=1; break;
  137.          case 4:a1=0;a2=0;a3=1;a4=1; break;
  138.          case 5:a1=0;a2=0;a3=1;a4=0; break;
  139.          case 6:a1=0;a2=1;a3=1;a4=0; break;
  140.          case 7:a1=0;a2=1;a3=0;a4=0;}
  141.          }
  142.          }
  143.          timer1=0;
  144.          TR0=1;
  145.          }
  146.         }
  147.         void delay(unsigned int z)
  148.         {
  149.         unsigned int x,y;
  150.         for(x=z;x>0;x--)
  151.         {
  152.         for(y=125;y>0;y--)
  153.         ;
  154.         }
  155. }
  156. void time0_int() interrupt 1
  157. {
  158. TH0=0x3C;
  159. TL0=0xB0;
  160. timer1++;
  161. timer2++;
  162. if(flag)
  163. {
  164.         if(timer1==20)
  165.         {
  166.         timer1=0;
  167.         if(dir)
  168.          nf++;
  169.          else
  170.          nf--;
  171.          call_floor[nf]=0;
  172.          flag=0;
  173.          TR0=0;
  174.          P0=LED_CODES[nf];
  175.          if(cf==nf)
  176.          {TR0=0;
  177.          ledx=ledu=ledd=1;
  178.          stop=1;
  179.          return;
  180.          }
  181.         }
  182. }
  183. }

  184. void int0() interrupt 0
  185. {if(F6D==0)
  186.         call_floor[6]=1;
  187. else if(F1U==0)
  188.         call_floor[1]=1;
  189. else if(F2D==0||F2U==0)
  190.         call_floor[2]=1;
  191. else if(F3D==0||F3U==0)
  192.         call_floor[3]=1;
  193. else if(F4D==0||F4U==0)
  194.         call_floor[4]=1;
  195. else if(F5D==0||F5U==0)
  196.         call_floor[5]=1;
  197. else if(F6==0)
  198.         {call_floor[6]=1;stop=0;}
  199. else if(F1==0)
  200.         {call_floor[1]=1;stop=0;}
  201. else if(F2==0)
  202.         {call_floor[2]=1;stop=0;}
  203. else if(F3==0)
  204.         {call_floor[3]=1;stop=0;}
  205. else if(F4==0)
  206.         {call_floor[4]=1;stop=0;}
  207. else if(F5==0)
  208.         {call_floor[5]=1;stop=0;}
  209. }
  210.                  
复制代码

0.png

全部资料51hei下载地址:
louceng.zip (168.09 KB, 下载次数: 334)

评分

参与人数 4黑币 +64 收起 理由
3624 + 5 很给力!
qpwoeiruty + 4 赞一个!
19995qbhy + 5
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:288936 发表于 2018-3-7 22:03 | 显示全部楼层
资料很详细
回复

使用道具 举报

ID:160500 发表于 2018-4-5 13:07 | 显示全部楼层
无人检测怎么实现的呢?
回复

使用道具 举报

ID:302221 发表于 2018-4-5 20:05 | 显示全部楼层
资料很详细
回复

使用道具 举报

ID:302666 发表于 2018-4-6 11:06 | 显示全部楼层
资料做的很详细
回复

使用道具 举报

ID:302666 发表于 2018-4-8 07:46 | 显示全部楼层
里面有没有中断
回复

使用道具 举报

ID:227243 发表于 2018-4-8 09:57 | 显示全部楼层
感谢,很好
回复

使用道具 举报

ID:329967 发表于 2018-11-11 14:53 | 显示全部楼层
你好 你这个stop 0代表的是什么 flag代表的是什么
回复

使用道具 举报

ID:440127 发表于 2018-12-5 16:49 | 显示全部楼层
给力
回复

使用道具 举报

ID:438033 发表于 2018-12-8 17:11 | 显示全部楼层
proteus里的晶振电路好像接错了吧
回复

使用道具 举报

ID:468075 发表于 2019-1-14 17:56 | 显示全部楼层
感谢分享
回复

使用道具 举报

ID:220421 发表于 2019-3-27 11:51 | 显示全部楼层
感谢分享  资料很详细
回复

使用道具 举报

ID:372939 发表于 2019-6-4 09:30 | 显示全部楼层
感谢楼主开源精神
回复

使用道具 举报

ID:535962 发表于 2019-12-26 22:27 | 显示全部楼层
资料详细
回复

使用道具 举报

ID:686025 发表于 2020-3-3 09:30 来自手机 | 显示全部楼层
源代码没有注释!减小了可读性
回复

使用道具 举报

ID:686025 发表于 2020-3-3 09:33 来自手机 | 显示全部楼层
添加注释上去就完整了
回复

使用道具 举报

ID:743028 发表于 2020-5-2 23:42 | 显示全部楼层
有没有,有注释的呀???
回复

使用道具 举报

ID:713647 发表于 2020-5-3 10:46 | 显示全部楼层
感谢资料分享,很有用
回复

使用道具 举报

ID:535215 发表于 2020-5-3 14:23 | 显示全部楼层
厉害,受益匪浅
回复

使用道具 举报

ID:535962 发表于 2020-5-10 10:51 | 显示全部楼层
资料很详细
回复

使用道具 举报

ID:785163 发表于 2020-7-21 23:02 | 显示全部楼层
代码好像有些问题,电梯内的按钮每次按完都回到1楼了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表