您的位置 首页 硬件

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

数码管是51单片机学习中比较基础的一个模块,为简化电路连接,提高系统可靠性,降低制造成本,多位数码管广泛采用动态扫描的方式进行显示。…

数码管是51单片机学习中比较根底的一个模块,为简化电路衔接,进步体系牢靠性,下降包围本钱,多位数码管广泛选用动态扫描的方法进行显现。假如程序编写不妥,数码管动态扫描简单呈现亮度不均匀、亮度过低、重影等现象。许多初学者会在主函数中运用while(1)循环,结合delay函数不断扫描,但这样得不断调用display扫描,假如单片机还要碑文其他程序时,就会我们扫描不及时,导致各种问题。此外,在操控段选位选的先后顺序上,假如程序不妥,则会形成显现重影等问题。在此给出一个安稳牢靠的程序计划。

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

#include #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即可,距离长度依据实际情况调整,在确保不业绩的情况下,尽或许加长加重以减小对CPU资源的耗费*/void initDigi(){TMOD = 0x01;TH0 = 0xEE;TL0 = 0x00;EA = 1;ET0 = 1;TR0 = 1;}void main(){digiBuf[0] = 10; // 为10则该位不显现digiBuf[1] = 1;digiBuf[2] = 2;digiBuf[3] = 3;digiBuf[4] = 4;digiBuf[5] = 5;digiBuf[6] = 6;digiBuf[7] = 7;initDigi();while(1);}// 定时器0函数每隔一段时间运转一次void displayTimer0() interrupt 1{static unsigned char digiPos = 0; // 当时需求显现的数码管,此处运用静态局部变量,或许全局变量,不行运用默许局部变量TH0 = 0xEE;TL0 = 0x00;// 位选封闭一切数码管,不然或许呈现重影(下面段选改动之后,位选改动之前,上一次现已位选翻开的数码会显现过错的信息)DIGI_PORT = 0xFF;	//这一句假如和下一句方位交流,或许发生重影,详细见http://blog.csdn.net/jzj1993/article/details/8563337WELA = 1;WELA = 0;// 这儿进行段选(此刻一切数码管都已封闭,不会显现过错信息)DIGI_PORT = DigiTable[digiBuf[digiPos]];DULA = 1;DULA = 0;// 这儿依据digiPos进行位选switch(digiPos) {case 0:	DIGI_PORT = ~(1 << 0); break; // 翻开第0个数码管case 1:	DIGI_PORT = ~(1 << 1); break; // 翻开第1个数码管case 2:	DIGI_PORT = ~(1 << 2); break; // 翻开第2个数码管case 3:	DIGI_PORT = ~(1 << 3); break; // 翻开第3个数码管case 4:	DIGI_PORT = ~(1 << 4); break; // 翻开第4个数码管case 5:	DIGI_PORT = ~(1 << 5); break; // 翻开第5个数码管case 6:	DIGI_PORT = ~(1 << 6); break; // 翻开第6个数码管case 7:	DIGI_PORT = ~(1 << 7); break; // 翻开第7个数码管}WELA = 1;WELA = 0;// 改动digiPos值,为下一次进入此函数做准备digiPos++;if(digiPos == DIGI_NUM)digiPos = 0;}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qianrushi/yingjian/263742.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部