基于51单片机的数码管显示的proteus仿真

文章目录

  • 一、数码管
  • 二、单个数码管显示0~F
    • 仿真图
    • 仿真程序
  • 三、数码管静态显示
    • 74HC138译码器
    • 74HC245缓冲器
    • 仿真图
    • 仿真程序
  • 四、数码管动态显示
    • 仿真图
    • 仿真程序
  • 三、总结


一、数码管

数码管,也称作辉光管,是一种可以显示数字和其他信息的电子设备。它的基本单元是发光二极管,能显示不同位数的数字,如四位数码管等。数码管按段数分为七段数码管和八段数码管,其中八段数码管比七段数码管多一个发光二极管单元,用于显示小数点。

此外,根据发光二极管单元的连接方式,数码管又可分为共阳极数码管和共阴极数码管。

如下图所示:

在这里插入图片描述
实物大致长这样,尺寸和位数可能有所不同。

在这里插入图片描述

二、单个数码管显示0~F

这里解释下为什么P0要接一个上拉排阻,这是因为在P0口作为输出使用时,由于其内部没有上拉电阻,因此需要外接上拉电阻以确保能提供高电平输出。在P0口作为输入使用时,通常也需要接上拉电阻,以提供稳定的输入电平并保护内部电路。

这里使用的是共阳极数码管。

仿真图

单个数码管显示0-F

仿真程序

/**************************************************************************************
*		              数码管显示实验												  *
实现现象:下载程序后单个数码管静态显示0-F。
注意事项:																			  
***************************************************************************************/

#include "reg52.h"			 //此文件中定义了单片机的一些特殊功能寄存器

typedef unsigned int u16;	  //对数据类型进行声明定义
typedef unsigned char u8;

u8 code smgduan_anode[17] = 
{
    0xC0, // ~0x3F
    0xF9, // ~0x06
    0xA4, // ~0x5B
    0xB0, // ~0x4F
    0x99, // ~0x66
    0x92, // ~0x6D
    0x82, // ~0x7D
    0xF8, // ~0x07
    0x80, // ~0x7F
    0x90, // ~0x6F
    0x88, // ~0x77
    0x83, // ~0x7C
    0xC6, // ~0x39
    0xA1, // ~0x5E
    0x86, // ~0x79
    0x8E  // ~0x71
};//共阳数码管显示0~F的值

/*******************************************************************************
* 函 数 名         : delay
* 函数功能		   : 延时函数,i=1时,大约延时10us
*******************************************************************************/
void delay(u16 i)
{
	while(i--);	
}

/*******************************************************************************
* 函 数 名       : main
* 函数功能		 : 主函数
* 输    入       : 无
* 输    出    	 : 无
*******************************************************************************/
void main()
{	
    u8 i = 0; // 初始化循环计数器
    
    while(1)
    {			
        P0 = smgduan_anode[i]; // 显示当前循环计数器对应的数码管段码
        
        i++; // 循环计数器加1
        
        if(i >= 16) // 如果计数器达到16,重置为0
        {
            i = 0;
        }     
		delay(50000); //大约延时450ms
    }
}

三、数码管静态显示

74HC138译码器

74HC138B 译码器可接受三位二进制加权地址输入(A0,A1,A2)并在使能时,提供8 位低电平有效、互斥的输出(Y0 到 Y7)。

至于具体输出高还是低,要根据下面的真值表来看(请注意实物中的E3其实是仿真图中的E1,要看引脚编号。)

举例我接下来的仿真图中,以仿真图为例。我将E1(也就是真值表的E3)接VCC也就是接高电平,而E2和E3接低电平,所以输出只需要看后八行即可。然后根据A0,A1,A3的值来输出以此点亮哪个数码管,由于A0,A1,A2接到单片机的GPIO上,所以由软件决定点亮哪个数码管。

在这里插入图片描述

74HC245缓冲器

