|
我想做一個簡單模擬電梯上升與下降,并且有不同的燈亮
一共三個按鍵,一個上升,一個下降,一個暫停,
如果我不對燈的亮滅進行賦值,那么三個按鍵每個都能滿足要求,
可是如果對燈進行賦值,那么如果上升的時候我按下下降鍵,數碼管顯示就會清零,
想請大家幫我解答一下并改正,謝謝!!!
仿真圖與代碼和HEX文件都在附件中。
RENCC%L{2ZMZ64$%PL_EK)2.png (279.29 KB, 下載次數: 44)
下載附件
仿真圖
2019-6-6 15:18 上傳
單片機源程序如下:
- #include "reg51.h"
- sbit led1=P1^0;//紅燈表示下降
- sbit led2=P1^1;//綠燈表示上升
- sbit led3=P1^2;//黃燈表示暫停
- sbit key1=P3^0;
- sbit key2=P3^1;
- sbit stop=P3^7; //開始與暫停按鍵
- char a[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
- int q=0,w=0,i=0,j=0;
- void delay(unsigned int m)
- {
- int i,j;
- for(i=0;i<m;i++)
- for(j=0;j<125;j++);
- }
- void xianshi();
- void zanting();
- main()
- {
- EA=1;
- TMOD=0X11;
- TH0=15536/256;
- TL0=15536%256;
- TH1=15536/256;
- TL1=15536%256;
- ET1=1;
- IT0=1;
- EX0=1;
- IT1=1;
- EX1=1;
- ET0=1;
- TR0=0;
- TR1=0;
- led1=led2=led3=0;
- while(1)
- {
-
- xianshi();
- zanting();
- if(q>=3)
- {
- q=3;
- w=0;
- }
- if(q<0)
- {
- q=0;
- w=0;
- }
- }
- }
- void zanting()
- {
- if(stop==0)
- {
- delay(10);
-
- if(TR0==1)
- {
- TR0=0;
- }
- if(TR1==1)
- {
- TR1=0;
- }
-
- }
- }
- void xianshi()//樓層
- {
- key1=0;
- key2=1;
- P2=a[q];
- delay(11);
- key1=key2=1;
- key2=0;
- key1=1;
- P2=a[w];
- delay(11);
- key1=key2=1;
- }
- void shangsheng() interrupt 0
- {
- TR0=1;
- TR1=0;
-
- }
- void xiajiang() interrupt 2
- {
- TR1=1;
- TR0=0;
- }
- void dingshi0() interrupt 1
- {
- TH0=15536/256;
- TL0=15536%256;
- i++;
- if(i==20)
- {
- i=0;
- w++;
- led2=1;//上升時綠燈亮
- if(w==10)
- {
- w=0;
- q++;
- }
- }
- }
- void dingshi1() interrupt 3
- {
- TH1=15536/256;
- TL1=15536%256;
- i++;
- if(i==20)
- {
- i=0;
- w--;//下降時紅燈亮
- if(w==-1)
- {
- w=9;
- q--;
- }
- }
- }
復制代碼
|
-
-
新建文件夾.rar
2019-6-6 15:17 上傳
點擊文件名下載附件
18.2 KB, 下載次數: 5
仿真圖與代碼
|