问题
设计一个51单片机流水灯项目 实现
①红灯亮三秒熄灭;
②绿灯亮30s;
④绿灯亮的同时,黄灯开始点亮,5s后熄灭。5s后再点亮……交替闪烁,间隔5s,一共闪烁6次,与绿灯同时熄灭;
⑤蓝灯点亮2s熄灭;
⑥紫灯点亮5s后熄灭。
程序设计
本题可分为三个步骤对此项目进行设计,分别为①;②④;⑤⑥;且程序设计时可以尽量以调用子函数的形式进行设计,方便以后修改,具体步骤如下:
#include<reg51.h>//头文件
#define uint unsigned int
typedef unsigned char u8;//对数据类型进行声明定义
//led灯定义
sbit LED_red = P1^0;
sbit LED_yellow = P1^1;
sbit LED_green = P1^2;
sbit LED_blue = P1^3;
sbit LED_purple = P1^4;
void delay_ms(uint ms);
void first_phase();
void second_phase();
void third_phase();
void delay_ms(uint ms)// 延时子程序 1000ms = 1s
{
uint a,b;
for(a = ms;a > 0;a--)
for(b = 123;b > 0;b--);
}
void first_phase()//第一阶段
{
LED_red = 0;//红灯点亮
delay_ms(3000);//延时3s
LED_red = 1;//红灯熄灭
}
void second_phase()//第二阶段
{
u8 i;
LED_green = 0;//绿灯点亮
for(i=0;i<6;i++)
{
LED_yellow = 0;//黄灯循环交替闪烁,间隔5s
delay_ms(5000);
LED_yellow = 1;
delay_ms(5000);
}
LED_green = 1;//绿灯50s后熄灭
}
void third_phase()//第三阶段
{
LED_blue = 0;//蓝灯点亮
delay_ms(2000);//延时2s
LED_blue = 1;//蓝灯熄灭
LED_purple = 0;//紫灯点亮,protues仿真图为红色
delay_ms(5000);//延时5s
LED_purple = 1;//紫灯熄灭
}
void unity_led()//整合三个阶段
{
first_phase();//第一
second_phase();//第二
third_phase();//第三
}
int main()//主函数
{
unity_led();
return 0;
}
proteus仿真图
b站效果视频
链接: link.