74HC245缓冲器其实是一款三态输出、八路信号双向收发器,有两个控制端(/OE、DIR);其中 DIR 为数据流向控制器,当 DIR 为高电平,数据流向为 A—>B;当 DIR 为低电平时,数据流向为 B—>A;/OE 为输出状态控制端,当/OE为高电平时,输出为高阻态;当/OE 为低电平时,数据正常传输。

同样的知道了原理,我们看下仿真图,我们的1脚也就是DIR方向控制端接5V,说明方向是由A到B,19脚CE也就是输出使能端接GND,说明数据正常传输。

仿真图

在这里插入图片描述

仿真程序

/**************************************************************************************
*		              静态数码管显示实验												  *
实现现象:下载程序后八位数码管中第一个数码管静态显示5。
注意事项:																				  
***************************************************************************************/
#include "reg52.h"			 //此文件中定义了单片机的一些特殊功能寄存器

typedef unsigned int u16;	  //对数据类型进行声明定义
typedef unsigned char u8;

sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;

u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
					0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//共阴数码管显示0~F的值
/*******************************************************************************
* 函 数 名         : delay
* 函数功能		   : 延时函数,i=1时,大约延时10us
*******************************************************************************/
void delay(u16 i)
{
	while(i--);	
}

/*******************************************************************************
* 函 数 名       : main
* 函数功能		 : 主函数
* 输    入       : 无
* 输    出    	 : 无
*******************************************************************************/
void main()
{	
    u8 i = 0; // 初始化循环计数器
    
    while(1)
    {
        LSA = 0;
        LSB = 0;
        LSC = 0;	// 控制38译码器的Y0输出低电平
			  
	    P3 = smgduan[5]; //显示数字5
    }
}

四、数码管动态显示

仿真图和静态的一样,只不过仿真程序改了一下。

仿真图

动态数码管显示

仿真程序

/**************************************************************************************
*		              动态数码管显示实验												  *
实现现象:下载程序后数码管从右至左显示0-7。
注意事项:如果不想让点阵模块显示,可以将74HC595模块上的JP595短接片拔掉。																				  
***************************************************************************************/

#include "reg52.h"			 //此文件中定义了单片机的一些特殊功能寄存器

typedef unsigned int u16;	  //对数据类型进行声明定义
typedef unsigned char u8;

sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;

u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
					0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//显示0~F的值

/*******************************************************************************
* 函 数 名         : delay
* 函数功能		   : 延时函数,i=1时,大约延时10us
*******************************************************************************/
void delay(u16 i)
{
	while(i--);	
}

/*******************************************************************************
* 函 数 名         : DigDisplay
* 函数功能		   : 数码管动态扫描函数,循环扫描8个数码管显示
*******************************************************************************/
void DigDisplay()
{
	u8 i;
	for(i=0;i<8;i++)
	{
		switch(i)	 //位选,选择点亮的数码管,
		{
			case(0):
				LSA=0;LSB=0;LSC=0; break;//显示第0位
			case(1):
				LSA=1;LSB=0;LSC=0; break;//显示第1位
			case(2):
				LSA=0;LSB=1;LSC=0; break;//显示第2位
			case(3):
				LSA=1;LSB=1;LSC=0; break;//显示第3位
			case(4):
				LSA=0;LSB=0;LSC=1; break;//显示第4位
			case(5):
				LSA=1;LSB=0;LSC=1; break;//显示第5位
			case(6):
				LSA=0;LSB=1;LSC=1; break;//显示第6位
			case(7):
				LSA=1;LSB=1;LSC=1; break;//显示第7位	
		}
		P3=smgduan[i];//发送段码
		delay(50000); //间隔一段时间扫描	
		P3=0x00;//消隐
	}
}

/*******************************************************************************
* 函 数 名       : main
* 函数功能		 : 主函数
* 输    入       : 无
* 输    出    	 : 无
*******************************************************************************/
void main()
{	
	while(1)
	{	
		DigDisplay();  //数码管显示函数	
	}		
}

三、总结

今天主要讲了基于51单片机的数码管显示的proteus仿真。

感谢你的观看!

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/568126.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Abaqus2024 安装教程(附免费安装包资源)

