实现现象
数码管计时控制红、黄、绿LED灯循环显示交通灯,红灯亮5-10秒,依次黄灯亮3-5秒,依次绿灯亮5-10秒 ,然后循环显示。
电路连接
电路连接参考文章
【Arduino基础】一位数码管实验
源代码及注释
#define LEDred 10//定义红灯引脚
#define LEDyell 9//定义黄灯引脚
#define LEDgree 11//定义绿灯引脚
int LEDCount=8;//定义段码,这里是共阳段码,如果是共阴只需要在程序中把读到的值按位取反即可,使用“~”取反符号
const unsigned char dofly_DuanMa[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
int LEDPins[] = {0,1,2, 3, 4, 5, 6, 7, }; // 对应的LED引脚
void setup() {
// 循环设置,把对应的LED都设置成输出
for (int thisLED = 0; thisLED < LEDCount; thisLED++){
pinMode(LEDPins[thisLED], OUTPUT);
}
pinMode(LEDred, OUTPUT);//红灯引脚为输出引脚
pinMode(LEDyell, OUTPUT);//黄灯引脚为输出引脚
pinMode(LEDgree, OUTPUT);//绿灯引脚为输出引脚
}
// 数据处理,把需要处理的byte数据写到对应的引脚端口。
void deal(unsigned char value){
for(int i=0;i<8;i++){
digitalWrite(LEDPins[i],bitRead(value,i));//使用了bitWrite函数,"value"指高电平或低电平,读取每个管角的值
}
}
// 主循环
void loop() {
analogWrite(LEDred,HIGH);
// 循环显示9-0 数字
for(int i=9;i>=0;i--){
analogWrite(LEDred,HIGH);//输出高电平,红灯亮
deal(dofly_DuanMa[i]);//读取对应的段码值
delay(1000); //调节延时,2 个数字之间的停留间隔
}
analogWrite(LEDred,LOW);//输出低电平,红灯灭
// 循环显示2-0 数字
for(int i=2;i>=0;i--){
analogWrite(LEDyell,HIGH);//输出高电平,黄灯亮
deal(dofly_DuanMa[i]);//读取对应的段码值
delay(1000); //调节延时,2 个数字之间的停留间隔
}
analogWrite(LEDyell,LOW);//输出低电平,黄灯灭
// 循环显示9-0 数字
for(int i=9;i>=0;i--){
analogWrite(LEDgree,HIGH);输出高电平,绿灯亮
deal(dofly_DuanMa[i]);//读取对应的段码值
delay(1000); //调节延时,2 个数字之间的停留间隔
}
analogWrite(LEDgree,LOW);//输出低电平,绿灯灭
}
实验现象
红灯亮10s
依次黄灯亮3s
依次绿灯亮10s
相关文章