51单片机 学习之旅[2] 数码管

今天继续学习。

经过上次的点亮二极管,今天来到点亮数码管,并显示数字

下面是数码管原理图。



数码管显示其实就是里面 有多个发光二极管 组合起来。

每个针脚对应一个 二极管,想如何点亮就给那个二极管对应的针脚 电平。

数码管 分共阴 和共阳 两种, 当时共阴时,跟针脚 高电平 就可以点亮。



数码管静态显示

看下面图,多个数码管 通过第八个针脚 WE* 链接到 U2 这个锁存器上,

其他 针脚 链接到U1Z这个锁存器上。

通过 上面UI,UI2来控制 那个亮 亮什么数字

我的理解

 “位选” 指控制 一个数码管上亮那些灯,比如 a bcd 这些。的信号

“段选” 值该使 那个数码管亮



实际 U1 U2 那些“ 数据连接” 都是连接到单片机的P0口,那如何控制 该显示那个呢?

看UI DULA  ,U2 WELA ,这个是锁存器的LE口,通过锁存器的功能可以知道,可以通过 这个口的高低电平来控制 Q口的输出,

当LE 口 高电平的时候,其他D口传来什么电平 Q口就输出什么电平(并存起来),如果LE口 低电平了,那么 Q口就只会 输出 上次 LE口为高电平时存起来的信号。


看图 UI DULA  ,U2 WELA 连上的 是P2口

分别是P2^6 P2^7


我要点亮第二个数码管显示 一个3

分两步

1.需要显示 第二个数码管亮,那么就需要使用段选(U2),第二个 因为 数据位有8位 (D0~07),按高到低排列 第二个就是  (因为使用的数码管是共阴的,段选接的是GND那根 所以这里需要给个低电平才能点着,)那么二进制就是:

11111101

转成十六进制

0xFD

这个就相当于数据,然而U2的D 口,链接的是单片机的P0口,所以

//声明针脚
sbit U2LE = P2^7

//打开锁存器
U2LE = 1;

//把值赋予U2
P0=0xFD

//关闭 锁存器
U2LE = 0;
这个时候 U2 Q端 就会输出 0xFD 这个信号给数码管的段选


2. 显示什么样的数字,

上面只是确定了那个数码管显示而已,还没有真正的显示出数字,下面来给 这个数码管输出数字

之前看到 数码管的数字都是由 它的针脚的电平决定 abcd 什么鬼的,引申到U1 后就是 UI1的Q口,对应的U1这个锁存器,LE口和D端来控制 Q端的输出

要显示3,a b c d g 这5个发光二极管需要点亮,那么对应的 U1的D端是 D0 D1 D2 D3 D6 ,这几个口,来排一下,

由于 这个是共阴数码管 ,这个 位选的 需要 给高电平才能亮

所以 上面 亮3这个数字

11110010  分别对应上面说的额 D0 D1 D2 D3 D6  

转成十六进制

0xF2

跟上面的很像去操作 U1这个锁存器

//声明针脚
sbit U1LE = P2^6

//打开锁存器
U1LE = 1;

//把值赋予U1
P0=0xF2

//关闭 锁存器
U1LE = 0;


好了功德圆满,


但是实际上 出现一个问题,妈的蛋点亮后,其他数码管 出现残影?????

后来发现 需要在main 方法最后 用while(1);来执行一个死循环就可以,但是不明白为什么

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值