数码管 F5461BH 的正确调教方法

<img src="img/veclock.jpg" alt="veclock">

最近玩MCU,玩着玩着遇到了该死的PWM,做了好久的实验也没有成功,遂转换心情来驱动下 F5461BH 。

之前还以为上网查查就可以找到相应的引脚图,不料却难以找到这些东西,然后自己一个个的试。。。。。。

然后花了两个小时,都琢磨透了。

F5461BH

PS: a、b、c、d 从左到右数。 最右边的引脚是 中间的那两个点,具体用法你慢慢钻研吧(也不难,一个接高电平一个接低电平就可以点亮了)

原理: F5461BH是一个共阳4位的8段数码管,下图的数字对应上图的。

Digital_Tube

不过值得注意的是,这些数字对应的都得接上低电平,好像是因为共阳的关系。。。。。。

这个已经很详细了,怎么搞你们懂得。。。。。。

另外附上驱动代码(STC12C2052AD)

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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
//#include <REG51.h>
//#include <REG52.h>
#include <STC11Fxx.H>
//#include <STC12C2052AD.h>
sbit l8 = P1 ^ 0;
sbit l7 = P1 ^ 1;
sbit l6 = P1 ^ 2;
sbit l5 = P1 ^ 3;
sbit l4 = P1 ^ 4;
sbit l3 = P1 ^ 5;
sbit l2 = P1 ^ 6;
sbit l1 = P1 ^ 7;
char bufbit[4] = {1, 2, 3, 4};
#define RFR 3 //Refresh Rate
sbit ba = P3 ^ 2;
sbit bb = P3 ^ 3;
sbit bc = P3 ^ 4;
sbit bd = P3 ^ 5;
/*************************************************************
* ºÁÃ뼶ÑÓʱº¯Êý *
µ÷Óú¯Êý±ØÐë¸øÑÓʱº¯ÊýÒ»¸ö0~65535µÄÑÓʱֵ¶ÔÓ¦0MSµ½65535MS
/*************************************************************/
void Delay (unsigned int a){ //ÐèÒªÊäÈë±äÁ¿Öµ0~65535
unsigned int i;
while( --a != 0){ //i ´Ó0¼Óµ½600£¬CPU´ó¸Å¾ÍºÄʱ1ºÁÃë
for(i = 0; i < 600; i++); //¿ÕÖ¸ÁîÑ­»·
}
}
int shown(int num){
l1 = 1;
l2 = 1;
l3 = 1;
l4 = 1;
l5 = 1;
l6 = 1;
l7 = 1;
l8 = 1;
switch(num){
case 0:
l1 = 0;
l2 = 0;
l3 = 0;
l4 = 1;
l5 = 0;
l6 = 0;
l7 = 0;
l8 = 1;
break;
case 1:
l1 = 1;
l2 = 1;
l3 = 0;
l4 = 1;
l5 = 1;
l6 = 0;
l7 = 1;
l8 = 1;
break;
case 2:
l1 = 0;
l2 = 1;
l3 = 0;
l4 = 0;
l5 = 0;
l6 = 1;
l7 = 0;
l8 = 1;
break;
case 3:
l1 = 0;
l2 = 1;
l3 = 0;
l4 = 0;
l5 = 1;
l6 = 0;
l7 = 0;
l8 = 1;
break;
case 4:
l1 = 1;
l2 = 0;
l3 = 0;
l4 = 0;
l5 = 1;
l6 = 0;
l7 = 1;
l8 = 1;
break;
case 5:
l1 = 0;
l2 = 0;
l3 = 1;
l4 = 0;
l5 = 1;
l6 = 0;
l7 = 0;
l8 = 1;
break;
case 6:
l1 = 0;
l2 = 0;
l3 = 1;
l4 = 0;
l5 = 0;
l6 = 0;
l7 = 0;
l8 = 1;
break;
case 7:
l1 = 0;
l2 = 1;
l3 = 0;
l4 = 1;
l5 = 1;
l6 = 0;
l7 = 1;
l8 = 1;
break;
case 8:
l1 = 0;
l2 = 0;
l3 = 0;
l4 = 0;
l5 = 0;
l6 = 0;
l7 = 0;
l8 = 1;
break;
case 9:
l1 = 0;
l2 = 0;
l3 = 0;
l4 = 0;
l5 = 1;
l6 = 0;
l7 = 0;
l8 = 1;
break;
default:
break;
}
}
void initbit(){
ba = 0;
bb = 0;
bc = 0;
bd = 0;
}
void disba(){
initbit();
ba = 1;
shown(bufbit[0]);
}
void disbb(){
initbit();
bb = 1;
shown(bufbit[1]);
}
void disbc(){
initbit();
bc = 1;
shown(bufbit[2]);
}
void disbd(){
initbit();
bd = 1;
shown(bufbit[3]);
}
void display(){
Delay(RFR);
disba();
Delay(RFR);
disbb();
Delay(RFR);
disbc();
Delay(RFR);
disbd();
}
void main (void){
P3M0 = 0xfc;
P3M1 = 0x00;
ba = 1;
bb = 1;
bc = 1;
bd = 1;
// bufbit = { 1, 2, 3, 4};
while(1){
display();
//shown(a);
}
}
// 感谢 Delay 函数由 DoYoung 提供。

驱动引脚的接法(STC12C2052AD):

STC12C2052AD

好像没了吧? KEIL 2 工程下载地址: http://pan.baidu.com/s/1jK6qM