多謝51黑上的各位大神提供的資料以及思路,讓我得以打出來這個程序,將這個程序拿出來在返還給大家。51黑很精彩!
附上直流電機的驅動電路(可以將該電梯用步進電機來帶動,我用的是直流電機)。
0.jpeg (28.97 KB, 下載次數: 73)
下載附件
2019-7-20 20:10 上傳
單片機源程序如下:
- #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)
2019-7-20 20:14 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|