51单片机如何控制八个数码管,进行动态扫描

51单片机如何控制八个数码管,进行动态扫描,第1张

动态扫描就是给各个数码管依次显示,任意时间只有一个数码管亮,但闪烁的太快了,人眼分辨不出,给人的感觉就是每个数码管都在亮。一般过程就是赋值,开显示,延时,关显示,这是我以前写过的程序

#include <REGX52H>

main()

{unsigned int i;

while(1)

{P0=0x3f;//个位赋值

P1_0=0;//开显示

for(i=0;i<2;i++);//延时

P1_0=1;//关显示

P0=0x6;//十位

P1_1=0;

for(i=0;i<2;i++);

P1_1=1;

P0=0x5b;//百位

P1_2=0;

for(i=0;i<2;i++);

P1_2=1;

P0=0x4f;//千位

P1_3=0;

for(i=0;i<2;i++);

P1_3=1;}

}

这个是4位数码管,P0口接赋值端,P1口低四位接4个数码管的选通端,你要八个的话就把P1口的高四位再接到另外四个数码管的片选端,程序仿照就可以了

很容易,首先假如我们有6位数码管,每位数码管需要8个段选1个公共选通端, 那么6位数码管自然是8位端选信号 6位选通信号(分别选通1-6其中的一个数码管)

#define SMG_WEI P0 //P10 -P15 分别驱动数码管选通

#define SMG_DUAN P1 //P10 -P17接数码管8个段选

unsigned char smgcode[]={x,x,x,x,x,x,x,x,x,x} //对应数码管0-9的值,实际根据段信号确定

void Delay(unsigned long w)

{

while(w--);

}

void DisPlay(unsigned char s1,unsigned char s2,unsigned char s3,unsigned char s4,unsigned char s5,unsigned char s6) //s1 -s6表示1-6的数码管需要显示的数字

{

SMG_WEI =0x01 //第1个数码管选通 000001

SMG_DUAN =smgcode[s1]; //如s1传入1表示要显示1,那么直接调用数组偏移量为1的值,显示1

Delay(100); //延时一段时间消影

SMG_WEI =0x02 //第2个数码管选通 000010

SMG_DUAN =smgcode[s2]; //如s2传入2表示要显示2,那么直接调用数组偏移量为2的值,显示2

Delay(100); //延时一段时间消影

S3 /////

S4 /////

S5 //////

SMG_WEI =0x20 //第6个数码管选通 100000

SMG_DUAN =smgcode[s6]; //如s6传入6表示要显示6,那么直接调用数组偏移量为6的值,显示6

Delay(100); //延时一段时间消影

SMG_WEI =0;

SMG_DUAN =0; //清除显示,保证每位数码管亮度一致

}

void main()

{

while(1)

{

DisPlay(1,2,3,4,5,6);//数码管显示 1 2 3 4 5 6

}

}

以上就是关于51单片机如何控制八个数码管,进行动态扫描全部的内容,包括:51单片机如何控制八个数码管,进行动态扫描、怎么实现数码管动态动态扫描显示(同时显示不同的数字)以下程序只能一次显示一个数字。、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/9499278.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存