1.要实现的效果
利用Keil和Proteus实现以下的功能:
- 开关打开时,循环:0145闪烁3次+自上而下流水灯1次;
- 开关关闭时,循环:2367闪烁3次+自下而上流水灯1次。
说明一下,我使用的软件版本是Keil uVision2
和Proteus7
。
为了实现以上的功能,我将LED接在了P0口上,将开关接在了P1.0上。
2.硬件清单
硬件 | 数量 | 备注 |
---|---|---|
单片机 | 1 | 80C51 |
开关 | 3 | 单刀单掷开关 |
电阻 | 8 | 100Ω |
电源 | 1 | 5V |
灯 | 8 | 黄色LED |
3.硬件连接
这里的开关弄多了,其实只需要一个就可以。
4.代码展示
#include<reg51.h>
#include<intrins.h>
short led1;
short flag_0145 = 0;
short flag_2367 = 0;
sbit switch1 = P1^0;
void delay(unsigned int i)
{
i*=100;
while(--i);
}
void main()
{
while(1)
{
//开始三次的闪灯
if(switch1) //开关1关闭 --> 0145灯闪烁三次 + 往下的流水灯
{
if(flag_0145 < 3)
{
P0 = 0xCC;
delay(500);
P0 = 0xFF;
delay(500);
flag_0145++;
led1 = 0x7F;
}
flag_2367 = 0;
if(flag_0145 == 3) //闪灯结束,开始流水灯
{
led1 = _crol_(led1,1);
P0 = led1;
if(led1 == 0x7F)
flag_0145 = 0;
delay(250);
}
}
else //开关1关闭 --> 2367灯闪烁三次 + 往上的流水灯
{
if(flag_2367 < 3)
{
P0 = ~0xCC;
delay(500);
P0 = 0xFF;
delay(500);
flag_2367++;
led1 = 0xFE;
}
flag_0145 = 0;
if(flag_2367 == 3) //闪灯结束,开始流水灯
{
led1 = _cror_(led1,1);
P0 = led1;
if(led1 == 0xFE)
flag_2367 = 0;
delay(250);
}
}
}
}