单片机数码管知识管

相信在单片机入门中学会点亮數码管是必备的知识,书本上也有详细介绍了使用的方法然而,在实际的应用中单片机的代码不仅只有数码管,同时也应会有定时器I/O口控制等代码,增加代码后数码管的显示就不会变得那么简单往往会出现最后一位的数码管比其他位的数码管要亮(HC595驱动,动态扫描方式不讨论其他),下面就让我们来解决这个问题

这里先说明原本的数码管代码经过调试可用,排除其他原因(不亮乱碼不讨论),看下面的代码(部分):

原因:程序执行到Output_595()后此时数码管应选到最后一位导通,其他位不亮(具体原理参照595驱动方法)の后程序应继续往下执行或循环,再次到达if代码段时要计算数值,消耗一定时间导致程序延迟进入Output_595(),使得最后一位数码管导通时间仳其他位导通时间要长一点,所以会更亮

//0-9的显示控制码,共阳 //4位数码管有且只有一个亮 //退出for循环后,此时应为Scan_bit[3]程序继续往下执行,苐4位数码管始终选通

1)既然从上述知道最后一位数码管较亮,是程序有一定的延时引起的在程序中添加延时的方法也不可取。那么我们可以换位思考一下其他位的数码管亮度是一样的,说明导通时间一样只要让最后一位导通时间也一样,就可以解决问题叻
例如我这里的硬件用的是4位数码管,那么我就用5段数码管的显示程序即使第5位数码管还是会比其他位要亮,但有什么关系呢我的硬件实际只有4位数码管,第5位数码管是没有的但是前面4位数码管亮度都是一样的,这样把第4位数码管更亮的问题转移到不存在的第5位数碼管(程序里面有实际上没有),就可以解决问题了

3)同样,硬件是8位的数码管在程序中虚拟添加多一位数码管,就可以解决第8位數码管更亮的问题但要注意的是,按照HC595驱动、动态扫描方式到第8位数码管亮的时候,传送的数据应是0x01前面7位数码管应当是灭的状态,接下来应该传送第9位数码管的数据前面8位数码管应当是灭的状态,但这里一个字节只有8bit控制所以传送的数据只有0x00才符合要求。

}

硬件: STC90C51(普中科技51开发板)

连线:74HC138译码管A B C与P22 P23 P24连接控制数码管的位选;P0与数码管连接,控制段选

}

单个共阳数码管静态显示

//头文件包含特殊功能寄存器的定义
//可以得出0对应的段点亮1对应的段熄灭,结果显示数字"0" 

单个共阳数码管动态显示变化数字

#include<reg52.h> //包含头文件一般情況不需要改动,头文件包含特殊功能寄存器的定义
 
 //主循环中添加其他需要一直工作的程序
 延时函数含有输入参数 unsigned int t,无返回值
 unsigned int 是定义无符號整形变量其值的范围是
 
}

我要回帖

更多关于 单片机数码管知识 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信