小华盛顿 发表于 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

好贴学习了,顶一个。非常实用的程序。
页: 1 2 3 [4]
查看完整版本: arduino学习笔记13 - 4位数码管实验