极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

123
返回列表 发新帖
楼主: 弘毅

arduino学习笔记5 - 数码管实验

  [复制链接]
发表于 2013-5-29 09:03:33 | 显示全部楼层
伯德 发表于 2013-5-29 01:25
找本 C程序设计语言  学一遍.http://book.douban.com/subject/1139336/

这本书我有实体书。。现在想学C++有好书介绍么?
回复 支持 反对

使用道具 举报

发表于 2013-7-2 17:10:23 | 显示全部楼层
本帖最后由 liang647 于 2013-7-2 17:17 编辑

我在这个电路的基础上加上了强哥帖子中的电位器来控制显示数字,使用map()来将0-1023分配给了0-9,代码如下,为什么只能显示0-8?9显示不出来呢?我把1023改成1000就可以了。。这是为什么呢?很疑惑啊。。。求弘毅大哥给讲解下。。
稍稍描述一下电路图,使用的5v电压,主要电路与本教程的差不过,数码管串联了220欧电阻,电位器的阳极也接在5v上。
PS:弘毅大哥的代码中为什么经常用byte这个类型的变量?我在写代码的时候使用过byte,但是也不能全部显示0-9,更改为int后才达到现在的效果,请问byte是个什么类型的变量?
  1. /*
  2. 数码管实验
  3. 2013-7-2
  4. fabien liang
  5. */

  6. //digits definition
  7. int digits[10][8] =
  8. {
  9.   {0,0,1,0,0,0,0,1},//0
  10.   {0,1,1,0,1,1,1,1},//1
  11.   {0,0,1,1,0,0,1,0},//2
  12.   {0,0,1,0,0,1,1,0},//3
  13.   {0,1,1,0,1,1,0,0},//4
  14.   {1,0,1,0,0,1,0,0},//5
  15.   {1,0,1,0,0,0,0,0},//6
  16.   {0,0,1,0,1,1,1,1},//7
  17.   {0,0,1,0,0,0,0,0},//8
  18.   {0,0,1,0,0,1,0,0} //9
  19. };
  20. void digitWrite(int digit)
  21. {
  22.   for(int pin = 2; pin <= 9 ; pin++)
  23.     digitalWrite(pin, digits[digit][pin - 2]);
  24. }
  25. void setup()
  26. {
  27.   for(int i = 2 ; i <= 9 ; i++)
  28.     pinMode(i, OUTPUT);
  29. }

  30. void loop()
  31. {
  32.   int val = analogRead(A0);
  33.   val = map(val,0,1023,0,9);
  34.   digitWrite(val);
  35. }
复制代码
回复 支持 反对

使用道具 举报

发表于 2013-8-20 21:37:55 | 显示全部楼层

楼主能不能传给我Fritzing软件下的数码管元件库啊?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-31 08:39:07 | 显示全部楼层
qinkaiabc 发表于 2013-8-20 21:37
楼主能不能传给我Fritzing软件下的数码管元件库啊?

我抽空整理下各种库放入wiki吧。。。电脑硬盘太乱了。。我自己也找不到了。。
回复 支持 反对

使用道具 举报

发表于 2013-10-22 15:41:55 | 显示全部楼层
liang647 发表于 2013-7-2 17:10
我在这个电路的基础上加上了强哥帖子中的电位器来控制显示数字,使用map()来将0-1023分配给了0-9,代码如下 ...

用了map(x,0,1023,0,9)后,只有引脚读取到的值为1023时才会显示9,在实际过程中可能无法达到1023,所以你一直无法显示9
回复 支持 反对

使用道具 举报

发表于 2013-10-28 23:29:21 | 显示全部楼层
回复 支持 反对

使用道具 举报

发表于 2013-12-7 22:19:41 | 显示全部楼层
AlfredLanning 发表于 2013-10-22 15:41
用了map(x,0,1023,0,9)后,只有引脚读取到的值为1023时才会显示9,在实际过程中可能无法达到1023,所以你 ...

也就是说只有大于等于1023才是9?
回复 支持 反对

使用道具 举报

发表于 2013-12-9 15:42:38 | 显示全部楼层
liang647 发表于 2013-12-7 22:19
也就是说只有大于等于1023才是9?

对,下面是map()的函数
  1. long map(long x, long in_min, long in_max, long out_min, long out_max)
  2. {
  3.   return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
  4. }
复制代码
回复 支持 反对

使用道具 举报

