51单片机复位时 在控制位选时(是位选不是段选)是给1亮还是给0亮 与数码管是共阴极还是共阳极有关系吗

还要关闭"位选".再检查一下程序,有嘚时候是因为程序中有的指令会打开段选和位选!

你对这个回答的评价是

肯定是你I/O口复用了,在后面的程序又打开了位选检查一下硬件嘚连接图和程序

你对这个回答的评价是?

1602 怎么还会有段选和位选呢你是说的是数码管把

你对这个回答的评价是?

在此想认真探讨一下自己在这方面的一点心得:

通常市面上常见的51单片机复位时教程对于如何驱动共阳/共阴数码管一般都是按照下图来描述的:

因为每位数码管共有八個LED段,每个段通过的电流按照普通LED管的正常工作电流5mA来计算的话公共端COM通过的电流最大能达到8 × 5mA = 40mA

然而51单片机复位时(以STC89C52为例)的IO口拉电鋶能力很弱(几百微安),灌电流能力好些能达到20mA,但即使是这样8个LED段同时亮的话51单片机复位时IO口依然不能承受,所以常见的驱动LED数碼管的电路里(除了专用IC驱动外)都引入了三极管扩流(如上图所示,共阳管用PNP管扩流共阴管用NPN管扩流)

那么能否不用三极管扩流,矗接使用STC89C52驱动小尺寸共阳/共阴数码管呢我们还是得从数码管的动态扫描工作原理分析起:

通常教材里常见的是数码管按位动态扫描的方法,原理如下图所示:

4个IO口对4位数码管进行位选每位数码管分时点亮,最终利用视觉暂留原理在我们眼中呈现出“静态”的图像

但这樣带来一个弊病,也就是之前说的数码管公共端可能会流过最大8 × 5mA = 40mA电流超过了IO口的极限,需要引入外部器件扩流(无法直驱)

难道就没囿更好的办法了么我们可以换个思路,对数码管采用段选的扫描方法原理如下图所示:

我们使用IO口不断地对八个LED段按次序分时点亮,洏操控位的单片机复位时IO口则根据当前要输出的数字字形在当前段是否点亮

决定自己输出高电平还是低电平,这样经过段选的8次分时点煷(配合相应的位码输出)同样利用视觉暂留原理,最终在人眼

中能看到的是和按位扫描法一样的“静态”的图像然而在这种扫描方法下,每个单一时刻每位数码管同时只有1个LED段被

点亮,也就意味着数码管公共端最大也就流过5mA的电流因此也就不再需要引入外部的三極管为单片机复位时IO口扩流。

此时单片机复位时驱动数码管的电路就被简化成如下的直接驱动形式:

这种按段扫描的方法也不是没有缺点总体亮度相对按位扫描的数码管而言偏低(等同于8位数码管按位扫描的亮度),但好处是

数码管的总体亮度不会随着数码管位数的增多洏亮度变暗(按位扫描会出现数码管位数增多亮度降低的现象)

另外按段扫描的方法的扫描频率也相当于按位扫描频率的8倍,对MCU的占用率提高了弱化了多任务的能力。

值得注意的是由于STC89C52的拉电流能力微弱(无后续系列的强推挽模式),只能采用外接上拉电阻的方式提高拉电流的能力

这样在驱动共阴数码管时,即使对应的LED段不亮也会有电流消耗在上拉电阻上,白白地耗了电这也就是为什么51单片机複位时更适合

驱动共阳数码管的原因所在(共阳数码管IO口只需少量位上拉电阻,个数一般少于段上拉电阻)

最后给出一个STC89C52驱动4位共阴数码管的例子:(程序在Proteus和实物上都验证通过了)

  1. //0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F的显示码
  2. //用来存放要显示的4位数的显示码(段码)
  3. //用来存放要显示的4位数码管8个段每个段对应的位码(根据FontSeg内容动态生成)
  4. //初始化(共阴数码管段低电平位高电平,全暗) //位(数码管共阴极)置高電平关断显示(消隐)

我要回帖

更多关于 单片机复位时 的文章

 

随机推荐