51单片机之数码管

个人网站:Geek交流圈

单位数码管

在这里插入图片描述
a,b,c,d,e,f,g,dp 都是LED灯,正好八个,可以将数码管的a,b,c,d,e,f,g,dp按照顺序接到某一个I/O 口上,这里连接到P2引脚上,共阴(高电平有效)。
在这里插入图片描述
例如让单个数码管显示0
在这里插入图片描述
单个数码管显示0,应该是 a b c d e f亮,g 和 dp灭
按照顺序 P0 = 00111111;(高位  低位)
a是最右边的1,dp是最左边的0

循环显示0 - 8

//断码
u8 code smgduan[17]=
{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
  while1{
  	for(i = 0; i < 9; i++)
  	{
  		P0 = segment[i]; //P0接数码管
  		delay(50000); //延时函数
	}
  }

断码就是将对应显示的数据存放进数组中,使用时直接调用就行
比如0x3f,0x06,0x5b,0x4f,0x6d,0x7d,0x07,0x7f,0x6f
对应就是 0 1 2 3 4 5 6 7 8
想要显示对应数字,就直接调用数组的值给对应的I/O口赋值

多位数码管

静态显示:
就是用多个单个数码管组成,例如四个数码管,静态的话要占用4个I/O,非常占I/O资源。

动态显示:
要动态控制多位数码管,就需要涉及段选和位选
段选:段选就是让数码管怎么亮,利用断码
位选:就是让哪一个数码管亮

例如四位一体的数码管
在这里插入图片描述
由图中我们发现,段选的abcdefg dp是接在P0口上,位选的1234分别接在P1.0,P1.1,P1.2,P1.3上

断码表

u8 code smgduan[17]=
{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

sbit LSA=P1^0; //控制位选
sbit LSB=P1^1;
sbit LSC=P1^2;
sbit LSD=P1^3;

在这里插入图片描述
程序的流程
因为用的是四位一体的数码管,所以要循环四次

第一步
i = 0, 0 < 4 ,为假,进入循环
因为 i = 0;Switch(i)中会case(0),执行
在这里插入图片描述
P1.0 = 0
P1.1 = 1
P1.2 = 1
P1.3 = 1
位选是低电平有效,所以是第一个数码管亮
P0=smgduan[1]; 是给P0送断码
所以P0 = smgduan[1] = 0x06;//第一位数码管 显示 1
先要了解单位数码管如何亮

第二步
i++,i = 1, 1 < 4 ,为假,进入循环
因为 i = 1;Switch(i)中会case(1),执行
在这里插入图片描述
P1.0 = 1
P1.1 = 0
P1.2 = 1
P1.3 = 1
位选是低电平有效,所以是第二个数码管亮
P0=smgduan[3]; 是给P0送断码
P0 = smgduan[3] = 0x4f;//数码管第二位显示 3

依次类推,要显示
在这里插入图片描述
需要依次控制第一位显示1,第二位显示3,第三位显示1,第四位显示4。由于1314闪烁频率很快,眼睛暂流作用,会让人觉得1314是一起显示的。

  • 8
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

极客领航

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值