发表于 2014-2-3 15:07:34 | 显示全部楼层
写得好难懂。!!!!
回复 支持 反对

使用道具 举报

发表于 2014-2-26 17:08:50 | 显示全部楼层
请问这些元器件都去哪里买啊??
回复 支持 反对

使用道具 举报

发表于 2014-5-9 14:03:05 | 显示全部楼层
感觉这个数码管修改之后程序有点复杂
回复 支持 反对

使用道具 举报

发表于 2014-7-8 23:24:05 | 显示全部楼层
麻烦各位同学帮忙看看我的代码, 效果是0-9按一下按键加一显示
#include<Arduino.h>
#define a 2
#define b 3
#define c 4
#define d 5
#define e 6
#define f 7
#define g 8
#define h 9
#define KEY 10
unsigned char KEY_NUM=0;
unsigned char i=0;
unsigned char table[10][8]=
{
{0,0,1,1,1,1,1,1},
{0,0,0,0,0,1,1,0},
{0,1,0,1,1,0,1,1},
{0,1,0,0,1,1,1,1},
{0,1,1,0,0,1,1,0},
{0,1,1,0,1,1,0,1},
{0,1,1,1,1,1,0,1},
{0,0,0,0,0,1,1,1},
{0,1,1,1,1,1,1,1},
{0,1,1,0,1,1,1,1}
};
void setup()
{
pinMode(a,OUTPUT);
pinMode(b,OUTPUT);
pinMode(c,OUTPUT);
pinMode(d,OUTPUT);
pinMode(e,OUTPUT);
pinMode(f,OUTPUT);
pinMode(g,OUTPUT);
pinMode(h,OUTPUT);
pinMode(KEY,INPUT_PULLUP);
}

void loop()
{

  for(;i<10;)
{
digitalWrite(a,table[i][7]);
digitalWrite(b,table[i][6]);
digitalWrite(c,table[i][5]);
digitalWrite(d,table[i][4]);
digitalWrite(e,table[i][3]);
digitalWrite(f,table[i][2]);
digitalWrite(g,table[i][1]);
digitalWrite(h,table[i][0]);
delay(1000);
}
  ScanKey();
  if (KEY_NUM==1){i++;}

}

void ScanKey()                                                //按键扫描程序
{
  KEY_NUM = 0;                                                        //清空变量
  if(digitalRead(KEY) == LOW)                        //有按键按下
  {
    delay(20);                                                //延时去抖动
    if(digitalRead(KEY) == LOW)                //有按键按下
    {
      KEY_NUM = 1;                                //变量设置为1
      while(digitalRead(KEY) == LOW);        //等待按键松手
    }
  }
}
回复 支持 反对

使用道具 举报

发表于 2014-8-7 21:27:50 | 显示全部楼层
感觉还有好多地方不懂啊,特别是数组,怎么用!
回复 支持 反对

使用道具 举报

发表于 2016-7-27 22:30:02 | 显示全部楼层
下面这一段 能详细介绍一下嘛,看不懂啊,小强哥

void sevenSegWrite(byte digit) {  //设置通过数组控制引脚开关,顺序为4-11号端口
  byte pin = 4;
  for (byte segCount = 0; segCount < 8; ++segCount) {
    digitalWrite(pin, seven_seg_digits[digit][segCount]);
    ++pin;
  }
}

void loop() {   //设置显示效果为从9开始倒数
  for (byte count = 10; count > 0; --count) {
   delay(1000);
   sevenSegWrite(count - 1);
  }
  delay(2000);
回复 支持 反对

使用道具 举报

发表于 2016-7-28 00:25:13 | 显示全部楼层
下面这一段 能详细介绍一下嘛,看不懂啊,小强哥

void sevenSegWrite(byte digit) {  //  sevenSegWrite这什么意思? 七根数字针管脚?括号里面是什么?显示的数字所占的字节吗?
  byte pin = 4; //4号数字引脚所占字节?
  for (byte segCount = 0; segCount < 8; ++segCount) { //0-7段 abcdefg?
    digitalWrite(pin, seven_seg_digits[digit][segCount]);// seven_seg_digits[0-9数字][段数]?
    ++pin; // 这pin加到几?
为什么这样写,能说下原理吗?有点懵,,
回复 支持 反对

使用道具 举报

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

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

Archiver|联系我们|极客工坊

GMT+8, 2024-5-5 10:10 , Processed in 0.060944 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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