×
单片机 > 单片机程序设计 > 详情

单片机八层电梯控制系统 仿真图+源程序+电路原理图

发布时间:2020-06-17 发布时间:
|

 
单片机八层电梯控制仿真图

 

单片机八层电梯控制电路原理图

单片机八层电梯控制系统源程序代码:

#include                 //调用单片机头文件

#define uchar unsigned char  //无符号字符型 宏定义        变量范围0~255

#define uint  unsigned int         //无符号整型 宏定义        变量范围0~65535


//数码管段选定义       0    1    2    3   4           5        6         7          8           9        

uchar code smg_du[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0xdf,0xdb

//                                           A        B         C          D           E   F        不显示

                                         };         //断码        


uchar dis_smg[8] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8};


bit flag_100ms,flag_1s;        

bit flag_stop = 1;   //用做到了相应的楼停下


sbit beep  = P2^6;

sbit xia   = P2^0;

sbit zhong = P2^1;

sbit shang = P2^2;


uchar value2;


sbit led1 = P1^7;          //8个发光二极管定义

sbit led2 = P1^6;

sbit led3 = P1^5;

sbit led4 = P1^4;

sbit led5 = P1^3;

sbit led6 = P1^2;

sbit led7 = P1^1;

sbit led8 = P1^0;


uchar dt_1;  //1楼电梯标志位

uchar dt_2;  //2楼电梯标志位

uchar dt_3;  //3楼电梯标志位

uchar dt_4;  //4楼电梯标志位

uchar dt_5;  //5楼电梯标志位

uchar dt_6;  //6楼电梯标志位

uchar dt_7;  //7楼电梯标志位

uchar dt_8;  //8楼电梯标志位


uchar dt_value = 1;  //电梯到哪一层的变量

uchar dt_s_x ;    //电梯上下的标志位


/***********************1ms延时函数*****************************/

void delay_1ms(uint q)

{

        uint i,j;

        for(i=0;i

                for(j=0;j<120;j++);

}



/********************独立按键程序*****************/

uchar key_can;         //按键值


void key()         //独立按键程序

{

        static uchar key_new;

        key_can = 20;                   //按键值还原

        P3 |= 0xff;

        if(P3 != 0xff)                //按键按下

        {

                delay_1ms(1);                     //按键消抖动

                if((P3 != 0xff) && (key_new == 1))

                {                                                //确认是按键按下

                        key_new = 0;

                        switch(P3)

                        {

                                case 0xfe: key_can = 1; break;          //得到按键值 

                                case 0xfd: key_can = 2; break;          //得到按键值 

                                case 0xfb: key_can = 3; break;          //得到按键值 

                                case 0xf7: key_can = 4; break;          //得到按键值 

                                case 0xef: key_can = 5; break;          //得到按键值 

                                case 0xdf: key_can = 6; break;          //得到按键值 

                                case 0xbf: key_can = 7; break;          //得到按键值 

                                case 0x7f: key_can = 8; break;          //得到按键值 

                        }

                }                        

        }

        else 

                key_new = 1;        

}


void key_with()

{

        if(key_can == 1)

        {

                led1 = 1;         //点亮发光二极管

                dt_1 = 1;         //

        }                

        if(key_can == 2)

        {

                led2 = 1;         //点亮发光二极管

                dt_2 = 1;

        }        

        if(key_can == 3)

        {

                led3 = 1;        //点亮发光二极管

                dt_3 = 1;

        }        

        if(key_can == 4)

        {

                led4 = 1;        //点亮发光二极管

                dt_4 = 1;

        }        

        if(key_can == 5)

        {

                led5 = 1;        //点亮发光二极管

                dt_5 = 1;

        }        

        if(key_can == 6)

        {

                led6 = 1;        //点亮发光二极管

                dt_6 = 1;

        }        

        if(key_can == 7)

        {

                led7 = 1;        

                dt_7 = 1;

        }        

        if(key_can == 8)

        {

                led8 = 1;        

                dt_8 = 1;

        }        

}

/*********************当电梯不动时、判断是向上、还是向下**********************/

void tiandi_shang_xia()

{

        static uchar value;

        if(dt_s_x == 0)

        {

                

                flag_stop = 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 = 1;   //电梯向上        

                                shang = 0;          //显示上

                                zhong = 0;        

                                xia = 1;                                         



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
单片机中高阻态的实质及意义