2片74HC595驱动4位数码管,怎么不成功?
本帖最后由 万马奔腾 于 2013-12-30 13:17 编辑/*
2片595驱动4位共阴极数码管调试程序
*/
int clockPin = 2;
int latchPin =3;
int dataPin = 5; //这里定义了那三个脚
//-----------------------------------设置变量
unsigned long i,j,v; //计时用的变量
long t=1000,x=60000,k=0,l=0,del=1000,jg=55;//t表示秒(初始值为了开头能够看到60:00)x表示分钟 del为减时间间隔调整jg参数
// 调整jg数值实现时间精度调整
void setup()
{
//数码管接口(74HC595)管脚定义
pinMode(latchPin,OUTPUT);
pinMode(clockPin,OUTPUT);
pinMode(dataPin,OUTPUT); //让三个脚都是输出状态
delay(4000);
}
void loop()
{
//-----------------------第1位显示数字
clearLEDs();
pick1Number(x/10000);
delayMicroseconds(jg);
//----------------------第2位显示数字
clearLEDs();
pick2Number(x%10000/1000);
delayMicroseconds(jg);
//-------------------时钟点:显示
clearLEDs();
dispDec();
delayMicroseconds(jg);
//--------------------第3位
clearLEDs();
pick3Number(t/10000);
delayMicroseconds(jg);
//--------------------第4位
clearLEDs();
pick4Number(t%10000/1000);
delayMicroseconds(jg);
//-------------时间计算值
if(t>=0 || x!=0) t--; //秒钟减1并自动循环
if(t<0&& x!=0) t=60000;
if(t==60000&&x!=0)x-=1000; //分钟数减1
}
void pick1Number(int x) //定义pickNumber(x),其作用是显示数字x
{
switch(x)
{
default:
digitalWrite(latchPin,LOW);
shiftOut(dataPin,clockPin,MSBFIRST,B00011110);//阴极Q7----Q0
shiftOut(dataPin,clockPin,MSBFIRST,B00111111);//阳极Q7----Q0
digitalWrite(latchPin,HIGH);
break;
case 1:
digitalWrite(latchPin,LOW);
shiftOut(dataPin,clockPin,MSBFIRST,B00011110);//阴极Q7----Q0
shiftOut(dataPin,clockPin,MSBFIRST,B00000110);//阳极Q7----Q0
digitalWrite(latchPin,HIGH);
break;
case 2:
digitalWrite(latchPin,LOW);
shiftOut(dataPin,clockPin,MSBFIRST,B00011110);//阴极Q7----Q0
shiftOut(dataPin,clockPin,MSBFIRST,B01011011);//阳极Q7----Q0
digitalWrite(latchPin,HIGH);
break;
case 3:
digitalWrite(latchPin,LOW);
shiftOut(dataPin,clockPin,MSBFIRST,B00011110);//阴极Q7----Q0
shiftOut(dataPin,clockPin,MSBFIRST,B01001111);//阳极Q7----Q0
digitalWrite(latchPin,HIGH);
break;
case 4:
digitalWrite(latchPin,LOW);
shiftOut(dataPin,clockPin,MSBFIRST,B00011110);//阴极Q7----Q0
shiftOut(dataPin,clockPin,MSBFIRST,B01100110);//阳极Q7----Q0
digitalWrite(latchPin,HIGH);
break;
case 5:
digitalWrite(latchPin,LOW);
shiftOut(dataPin,clockPin,MSBFIRST,B00011110);//阴极Q7----Q0
shiftOut(dataPin,clockPin,MSBFIRST,B01101101);//阳极Q7----Q0
digitalWrite(latchPin,HIGH);
break;
case 6:
digitalWrite(latchPin,LOW);
shiftOut(dataPin,clockPin,MSBFIRST,B00011110);//阴极Q7----Q0
shiftOut(dataPin,clockPin,MSBFIRST,B01111101);//阳极Q7----Q0
digitalWrite(latchPin,HIGH);
break;
case 7:
digitalWrite(latchPin,LOW);
shiftOut(dataPin,clockPin,MSBFIRST,B00011110);//阴极Q7----Q0
shiftOut(dataPin,clockPin,MSBFIRST,B00000111);//阳极Q7----Q0
digitalWrite(latchPin,HIGH);
break;
case 8:
digitalWrite(latchPin,LOW);
shiftOut(dataPin,clockPin,MSBFIRST,B00011110);//阴极Q7----Q0
shiftOut(dataPin,clockPin,MSBFIRST,B01111111);//阳极Q7----Q0
digitalWrite(latchPin,HIGH);
break;
case 9:
digitalWrite(latchPin,LOW);
shiftOut(dataPin,clockPin,MSBFIRST,B00011110);//阴极Q7----Q0
shiftOut(dataPin,clockPin,MSBFIRST,B01101111);//阳极Q7----Q0
digitalWrite(latchPin,HIGH);
break;
}
}
void pick2Number(int x) //定义pickNumber(x),其作用是显示数字x
{
switch(x)
{
default:
digitalWrite(latchPin,LOW);
shiftOut(dataPin,clockPin,MSBFIRST,B00011101);//阴极Q7----Q0
shiftOut(dataPin,clockPin,MSBFIRST,B00111111);//阳极Q7----Q0
digitalWrite(latchPin,HIGH);
break;
case 1:
digitalWrite(latchPin,LOW);
shiftOut(dataPin,clockPin,MSBFIRST,B00011101);//阴极Q7----Q0
shiftOut(dataPin,clockPin,MSBFIRST,B00000110);//阳极Q7----Q0
digitalWrite(latchPin,HIGH);
break;
case 2:
digitalWrite(latchPin,LOW);
shiftOut(dataPin,clockPin,MSBFIRST,B00011101);//阴极Q7----Q0
shiftOut(dataPin,clockPin,MSBFIRST,B01011011);//阳极Q7----Q0
digitalWrite(latchPin,HIGH);
break;
case 3:
digitalWrite(latchPin,LOW);
shiftOut(dataPin,clockPin,MSBFIRST,B00011101);//阴极Q7----Q0
shiftOut(dataPin,clockPin,MSBFIRST,B01001111);//阳极Q7----Q0
digitalWrite(latchPin,HIGH);
break;
case 4:
digitalWrite(latchPin,LOW);
shiftOut(dataPin,clockPin,MSBFIRST,B00011101);//阴极Q7----Q0
shiftOut(dataPin,clockPin,MSBFIRST,B01100110);//阳极Q7----Q0
digitalWrite(latchPin,HIGH);
break;
case 5:
digitalWrite(latchPin,LOW);
shiftOut(dataPin,clockPin,MSBFIRST,B00011101);//阴极Q7----Q0
shiftOut(dataPin,clockPin,MSBFIRST,B01101101);//阳极Q7----Q0
digitalWrite(latchPin,HIGH);
break;
case 6:
digitalWrite(latchPin,LOW);
shiftOut(dataPin,clockPin,MSBFIRST,B00011101);//阴极Q7----Q0
shiftOut(dataPin,clockPin,MSBFIRST,B01111101);//阳极Q7----Q0
digitalWrite(latchPin,HIGH);
break;
case 7:
digitalWrite(latchPin,LOW);
shiftOut(dataPin,clockPin,MSBFIRST,B00011101);//阴极Q7----Q0
shiftOut(dataPin,clockPin,MSBFIRST,B00000111);//阳极Q7----Q0
digitalWrite(latchPin,HIGH);
break;
case 8:
digitalWrite(latchPin,LOW);
shiftOut(dataPin,clockPin,MSBFIRST,B00011101);//阴极Q7----Q0
shiftOut(dataPin,clockPin,MSBFIRST,B01111111);//阳极Q7----Q0
digitalWrite(latchPin,HIGH);
break;
case 9:
digitalWrite(latchPin,LOW);
shiftOut(dataPin,clockPin,MSBFIRST,B00011101);//阴极Q7----Q0
shiftOut(dataPin,clockPin,MSBFIRST,B01101111);//阳极Q7----Q0
digitalWrite(latchPin,HIGH);
break;
}
}
void pick3Number(int x) //定义pickNumber(x),其作用是显示数字x
{
switch(x)
{
default:
digitalWrite(latchPin,LOW);
shiftOut(dataPin,clockPin,MSBFIRST,B00011011);//阴极Q7----Q0
shiftOut(dataPin,clockPin,MSBFIRST,B00111111);//阳极Q7----Q0
digitalWrite(latchPin,HIGH);
break;
case 1:
digitalWrite(latchPin,LOW);
shiftOut(dataPin,clockPin,MSBFIRST,B00011011);//阴极Q7----Q0
shiftOut(dataPin,clockPin,MSBFIRST,B00000110);//阳极Q7----Q0
digitalWrite(latchPin,HIGH);
break;
case 2:
digitalWrite(latchPin,LOW);
shiftOut(dataPin,clockPin,MSBFIRST,B00011011);//阴极Q7----Q0
shiftOut(dataPin,clockPin,MSBFIRST,B01011011);//阳极Q7----Q0
digitalWrite(latchPin,HIGH);
break;
case 3:
digitalWrite(latchPin,LOW);
shiftOut(dataPin,clockPin,MSBFIRST,B00011011);//阴极Q7----Q0
shiftOut(dataPin,clockPin,MSBFIRST,B01001111);//阳极Q7----Q0
digitalWrite(latchPin,HIGH);
break;
case 4:
digitalWrite(latchPin,LOW);
shiftOut(dataPin,clockPin,MSBFIRST,B00011011);//阴极Q7----Q0
shiftOut(dataPin,clockPin,MSBFIRST,B01100110);//阳极Q7----Q0
digitalWrite(latchPin,HIGH);
break;
case 5:
digitalWrite(latchPin,LOW);
shiftOut(dataPin,clockPin,MSBFIRST,B00011011);//阴极Q7----Q0
shiftOut(dataPin,clockPin,MSBFIRST,B01101101);//阳极Q7----Q0
digitalWrite(latchPin,HIGH);
break;
case 6:
digitalWrite(latchPin,LOW);
shiftOut(dataPin,clockPin,MSBFIRST,B00011011);//阴极Q7----Q0
shiftOut(dataPin,clockPin,MSBFIRST,B01111101);//阳极Q7----Q0
digitalWrite(latchPin,HIGH);
break;
case 7:
digitalWrite(latchPin,LOW);
shiftOut(dataPin,clockPin,MSBFIRST,B00011011);//阴极Q7----Q0
shiftOut(dataPin,clockPin,MSBFIRST,B00000111);//阳极Q7----Q0
digitalWrite(latchPin,HIGH);
break;
case 8:
digitalWrite(latchPin,LOW);
shiftOut(dataPin,clockPin,MSBFIRST,B00011011);//阴极Q7----Q0
shiftOut(dataPin,clockPin,MSBFIRST,B01111111);//阳极Q7----Q0
digitalWrite(latchPin,HIGH);
break;
case 9:
digitalWrite(latchPin,LOW);
shiftOut(dataPin,clockPin,MSBFIRST,B00011011);//阴极Q7----Q0
shiftOut(dataPin,clockPin,MSBFIRST,B01101111);//阳极Q7----Q0
digitalWrite(latchPin,HIGH);
break;
}
}
void pick4Number(int x) //定义pickNumber(x),其作用是显示数字x
{
switch(x)
{
default:
digitalWrite(latchPin,LOW);
shiftOut(dataPin,clockPin,MSBFIRST,B00010111);//阴极Q7----Q0
shiftOut(dataPin,clockPin,MSBFIRST,B00111111);//阳极Q7----Q0
digitalWrite(latchPin,HIGH);
break;
case 1:
digitalWrite(latchPin,LOW);
shiftOut(dataPin,clockPin,MSBFIRST,B00010111);//阴极Q7----Q0
shiftOut(dataPin,clockPin,MSBFIRST,B00000110);//阳极Q7----Q0
digitalWrite(latchPin,HIGH);
break;
case 2:
digitalWrite(latchPin,LOW);
shiftOut(dataPin,clockPin,MSBFIRST,B00010111);//阴极Q7----Q0
shiftOut(dataPin,clockPin,MSBFIRST,B01011011);//阳极Q7----Q0
digitalWrite(latchPin,HIGH);
break;
case 3:
digitalWrite(latchPin,LOW);
shiftOut(dataPin,clockPin,MSBFIRST,B00010111);//阴极Q7----Q0
shiftOut(dataPin,clockPin,MSBFIRST,B01001111);//阳极Q7----Q0
digitalWrite(latchPin,HIGH);
break;
case 4:
digitalWrite(latchPin,LOW);
shiftOut(dataPin,clockPin,MSBFIRST,B00010111);//阴极Q7----Q0
shiftOut(dataPin,clockPin,MSBFIRST,B01100110);//阳极Q7----Q0
digitalWrite(latchPin,HIGH);
break;
case 5:
digitalWrite(latchPin,LOW);
shiftOut(dataPin,clockPin,MSBFIRST,B00010111);//阴极Q7----Q0
shiftOut(dataPin,clockPin,MSBFIRST,B01101101);//阳极Q7----Q0
digitalWrite(latchPin,HIGH);
break;
case 6:
digitalWrite(latchPin,LOW);
shiftOut(dataPin,clockPin,MSBFIRST,B00010111);//阴极Q7----Q0
shiftOut(dataPin,clockPin,MSBFIRST,B01111101);//阳极Q7----Q0
digitalWrite(latchPin,HIGH);
break;
case 7:
digitalWrite(latchPin,LOW);
shiftOut(dataPin,clockPin,MSBFIRST,B00010111);//阴极Q7----Q0
shiftOut(dataPin,clockPin,MSBFIRST,B00000111);//阳极Q7----Q0
digitalWrite(latchPin,HIGH);
break;
case 8:
digitalWrite(latchPin,LOW);
shiftOut(dataPin,clockPin,MSBFIRST,B00010111);//阴极Q7----Q0
shiftOut(dataPin,clockPin,MSBFIRST,B01111111);//阳极Q7----Q0
digitalWrite(latchPin,HIGH);
break;
case 9:
digitalWrite(latchPin,LOW);
shiftOut(dataPin,clockPin,MSBFIRST,B00010111);//阴极Q7----Q0
shiftOut(dataPin,clockPin,MSBFIRST,B01101111);//阳极Q7----Q0
digitalWrite(latchPin,HIGH);
break;
}
}
void dispDec()//设定开启时钟点:
{
digitalWrite(latchPin,LOW);
shiftOut(dataPin,clockPin,MSBFIRST,B00001111);//阴极Q7----Q0
shiftOut(dataPin,clockPin,MSBFIRST,B10000000);//阳极Q7----Q0
digitalWrite(latchPin,HIGH);
}
void clearLEDs()//清屏
{
digitalWrite(latchPin,LOW);
shiftOut(dataPin,clockPin,MSBFIRST,B00011111);//阴极Q7----Q0
shiftOut(dataPin,clockPin,MSBFIRST,B00000000);//阳极Q7----Q0
digitalWrite(latchPin,HIGH);
}
主要表现:
1.显示的数值不对 乱码。
2.屏幕闪得比较厉害。
接线示意图:
靠近ARDUINO的595接数码管
Q0----AQ1---BQ2----CQ3---D Q4---E Q5----F Q6---GQ7---:(时钟的阳极)
另一片595接数码管的管脚
Q0--d1Q1---d2 Q2----d3Q3---d4 Q4---d5(时钟点的阴极)
问题是不是驱动电流不够啊!需要ULN2803? 没搞过,不过建议你先驱动一根根管子试试看能不能找到一定的条件 一根试过了~ 本帖最后由 pww999 于 2013-12-30 22:30 编辑
我试过这个可以
http://www.geek-workshop.com/forum.php?mod=viewthread&tid=7415
页:
[1]