【Arduino】交通灯控制设计 一位数码管

实现现象
数码管计时控制红、黄、绿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
在这里插入图片描述
相关文章

【Arduino】交通灯控制设计 四位数码管

猜你喜欢

转载自blog.csdn.net/weixin_43319452/article/details/112003802