proteus2

电子

proteus折腾第二步——数码管动态显示

标签(空格分隔): 电子


定时炸弹怎么能少了计数器,所以点一个led自然是远远不够地。现在我们就让数码管跑起来,折腾这个折腾了一整天也是醉了。我是按照郭天祥开发板的原理图接的锁存器(74h573)和共阴极数码管。注意!7esg-mpx8-ca才是共阴极的,cc是共阳极的。还有一点需要知道的就是锁存器的接法,proteus还是一如既往地帮你接好了gnd和vcc,接下来就是oe和le端了。参考如下这段话:

2、管脚说明:
OE:output_enable,输出使能;
LE:latch_enable,数据锁存使能,latch是锁存的意思;
Dn:第n路输入数据;
On:第n路输出数据;
3、工作原理简述
当OE=1是,无论Dn、LE为何,输出端为高阻态;
当OE=0、LE=0时,输出端保持不变;
当OE=0、LE=1时,输出端数据等于输入端数据;
在实际应用的时候是这样做的:
a. OE=0;
b. 先将数据从单片机的口线上输出到Dn;
c. 再将LE从0->1->0
d. 这时,你所需要输出的数据就锁存在On上了,输入的数据在变化也影响不到输出的数据了;

可以看出,oe端只要长期置零就ok了,所以我们果断连上gnd,然后le端位选接p2^7,段选接p2^6(和郭天祥开发板的接法一样,这样可以直接用他的程序做测试)。至于Dn口的接法需要注意,因为单片机内部P0是没有上拉的,所以得接上拉电阻,我偷懒就直接接P1口啦。最后,对应的数码管段选数组得用这个

unsigned char code dis_code[11]={0xc0,0xf9,0xa4,0xb0, // 0, 1, 2, 3
0x99,0x92,0x82,0xf8,0x80,0x90, 0xff};// 4, 5, 6, 7, 8, 9, off

不然显示不正常。附上我自己改好的程序和最终效果图。

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
#include<reg52.h>
#include<intrins.h>
#define uc unsigned char
sbit duans=P2^6;
sbit weis=P2^7;
unsigned int i,j,num;
uc a,b,c;
unsigned char code table[11]={0xc0,0xf9,0xa4,0xb0, // 0, 1, 2, 3
0x99,0x92,0x82,0xf8,0x80,0x90, 0xff};// 4, 5, 6, 7, 8, 9, off
void main()
{
EA=1;
ET1=1;
TMOD=0x10;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
TR1=1;
while(1)
{
if(num==10)
{
num=0;
P1=table[a];
duans=1;
duans=0;
P1=0xc0; Ãð
weis=1;
weis=0;
a++;
if(a==16)
a=0;
}
}
}void time1() interrupt 3 using 1
{
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
num++;
}

此处输入图片的描述