单片机八层电梯控制仿真图
单片机八层电梯控制电路原理图
单片机八层电梯控制系统源程序代码:
#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;
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』