|
我想做一个简单模拟电梯上升与下降,并且有不同的灯亮
一共三个按键,一个上升,一个下降,一个暂停,
如果我不对灯的亮灭进行赋值,那么三个按键每个都能满足要求,
可是如果对灯进行赋值,那么如果上升的时候我按下下降键,数码管显示就会清零,
想请大家帮我解答一下并改正,谢谢!!!
仿真图与代码和HEX文件都在附件中。
单片机源程序如下:
- #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--;
- }
- }
- }
复制代码
|
|