极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

楼主: 弘毅

arduino学习笔记13 - 4位数码管实验

  [复制链接]
发表于 2015-5-28 22:30:08 | 显示全部楼层
终于找到原因了,原来是n必须要设置成 long int 否则会溢出。
回复 支持 反对

使用道具 举报

发表于 2015-9-5 22:48:24 | 显示全部楼层
庚影! 发表于 2013-7-6 21:45
用楼主的秒表代码出现一个问题 就是所有数值显示为0无法变化
稍微修改了下 能运行了 时间也不用去调整了
...

用版主的代码一直都是0  找好好久 用了27楼的代码 成功了 找原因中
回复 支持 反对

使用道具 举报

发表于 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[7] = { a, b, c, d, e, f, g };

byte seven_seg_digits[10][7] = {  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[x]);
   }
}

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2018-3-5 22:33:16 | 显示全部楼层
好贴学习了,顶一个。非常实用的程序。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-24 06:15 , Processed in 0.040615 second(s), 20 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表