多谢51黑上的各位大神提供的资料以及思路,让我得以打出来这个程序,将这个程序拿出来在返还给大家。51黑很精彩!
附上直流电机的驱动电路(可以将该电梯用步进电机来带动,我用的是直流电机)。
单片机源程序如下:
- #include <REGX51.H>
- #include <intrins.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit sda=P2^4;
- sbit lcd_rs=P2^5;
- sbit lcd_rw=P2^6;
- sbit lcd_en=P2^7;
- sbit sxdj1=P2^0;
- sbit sxdj2=P2^1;
- sbit zydj1=P2^2;
- sbit zydj2=P2^3;
- sbit key_ddd=P3^3;
- uchar jinji=0; //紧急标识
- uchar l1;
- uchar l2;
- uchar l3;
- uchar l4;
- uchar l5;
- uchar l6;
- uchar l7;
- uchar l8;
- uchar kye_1=0,kye_2=0,kye_3=0,kye_4=0,kye_5=0,kye_6=0,kye_7=0,kye_8=0;
- uchar dt_c1=0; /*电梯层数标识*/
- uchar dt_c2=0;
- uchar dt_c3=0;
- uchar dt_c4=0;
- uchar dt_c5=0;
- uchar dt_c6=0;
- uchar dt_c7=0;
- uchar dt_c8=0;
- uchar dt_sx=0; /*电梯是上还是下的标志*/
- uchar dt_cs=1; /*电梯到哪一层的标识*/
- bit dt_stop=1; /*电梯停止标识,是否再某一层停下*/
- uchar shang=0,xia=0; /*显示上下的标识*/
- uchar value; /*电梯计数*/
- uchar djzy=0; /*电机左右的标识*/
- uchar time_ms;
- uchar time_ting;
- uchar dj_1=0; //正转(开门)
- uchar dj_2=0; //反转(关门)
- uchar dj_3=0; //停止
- uchar S; /*时间计时晔?/
- uchar value1;
- uchar deep; /*语音提醒标识*/
- uchar key_value; /*按键标识*/
- uchar table1[]={0x00,0x04,0x0E,0x15,0x04,0x04,0x04,0x00}; /*上升标识*/
- uchar table2[]={0x00,0x04,0x04,0x04,0x15,0x0E,0x04,0x00}; /*下降标识*/
- void delayms(uint xus)
- {
- while(xus--);
- }
- void SendData(uchar dat) /*JQ8900一线串口通信模式*/
- {
- uchar i;
- EA=0; /*发送时关闭中断,防止干扰*/
- sda=1; /*开始拉高*/
- delayms(1000);
- sda=0; /*开始引导*/
- delayms(2200);
- for(i=0;i<8;i++)
- {
- sda=1;
- if(dat&0x01) /*3:1表示数据位1,每个位用两个脉*/
- {
- delayms(500);
- sda=0;
- delayms(210);
- }
- else
- {
- delayms(210); /*1:3表示数据位0,每个位用两个脉冲*/
- sda=0;
- delayms(500);
- }
- dat>>=1;
- }
- sda=1;
- EA=1;
- }
- /**********lcd1602程序************/
- void delay1ms(unsigned int ms) //延时1毫秒(不够精确的)
- {
- unsigned int i,j;
- for(i=0;i<ms;i++)
- for(j=0;j<100;j++);
- }
- void write_com(unsigned char com) //写指令//
- {
- delay1ms(1);
- lcd_rs=0;
- lcd_rw=0;
- lcd_en=0;
- P0=com;
- delay1ms(1);
- lcd_en=1;
- delay1ms(1);
- lcd_en=0;
- }
- void write_dat(unsigned char dat) //写数据//
- {
- delay1ms(1);;
- lcd_rs=1;
- lcd_rw=0;
- lcd_en=0;
- P0=dat;
- delay1ms(1);
- lcd_en=1;
- delay1ms(1);
- lcd_en=0;
- }
- void lcd_init() //初始化设置//
- {
- lcd_rs=1;
- lcd_rw=0;
- write_com(0x38);
- write_com(0x08);
- write_com(0x01);
- write_com(0x06);
- write_com(0x0c);
- }
- void yaoquloucheng() //要去的楼层
- {
- if(dt_c1==1)
- {
- write_com(0x80+0x44);
- write_dat('1');
- }
- else
- {
- write_com(0x80+0x44);
- write_dat(' ');
- }
- if(dt_c2==1)
- {
- write_com(0x80+0x45);
- write_dat('2');
- }
- else
- {
- write_com(0x80+0x45);
- write_dat(' ');
- }
- if(dt_c3==1)
- {
- write_com(0x80+0x46);
- write_dat('3');
- }
- else
- {
- write_com(0x80+0x46);
- write_dat(' ');
- }
- if(dt_c4==1)
- {
- write_com(0x80+0x47);
- write_dat('4');
- }
- else
- {
- write_com(0x80+0x47);
- write_dat(' ');
- }
- if(dt_c5==1)
- {
- write_com(0x80+0x48);
- write_dat('5');
- }
- else
- {
- write_com(0x80+0x48);
- write_dat(' ');
- }
- if(dt_c6==1)
- {
- write_com(0x80+0x49);
- write_dat('6');
- }
- else
- {
- write_com(0x80+0x49);
- write_dat(' ');
- }
- if(dt_c7==1)
- {
- write_com(0x80+0x40+0x0a);
- write_dat('7');
- }
- else
- {
- write_com(0x80+0x40+0x0a);
- write_dat(' ');
- }
- if(dt_c8==1)
- {
- write_com(0x80+0x40+0x0b);
- write_dat('8');
- }
- else
- {
- write_com(0x80+0x40+0x0b);
- write_dat(' ');
- }
- }
- void dangqianlouceng() //显示楼层函数
- {
- write_com(0x80);
- write_dat(dt_cs+0x30);
- }
- void shangxiabioashi() //显示去上去下
- {
- uchar i;
- if(shang==1)
- {
- write_com(0x40);
- for(i=0;i<8;i++)
- {
- write_dat(table1[i]);
- }
- write_com(0x80+0x40);
- write_dat(0x00);
- }
- else if(shang==0)
- {
- write_com(0x80+0x40);
- write_dat(' ');
- }
- if(xia==1)
- {
- write_com(0x48);
- for(i=0;i<8;i++)
- {
- write_dat(table2[i]);
- }
- write_com(0x80+0x40);
- write_dat(0x01);
- }
- else if(xia == 0)
- {
- write_com(0x80+0x40);
- write_dat(' ');
- }
- }
- /*************矩阵按键************/
- void delay_1ms(uint q)
- {
- uint i,j;
- for(i=0;i<q;i++)
- for(j=0;j<120;j++);
- } //矩阵按键检测
- void key() //独立按键程序
- {
- P1 |= 0xff;
- if(P1 != 0xff) //按键按下
- {
- delay_1ms(1); //按键消抖动
- if(P1 != 0xff)
- { //确认是按键按下
- key_value= 0;
- switch(P1)
- {
- case 0xfe: key_value = 1; kye_1++; break; //得到按键值
- case 0xfd: key_value = 2; kye_2++; break; //得到按键值
- case 0xfb: key_value = 3; kye_3++; break; //得到按键值
- case 0xf7: key_value = 4; kye_4++; break; //得到按键值
- case 0xef: key_value = 5; kye_5++; break; //得到按键值
- case 0xdf: key_value = 6; kye_6++; break; //得到按键值
- case 0xbf: key_value = 7; kye_7++; break; //得到按键值
- case 0x7f: key_value = 8; kye_8++; break; //得到按键值
- }
- }
- }
- }
- void change() //矩阵数据转换(进行标识)
- {
- uchar ooo;
- ooo= dt_c1+dt_c2+dt_c3+dt_c4+dt_c5+dt_c6+dt_c7+dt_c8;
- if(key_value==1)
- {
- ooo= dt_c1+dt_c2+dt_c3+dt_c4+dt_c5+dt_c6+dt_c7+dt_c8;
- if(kye_1==1)
- {
- dt_c1=1;
- }
- if(ooo != 1)
- {
- if(kye_1==2)
- {
- kye_1=0;
- dt_c1=0;
- }
- }
- }
- if(key_value==2)
- {
- ooo= dt_c1+dt_c2+dt_c3+dt_c4+dt_c5+dt_c6+dt_c7+dt_c8;
- if(kye_2==1)
- {
- dt_c2=1;
- }
- if(ooo != 1)
- {
- if(kye_2==2)
- {
- kye_2=0;
- dt_c2=0;
- }
- }
- }
- if(key_value==3)
- {
- ooo= dt_c1+dt_c2+dt_c3+dt_c4+dt_c5+dt_c6+dt_c7+dt_c8;
- if(kye_3==1)
- {
-
- dt_c3=1;
- }
- if(ooo != 1)
- {
- if(kye_3==2)
- {
- kye_3=0;
-
- dt_c3=0;
- }
- }
- }
- if(key_value==4)
- {
- ooo= dt_c1+dt_c2+dt_c3+dt_c4+dt_c5+dt_c6+dt_c7+dt_c8;
- if(kye_4==1)
- {
- dt_c4=1;
- }
- if(ooo != 1)
- {
- if(kye_4==2)
- {
- kye_4=0;
- dt_c4=0;
- }
- }
- }
- if(key_value==5)
- {
- ooo= dt_c1+dt_c2+dt_c3+dt_c4+dt_c5+dt_c6+dt_c7+dt_c8;
- if(kye_5==1)
- {
- dt_c5=1;
- }
- if(ooo != 1)
- {
- if(kye_5==2)
- {
- kye_5=0;
- dt_c5=0;
- }
- }
- }
- if(key_value==6)
- {
- ooo= dt_c1+dt_c2+dt_c3+dt_c4+dt_c5+dt_c6+dt_c7+dt_c8;
- if(kye_6==1)
- {
- dt_c6=1;
- }
- if(ooo != 1)
- {
- if(kye_6==2)
- {
- kye_6=0;
- dt_c6=0;
- }
- }
- }
- if(key_value==7)
- {
- ooo= dt_c1+dt_c2+dt_c3+dt_c4+dt_c5+dt_c6+dt_c7+dt_c8;
- if(kye_7==1)
- {
- dt_c7=1;
- }
- if(ooo != 1 )
- {
- if(kye_7==2)
- {
- kye_7=0;
- dt_c7=0;
- }
- }
- }
- if(key_value==8)
- {
- ooo= dt_c1+dt_c2+dt_c3+dt_c4+dt_c5+dt_c6+dt_c7+dt_c8;
- if(kye_8==1)
- {
- dt_c8=1;
- }
- if(ooo != 1)
- {
- if(kye_8==2)
- {
- kye_8=0;
- dt_c8=0;
- }
- }
- }
- }
- /************电机驱动*************/
- void dianjiqudong1() //对电机的上行下行进行判断
- {
- if(dt_stop==1)
- {
- if(dt_sx==1)
- {
- sxdj1=1;
- sxdj2=0;
- }
- else if(dt_sx==2)
- {
- sxdj1=0;
- sxdj2=1;
- }
- if(dt_sx==0)
- {
- sxdj1=0;
- sxdj2=0;
- }
- }
- else
- {
- sxdj1=0;
- sxdj2=0;
- }
- }
- void dianjiqudong2() //电机控制开关门
- {
- if(dt_stop==0)
- {
- if(dj_3==1)
- {
- if(dj_1==1)
- {
- zydj1=1;
- zydj2=0;
- }
- if(dj_2==1)
- {
- zydj1=0;
- zydj2=1;
- }
- }
- }
- else
- {
- zydj1=0;
- zydj2=0;
- }
- }
- /*************判断程序************/
- /**电梯不动时,判断是向上还是向下**/
- void diantipanudan1() //电梯不动时,进行上下的判断
- {
- static uchar lll;
- if(dt_sx==0)
- {
- dt_stop=1;
- if(dt_cs==1)//停在一楼时
- {
- lll = dt_c2+dt_c3+dt_c4+dt_c5+dt_c6+dt_c7+dt_c8;
- if(lll != 0)
- {
- dt_sx=1;//等于一向上 ,等于二向下,等于零时不动
- shang=1;//等于一显示上,等于零不显示
- xia=0; //等于一显示下,等于零不显示
- }
- }
- if(dt_cs==2)//停在二楼时
- {
- lll=dt_c3 + dt_c4 + dt_c5 + dt_c6 + dt_c7 + dt_c8;
- if(lll != 0)
- {
- dt_sx=1;//等于一向上 ,等于二向下,等于零时不动
- shang=1;//等于一显示上,等于零不显示
- xia=0;//等于一显示下,等于零不显示
- }
- lll=dt_c1;
- if(lll != 0)
- {
- dt_sx= 2;//等于一向上 ,等于二向下
- shang=0;//等于一显示上,等于零不显示
- xia=1;//等于一显示下,等于零不显
- }
- }
- if(dt_cs==3)//停在三楼时
- {
- lll=dt_c4 + dt_c5 + dt_c6 + dt_c7 + dt_c8;
- if(lll != 0)
- {
- dt_sx=1;//等于一向上 ,等于二向下,等于零时不动
- shang=1;//等于一显示上,等于零不显示
- xia=0;//等于一显示下,等于零不显示
- }
- lll=dt_c1+dt_c2;
- if(lll != 0)
- {
- dt_sx=2;//等于一向上 ,等于二向下
- shang=0;//等于一显示上,等于零不显示
- xia=1;//等于一显示下,等于零不显示
- }
- }
- if(dt_cs==4)//停在四楼时
- {
- lll = dt_c5+dt_c6+dt_c7+dt_c8;
- if(lll != 0)
- {
- dt_sx=1;//等于一向上 ,等于二向下,等于零时不动
- shang=1;//等于一显示上,等于零不显示
- xia=0;//等于一显示下,等于零不显示
- }
- lll = dt_c1+dt_c2+dt_c3;
- if(lll != 0)
- {
- dt_sx=2;//等于一向上 ,等于二向下
- shang=0;//等于一显示上,等于零不显示
- xia=1;//等于一显示下,等于零不显示
- }
- }
- if(dt_cs==5)//停在五楼时
- {
- lll = dt_c6+dt_c7+dt_c8;
- if(lll != 0)
- {
- dt_sx=1;//等于一向上 ,等于二向下,等于零时不动
- shang=1;//等于一显示上,等于零不显示
- xia=0;//等于一显示下,等于零不显示
- }
- lll = dt_c1+dt_c2+dt_c3+dt_c4;
- if(lll != 0)
- {
- dt_sx=2;//等于一向上 ,等于二向下
- shang=0;//等于一显示上,等于零不显示
- xia=1;//等于一显示下,等于零不显示
- }
- }
- if(dt_cs==6)//停在六楼时
- {
- lll = dt_c7+dt_c8;
- if(lll != 0)
- {
- dt_sx=1;//等于一向上 ,等于二向下,等于零时不动
- shang=1;//等于一显示上,等于零不显示
- xia=0;//等于一显示下,等于零不显示
- }
- lll=dt_c1+dt_c2+dt_c3+dt_c4+dt_c5;
- if(lll != 0)
- {
- dt_sx=2;//等于一向上 ,等于二向下
- shang=0;//等于一显示上,等于零不显示
- xia=1;//等于一显示下,等于零不显示
- }
- }
- if(dt_cs==7)//停在七楼时
- {
- lll=dt_c8;
- if(lll != 0)
- {
- dt_sx=1;//等于一向上 ,等于二向下、等于零时不动
- shang=1;//等于一显示上,等于零不显示
- xia=0;//等于一显示下,等于零不显示
- }
- lll=dt_c1+dt_c2+dt_c3+dt_c4+dt_c5+dt_c6;
- if(lll != 0)
- {
- dt_sx=2;//等于一向上 ,等于二向下
- shang=0;//等于一显示上,等于零不显示
- xia=1;//等于一显示下,等于零不显示
- }
- }
- if(dt_cs==8)//停在八楼时
- {
- lll=dt_c8;
- if(lll != 0)
- {
- dt_sx=1;//等于一向上 ,等于二向下,等于零时不动
- shang=1;//等于一显示上,等于零不显示
- xia=0;//等于一显示下,等于零不显示
- }
- lll=dt_c1 + dt_c2 + dt_c3 + dt_c4 + dt_c5 + dt_c6+dt_c7;
- if(lll != 0)
- {
- dt_sx=2;//等于一向上 ,等于二向下,等于零时不动
- shang=0;//等于一显示上,等于零不显示
- xia=1;//等于一显示下,等于零不显示
- }
- }
- }
- }
- /**电梯在移动时进行向下或向上的运动判断*/
- void diantipanduan2() //向上走时进行判断,判断是否继续向上
- {
- uchar jjj;
- if(dt_sx==1) //电梯向上走
- {
- if(dt_cs==1) //在一楼时是否继续向上
- {
- jjj= dt_c2 + dt_c3 + dt_c4 + dt_c5 + dt_c6 + dt_c7 + dt_c8;
- if(jjj==0)
- {
- dt_sx=0;
- shang=0;
- }
- else
- dt_stop=1;
- }
- else if(dt_cs==2) //在二楼时
- {
- jjj= dt_c3 + dt_c4 + dt_c5 + dt_c6 + dt_c7 + dt_c8;
- if(jjj==0)
- {
- dt_sx=0;
- shang=0;
- }
- else
- dt_stop=1;
- }
- else if(dt_cs==3) //在三楼时
- {
- jjj= dt_c4 + dt_c5 + dt_c6 + dt_c7 + dt_c8;
- if(jjj==0)
- {
- dt_sx=0;
- shang=0;
- }
- else
- dt_stop=1;
- }
- else if(dt_cs==4) //在四楼时
- {
- jjj= dt_c5 + dt_c6 + dt_c7 + dt_c8;
- if(jjj==0)
- {
- dt_sx=0;
- shang=0;
- }
- else
- dt_stop=1;
- }
- else if(dt_cs==5) //在五楼时
- {
- jjj= dt_c6 + dt_c7 + dt_c8;
- if(jjj==0)
- {
- dt_sx=0;
- shang=0;
- }
- else
- dt_stop=1;
- }
- else if(dt_cs==6) //在六楼时
- {
- jjj= dt_c7 + dt_c8;
- if(jjj==0)
- {
- dt_sx=0;
- shang=0;
- }
- else
- dt_stop=1;
- }
- else if(dt_cs==7) //在七楼时
- {
- jjj=dt_c8;
- if(jjj==0)
- {
- dt_sx=0;
- shang=0;
- }
- else
- dt_stop=1;
- }
- else if(dt_cs==8) //在八楼时
- {
- dt_sx=0;
- shang=0;
- dt_stop=1;
- }
- }
- }
- void diantipanduan3() //向下走时进行判断,判断是否继续向下
- {
- uchar hhh;
- if(dt_sx==2)
- {
- if(dt_cs==1) ///在一楼时判断是否继续向下
- {
- dt_sx=0;
- xia=0;
- shang=0;
- dt_stop=1;
- // shangxiabioashi();
- }
- else if(dt_cs==2) ///在二楼时
- {
- hhh=dt_c1;
- if(hhh==0)
- {
- dt_sx=0;
- xia=0;
- }
- else
- dt_stop=1;
- }
- else if(dt_cs==3) ///在三楼时
- {
- hhh=dt_c1+dt_c2;
- if(hhh==0)
- {
- dt_sx=0;
- xia=0;
- }
- else
- dt_stop=1;
- }
- else if(dt_cs==4) ///在四楼时
- {
- hhh=dt_c1+dt_c2+dt_c3;
- if(hhh==0)
- {
- dt_sx=0;
- xia=0;
- }
- else
- dt_stop=1;
- }
- else if(dt_cs==5) ///在五楼时
- {
- hhh=dt_c1+dt_c2+dt_c3+dt_c4;
- if(hhh==0)
- {
- dt_sx=0;
- xia=0;
- }
- else
- dt_stop=1;
- }
- else if(dt_cs==6) ///在六楼时
- {
- hhh=dt_c1+dt_c2+dt_c3+dt_c4+dt_c5;
- if(hhh==0)
- {
- dt_sx=0;
- xia=0;
- }
- else
- dt_stop=1;
- }
- else if(dt_cs==7) ///在七楼时
- {
- hhh=dt_c1+dt_c2+dt_c3+dt_c4+dt_c5+dt_c6;
- if(hhh==0)
- {
- dt_sx=0;
- xia=0;
- }
- else
- dt_stop=1;
- }
- else if(dt_cs==8) ///在八楼时
- {
- hhh=dt_c1+dt_c2+dt_c3+dt_c4+dt_c5+dt_c6+dt_c7;
- if(hhh==0)
- {
- dt_sx=0;
- xia=0;
- }
- else
- dt_stop=1;
- }
- }
- }
- /**********电梯总判断************/
- void diantiting() //控制电梯停靠
- {
- uchar ggg,fff;
- ggg=dt_c1+dt_c2+dt_c3+dt_c4+dt_c5+dt_c6+dt_c7+dt_c8;
- if(ggg != 0)
- {
- if(dt_stop == 1 )
- {
- if(dt_sx != 0)
- {
- fff++;
- if(fff>=20)
- {
- fff=0;
- if(dt_sx == 1) //向上走
- {
- dt_cs++;
- shang=1;
- shangxiabioashi();
- }
- if(dt_sx == 2) //向下走
- {
- dt_cs--;
- xia=1;
- shangxiabioashi();
- }
- if(dt_cs==1) //是否在一楼停下
- {
- if(dt_c1==1)
- {
- dt_c1=0;
- dt_stop=0;
- kye_1=0;
- value=0;
- l1=1;
- S=0;
- if(l1==1)
- {
- l1=0;
- SendData(0x0a);
- SendData(0x01);
- SendData(0x0b);
- }
- }
- }
- else if(dt_cs==2) //是否在二楼停下
- {
- if(dt_c2==1)
- {
- dt_c2=0;
- dt_stop=0;
- kye_2=0;
- value1=0;
- l2=1;
- S=0;
- if(l2==1)
- {
- l2=0;
- SendData(0x0a);
- SendData(0x02);
- SendData(0x0b);
- }
- }
- }
- else if(dt_cs==3) //三楼
- {
- if(dt_c3==1)
- {
- dt_c3=0;
-
- dt_stop=0;
- kye_1=0;
- value1=0;
- l3=1;
- S=0;
- if(l3==1)
- {
- l3=0;
- SendData(0x0a);
- SendData(0x03);
- SendData(0x0b);
- }
- }
- }
- else if(dt_cs==4) //四楼
- {
- if(dt_c4==1)
- {
- dt_c4=0;
- dt_stop=0;
- kye_4=0;
- value1=0;
- l4=1;
- S=0;
- if(l4==1)
- {
- l4=0;
- SendData(0x0a);
- SendData(0x04);
- SendData(0x0b);
- }
- }
- }
- else if(dt_cs==5) //五楼
- {
- if(dt_c5==1)
- {
- dt_c5=0;
- dt_stop=0;
- kye_5=0;
- value1=0;
- l5=1;
- S=0;
- if(l5==1)
- {
- l5=0;
- SendData(0x0a);
- SendData(0x05);
- SendData(0x0b);
- }
- }
- }
- else if(dt_cs==6) //六楼
- {
- if(dt_c6==1)
- {
- dt_c6=0;
- dt_stop=0;
- kye_6=0;
- value1=0;
- l6=1;
- S=0;
- if(l6==1)
- {
- l6=0;
- SendData(0x0a);
- SendData(0x06);
- SendData(0x0b);
- }
- }
- }
- else if(dt_cs==7) //七楼
- {
- if(dt_c7==1)
- {
- dt_c7=0;
- dt_stop=0;
- kye_7=0;
- value1=0;
- l7=1;
- S=0;
- if(l7==1)
- {
- l7=0;
- SendData(0x0a);
- SendData(0x07);
- SendData(0x0b);
- }
- }
- }
- else if(dt_cs==8) //八楼
- {
- if(dt_c8==1)
- {
- dt_c8=0;
- dt_stop=0;
- kye_8=0;
- value1=0;
- l8=1;
- S=0;
- if(l8==1)
- {
- l8=0;
- SendData(0x0a);
- SendData(0x08);
- SendData(0x0b);
- }
- }
- }
- }
- }
- }
- }
- if(dt_stop == 0)
- {
- value++;
- if(value%5 == 0)
- {
- if(dt_sx == 1)
- {
- // shang=~shang;
- }
- if(dt_sx == 2)
- {
- // xia=~xia;
- }
- }
- if(value >= 20)
- {
- value=0;
- diantipanduan2(); //电体向上时,进行是否继续向上的判别
- diantipanduan3(); //电梯向下时,进行是否继续向下的判别
- }
- }
- }
- void time_init() //定时器0的初始化
- {
- TMOD = 0x01; //定时器0、工作方式1、定时模式、非门控方式
- TH0 =0x0D8;
- TL0 =0x0F0;; // 0x3CB0=15536,方式一,定时50ms
- EA = 1; //开总中断
- ET0 = 1; //开定时器0中断
- TR0 = 1; //允许定时器0定时
- EX0=1;
- }
- void main() //主函数
- {
- lcd_init(); //1602初始化
- time_init(); //定时器初始化
- while(1)
- {
- key(); //矩阵按键的识别
- if(key_value < 20)
- {
- if(dt_sx == 0)
- {
- value = 0;
- dt_stop = 1;
- }
- change(); //矩阵数据的转换
- }
- yaoquloucheng();
- diantipanudan1(); //当电梯停下时进行运动判断
- dangqianlouceng(); //显示函数
- shangxiabioashi();
- if(time_ting==1)
- {
- time_ting=0;
- diantiting(); //电梯总控制
- }
- dianjiqudong1(); //电机驱动上下楼
- dianjiqudong2(); //电机驱动开关门
- }
- }
- void zhongduan() interrupt 0 //外部中断触发警报
- {
- deep=0;
- }
- void time_0() interrupt 1 //定时器函数
- {
- TH0 = (65534-45872)/256;
- TL0 = (65534-45872)%256; //重新装载初值
- value1 ++;
- time_ms++;
- S++;
- if(time_ms==8)
- {
- time_ms=1;
- time_ting=1;
- }
- if(S==40)
- {
- dj_1=1;
- dj_3=1;
- }
- if(S==80)
- {
- dj_1=0;
- dj_3=0;
- }
- if(S==100)
- {
- dj_2=1;
- dj_3=1;
- }
- if(S==140)
- {
- dj_2=0;
- dj_3=0;
- dj_1=0;
- }
- }
复制代码
程序:
简易电梯.zip
(60.43 KB, 下载次数: 11)
|