51单片机-数码管(keil、proteus)

本文详细介绍了使用51单片机进行数码管静态和动态显示的原理,包括数码管接线、静态显示代码实现、动态显示的编程方法以及74HC573锁存器的应用。同时提供了Keil编译烧录过程和效果演示。
摘要由CSDN通过智能技术生成

目录

一、硬件接线原理图

1、数码管接线原理图

2、数码管锁存器接线原理图

二、数码管显示

1、静态显示

(1)、程序(keil)

(2)、程序烧录

(3)、效果演示

2、动态显示

(1)、程序(keil)

(2)、程序烧录

(3)、效果演示

三、仿真

1、原理图

2、程序

3、效果演示


一、硬件接线原理图

1、数码管接线原理图(共阳极)

2、数码管锁存器接线原理图

其中芯片(74HC573)U8为位选(位选控制选择具体数码管),U9为段选(段选控制数码管具体的显示)

二、数码管显示

1、静态显示

(1)、程序(keil)

#include<reg52.h> //51头文件
#include<intrins.h>//循环位移函数
#define uint unsigned int
#define uchar unsigned char
sbit DU = P2^6;
sbit WE = P2^7;	
void main()
{
	WE = 1;//打开位选锁存
	P0 = 0XFE;
	WE = 0;//锁存数据
	
	DU = 1;//打开段选锁存
	P0 = 0X30;//位选显示数字1
	DU = 0 ;
	while(1);
	
}

(2)、程序烧录

(3)、效果演示

2、动态显示

(1)、程序(keil)

#include<reg52.h> //51头文件
#include<intrins.h>//循环位移函数
#define uint unsigned int
#define uchar unsigned char
uchar a=10,b=5,c=0,d=0,temp;//a为小时数,b为分钟数,c为秒数
uchar hourG,hourD,minG,minD,secG,secD;  //G为十位数,D为个位数
	uchar code table1[] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F,};//段选显示数字
	uchar code table3[] = {0xBF, 0x86, 0xDB, 0xCF, 0xE6, 0xED, 0xFD, 0x87, 0xFF, 0xEF,};//段选显示带点数字
	uchar code table2[] = {0xFE, 0xFD, 0xFB, 0xF7, 0xEF, 0xDF, 0xBF, 0x7F,};//位选显示数字
	
sbit DU = P2^6;
sbit WE = P2^7;	
	//延时函数
	void delay(uint z)
{
	uint x, y;
	for(x = z; x > 0; x--)
		for(y = 114; y > 0; y--);
}
//主程序
void main()
{ 
	while(1)
	{
	if(a<24)
	{
		//小时
		temp = 0XFF;
		hourG =a / 10;
		hourD =a % 10;
		P0 = temp;
		WE = 1;
		P0 = 0XFE;
		WE = 0;
		P0 = 0x00;
		DU = 1;
		P0 = table1[hourG];
		DU = 0;
		delay(1);
		P0 = temp;
		WE = 1;
		P0 = 0XFD;
		WE = 0;
		P0 = 0x00;
		DU = 1;
		P0 = table3[hourD];
		DU = 0;
		delay(5);
		//分
		if(b<60)
		{
		  minG =b / 10;
		  minD =b % 10;
		  P0 = temp;
		  WE = 1;
		  P0 = 0XFB;
		  WE = 0;
		  P0 = 0x00;
		  DU = 1;
		  P0 = table1[minG];
		  DU = 0;
			delay(1);
		  P0 = temp;
		  WE = 1;
		  P0 = 0XF7;
		  WE = 0;
		  P0 = 0x00;
		  DU = 1;
		  P0 = table3[minD];
		  DU = 0;
			delay(1);
			//秒
			if(c<60)
			{
				secG =c / 10;
		    secD =c % 10;
		    P0 = temp;
		    WE = 1;
		    P0 = 0XEF;
		    WE = 0;
		    P0 = 0x00;
		    DU = 1;
		    P0 = table1[secG];
		    DU = 0;
				delay(1);
		    P0 = temp;
		    WE = 1;
		    P0 = 0XDF;
		    WE = 0;
		    P0 = 0x00;
		    DU = 1;
		    P0 = table1[secD];
		    DU = 0;
				delay(1);
				//秒闪烁灭
				if(d<97)
				{
					d++;
					
				}
				else
				{
					d=0;
					c++;
				}
				
			}
			else
			{
				
				c = 0;
				b++;
			}
		}
		else
		{
			b = 0;
			a++;
			
		}
	}
	else
	{
		a=0;
	}
}
	}

(2)、程序烧录

(3)、效果演示

a、快速动态效果

数码管动态显示快速效果

 b、正常时间显示

数码管动态时间显示

三、仿真

仿真部分无法正常显示,后续再补充吧,暂时先这样了

1、原理图

2、程序

3、效果演示

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值