发布网友 发布时间:2022-04-25 22:23
共1个回答
热心网友 时间:2023-10-16 01:28
从“#define
clock_segment
XBYTE[0xBFFF]
这个语句可以看出,程序的作者用的是总线方式来控制数据流。一般的51单片机的P0口和P2口共同作为地址总线,而P0口又作为数据总线,想想这样的板子上一般都接了锁存器。上面这句话的意思是在后面的程序中如果遇到clock_segment就当成是XBYTE[0xBFFF],后面的注释说明这个是数码管段码的地址。那么举个例子:
数码管(共阴)的段码表是:
unsigned
char
code
SMG_DM[10]={
0x3F,/*0*/
0x06,/*1*/
0x5B,/*2*/
0x4F,/*3*/
0x66,/*4*/
0x6D,/*5*/
0x7D,/*6*/
0x07,/*7*/
0x7F,/*8*/
0x6F,/*9*/
};
则如果程序中写到clock_segment
=
SMG_DM[3];
意思就是XBYTE[0xBFFF]=
SMG_DM[3];
//
往数码管送数字3的段码
再说一点就是在总线方式中单片机的P3.6和P3.7会作为读写控制而自动改变电平,目的是配合总线。这种方式可以给单片机扩展很多外设,而且总线自动控制读写会提高代码效率。
下面的属于动态显示,但是因为没有进行消隐操作,会导致显示乱码。
具体的消隐操作是,如果你先送段码,则在送段码前将所有的位码关闭,如果是共阴数码管,则控制位的引脚全部置1,共阳的则置0即可。如果先送位码,则要在送之前将所有的段码关闭,共阴的话则全部置高,共阳的全部置低。消隐时间越短越好,在关闭段码显示或位码显示后立即送位码或段码,不要进行任何的延时,延时是在送数完成之后进行。
在你的程序中是先送的位码,则在送位码之前要进行一句:clock_segment
=
0xff;
//
如果用的是共阴数码管。如果用的是共阳数码管就是:clock_segment
=
0x00;