基于51单片机的三层电梯系统设计 - 图文 下载本文

基于单片机的三层电梯系统设计

附录1 元件清单

序号 名称 型号 单位 数量 备注 1 2 3 4 5 电阻 电容 晶振 按键 7段显示数码管 10K 30P 12MHZ --- SM42038 支 支 支 个 个 1 3 1 8 2 6 7 8 9 10 11 12 电池盒 电池 导线及焊锡 自锁开关 排阻 单片机 万用板 --- --- --- --- 102 AT89C51 --- 个 节 --- 个 个 个 块 1 3 若干 1 2 1 1

1

基于单片机的三层电梯系统设计

附录2 程序部分

#include #define LCD1 P1 #define LCD2 P3

void Zero();

void Delay_ms(unsigned int Time);

void Display(unsigned int n,unsigned char a); void Flash(unsigned int Time); void KBScan(); void dl_ms(); void Destination(); void Up(); void Down();

//P2与查询式键盘硬件相连 sbit P2_0=P2^0; sbit P2_1=P2^1; sbit P2_2=P2^2; sbit P2_3=P2^3; sbit P2_4=P2^4; sbit P2_5=P2^5; sbit P2_6=P2^6;

unsigned int lift=1; /*电梯所在楼层*/

unsigned int status=1; /*电梯上行为1,下行为0*/ unsigned char request[3]={0,0,0}; /*1~3楼有无请求,有请求为1*/ unsigned char dst=1; /*电梯的目的楼层*/

//清零程序 void Zero() {

LCD1=0x00; LCD2=0x00; }

//延时程序,以毫秒为单位,用软件计时,输入的参数 void Delay_ms(unsigned int Time) {

unsigned int i=0,j=0;

2

基于单片机的三层电梯系统设计

for(i=0;i

KBScan(); for(j=0;j<125;++j); } }

//显示某一楼层

void Display(unsigned int n,unsigned char a) {

unsigned char b; if(a==0) { b=0x5e; }

else if(a==1) { b=0x73; } Zero(); KBScan(); LCD2=b; KBScan(); switch(n) {

case 3:{LCD1=0x4f;break;} case 2:{LCD1=0x5b;break;} case 1:{LCD1=0x06;break;} default: {break;} } }

//闪烁显示到达楼层 void Flash(unsigned int Time) {

unsigned char i; for(i=0;i

Delay_ms(1000); KBScan(); Display(lift,status);

3

基于单片机的三层电梯系统设计

Delay_ms(1000); KBScan(); } Zero();

Delay_ms(1000); KBScan(); }

//查询式键盘扫描 void KBScan() {

if(P2!=0xff) { dl_ms(); if(P2!=0xff) {

switch(P2) {

case 0xfe: {P0_0=1;request[0]=1;break;} /*电梯内请求1楼*/

case 0xfd: {P0_1=1;request[1]=1;break;} /*电梯内请求2楼*/ case 0xfb: {P0_2=1;request[2]=1;break;} /*电梯内请求3楼*/ case 0xf7: {P0_3=1;request[0]=1;break;} /*电梯外1楼请求向上*/ case 0xef: {P0_4=1;request[1]=1;break;} /*电梯外2楼请求向上*/ case 0xdf: {P0_5=1;request[1]=1;break;} /*电梯外2楼请求向下*/ case 0xbf: {P0_6=1;request[2]=1;break;} /*电梯内3楼请求向下*/

default: {break;} /*错误请求*/ } } } }

//消抖延时 void dl_ms() {

unsigned char i; for(i=0;i<30;++i); }

//获取目的楼层 void Destination() {

unsigned char j; //j循环控制变量 KBScan(); //有键按下

4