找回密码
 立即注册

QQ登录

只需一步,快速开始

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

基于51单片机控制可上下楼的电梯proteus仿真及程序

  [复制链接]
跳转到指定楼层
楼主
基于51单片机控制的可上下楼的电梯
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载):




单片机源程序如下:
  1. #include <reg51.h>
  2. #include <intrins.h>
  3. #define uint unsigned int
  4. #define uchar unsigned char
  5. uchar code table[]={0x3f,0x06,0x5b,0x4f};
  6. uchar num,temp,busy,flag,uf,df,ref,now,next,setf,floor;
  7. uint tn;
  8. sbit start=P1^0;
  9. sbit F1=P1^1;
  10. sbit F2=P1^2;
  11. sbit F3=P1^3;
  12. sbit UPI=P1^4;
  13. sbit DNI=P1^5;
  14. sbit UPO=P1^6;
  15. sbit DNO=P1^7;
  16. sbit UP1=P3^0;
  17. sbit UP2=P3^1;
  18. sbit DN2=P3^2;
  19. sbit DN3=P3^3;
  20. void display(uchar now);
  21. void delay(uint z);
  22. uchar keyscan();
  23. void pause();
  24. void ocdoor();
  25. void main()
  26. {
  27.     now=1;        //初始化
  28.         flag=1;
  29.         num=0;
  30.         P1=0xff;
  31.         P2=0xfd;
  32.         P3=0x0f;
  33.         TMOD=0x01;//设置为定时器0 方式1
  34.         TH0=0X3C;
  35.         TL0=0XB0;
  36.         EA=1;//CPU允许中断
  37.         ET0=1;//开定时器0中断
  38.         while(1)
  39.         {
  40.           display(now);//显示初始楼层
  41.           if(P2!=0xfc)// 有按键按下则扫描
  42.           {
  43.             delay(20);
  44.                 if(P2!=0xfc)
  45.                 {
  46.                   keyscan();}
  47.           }
  48.           
  49. //************************************
  50. //1楼的分析程序
  51.      while(now==1)
  52.          {
  53.           display(now);
  54.           if(UP2==0||F2==0||DN2==0)
  55.           {
  56.            TR0=1;UPI=1;flag=1;floor=2;}//delay(50);UPI=0;开启定时到2
  57.            else if(DN3==0||F3==0)
  58.            {
  59.            TR0=1;
  60.            UPO=UPI=0;
  61.            TR0=1;
  62.            floor=3;
  63.            flag=1;
  64.            }
  65.            P2=0xfc;
  66.            if(P2!=0xfc)
  67.            {
  68.               delay(20);
  69.                   if(P2!=0xfc)
  70.                   {  keyscan();}
  71.                   }
  72.         }
  73. //********************************
  74. //2楼的分析程序
  75. while(now==2)
  76.          {
  77.           display(now);
  78.           if(UP2==0||DN2==0) TR0=1;
  79.           if(DN3==0||F3==0)
  80.            {TR0=1;UPO=0;flag=1;floor=3;}//delay(50);UPI=0;开启定时到2
  81.            else if(UP1==0||F1==0)
  82.            {
  83.            TR0=1;
  84.            DNI=0;
  85.            floor=1;
  86.            flag=0;
  87.            } if(DN3==1&&F3==1&&UP1==1&&F1==1&&DN2==1&&floor!=now)
  88.            P2=0xfc;
  89.            if(P2!=0xfc)
  90.            {
  91.               delay(20);
  92.                   if(P2!=0xfc)
  93.                   {  keyscan();}
  94.                   }
  95.         }
  96. //3楼的分析程序
  97. while(now==3)
  98.          {
  99.           display(now);
  100.           if(DN3==0)
  101.           TR0=1;
  102.           if(DN2==0||UP2==0||F2==0)
  103.           {
  104.            TR0=1;DNO=0;flag=0;floor=2;}
  105.            else if(UP1==0||F1==0)
  106.            {
  107.            TR0=1;
  108.            DNO=DNI=0;
  109.           
  110.            floor=1;
  111.            flag=0;
  112.            }
  113.            if(DN2==1&&UP2==1&&UP1==1&&DN3==1&&floor!=now) TR0=1;

  114.            P2=0xfc;
  115.            if(P2!=0xfc)
  116.            {
  117.               delay(20);
  118.                   if(P2!=0xfc)
  119.                   {  keyscan();}
  120.                   }
  121.         }
  122.         }
  123.         }
  124. //中断服务程序
  125. void time0() interrupt 1
  126. {
  127. tn++;

  128. TH0=0X3C;TL0=0XB0;TR0=1;TF0=0;
  129. if(tn==40)
  130. {
  131.    tn=0;
  132.    display(now);
  133.    if(now==floor)
  134.    {
  135.      switch(now)
  136.          {
  137.            case 1:TR0=0;
  138.                    pause();
  139.                            ocdoor();
  140.                            F1=1;
  141.                            UP1=1;
  142.                            flag=1;
  143.                            start=1;
  144.                            UPI=UPO=DNI=DNO=1;
  145.                            break;
  146.                 case 2:UP2=1;
  147.                         TR0=0;
  148.                                 pause();
  149.                                 DN2=1;
  150.                                 TR0=0;
  151.                                 pause();
  152.                                 F2=1;
  153.                                 start=1;
  154.                                 TR0=0;
  155.                                 UPI=UPO=DNI=DNO=1;
  156.                                 break;
  157.                 case 3:TR0=0;
  158.                         pause();
  159.                                 F3=1;
  160.                                 DN3=1;
  161.                                 flag=0;
  162.                                 start=1;
  163.                                 UPI=UPO=DNI=DNO=1;
  164.                                 break;
  165.                         default:TR0=0;now=1;break;
  166.                 }
  167.         }
  168. else
  169.    {
  170.     if(floor<now&&flag==1)
  171.              flag=0;
  172.         if(floor>now&&flag==0)
  173.              flag=1;
  174.                  if(flag==0)
  175.                  now--;
  176.                  if(flag==1)
  177.                  now++;
  178.                 }
  179. }
  180. }//***********************************
  181. //键盘扫描子程序
  182. uchar keyscan()
  183. {
  184.    P2=0xfe;          //扫描第一行
  185.     temp=P2;
  186.         temp=temp&0xfc;
  187.         while(temp!=0xfc)
  188.         {
  189.           delay(5);
  190.           temp=P2;
  191.           temp=temp&0xfc;
  192.           while(temp!=0xfc)
  193.           {
  194.             temp=P2;
  195.                 switch(temp)
  196.                 {
  197.                 case 0xfa :num=0;start=0;break;
  198.                 case 0xf6 :num=1;F1=0;floor=1;break;
  199.             case 0xee :num=2;F2=0;floor=2;break;
  200.                 case 0xde :num=3;F3=0;floor=3;break;
  201.                 }
  202.         while(temp!=0xfc)
  203.         {
  204.           temp=P2;
  205.           temp=temp&0xfc;
  206.         }
  207.         }
  208.    }
  209.    P2=0xfd;//扫描第二行
  210.    temp=P2;
  211.    temp=temp&0xfc;
  212.    while(temp!=0xfc)
  213.      {
  214.            delay(5);
  215.            temp=P2;
  216.            temp=temp&0xfc;
  217.            while(temp!=0xfc)
  218.            {
  219.               temp=2;
  220.         switch(temp)
  221.         {
  222.                 case 0xf9 :num=4;UP1=0;break;
  223.                 case 0xf5 :num=5;UP2=0;break;
  224.                 case 0xed :num=6;DN2=0;break;
  225.                 case 0xdd :num=7;DN3=0;break;
  226.                 }
  227.                 while(temp!=0xfc)
  228.                 {
  229.                   temp=P2;
  230.                   temp=temp&0xfc;
  231.                   }
  232.                 }
  233.         }
  234. return num;
  235. }
  236. //******************************************
  237. //数码管显示函数
  238. void display(uchar now)
  239. ……………………

  240. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
