标题: 自己制作的简易的 基于51单片机的自动升降电梯简易模型 与大家分享 [打印本页]

作者: fx283    时间: 2017-2-3 19:43
标题: 自己制作的简易的 基于51单片机的自动升降电梯简易模型 与大家分享
寒假在家闲着无事,想着做点东西,但是毕竟是新手,做不了太厉害的东西,就弄了个这小玩意,纯属个人娱乐之作,与各位分享。

配上几张图片 ,全部程序,又做了个小视频来演示。

http://player.youku.com/player.php/sid/XMjQ5NTE3MTUwNA==/v.swf

主程序预览:
  1. /**************************************************
  2. /*项目名称:基于51单片机的自动升降电梯简易模型
  3. /*主控芯片:STC89C52
  4. /*使用模块:28BYJ_48步进电机、ULN2003驱动模块、无源蜂鸣器、红外发射器、红外接收头、4×4软键盘
  5. /*平台搭建:废旧泡沫块、硬纸壳
  6. /*主要功能:装置供电后,通过按下红外遥控器或者软键盘选择楼层所对应的数字,选择升降方式(只上升、只下降、先升再降)
  7. /*          然后升降电梯(泡沫模拟)停在对应楼层,蜂鸣器发出“叮咚”的声响。共计16层。
  8. /*引脚说明:步进电机接P1低四位,蜂鸣器IO口接P3^7,红外接收头接P3^2,软键盘接P2口;
  9. /*时间:2017年2月3日17时22分
  10. /**************************************************/

  11. /*********************************************
  12. /*包含必要的头文件
  13. **********************************************/
  14. #include<ring.h>
  15. #include<key.h>
  16. #include<run.h>
  17. #include<red.h>

  18. /*********************************************
  19. /*定义红外接收必要数据
  20. **********************************************/
  21. unsigned char IrValue[6];
  22. unsigned char Time;
  23. /*********************************************
  24. /*定义变量
  25. **********************************************/
  26. unsigned char s,p;
  27. unsigned int m,a;
  28. /*********************************************
  29. /*主函数
  30. **********************************************/                                                                                                        
  31. void main()                                                               
  32. {
  33.         unsigned int n,w=30000;
  34.         unsigned char b;
  35.         IrInit();
  36.         while(1)
  37.         {
  38.                 if(p==2)
  39.                 {
  40.                         delay(50000);               
  41.                         Z_run(n+15);
  42.                         p=0;
  43.                 }
  44.                 if(p==4)
  45.                 {
  46.                         delay(50000);               
  47.                         Z_run(n+15);
  48.                         p=3;
  49.                 }               
  50.                 while((p!=3)&&(w>0)) w--;
  51.                 if(p==3)
  52.                 {
  53.                         delay(50000);
  54.                         D_run(n);
  55.                         p=0;
  56.                 }
  57.                 n=0;               
  58.                 s=1;
  59.                 while(s)
  60.                 {
  61.                         a=KeyDown();
  62.                 }
  63.                 if(a!=0)
  64.                 {
  65.                         if(a==14)
  66.                         {
  67.                                 a=0;
  68.                                 p=2;
  69.                         }
  70.                         else if(a==15)
  71.                         {
  72.                                 a=0;
  73.                                 p=3;
  74.                         }
  75.                         else  
  76.                         {
  77.                                 b=a;
  78.                                 p=0;
  79.                         }
  80.                         n=b*883;
  81.                 }
  82.                 else        
  83.                 {
  84.                         n=m*883;
  85.                 }
  86.         }         
  87. }


  88. /*********************************************
  89. /*红外接收,数据处理函数,使用外部中断0
  90. **********************************************/
  91. void ReadIr() interrupt 0
  92. {
  93.         unsigned char j,k;
  94.         unsigned int err;
  95.         Time=0;                                         
  96.         delay(700);
  97.         if(IRIN==0)        
  98.         {         
  99.                 err=1000;                                
  100.                 while((IRIN==0)&&(err>0))
  101.                 {                        
  102.                         delay(1);
  103.                         err--;
  104.                 }
  105.                 if(IRIN==1)               
  106.                 {
  107.                         err=500;
  108.                         while((IRIN==1)&&(err>0))               
  109.                         {
  110.                                 delay(1);
  111.                                 err--;
  112.                         }
  113.                         for(k=0;k<4;k++)        
  114.                         {                                
  115.                                 for(j=0;j<8;j++)
  116.                                 {

  117.                                         err=60;               
  118.                                         while((IRIN==0)&&(err>0))
  119.                                         {
  120.                                                 delay(1);
  121.                                                 err--;
  122.                                         }
  123.                                         err=500;
  124.                                         while((IRIN==1)&&(err>0))         
  125.                                         {
  126.                                                 delay(10);         
  127.                                                 Time++;
  128.                                                 err--;
  129.                                                 if(Time>30)
  130.                                                 {
  131.                                                         return;
  132.                                                 }
  133.                                         }
  134.                                         IrValue[k]>>=1;         
  135.                                         if(Time>=8)               
  136.                                         {
  137.                                                 IrValue[k]|=0x80;
  138.                                         }
  139.                                         Time=0;                                                               
  140.                                 }
  141.                         }
  142.                 }
  143.                 if(IrValue[2]!=~IrValue[3])
  144.                 {
  145.                         return;
  146.                 }
  147.                 s=0;
  148.                 ding();
  149.                 switch(IrValue[2])
  150.                 {
  151.                         case 0x16:
  152.                         m=0;
  153.                         break;
  154.                         case 0x0c:
  155.                         m=1;
  156.                         break;
  157.                         case 0x18:
  158.                         m=2;
  159.                         break;
  160.                         case 0x5e:
  161.                         m=3;
  162.                         break;
  163.                         case 0x08:
  164.                         m=4;
  165.                         break;
  166.                         case 0x1c:
  167.                         m=5;
  168.                         break;
  169.                         case 0x5a:
  170.                         m=6;
  171.                         break;
  172.                         case 0x42:
  173.                         m=7;
  174.                         break;
  175.                         case 0x52:
  176.                         m=8;
  177.                         break;
  178.                         case 0x4a:
  179.                         m=9;
  180.                         break;
  181.                         case 0x40:
  182.                         p=2;
  183.                         break;
  184.                         case 0x43:
  185.                         p=3;
  186.                         break;
  187.                         case 0x19:
  188.                         p=4;
  189.                         break;
  190.                         case 0x45:
  191.                         m=10;
  192.                         break;
  193.                         case 0x46:
  194.                         m=11;
  195.                         break;
  196.                         case 0x47:
  197.                         m=12;
  198.                         break;
  199.                         case 0x44:
  200.                         m=13;
  201.                         break;
  202.                         case 0x07:
  203.                         m=14;
  204.                         break;
  205.                         case 0x15:
  206.                         m=15;
  207.                         break;
  208.                         case 0x09:
  209.                         m=16;
  210.                         break;
  211.                 }
  212.         }                        
  213. }


