|
发表于 2023-7-21 13:47:27
|
显示全部楼层
第十集数码管动态显示
- 数码管刷新原理
- 控制原理
- 8位数码管同时点亮
控制原理
具体的控制的流程如图所示,N表示有几个数码管!
1.在上一课的基础上,新增一个位码选择的数组
2.通过调用数组选择位码
3:新建一个数组选择每个位需要显示的内容!
其中需要注意每个延时不能太短,我们这边程序就以1ms为准,且需要保证总共一个循环结束的时间不能大于20ms,因为人眼的视觉不容易分辨出50HZ以上的动态刷新。
具体代码参考上课
将所有的数码管的段选线并接在一起,用一个IO接口控制,公共端并不是直接接地(共阴极)或者电源(共阳极),而是通过相应的IO接口控制。以阴极为例假设4个数码管工作过程为:每个数码管的公共端与一根IO相连,第一步使最右边一个数码管的公共端为0,其余数码管公共端为1,同时在IO上 发送右边第一个数码管的字段码,这时候只有右边的第一个数码管显示,其余不显示;第二部使右边第二个数码管的公共端为0,其余的公共端为1,同时在上发送右边第二个数码管的字段码,这时候,只有右边第二个数码管显示,其余不显示,以此类推,直到最后一个,这样子4个数码管轮流显示相应的信息,一遍显示完毕,隔一段时间,又这样循环显示。从计算机角度,每个数码管隔一段时间才显示一次,但是由于人的视觉暂留效应,只要隔离时间足够短,循环的周期足够长,每秒达到24次以上,看起来数码管就一直稳定显示了,这就是动态显示原理。
#include<reg51.h>
sbit we1=P2^0;
sbit we2=P2^1;
sbit we3=P2^2;
sbit we4=P2^3;
unsigned char code tabl[]={0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71};
void delayms(unsigned int xms){
unsigned int i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--)
;
}
void display(){
we1=0;//给左边第一个数码管公共端一个低电平,使其进行显示
P0=tabl[1];//送入数字1到数码管中
delayms(5);//延时5ms
we1=1;//给第一个数码管的公共端一个高电平,使其关闭显示
P0=0xff;//消影处理,(这里非常重要,如果不进行消影,会使下一个数码管显示不正确,出现乱码的情况)
we2=0;//这里是进行第二个数码管显示,原理和第一个显示原理一样
P0=tabl[2];
delayms(5);
we2=1;
P0=0xff;
we3=0;
P0=tabl[3];
delayms(5);
we3=1;
P0=0xff;
we4=0;
P0=tabl[4];
delayms(5);
we4=1;
P0=0xff;
}
void main(){
while(1){
display();
}
} |
|