|
发表于 2016-1-30 17:06:41
|
显示全部楼层
本帖最后由 firelighter 于 2016-2-18 20:11 编辑
我用arduino r3板子,显示不正常,1,5,6不用正常显示,后改如下,ok
//设置阴极接口
int a = 2 ;
int b = 3;
int c = 4;
int d = 5;
int e = 6;
int f = 7;
int g = 8;
int p = 9;
//设置阳极接口
int d4 = 10;
int d3 = 11;
int d2 = 12;
int d1 = 13;
//设置变量
long n = 0;
int x = 100;
int del = 55; //此处数值对时钟进行微调
byte segs[7] = { a, b, c, d, e, f, g };
byte seven_seg_digits[10][7] = { 0,0,0,0,0,0,1 , // = 0
1,0,0,1,1,1,1 , // = 1
0,0,1,0,0,1,0 , // = 2
0,0,0,0,1,1,0 , // = 3
1,0,0,1,1,0,0 , // = 4
0,1,0,0,1,0,0 , // = 5
0,1,0,0,0,0,0 , // = 6
0,0,0,1,1,1,1 , // = 7
0,0,0,0,0,0,0 , // = 8
0,0,0,0,1,0,0 // = 9
};
void setup()
{
pinMode(d1, OUTPUT);
pinMode(d2, OUTPUT);
pinMode(d3, OUTPUT);
pinMode(d4, OUTPUT);
pinMode(a, OUTPUT);
pinMode(b, OUTPUT);
pinMode(c, OUTPUT);
pinMode(d, OUTPUT);
pinMode(e, OUTPUT);
pinMode(f, OUTPUT);
pinMode(g, OUTPUT);
pinMode(p, OUTPUT);
}
void loop()
{
clearLEDs();
pickDigit(1);
lightSegments((n/x/1000)%10);
delayMicroseconds(del);
clearLEDs();
pickDigit(2);
lightSegments((n/x/100)%10);
delayMicroseconds(del);
clearLEDs();
pickDigit(3);
dispDec(3);
lightSegments((n/x/10)%10);
delayMicroseconds(del);
clearLEDs();
pickDigit(4);
lightSegments(n/x%10);
delayMicroseconds(del);
n++;
if (digitalRead(13) == HIGH)
{
n = 0;
}
}
void pickDigit(int x) //定义pickDigit(x),其作用是开启dx端口
{
digitalWrite(d1, LOW);
digitalWrite(d2, LOW);
digitalWrite(d3, LOW);
digitalWrite(d4, LOW);
switch(x)
{
case 1:
digitalWrite(d1, HIGH);
break;
case 2:
digitalWrite(d2, HIGH);
break;
case 3:
digitalWrite(d3, HIGH);
break;
default:
digitalWrite(d4, HIGH);
break;
}
}
void dispDec(int x) //设定开启小数点
{
digitalWrite(p, LOW);
}
void clearLEDs() //清屏
{
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(e, HIGH);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);
digitalWrite(p, HIGH);
}
// 点亮对应数字的数码管
void lightSegments(int x) {
for (int i = 0; i <7 ; i++) {
digitalWrite(segs, seven_seg_digits[x]);
}
}
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|