1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
|
| unsigned char const segs[]={0,1,2,3,4,5,6,7}; //阳极管脚*a*b*c*d*e*f*g*p*
unsigned char const Pins[]={8,9,10,11}; //阴极管脚
unsigned char const seven_seg_digits[11][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*
,{1,1,1,1,1,1,0}//*-*
};
unsigned char const EOOR[4][7]=
{{0,1,1,0,0,0,0}//*E*
,{0,0,0,0,0,0,1}//*O*
,{0,0,0,0,0,0,1}//*O*
,{1,0,1,1,0,0,0}//*R*
};
/*********************************/
void clearLEDs() //***清屏***
{
for(int i=0;i<=7;i++)
{
pinMode(segs,OUTPUT);
digitalWrite(segs,HIGH);
}
for(int i=0;i<=3;i++)
{
pinMode(Pins,OUTPUT);
digitalWrite(Pins,LOW);
}
}
/*********************************/
void eoor() //***当数据超出范围,出错提示***
{
for(int n=0;n<=3;n++)
{
digitalWrite(Pins[n],HIGH);
for(int l=0;l<=6;l++)
{digitalWrite(segs[l],EOOR[n][l]);}
delay(4);
digitalWrite(Pins[n],LOW);
}
}
/*********************************/
void LED_Word(int n,int m)//***显示 第n位 数字m ***
{
for(int r=0;r<=32;r++)
{
digitalWrite(Pins[n],HIGH);
for(int x=0;x<=6;x++)
{digitalWrite(segs[x],seven_seg_digits[m][x]);}
}
digitalWrite(Pins[n],LOW);
}
/******************************/
void LED_Segments(short int a)//***显示-999~9999之间的数***
{
clearLEDs();
if((a <= 9999)&&(a >= -999)) //***
{
int q, w, e, r;
q = abs(a/1000); //***千位(负数的是负号)***
w = abs((a/100)%10); //***百位***
e = abs((a/10)%10); //***十位***
r = abs(a%10); //***个位***
{if(a < 0) {q = 10;}}
char u[]={q,w,e,r};
for(int p=0;p<=100;p++) //??做了个循环,避免闪烁,但是效果一般,不知道有没有其他办法?求教
{
for(int y=0;y<=3;y++)
{LED_Word(y,u[y]);}
}
}
else
{eoor();} //***出错提示***
}
/*********************************/
void setup()
{
clearLEDs();
}
void loop()
{
int k =-999;
while(1)
{
LED_Segments(k);
k++;
}
}
|