Malc 发表于 2012-11-18 20:33:16

极客工坊外包任务--【红绿灯】

本帖最后由 Malc 于 2012-11-20 14:06 编辑

有谁写完了就贴出来吧
我的代码:
找到一个小bug已修复,下面的代码测试通过:

/*红灯40秒
黄灯3秒
绿灯25秒
配合二位数码管显示数字
*/
#define Duration 5 //数码管扫描时间
#define SegNum 2
#define LEDNum 3
int Light_time={40,3,25};

//digital number 0~9
char number={
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={3,2,7,6,5,4,8};//数码管a~g

char DS={9,10};//共阴极
char LED={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,OUTPUT);
    digitalWrite(seg,HIGH);
    }

for(i=0;i<SegNum;i++)
{
    pinMode(DS,OUTPUT);
    digitalWrite(DS,HIGH);
    }


for(i=0;i<LEDNum;i++)
{
    pinMode(LED,OUTPUT);
    digitalWrite(LED,LOW);
    }
timer=millis();
}
void dis(char num,char _DS)
{
int i;
for(i=0;i<8;i++)
    digitalWrite(seg,number);
for(i=0;i<SegNum;i++)
    if(i==_DS)
      digitalWrite(DS,HIGH);
    else
      digitalWrite(DS,LOW);   
delay(Duration);
for(i=0;i<SegNum;i++)//消隐
{
    digitalWrite(DS,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)
{
   digitalWrite(LED,HIGH);
   show(Light_time-timer);
   timer=(millis()-ptimer)/1000;
   Serial.println(Light_time-timer);
   }
   timer=0;
   ptimer=millis();
   digitalWrite(LED,LOW);
}
}

Ansifa 发表于 2012-11-18 21:02:31

{:soso_e204:}这个不是单片机课标准课程么,为啥要外包呢

wing 发表于 2012-11-19 00:12:03

作业从来都是外包的

Malc 发表于 2012-11-19 10:00:10

Ansifa 发表于 2012-11-18 21:02 static/image/common/back.gif
这个不是单片机课标准课程么,为啥要外包呢

人家给任务,我就接任务呗

偶是谁 发表于 2016-8-31 21:34:40

本帖最后由 偶是谁 于 2016-8-31 22:07 编辑

非常,非常感谢版主
程序对初学者太有用了
没学过C语言
timer=(millis()-ptimer)/1000;
这句看不懂,倒计时1秒间隔也不知道怎么来的
极客工坊外包任务,版块可以大力发展壮大
没有好的程序参考,学到的永远是皮毛
一个红绿灯程序网上一大堆arduino垃圾,就这个靠谱

还改了个KEEP跑步机
int Light_time={10,13,15,11,8,22,7,17};//8组循环倒计时组,时间是随意定的

偶是谁 发表于 2016-8-31 21:41:26

本帖最后由 偶是谁 于 2016-9-17 21:38 编辑

程序直接复制出错的,直接敲一篇。别问我为什么,找了3天,也没找出来为什么出错。

偶是谁 发表于 2016-9-5 23:11:04

想在红绿灯程序中加一个按键,实现倒计时程序的暂停和恢复(暂停时间处恢复倒计时),找了好久也没这方面的资料,不是偷懒,C语言也没学过,真不知道该如何写,特请教各位大神。

zjz5717 发表于 2016-9-6 22:12:23

偶是谁 发表于 2016-9-5 23:11 static/image/common/back.gif
想在红绿灯程序中加一个按键,实现倒计时程序的暂停和恢复(暂停时间处恢复倒计时),找了好久也没这方面的 ...

这个就是在正常的倒计时过程中,看你的数码管怎么写了,如果是持续刷新的话,你可以考虑用中断0,(IO2),按下按键时进入中断函数,数码管持续刷新一个数直到这个键被按下

偶是谁 发表于 2016-9-6 22:48:38

本帖最后由 偶是谁 于 2016-9-17 21:30 编辑

zjz5717 发表于 2016-9-6 22:12 static/image/common/back.gif
这个就是在正常的倒计时过程中,看你的数码管怎么写了,如果是持续刷新的话,你可以考虑用中断0,(IO2), ...

谢谢,用的中断0能暂停了
页: [1]
查看完整版本: 极客工坊外包任务--【红绿灯】