小华盛顿
发表于 2015-5-28 22:30:08
终于找到原因了,原来是n必须要设置成 long int 否则会溢出。:):)
ximocnc
发表于 2015-9-5 22:48:24
庚影! 发表于 2013-7-6 21:45 static/image/common/back.gif
用楼主的秒表代码出现一个问题 就是所有数值显示为0无法变化
稍微修改了下 能运行了 时间也不用去调整了
...
用版主的代码一直都是0找好好久 用了27楼的代码 成功了 找原因中
firelighter
发表于 2016-1-30 17:06:41
本帖最后由 firelighter 于 2016-2-18 20:11 编辑
我用arduino r3板子,显示不正常,1,5,6不用正常显示,后改如下,ok
//设置阴极接口
int a = 2 ;
int b = 3;
int c = 4;
int d = 5;
int e = 6;
int f = 7;
int g = 8;
int p = 9;
//设置阳极接口
int d4 = 10;
int d3 = 11;
int d2 = 12;
int d1 = 13;
//设置变量
long n = 0;
int x = 100;
int del = 55;//此处数值对时钟进行微调
byte segs = { a, b, c, d, e, f, g };
byte seven_seg_digits = {0,0,0,0,0,0,1 ,// = 0
1,0,0,1,1,1,1 ,// = 1
0,0,1,0,0,1,0 ,// = 2
0,0,0,0,1,1,0 ,// = 3
1,0,0,1,1,0,0 ,// = 4
0,1,0,0,1,0,0 ,// = 5
0,1,0,0,0,0,0 ,// = 6
0,0,0,1,1,1,1 ,// = 7
0,0,0,0,0,0,0 ,// = 8
0,0,0,0,1,0,0 // = 9
};
void setup()
{
pinMode(d1, OUTPUT);
pinMode(d2, OUTPUT);
pinMode(d3, OUTPUT);
pinMode(d4, OUTPUT);
pinMode(a, OUTPUT);
pinMode(b, OUTPUT);
pinMode(c, OUTPUT);
pinMode(d, OUTPUT);
pinMode(e, OUTPUT);
pinMode(f, OUTPUT);
pinMode(g, OUTPUT);
pinMode(p, OUTPUT);
}
void loop()
{
clearLEDs();
pickDigit(1);
lightSegments((n/x/1000)%10);
delayMicroseconds(del);
clearLEDs();
pickDigit(2);
lightSegments((n/x/100)%10);
delayMicroseconds(del);
clearLEDs();
pickDigit(3);
dispDec(3);
lightSegments((n/x/10)%10);
delayMicroseconds(del);
clearLEDs();
pickDigit(4);
lightSegments(n/x%10);
delayMicroseconds(del);
n++;
if (digitalRead(13) == HIGH)
{
n = 0;
}
}
void pickDigit(int x)//定义pickDigit(x),其作用是开启dx端口
{
digitalWrite(d1, LOW);
digitalWrite(d2, LOW);
digitalWrite(d3, LOW);
digitalWrite(d4, LOW);
switch(x)
{
case 1:
digitalWrite(d1, HIGH);
break;
case 2:
digitalWrite(d2, HIGH);
break;
case 3:
digitalWrite(d3, HIGH);
break;
default:
digitalWrite(d4, HIGH);
break;
}
}
void dispDec(int x)//设定开启小数点
{
digitalWrite(p, LOW);
}
void clearLEDs()//清屏
{
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(e, HIGH);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);
digitalWrite(p, HIGH);
}
// 点亮对应数字的数码管
void lightSegments(int x) {
for (int i = 0; i <7 ; i++) {
digitalWrite(segs, seven_seg_digits);
}
}
MWD--文化易人
发表于 2018-3-5 22:33:16
好贴学习了,顶一个。非常实用的程序。