本帖最后由 一路向北lm 于 2018-2-23 11:08 编辑
考点分析: 数码管
注意点:
01.数码管的显示 (包括动态与静态显示)必须熟练掌握,比赛时熟练写出自己平时封装好的函数我这里有几个给大家提供参考。
02.数码管的消隐问题(有些位置不该亮却出现了一点点亮度)解决办法分享给大家参考
03.最后一位数码管比较亮(最后显示的过长导致最后一位显示过亮)
下面是官网提供给我们的原理图,关于数码管这个模块我们可以看到,主控芯片是通过 74hc138控制74hc02再去控制74hc573 为了节约单片机的io 官网采取了这种方式。 如果想让数码管显示我们可以通过p25 p26 p27 三个io控制 其中我们可以这样写 : P2=0xc0; 138的Y6端输出低电平 WR端一直是低电平,Y6C输出高电平 使u8(573)使能端打开,打开数码管位选端。 P0=0x01; 选择第一位数码管。 P2=0x1f; 数据锁存。 P0=0xff ; 用于消隐。 P2=0xe0; U7(573)使能,打开数码管段选端。 P0=table【】; 显示数字相应的段码 。 P2=0x1f; 数据锁存。 P0=0x00; 消隐 。 我封装了几个函数 方面调用 #ifndef _display_h #define _display_h #include<define.h> #include<intrins.h> uchar flag,vol; uchar shi,fen,miao; uchar table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff}; uchar yi=11,er=11,san=11,si=11,wu=11,liu=11,qi=11,ba=11; void delayms(); void display1(); void display2(); void display3(); void display4(); void delayms(uint z) { uint x,y; for(x=z;x>0;x--) for(y=114;y>0;y--);
}
void display1(uchar yi,er) { P2=0xc0; P0=0x01; P2=0x1f; P0=0xff; P2=0xe0; P0=table[yi]; P2=0x1f; P0=0x00; delayms(1);
P2=0xc0; P0=0x02; P2=0x1f; P0=0xff; P2=0xe0; P0=table[er]; P2=0x1f; P0=0x00; delayms(1); }
void display2(uchar san,si) { P2=0xc0; P0=0x04; P2=0x1f; P0=0xff; P2=0xe0; P0=table[san]; P2=0x1f; P0=0x00; delayms(1);
P2=0xc0; P0=0x08; P2=0x1f; P0=0xff; P2=0xe0; P0=table[si]; P2=0x1f; P0=0x00; delayms(1); }
void display3(uchar wu,liu) { P2=0xc0; P0=0x10; P2=0x1f; P0=0xff; P2=0xe0; P0=table[wu]; P2=0x1f; P0=0x00; delayms(1);
P2=0xc0; P0=0x20; P2=0x1f; P0=0xff; P2=0xe0; P0=table[liu]; P2=0x1f; P0=0x00; delayms(1); }
void display4(uchar qi,ba) { P2=0xc0; P0=0x40; P2=0x1f; P0=0xff; P2=0xe0; P0=table[qi]; P2=0x1f; P0=0x00; delayms(1);
P2=0xc0; P0=0x80; P2=0x1f; P0=0xff; P2=0xe0; P0=table[ba]; P2=0x1f; P0=0x00; delayms(1);
P2=0xc0; P0=0x80; P2=0x1f; P0=0xff; P2=0xe0; P0=0xff; P2=0x1f; P0=0x00; delayms(1);
}
|