数码管与二进制及十六进制

一、数码管介绍
数码管实际就是七个到八个LED组成的显示模块。如下图:
在这里插入图片描述
我们可以看到,它有10个管脚,两排管脚的中间管脚是公共极,其余的头顶的靠近公共极的右边第一个管脚算起顺时针分别对应8字的一个边及一个点,从头顶第一段开始顺时针分别命名为a,b,c,d,e,f,中间的一段为g,小数点命名为dp。管脚则按照就近原则,上“口”字的右上方两段在上公共极的右边,左下两端分别在上公共极的左边,下“口”字的左下两段在下公共极的左边,剩下的在下公共极的右边。

二、二进制
我们在学习计算机基础的时候就学习过二进制,简单的说就是满二就进位的计数方法。计算机就是依靠二进制的计数的。很显然二进制的一位数仅仅能记录两种状态,所以同样记录一个数字它比十进制需要的位数可能要多很多。比如,9,二进制1001。又比如252,表达为二进制为11111100。

三、利用二级制表示数码管各段的亮灭状态
二进制虽然表达我们常见的十进制不方便,但表达有固定顺序的LED灯的亮灭状态非常方便。这个我们在前一篇博文中已经看到了。我们实际是将数码管各个段的亮灭用数字存储起来了。但我们发现这个数字其实用一个二进制来表示似乎更加方便容易。
比如,我们要表示数码管的0,即abcdef六个段都需要亮起,即00111111,只不过在前面的程序中我们是利用数组保存,这里是用一个二进制来保存的。

四、二进制与字节的关系
二进制在程序中仍然是不好表达的
我们可以这么表达,0b00111111;

这种二进制的表示方法看起比较直观,一看就知道哪个位要亮哪个位要灭,但书写起来位数多。所以,又有人提出了将这些二进制转化为16进制来表达。实际,十六进制就是满16进位的计数方式,很显然,它的移位可以表达二进制的4位,所以一个8位的二进制用2位16进制就表达出来了。
比如,上面的00111111表达为十六进制则为3f,在代码中表达为:
0x3f
这种带有字母的数字表达,刚好又与字节的大小容量一致,都是8位(一个字节可表示0-255即256种状态),我们就用一个字节来表达(字节则可以表示00~FF)
char seg=ox3f;
所以,数码管表达0~9则可以用这样一个字节数组来表达了
const unsigned char segCode [10]= {0x3F, 0x06, 0x58, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7, 0x6F};
这里我们要注意的是,对于二进制的读取,大多数采用的是从右至左开始读取也就是左边算作高位右边算作低位,从低位开始读取。所以11111100读出来就变成了00111111。同样3f读出来11111100

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

河西石头

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

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

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

打赏作者

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

抵扣说明:

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

余额充值