找回密码
 立即注册

QQ登录

只需一步,快速开始

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

基于单片机电梯液晶显示防超重,防气体报警、防夹报警控制系统及源程序

[复制链接]
跳转到指定楼层
楼主
一、系统方案
1、本设计采用51单片机作为主控器。
2、液晶显示楼层。
3、防超重,防气体报警、防夹报警。


二、硬件设计
原理图如下:
三、单片机软件设计
1、首先是系统初始化
/***********************lcd1602初始化设置************************/
void init_1602()         //lcd1602初始化设置
{
        write_com(0x38);        
        write_com(0x0c);
        write_com(0x06);
}
2、液晶显示程序
void delay_uint(uint q)
{
        while(q--);
}

/********************************************************************
* 名称 : write_com(uchar com)
* 功能 : 1602命令函数
* 输入 : 输入的命令值
* 输出 : 无
***********************************************************************/
void write_com(uchar com)
{
        e=0;
        rs=0;
        //rw=0;
        P0=com;
        delay_uint(3);
        e=1;
        delay_uint(25);
        e=0;
}

/********************************************************************
* 名称 : write_data(uchar dat)
* 功能 : 1602写数据函数
* 输入 : 需要写入1602的数据
* 输出 : 无
***********************************************************************/
void write_data(uchar dat)
{
        e=0;
        rs=1;
        //rw=0;
        P0=dat;
        delay_uint(3);
        e=1;
        delay_uint(25);
        e=0;        
}
/***********************lcd1602上显示这字符函数************************/
void write_string(uchar hang,uchar add,uchar *p)
{
        if(hang==1)   
                write_com(0x80+add);
        else
                write_com(0x80+0x40+add);
        while(1)                                                                                                                 
        {
                if(*p == '\0')  break;
                write_data(*p);
                p++;
        }        
}
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仿真软件就很好的解决这个问题,我们在设计之初,就使用该软件进行模拟仿真,测试,选择满足我们设计的最优方案。最后根据测试没问题的仿真图纸,焊接实物,调试,最终完成本设计的作品。


评分

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

查看全部评分

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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