复制代码


详细信息请参照程序(压缩包中含全部源码):
基于51的自动升降电梯程序.zip (45.6 KB, 下载次数: 219)


作者: 16546    时间: 2017-2-6 16:49
有没有仿真电路图哇大神
作者: fx283    时间: 2017-2-7 13:32
16546 发表于 2017-2-6 16:49
有没有仿真电路图哇大神

我不太习惯用protues画图,就手画了一个,其实结构很简单,画出来之后竟然就这么一点点[attach]47843[/attach]


作者: fx283    时间: 2017-2-7 18:44
[attach]47865[/attach]

作者: fx283    时间: 2017-2-7 18:44
[attach]47843[/attach]

作者: fx283    时间: 2017-2-7 18:47
抱歉,刚刚电脑出毛病了,图片发不上去

14864644122140.21675697640962244.jpg (42.5 KB, 下载次数: 251)

14864644122140.21675697640962244.jpg

作者: YBZYBZ    时间: 2017-2-7 22:49
楼主给一个详细的电路图吧!
作者: fx283    时间: 2017-2-8 09:18
YBZYBZ 发表于 2017-2-7 22:49
楼主给一个详细的电路图吧!

刚刚画了一个,不太会用这个protues,电路基本上就是这样了。

mmexport1486516601474.jpg (47.56 KB, 下载次数: 305)

mmexport1486516601474.jpg

作者: 啾纠    时间: 2017-2-11 22:33
楼主能给份原件清单吗
作者: 啾纠    时间: 2017-2-11 23:10
啾纠 发表于 2017-2-11 22:33
楼主能给份原件清单吗

比如PCB版是用的成品最小系统吧?
作者: fx283    时间: 2017-2-12 13:06
啾纠 发表于 2017-2-11 23:10
比如PCB版是用的成品最小系统吧?

51单片机最小系统(STC89C52)×1
ULN2003驱动模块×1
28BYJ-348步进电机×1
4×4软键盘×1
VS1838B一体化红外接收头×1
红外遥控器×1
无源蜂鸣器模块×1
电源、电源线×1
泡沫底板×1
硬纸板×若干
杜邦线×若干

作者: bbxyzzj    时间: 2017-3-9 08:29
不错的文件,顶一下。
作者: chenyan    时间: 2017-4-22 15:30
可不可以用大功率的电机啊

作者: wh150    时间: 2017-4-27 08:49
怎么联系你啊大神
作者: fx283    时间: 2017-5-6 23:31
wh150 发表于 2017-4-27 08:49
怎么联系你啊大神