基于51单片机可上下楼的电梯.zip (102.56 KB, 下载次数: 247)


评分

参与人数 2黑币 +52 收起 理由
qpwoeiruty + 2 赞一个!
admin + 50 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

沙发
ID:326022 发表于 2018-5-9 18:28 | 只看该作者
上下楼指示灯和电机不能够正常工作
回复

使用道具 举报

板凳
ID:450537 发表于 2018-12-20 10:27 | 只看该作者
很好。。。。。。
回复

使用道具 举报

地板
ID:424947 发表于 2019-1-5 00:47 | 只看该作者
那个,四楼后面的三个键有什么作用啊?
回复

使用道具 举报

5#
ID:613259 发表于 2019-9-18 20:28 | 只看该作者
数码管不工作呀,按了没反应0.0
回复

使用道具 举报

6#
ID:648148 发表于 2019-11-25 08:57 | 只看该作者
很好。。。。。。
回复

使用道具 举报

7#
ID:648148 发表于 2019-11-25 09:24 | 只看该作者
非常棒,,,,,
回复

使用道具 举报

8#
ID:654035 发表于 2019-12-2 10:14 来自手机 | 只看该作者
太棒了
回复

使用道具 举报

9#
ID:654035 发表于 2019-12-2 11:22 来自手机 | 只看该作者
这个好像不行啊
回复

使用道具 举报

10#
ID:648959 发表于 2019-12-2 16:35 | 只看该作者
运行不行啊
回复

使用道具 举报

11#
ID:520605 发表于 2020-4-29 13:46 | 只看该作者
楼主这个运行时好像有点问题
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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