鼠标右击软件压缩包&#xff0c;选择“解压到Abaqus2024”。 鼠标右击“此电脑”&#xff0c;选择“属性”。 点击“高级系统设置”。 点击“环境变量”。 点击“新建”。 变量名输入&#xff1a;NOLICENSECHECK 变量值输入&#xff1a;true 然后点击“确定”。 点击“确定”。…

SD-WAN多分支组网案例分享

随着企业规模持续扩大&#xff0c;业务版图日益多元&#xff0c;多分支组网已成为企业网络建设的核心议题。如何构建高效、安全且灵活的网络连接&#xff0c;成为企业急需解决的关键问题。近些年&#xff0c;SD-WAN技术的崭露头角&#xff0c;为企业带来了前所未有的解决方案。…

芯片数字后端设计入门书单推荐(可下载)

数字后端设计&#xff0c;作为数字集成电路设计的关键环节&#xff0c;承担着将逻辑设计转化为物理实现的重任。它不仅要求设计师具备深厚的电路理论知识&#xff0c;还需要对EDA工具有深入的理解和熟练的操作技能。尽管数字后端工作不像前端设计那样频繁涉及代码编写&#xff…

PLC无线通讯技术在汽车喷涂车间机械手臂上的应用

一、项目背景 在汽车生产装配工艺中&#xff0c;机械臂目前已经广泛地应用于装配、搬运等工业生产中&#xff0c;在机械臂系列产品中&#xff0c;汽车喷漆自动控制喷涂机械装置以其独特的优势&#xff0c;能够根据油漆喷涂量的大小&#xff0c;严格控制喷嘴与喷漆面之间距离等…

【数据库】聊聊普通索引和唯一索引怎么选

业务场景 在实际的业务中&#xff0c;一般都有用户信息表&#xff0c;而存储的数据包括(姓名、手机号、身份证号)&#xff0c;对于业务层面来说一个人的身份证号是唯一确定的&#xff0c;所以在创建表的时候&#xff0c;针对身份证号列就可以选择创建普通索引或唯一索引。那么…

Git 创建版本库

Git 创建版本库 | CoderMast编程桅杆Git 创建版本库 在 Git 上创建版本库有两种方式&#xff0c;一种是直接拷贝远程 Git 仓库到本地&#xff0c;另外一种是我们自己创建本地的版本库。 拷贝远程仓库 拷贝远程仓库时我们需要知道远程仓库的URL地址&#xff0c;直接使用如下命令…

手撕netty源码(一)- NioEventLoopGroup

文章目录 前言一、NIO 与 netty二、NioEventLoopGroup 对象的创建过程2.1 创建流程图 前言 本文是手撕netty源码系列的开篇文章&#xff0c;会先介绍一下netty对NIO关键代码的封装位置&#xff0c;主要介绍 NioEventLoopGroup 对象的创建过程&#xff0c;看看new一个对象可以做…

使用mapinfo软件的在线地图插件运行错误解决

使用mapinfo软件的在线地图插件运行错误解决 一、如何解决win10/win11家庭版运行MapInfo中的在线地图插件报错【unexpected error&#xff1b;quitting】问题&#xff1f;二、如何解决在线地图切换地图源时的报错问题&#xff1f; 一、如何解决win10/win11家庭版运行MapInfo中的…

Linux中进程和计划任务管理(2)

一.进程命令 1.lsof lsof 命令&#xff0c;“list opened files”的缩写&#xff0c;直译过来&#xff0c;就是列举系统中已经被打开的文件。通过 lsof 命令&#xff0c;我们就可以根据文件找到对应的进程信息&#xff0c;也可以根据进程信息找到进程打开的文件。 格式&…

Jackson 2.x 系列【31】Spring Boot 集成之字典翻译

有道无术&#xff0c;术尚可求&#xff0c;有术无道&#xff0c;止于术。 本系列Jackson 版本 2.17.0 本系列Spring Boot 版本 3.2.4 源码地址&#xff1a;https://gitee.com/pearl-organization/study-jaskson-demo 文章目录 1. 场景描述2. 案例演示2.1 修改枚举2.2 定义注解…

