本次模拟使用两组红绿灯
- 组一绿灯亮3s后闪烁三次(组二红灯持续亮)
- 绿灯闪烁后熄灭,黄灯闪烁6次(组二红灯持续亮)
- 组二红灯熄灭,组一红灯亮,组二绿灯亮3s后闪烁三次(组一红灯持续亮)
- 绿灯闪烁后熄灭,黄灯闪烁6次(组一红灯持续亮)
- ......循环上面步骤
硬件连接
硬件:普中-7STC89C516RD+
绿灯D3(led3)接P21、 黄灯D4(led4)接P22、 红灯D5(led5)接P23
绿灯D6(led6)接P24、 黄灯D7(led7)接P25、 红灯D8(led8)接P26
sbit led1 = P2 ^ 0; //定义管脚
//组一
sbit led3 = P2 ^ 1;//绿灯
sbit led4 = P2 ^ 2;//黄灯
sbit led5 = P2 ^ 3;//红灯
//组二
sbit led6 = P2 ^ 4;
sbit led7 = P2 ^ 5;
sbit led8 = P2 ^ 6;
延时函数------STC-ISP自动生成
void Delay3000ms() //延时1000ms(1s=1000ms=1000000us) STC-ISP内生成的函数
{
unsigned char i, j, k;
i = 22;
j = 3;
k = 227;
do
{
do
{
while (--k);
}
while (--j);
}
while (--i);
}
void Delay500ms() //延时500ms(1s=1000ms=1000000us)
{
unsigned char i, j, k;
i = 4;
j = 129;
k = 119;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
亮灯函数编写
void Green1()
{
led3 = 0; //组一绿灯亮
Delay3000ms();
led3 = 1; //组一绿灯灭
for (i = 0; i < 3; i++) //绿灯闪烁3次
{
led3 = 0;
Delay500ms();//发光到熄灭之间的时间间隔
led3 = 1;
Delay500ms();//熄灭后到下一次发光之间的时间间隔
}
}
void yellow1()
{
//黄灯闪烁6次
for (i = 0; i < 6; i++)
{
led4 = 0; //黄灯亮
Delay500ms();//发光到熄灭之间的时间间隔
led4 = 1; //黄灯灭
Delay500ms();//熄灭后到下一次发光之间的时间间隔
}
}
void Green2()
{
led6 = 0; //组一绿灯亮
Delay3000ms();
//绿灯闪烁3次
for (i = 0; i < 3; i++)
{
led6 = 0;
Delay500ms();//发光到熄灭之间的时间间隔
led6 = 1;
Delay500ms();//熄灭后到下一次发光之间的时间间隔
}
}
void yellow2()
{
//黄灯闪烁
for (i = 0; i < 6; i++)
{
led7 = 0; //黄灯亮
Delay500ms();//发光到熄灭之间的时间间隔
led7 = 1; //黄灯灭
Delay500ms();//熄灭后到下一次发光之间的时间间隔
}
}
完整代码
#include "reg52.h"
//定义管脚
//组一
sbit led3 = P2 ^ 1;//绿灯
sbit led4 = P2 ^ 2;//黄灯
sbit led5 = P2 ^ 3;//红灯
//组二
sbit led6 = P2 ^ 4;
sbit led7 = P2 ^ 5;
sbit led8 = P2 ^ 6;
int i;
void Delay3000ms() //延时1000ms(1s=1000ms=1000000us) STC-ISP内生成的函数
{
unsigned char i, j, k;
i = 22;
j = 3;
k = 227;
do
{
do
{
while (--k);
}
while (--j);
}
while (--i);
}
void Delay500ms() //延时500ms(1s=1000ms=1000000us)
{
unsigned char i, j, k;
i = 4;
j = 129;
k = 119;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void Green1()
{
led3 = 0; //组一绿灯亮
Delay3000ms();
led3 = 1; //组一绿灯灭
for (i = 0; i < 3; i++) //绿灯闪烁3次
{
led3 = 0;
Delay500ms();//发光到熄灭之间的时间间隔
led3 = 1;
Delay500ms();//熄灭后到下一次发光之间的时间间隔
}
}
void yellow1()
{
//黄灯闪烁6次
for (i = 0; i < 6; i++)
{
led4 = 0; //黄灯亮
Delay500ms();//发光到熄灭之间的时间间隔
led4 = 1; //黄灯灭
Delay500ms();//熄灭后到下一次发光之间的时间间隔
}
}
void Green2()
{
led6 = 0; //组一绿灯亮
Delay3000ms();
//绿灯闪烁3次
for (i = 0; i < 3; i++)
{
led6 = 0;
Delay500ms();//发光到熄灭之间的时间间隔
led6 = 1;
Delay500ms();//熄灭后到下一次发光之间的时间间隔
}
}
void yellow2()
{
//黄灯闪烁
for (i = 0; i < 6; i++)
{
led7 = 0; //黄灯亮
Delay500ms();//发光到熄灭之间的时间间隔
led7 = 1; //黄灯灭
Delay500ms();//熄灭后到下一次发光之间的时间间隔
}
}
void main()
{
while (1)
{
led8 = 0; //第二组红灯亮
Green1();
yellow1();
led8 = 1; //第二组红灯灭
led5 = 0; //第一组红灯亮
Green2();
yellow2();
led5 = 1; //第一组红灯灭
}
}
在keil编写完代码后运行,连接单片机,打开STC-ISP,按如下图操作,若单片机提前通电,在点击下载/编程后需要重新上电(按开关重启)方可成功,加油