本帖最后由 Malc 于 2012-11-20 14:06 编辑
有谁写完了就贴出来吧
我的代码:
找到一个小bug已修复,下面的代码测试通过:
- /*红灯40秒
- 黄灯3秒
- 绿灯25秒
- 配合二位数码管显示数字
- */
- #define Duration 5 //数码管扫描时间
- #define SegNum 2
- #define LEDNum 3
- int Light_time[3]={40,3,25};
- //digital number 0~9
- char number[10][7]={
- 1,1,1,1,1,1,0,
- 0,1,1,0,0,0,0,
- 1,1,0,1,1,0,1,
- 1,1,1,1,0,0,1,
- 0,1,1,0,0,1,1,
- 1,0,1,1,0,1,1,
- 1,0,1,1,1,1,1,
- 1,1,1,0,0,0,0,
- 1,1,1,1,1,1,1,
- 1,1,1,1,0,1,1,
- };
- /*
- arduino引脚 2 3 4 5 6 7 8
- 数码管引脚 7 6 4 2 1 9 10 5
- a b c d e f g dp
- 不是所有数码管都是这样的管脚排列
- 我的数码管管脚为:
- a b c d e f g dp
- 6 7 9 1 2 4 5 10
- 共阴极需要三极管扩流,如NPN8050
- */
- char seg[7]={3,2,7,6,5,4,8};//数码管a~g
- char DS[SegNum]={9,10};//共阴极
- char LED[LEDNum]={11,12,13};// red,yellow,green
- char sign=0;
- unsigned long timer=0,ptimer=0;
- void setup()
- {
- Serial.begin(9600);
- int i;
- for(i=0;i<8;i++)
- {
- pinMode(seg[i],OUTPUT);
- digitalWrite(seg[i],HIGH);
- }
-
- for(i=0;i<SegNum;i++)
- {
- pinMode(DS[i],OUTPUT);
- digitalWrite(DS[i],HIGH);
- }
-
-
- for(i=0;i<LEDNum;i++)
- {
- pinMode(LED[i],OUTPUT);
- digitalWrite(LED[i],LOW);
- }
- timer=millis();
- }
- void dis(char num,char _DS)
- {
- int i;
- for(i=0;i<8;i++)
- digitalWrite(seg[i],number[num][i]);
- for(i=0;i<SegNum;i++)
- if(i==_DS)
- digitalWrite(DS[i],HIGH);
- else
- digitalWrite(DS[i],LOW);
- delay(Duration);
- for(i=0;i<SegNum;i++)//消隐
- {
- digitalWrite(DS[i],HIGH);
- }
- }
- void show(unsigned long timer)
- {
- dis(timer/10,0);
- dis(timer%10,1);
- }
- void loop()
- {
- int i;
- for(i=0;i<LEDNum;i++)
- {
- while(timer<=Light_time[i])
- {
- digitalWrite(LED[i],HIGH);
- show(Light_time[i]-timer);
- timer=(millis()-ptimer)/1000;
- Serial.println(Light_time[i]-timer);
- }
- timer=0;
- ptimer=millis();
- digitalWrite(LED[i],LOW);
- }
- }
复制代码 |