不不不,不敢当,小白一枚。

作者: fx283    时间: 2017-5-6 23:34
chenyan 发表于 2017-4-22 15:30
可不可以用大功率的电机啊

如果你要做大的系统的话,可以改用大功率电机,同样驱动也要更换,我做的就是个小的模拟的东西,随便玩玩
作者: zhaoshuai    时间: 2017-6-5 19:05
大神能加一下好友吗

作者: 沉默的墓碑    时间: 2017-6-6 09:50
#include<ring.h>
/*********************************************
/*电梯到达提示音
**********************************************/
void ring()
{
        unsigned int c;
        for(c=0;c<140;c++)
        {
                bee=!bee;
                delay(130);
        }
        for(c=0;c<100;c++)
        {
                bee=!bee;
                delay(200);
        }
}
bee是什么意思
                        s=0;
                        ting();
                }
        }
        switch(KeyValue)
        {
                case(1):return 1;
                case(2):return 2;
                case(3):return 3;
                case(4):return 10;
                case(5):return 4;
                case(6):return 5;
                case(7):return 6;
                case(8):return 11;
                case(9):return 7;
                case(10):return 8;
                case(11):return 9;
                case(12):return 12;
                case(13):return 14;
                case(14):return 0;
                case(15):return 15;
                case(16):return 13;
                default:return 0;
        }
S=0;ting();这又是什么意思
作者: ggg620    时间: 2017-6-6 22:33
支持楼主,感谢分享!
作者: ggg620    时间: 2017-6-6 22:34
感谢楼主,多谢分享!!
作者: wyx863163257    时间: 2017-6-21 17:26
为什么电机会来回转 一直抖动,求指教
作者: 我要学习dpj    时间: 2018-1-16 23:32
还在吗?  请求添加q1771716122  我也想做一个求帮忙
作者: DevilC51    时间: 2018-3-14 17:15
你好,请求添加q1161329168,关于这个电梯的制作遇到了困难,请求大神帮助
作者: xingzhe8    时间: 2018-3-26 10:38
做的不错  值得学习学习
作者: zsw7758521    时间: 2018-5-19 12:30
大神,我借鉴你这个做课程设计,指导一下吗,谢谢,可以的话请给我留下联系方式,谢谢
作者: 丑东西    时间: 2018-5-22 13:11
谢谢原理图
作者: 新视野    时间: 2018-5-23 11:39
话说楼主这个怎么知道他是到达那一层楼了,是怎么知道的,很疑惑,你没有有什么传感器去检测它啊?
作者: dukecheng    时间: 2018-5-23 16:11
学习下
作者: ymc1001    时间: 2018-5-24 13:03
那个模拟高楼,一层大概几厘米?
作者: 古城1234    时间: 2018-8-31 15:09
你好  楼主   
作者: 古城1234    时间: 2018-8-31 15:11
楼主  你好   我要做一个毕业设计的模型   我要用到一个升降机 能向你请教一些问题吗
作者: 古城1234    时间: 2018-8-31 15:24
楼主你好    想向你请教一些问题
作者: 古城1234    时间: 2018-9-3 08:49
楼主   你好
作者: 快乐眼泪    时间: 2018-10-8 19:45
感谢楼主分享!!!
作者: 古城1234    时间: 2018-10-16 15:53
bbxyzzj 发表于 2017-3-9 08:29
不错的文件,顶一下。

我这里下载怎么程序有问题
作者: Roy-BIN    时间: 2018-12-2 23:34
楼主,怎么判断到达第几楼呢,用步进电机的步数去计算的吗?
作者: mynetroom    时间: 2019-1-13 13:47
红外测距,好厉害.正常电梯是测试编码反馈的,中间有速度平稳控制
作者: mynetroom    时间: 2019-1-14 15:34
用普中HC6800 ES V2.0实验板,会不会简单点?接口都现成的.
作者: 李海林    时间: 2019-3-15 21:26
有没有大神懂基于单片机电梯模型设计的,借鉴LZ这个做个毕设,加355052629
作者: 李海林    时间: 2019-4-9 11:42
LZ可以加个好友吗,我也是做的升降,您是怎么让升一层大概3CM左右的,我QQ35505269
作者: 斯达    时间: 2019-4-29 15:39
大神 请问下那个参数代表上升楼层
作者: 创青春    时间: 2020-1-13 14:38
大哥哥 如果我想做一个东西向两个电梯上下运动的那种  你会吗  可否加个qq3025684068  我有问题问你
作者: 单片机求带    时间: 2020-2-2 08:51
从开始设计到实际运用实现升降是怎么做到的,有教一下我这个青铜吗




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1