找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2035|回复: 0
打印 上一主题 下一主题
收起左侧

51单片机的二层电梯程序+Proteus仿真

[复制链接]
跳转到指定楼层
楼主
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


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

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

  22. sbit a=P3^5;

  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.         a=0;
  49.         while(1)
  50.         { if(!flag&&!stop)
  51.                 {select_next();
  52.                  step(dir);
  53.                         a=1;
  54.                         delay(5000);
  55.                         a=0;
  56.                  }
  57.                  else if(stop)
  58.                  {timer2=0;
  59.                  TR0=1;
  60.                  while(timer2<100&&stop);
  61.                  TR0=0;
  62.                  timer2=0;
  63.                  stop=0;
  64.                         
  65.                  }
  66.         }
  67. }

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

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

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


全部资料51hei下载地址:
二层电梯.rar (190.76 KB, 下载次数: 20)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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