【python】Python学生信息管理系统(源码+报告+本地存储)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

游戏黑灰产识别和溯源取证

参考&#xff1a;游戏黑灰产识别和溯源取证 1. 游戏中的黑灰产 1. 黑灰产简介 黑色产业&#xff1a;从事具有违法性活动且以此来牟取利润的产业&#xff1b; 灰色产业&#xff1a;不明显触犯法律和违背道德&#xff0c;游走于法律和道德边缘&#xff0c;以打擦边球的方式为“…

电磁仿真--基本操作-CST-(2)

目录 1. 回顾基操 2. 操作流程 2.1 创建工程 2.2 修改单位 2.3 创建 Shape 2.4 使用拉伸 Extrude 2.5 修改形状 Modify Locally 2.6 导入材料 2.7 材料解释 2.8 材料分配 2.9 查看已分配的材料 2.10 设置频率、背景和边界 2.11 选择 Edge&#xff0c;设置端口 2.…

深度解读半导体测试解决方案,4月25日精彩直播即将来袭!

半导体测试需求日益复杂、量产测试要求不断提升&#xff0c;行业工程师应该如何应对上述难题&#xff0c;提升测试的质量与效率&#xff0c;真正做到紧跟技术前沿&#xff0c;掌握创新应用&#xff0c;有效优化测试过程并降低测试成本&#xff1f; 针对上述痛点&#xff0c;加速…

Linux进阶篇:Centos7安装与配置mysql(rpm安装方式)

Linux服务搭建篇&#xff1a;Centos7安装与配置mysql&#xff08;rpm安装方式&#xff09; MySQL是一个开源的关系型数据库管理系统&#xff0c;由瑞典MySQL AB公司开发&#xff0c;现在属于Oracle公司。MySQL是最流行的关系型数据库管理系统之一&#xff0c;在WEB应用方面&am…

232 基于matlab的MIMO雷达模型下一种子空间谱估计方法

基于matlab的MIMO雷达模型下一种子空间谱估计方法&#xff0c;采用过估计的方法&#xff0c;避免了信源数估计的问题&#xff0c;对数据协方差矩阵进行变换&#xff0c;构造信号子空间投影矩阵和噪声子空间投影矩阵&#xff0c;不需要像经典的MUSIC一样对其进行特征分解&#x…

【网络编程】Java网络编程中的基本概念及实现UDP、TCP客户端服务器程序(万字博文)

系列文章目录 【网络通信基础】网络中的常见基本概念 【网络编程】Java网络编程中的基本概念及实现UDP、TCP客户端服务器程序&#xff08;万字博文&#xff09; 【网络原理】UDP协议的报文结构 及 校验和字段的错误检测机制&#xff08;CRC算法、MD5算法&#xff09; 目录 …

SpringCloud系列(12)--服务提供者(Service Provider)集群搭建

前言&#xff1a;在上一章节中我们成功把微服务注册进了Eureka集群&#xff0c;但这还不够&#xff0c;虽然注册服务中心Eureka已经是服务配置了&#xff0c;但服务提供者目前只有一个&#xff0c;如果服务提供者宕机了或者流量过大&#xff0c;都会影响到用户即服务使用者的使…

线上相亲竟然有三大好处,你认同吗?

当今社会高速的经济增长和急剧的社会变迁&#xff0c;使人们的生活水平极大提高&#xff0c;社会生活环境发生重大变化&#xff0c;人们的态度与观念也随之改变。这导致代际现象日益突出。以“80后”和“90后”为代表的青年群体成为社会新事物和新潮流的代言者&#xff0c;也自…

Jmeter04:关联

1 Jmeter组件&#xff1a;关联 概括&#xff1a;2个请求之间不是独立的&#xff0c;一个请求响应的结果是作为另一个请求提交的数据&#xff0c;存在数据交互 1.1 是什么&#xff1f; 就是一个请求的结果是另一个请求提交的数据&#xff0c;二者不再是独立 1.2 为什么&#x…