玄冰之神 发表于 2013-5-29 09:03:33

伯德 发表于 2013-5-29 01:25 static/image/common/back.gif
找本 C程序设计语言学一遍.http://book.douban.com/subject/1139336/

这本书我有实体书。。现在想学C++有好书介绍么?

liang647 发表于 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是个什么类型的变量?/*
数码管实验
2013-7-2
fabien liang
*/

//digits definition
int digits =
{
{0,0,1,0,0,0,0,1},//0
{0,1,1,0,1,1,1,1},//1
{0,0,1,1,0,0,1,0},//2
{0,0,1,0,0,1,1,0},//3
{0,1,1,0,1,1,0,0},//4
{1,0,1,0,0,1,0,0},//5
{1,0,1,0,0,0,0,0},//6
{0,0,1,0,1,1,1,1},//7
{0,0,1,0,0,0,0,0},//8
{0,0,1,0,0,1,0,0} //9
};
void digitWrite(int digit)
{
for(int pin = 2; pin <= 9 ; pin++)
    digitalWrite(pin, digits);
}
void setup()
{
for(int i = 2 ; i <= 9 ; i++)
    pinMode(i, OUTPUT);
}

void loop()
{
int val = analogRead(A0);
val = map(val,0,1023,0,9);
digitWrite(val);
}

qinkaiabc 发表于 2013-8-20 21:37:55


楼主能不能传给我Fritzing软件下的数码管元件库啊?

弘毅 发表于 2013-8-31 08:39:07

qinkaiabc 发表于 2013-8-20 21:37 static/image/common/back.gif
楼主能不能传给我Fritzing软件下的数码管元件库啊?

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

AlfredLanning 发表于 2013-10-22 15:41:55

liang647 发表于 2013-7-2 17:10 static/image/common/back.gif
我在这个电路的基础上加上了强哥帖子中的电位器来控制显示数字,使用map()来将0-1023分配给了0-9,代码如下 ...

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

冬时唯美 发表于 2013-10-28 23:29:21

:):):):):):):):)

liang647 发表于 2013-12-7 22:19:41

AlfredLanning 发表于 2013-10-22 15:41 static/image/common/back.gif
用了map(x,0,1023,0,9)后,只有引脚读取到的值为1023时才会显示9,在实际过程中可能无法达到1023,所以你 ...

也就是说只有大于等于1023才是9?

AlfredLanning 发表于 2013-12-9 15:42:38

liang647 发表于 2013-12-7 22:19 static/image/common/back.gif
也就是说只有大于等于1023才是9?

对,下面是map()的函数long map(long x, long in_min, long in_max, long out_min, long out_max)
{
return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}

Mr.Chocoball 发表于 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=
{
{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);
digitalWrite(b,table);
digitalWrite(c,table);
digitalWrite(d,table);
digitalWrite(e,table);
digitalWrite(f,table);
digitalWrite(g,table);
digitalWrite(h,table);
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);        //等待按键松手
    }
}
}

czj910827 发表于 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);
    ++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);// seven_seg_digits[段数]?
    ++pin; // 这pin加到几?
为什么这样写,能说下原理吗?有点懵,,
页: 1 2 [3]
查看完整版本: arduino学习笔记5 - 数码管实验