硬汉嵌入式论坛

 找回密码
 立即注册
查看: 360|回复: 0
收起左侧

[客户分享] 基于51单片机模拟电梯防夹控制系统设计

[复制链接]

27

主题

25

回帖

106

积分

初级会员

积分
106
发表于 2023-7-18 19:37:29 | 显示全部楼层 |阅读模式

一、系统方案
本文介绍了一种采AT89C51芯片进行的电梯模拟控制系统,介绍了如何使用单片机进行编程来实现电子控制的方法。单片机编程实现功能,简洁多变,大大缩短了研发周期,同时能使电梯控制系统体积更小功能更强大。本设计模拟了电梯控制系统所需的一些基本功能,能通过按键选择楼层,数码管显示实时楼层数,LED灯组成的箭头指示上下方向。
1.png
二、硬件设计
原理图如下:
2.png
三、单片机软件设计
1首先是定时器初始化:
/*************定时器0初始化程序***************/
void time_init()          
{
        EA   = 1;                   //开总中断
        TMOD = 0X01;          //定时器0、工作方式1
        ET0  = 1;                  //开定时器0中断
        TR0  = 1;                  //允许定时器0定时
        TH0 = 0x3c;
        TL0 = 0xb0;     // 50ms
}
2、中断服务程序
/*************定时器0中断服务程序***************/
void time0_int() interrupt 1
{       
        static uchar value;
        TH0 = 0x3c;
        TL0 = 0xb0;     // 50ms
        value ++;
        if(value % 2 == 0)
        {
                flag_100ms = 1 ;        //定时器产生100毫秒的变量
        }
}
3、按键检测程序
void key() //按键程序
{
        if(key1 == 0)        //1楼按键按下
        {
                led1 = 1;        //点亮1楼发光二极管
                dt_1 = 1;        //1楼电梯按下变量置1
        }               
        if(key2 == 0)        //2楼按键按下
        {
                led2 = 1;        //点亮2楼发光二极管
                dt_2 = 1;        //2楼电梯按下变量置1
        }       
        if(key3 == 0)        //3楼按键按下
        {
                led3 = 1;        //点亮3楼发光二极管
                dt_3 = 1;        //3楼电梯按下变量置1
        }       
        if(key4 == 0)        //4楼按键按下
        {
                led4 = 1;        //点亮4楼发光二极管
                dt_4 = 1;        //4楼电梯按下变量置1
        }       
        if(key5 == 0)        //5楼按键按下
        {
                led5 = 1;        //点亮5楼发光二极管
                dt_5 = 1;        //5楼电梯按下变量置1
        }       
        if(key6 == 0)        //6楼按键按下
        {
                led6 = 1;        //点亮6楼发光二极管
                dt_6 = 1;        //6楼电梯按下变量置1
        }       
        if(key7 == 0)        //7楼按键按下
        {
                led7 = 1;        //点亮7楼发光二极管
                dt_7 = 1;        //7楼电梯按下变量置1
        }       
        if(key8 == 0)   //8楼按键按下
        {
                led8 = 1;   //点亮8楼发光二极管
                dt_8 = 1;        //8楼电梯按下变量置1
        }
}
4、核心算法程序
/****************电梯向上、做最后的判断是否还要继续向上****************/
void dt_shang_guan()
{
        static 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_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 == 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;         
                }               
        }       
}
四、proteus仿真设计
Proteus软件是一款应用比较广泛的工具,它可以在没有硬件平台的基础上通过自身的软件仿真出硬件平台的运行情况,这样就可以通过软件仿真来验证我们设计的方案有没有问题,如果有问题,可以重新选择器件,连接器件,直到达到我们设定的目的,避免我们搭建实物的时候,如果当初选择的方案有问题,我们器件都已经焊接好了,再去卸载下去,再去焊接新的方案的器件,测试,这样会浪费人力和物力,也给开发者带来一定困惑,Proteus仿真软件就很好的解决这个问题,我们在设计之初,就使用该软件进行模拟仿真,测试,选择满足我们设计的最优方案。最后根据测试没问题的仿真图纸,焊接实物,调试,最终完成本设计的作品。
3.png
五、实物制作
设计过程中使用AD软件绘制原理图,图纸绘制好之后采购元器件,根据图纸上面的器件标号焊接上去,在焊接过程中,我们要细心仔细,不能将器件焊接错位,因为焊接错位,都会给后面的调试带来很大的麻烦,只有焊接的时候各个方面都注意到位,才能焊接出合格的作品。由于焊接丝焊接会散发一些难闻的气味,我们在焊接的时候要保持室内通风,最好佩戴口罩,防止我们吸入焊接丝散发的气体,造成身体不适。在实物焊接制作的过程中,需要对每个模块进行一步步的焊接和调试,然后焊接到一起,进行整体的调试和测试。
4.png

回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-3 11:57 , Processed in 0.175131 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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