本帖最后由 万马奔腾 于 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----A Q1---B Q2----C Q3---D Q4---E Q5----F Q6---G Q7--- 时钟的阳极)
另一片595接数码管的管脚
Q0--d1 Q1---d2 Q2----d3 Q3---d4 Q4---d5(时钟点的阴极)
问题是不是驱动电流不够啊!需要ULN2803? |