码迷,mamicode.com
首页 > 其他好文 > 详细

四位数码管SH5461AS的问题,arduino学习实测.

时间:2015-05-31 18:22:09      阅读:2151      评论:0      收藏:0      [点我收藏+]

标签:

arduino入门教程到第16课遇到些问题.效果一直是混乱的状态.

琢磨了半天发现一些问题,和大家分享下

1)接线图,原图没有问题,只是比较含糊,线比较多不好看. 我用红色数字标示数码管的12个脚,并且用蓝色数字标示出对应arduino的脚

技术分享

2)程序问题(这个问题比较离谱)

   刚开始按照示例怎么都没办法出效果,突发奇想,将所有的高低电平兑换.然后一切都和谐了,后来查了共阴共阳的原理图发现原来的代码可能是共阳的.

   下面是我的代码:

int y[8] = {1,2,3,4,5,6,7,8};
int d[4] = {12,11,10,9};
int digital[10][8] = {{6,y[0],y[1],y[2],y[3],y[4],y[5]},{2,y[1],y[2]},{5,y[0],y[1],y[3],y[4],y[6]},{5,y[0],y[1],y[2],y[3],y[6]},{4,y[1],y[2],y[5],y[6]},{5,y[0],y[2],y[3],y[5],y[6]},{6,y[0],y[2],y[3],y[4],y[5],y[6]},{3,y[0],y[1],y[2]},{7,y[0],y[1],y[2],y[3],y[4],y[5],y[6]},{6,y[0],y[1],y[2],y[3],y[5],y[6]}};
long n=0;
int x=100;
int del=55;
void setup(){
  for(int i=0;i<8;i++)
    pinMode(y[i],OUTPUT);
  for(int i=0;i<4;i++) 
    pinMode(d[i],OUTPUT);
}
void clearLEDs(){
  for(int i=0;i<8;i++)
    digitalWrite(y[i],LOW);
}
void pickDigit(int x){
  for(int i=0;i<4;i++)
    digitalWrite(d[i],HIGH);
  if(x>4) x=4;
  digitalWrite(d[x-1],LOW);
}
void showDigital(int x){
  for(int i=1;i<=digital[x][0];i++)
     digitalWrite(digital[x][i], HIGH);
}
void disp(int x){
  digitalWrite(y[7],HIGH);
}
void loop(){
  clearLEDs();
  pickDigit(1);
  showDigital((n/x/1000)%10);
  delayMicroseconds(del);
  
  clearLEDs();
  pickDigit(2);
  showDigital((n/x/100)%10);
  delayMicroseconds(del);
  
  clearLEDs();
  pickDigit(3);
  disp(3);
  showDigital((n/x/10)%10);
  delayMicroseconds(del);
  
  clearLEDs();
  pickDigit(4);
  showDigital(n/x%10);
  delayMicroseconds(del);
  
  n++;
  
  if(digitalRead(13) == LOW){
   n=0;
  }
}

  

 最后是效果图和效果视频

技术分享

四位数码管SH5461AS的问题,arduino学习实测.

标签:

原文地址:http://www.cnblogs.com/kaixuanpisces/p/4542176.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!