极客工坊外包任务--【红绿灯】
本帖最后由 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);
}
}
{:soso_e204:}这个不是单片机课标准课程么,为啥要外包呢 作业从来都是外包的 Ansifa 发表于 2012-11-18 21:02 static/image/common/back.gif
这个不是单片机课标准课程么,为啥要外包呢
人家给任务,我就接任务呗 本帖最后由 偶是谁 于 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-9-17 21:38 编辑
程序直接复制出错的,直接敲一篇。别问我为什么,找了3天,也没找出来为什么出错。 想在红绿灯程序中加一个按键,实现倒计时程序的暂停和恢复(暂停时间处恢复倒计时),找了好久也没这方面的资料,不是偷懒,C语言也没学过,真不知道该如何写,特请教各位大神。 偶是谁 发表于 2016-9-5 23:11 static/image/common/back.gif
想在红绿灯程序中加一个按键,实现倒计时程序的暂停和恢复(暂停时间处恢复倒计时),找了好久也没这方面的 ...
这个就是在正常的倒计时过程中,看你的数码管怎么写了,如果是持续刷新的话,你可以考虑用中断0,(IO2),按下按键时进入中断函数,数码管持续刷新一个数直到这个键被按下 本帖最后由 偶是谁 于 2016-9-17 21:30 编辑
zjz5717 发表于 2016-9-6 22:12 static/image/common/back.gif
这个就是在正常的倒计时过程中,看你的数码管怎么写了,如果是持续刷新的话,你可以考虑用中断0,(IO2), ...
谢谢,用的中断0能暂停了
页:
[1]