1、工作原理:
开关SP1 接在P3.7/RD 管脚上,在AT89S51 单片机的P1 端口接有四个发光二极管,上电的时候,L1 接在P1.0 管脚上的发光二极管在闪烁,当每一次按下开关SP1 的时候,L2 接在P1.1 管脚上的发光二极管在闪烁,再按下开关SP1 的时候,L3 接在P1.2 管脚上的发光二极管在闪烁,再按下开关SP1的时候,L4 接在P1.3 管脚上的发光二极管在闪烁,再按下开关SP1 的时候,又轮到L1 在闪烁了,如此轮流下去。
2、电路图:
3、C语言程序:
- #include <AT89X51.H>
- unsigned char ID;
- void delay10ms(void)
- {
- unsigned char i,j;
- for(i=20;i>0;i--)
- for(j=248;j>0;j--);
- }
- void delay02s(void)
- {
- unsigned char i;
- for(i=20;i>0;i--)
- {delay10ms();
- }
- }
- void main(void)
- { while(1)
- { if(P3_7==0)
- {delay10ms();
- if(P3_7==0)
- {
- ID++;
- if(ID==4)
- {
- ID=0;
- }
- while(P3_7==0);
- }
- }
- switch(ID)
- { case 0:
- P1_0=~P1_0;
- delay02s();
- break;
- case 1:
- P1_1=~P1_1;
- delay02s();
- break;
- case 2:
- P1_2=~P1_2;
- delay02s();
- break;
- case 3:
- P1_3=~P1_3;
- delay02s();
- break;
- }
- }
- }
复制代码
4、出现问题:
不断切换开关,会发现有的灯不会熄灭,会亮,也就是有正常灯闪,还有其他的灯会亮,但是不会闪。我把灯闪后延时的语句后面把对应灯置高电平(如:P1_3=~P1_3;
delay02s();
break;),灯不闪了,但是不会出现灯同时亮的现象。
谁知道这个问题在哪里,麻烦指点一下。
|