仿真电路三-数码管

用到的材料

AT89c51、7seg数码管、led灯

引子

上一节我们讲过控制LED灯的程序。这一节讲个类似的->数码管。

pk27

将电路变换,8个LED灯便组成了一个数码管.(这里虽然数码管的排列有些乱,但总的意思是数码管链接不变,仅仅改变了摆放位置,使得能够做成简单的数码管LED。)pk30

下面便是官方将摆放好的LED做成专门的器件。这里有一个引脚没有使用,是因为在实际的数码管中,还会携带一个小数点在数字的右下角。

pk32

这便是数码管一步步改进组成新的器件的过程。

数码管一:静态数码管

简介

pk33

这里的上拉电位和下拉电位一定要分清楚,不同的器件改变了电位会使得程序也有所改变。

这里我们通过程序控制他运行。

pk34

实战+程序

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
//数码管的静态显示
//共阳极和共阴级

#include "reg51.h"
char num[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
//共阴极
void delay(unsigned int n)
{
int i,j;
for(i=0;i<n;i++)
for(j=0;j<500;j++);
}

void smg()
{
int i;
P0=0x3F; //0011 1111 显示0
delay(5);
for(i=0;i<10;i++)
{
P0=~num[i]; //共阳
P2=num[i]; //共阴
delay(50);
}
}

int main()
{
while(1)
{
smg();
}
}

其实很像我们曾经写过的LED程序。只是这里使用了一个数组,让整个程序显示从1-9的数字。(共阳极和共阴极取反,就可以保证相同了。)

pk35

列出显示字符的代码。pk31

数码管二:动态数码管

简介

动态数码管虽然说是动态的,但实际却是静态的组合。依靠视觉暂留的效应,使得数码管能够持续显示动画。

这里举个例子,在许多的LED广告牌中,你感觉他的广告牌是动画移动的,但是单独拿出来看,却是相近的几个LED灯顺序闪烁罢了,这里也要使用这个东西。pk36

段码与位码

这里分为段码与位码。

段码即每个数字的一段,并且要强调的是,这里每个数字的段码都是链接在一起的,就是表明,当位码全部接通时,段码只要显示一段,每一个数字的相同一段都会亮,这便是段码。

位码即选择要亮的一个数字,即当我选择第一个数字接通,其他的数字不管段码怎么样都不会亮,只有第一个数字才会亮。位码选择了要亮的数字,这便是位码。

实战+代码

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
//数码管的动态显示


#include "reg51.h"
char duan[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; //段码 显示什么
char wei[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; //位码 哪一位显示

void delay(unsigned int n)
{
int i,j;
for(i=0;i<n;i++)
for(j=0;j<120;j++);
}

void smg()
{
int i;
for(i=0;i<8;i++)
{
P3=wei[i];
P2=~duan[i];
delay(500);
}
}

int main()
{
while(1)
{
smg();
}
}

数码管在这八位上循环显示。位码控制第几个数码管亮,段码控制显示什么数字。

pk37