51单片机使用定时器进行数码管动态扫描程序

本文介绍了51单片机在使用定时器进行数码管动态扫描时如何避免亮度不均、亮度过低和重影问题。传统方法常使用while(1)循环和delay函数,但可能造成扫描不及时,导致显示异常。文章提供了一个稳定可靠的程序方案,通过合理控制段选和位选,确保数码管稳定显示。电路连接中,P1口连接74HC573控制数码管,P3.4和P3.5用于段选和位选。仿真结果在Proteus中验证通过,并提供了源码和仿真文件下载链接。
摘要由CSDN通过智能技术生成

数码管是51单片机学习中比较基础的一个模块,为简化电路连接,提高系统可靠性,降低制造成本,多位数码管广泛采用动态扫描的方式进行显示。如果程序编写不当,数码管动态扫描容易出现亮度不均匀、亮度过低、重影等现象。很多初学者会在主函数中使用while(1)循环,结合delay函数不断扫描,但这样得不断调用display扫描,如果单片机还要执行别的程序时,就会由于扫描不及时,导致各种问题。此外,在控制段选位选的先后顺序上,如果程序不当,则会造成显示重影等问题。在此给出一个稳定可靠的程序方案。


电路连接:P1口通过两个74HC573分别连接到八位数码管的段选和片选,段选、位选由P3.4和P3.5控制,低电平锁存

#include <reg52.h>
 
 #define DIGI_PORT P1 // 宏定义数码管端口,如果端口改变,只需修改这一句即可
 #define DIGI_NUM 8 // 宏定义数码管个数
 
 sbit DULA = P3^4;
 sbit WELA = P3^5;
 
 unsigned char digiBuf[DIGI_NUM]; //数码管缓冲区
 
 unsigned char code DigiTable[] = {
 	0x3F,/*0*/
 	0x06,/*1*/
 	0x5B,/*2*/
 	0x4F,/*3*/
 	0x66,/*4*/
 	0x6D,/*5*/
 	0x7D,/*6*/
 	0x07,/*7*/
 	0x7F,/*8*/
 	0x6F,/*9*/
 	0x00,/* */
 };
 
 /* 
 初始化定时器0,方式1,11.0592MHz晶振时,每5ms进一次中断,
 如果只有4位数码管,10ms即可,
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值