平淡幸福 发表于 2016-5-11 20:55:24

Arduino 数码管累加器问题.

#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 com1 10
#define com2 11
#define com3 12
#define com4 13

#define an_jian 1

char anxia = 1;
char s = 0;       /*随便定义的变量*/


unsigned char tiaodeng[]=
{
      {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()

{
for(unsigned char z = 2; z <= 13; z++)
{
    pinMode(z,OUTPUT);
}
pinMode(an_jian,INPUT);
digitalWrite(an_jian,HIGH);
}

void loop()
{

if(jian_ce() == 1)
{
    s++;
    if(s > 9999)
      {
      s = 0;
      }
}
shumaguang(1,s/1000);
delay(2);
shumaguang(2,s%1000/100);
delay(2);
shumaguang(3,s%100/10);
delay(2);
shumaguang(4,s%10);
delay(2);
}

unsigned char jian_ce()
{
if(anxia == 1 && digitalRead(an_jian) == LOW)
    {
      anxia = 0;
      delay(1);
      if(digitalRead(an_jian) == LOW);
      {
          return 1;
      }
    }
if(digitalRead(an_jian) == HIGH)
    {
      anxia = 1;
    }
return 0;
}

unsigned char shumaguang(unsigned char com,unsigned num)
{

digitalWrite(a,LOW);
digitalWrite(b,LOW);
digitalWrite(c,LOW);
digitalWrite(d,LOW);
digitalWrite(e,LOW);
digitalWrite(f,LOW);
digitalWrite(g,LOW);
digitalWrite(h,LOW);

switch(com)
{
    case 1:
            digitalWrite(com1,LOW);
            digitalWrite(com2,HIGH);
            digitalWrite(com3,HIGH);
            digitalWrite(com4,HIGH);
            break;
    case 2:
            digitalWrite(com1,HIGH);
            digitalWrite(com2,LOW);
            digitalWrite(com3,HIGH);
            digitalWrite(com4,HIGH);
            break;
    case 3:
            digitalWrite(com1,HIGH);
            digitalWrite(com2,HIGH);
            digitalWrite(com3,LOW);
            digitalWrite(com4,HIGH);
            break;
    case 4:
            digitalWrite(com1,HIGH);
            digitalWrite(com2,HIGH);
            digitalWrite(com3,HIGH);
            digitalWrite(com4,LOW);
            break;      
    default:break;
}

   digitalWrite(a,tiaodeng);
   digitalWrite(b,tiaodeng);
   digitalWrite(c,tiaodeng);
   digitalWrite(d,tiaodeng);
   digitalWrite(e,tiaodeng);
   digitalWrite(f,tiaodeng);
   digitalWrite(g,tiaodeng);
   digitalWrite(h,tiaodeng);
         
}

以上代码来源http://www.geek-workshop.com/thread-12758-1-1.html
按照以上代码接线显示正常,但到了解120以上就出现乱码,请求大神指点.

平淡幸福 发表于 2016-5-11 20:59:48

数码管到了127就开始出现代码.大神知道什么原因吗?

wwwusr 发表于 2016-5-11 21:34:02

应该是变量类型的问题吧。
char 就能到127,改成int 能到32767

平淡幸福 发表于 2016-5-12 07:38:40

wwwusr 发表于 2016-5-11 21:34 static/image/common/back.gif
应该是变量类型的问题吧。
char 就能到127,改成int 能到32767

谢谢,按你的方法解决了.

zjz5717 发表于 2016-5-12 21:58:41

平淡幸福 发表于 2016-5-11 20:59 static/image/common/back.gif
数码管到了127就开始出现代码.大神知道什么原因吗?

char类型的存储都是按照ascii码转换之后存储的,你可以了解一下相关的知识,比如去某度
最大只能存到01111111(8位),总共是127个

平淡幸福 发表于 2016-5-13 17:15:29

zjz5717 发表于 2016-5-12 21:58 static/image/common/back.gif
char类型的存储都是按照ascii码转换之后存储的,你可以了解一下相关的知识,比如去某度
最大只能存到011 ...

谢谢,刚学,慢慢了解。
页: [1]
查看完整版本: Arduino 数码管累加器问题.