LED数码管的静态显示与动态显示(Keil+Proteus)
前言
就是今天看了一下书上的单片机实验,发现很多的器件在Proteus中都不知道怎么去查找,然后想做一下这个实验,尝试能不能实现,LED数码管的两个还可以实现,但是用LED点阵显示器的时候他那个网络标号不知道是什么情况,有两个东西,所以我也还没搞懂,先暂时就是把LED数码管的静态显示和动态显示来记录一下。由于之前的Keil版本太老了,然后我就下载了最新版的,不过应该也没有什么影响吧。实验完成的就是以下两个:
1.用静态的方法显示学号的最后两位。
2.用动态的方法流水显示学号的后面六位。
实验需要用到的元器件符号(在Proteus中)
| 元件名称 | Proteus关键字 |
| 单片机 | AT89C51 |
| 晶体振荡器 | CRYSTAL |
| 蓝色的数码管 | 7SEG-COM-AN-BLUE |
| 绿色的数码管 | 7SEG-COM-AN-GRN |
| 电阻 | RES |
| 七段数码管 | 7SEG-MPX8-CA-BLUE |
| 复位按钮 | BUTTON |
| 电容 | CAP |
| 电解电容 | CAP-ELEC |
| NPN三极管 | NPN |
| 排阻 | RX8 |
LED数码管的显示原理是利用LED的发光特性,通过控制LED的亮灭来显示不同的数字或字符。它由多个LED灯组成,通常为七个LED灯,排列成数字“8”的形状。每个LED灯代表一个数字段,分别为a、b、c、d、e、f、g段,其中a、b、c、d、e、f、g段分别对应数字“0”到“9”中的不同段。
LED数码管的控制方式有两种,一种是共阳极控制,一种是共阴极控制。共阳极控制是指将所有LED灯的阳极连接在一起,通过控制各个阴极的接通情况来控制LED数码管的亮灭;共阴极控制则是将所有LED灯的阴极连接在一起,通过控制各个阳极的接通情况来控制LED数码管的亮灭。
比如我采用的是共阳极的数码管,想输出2,他共阳极就是都接着同一个电源了,要想他亮,对应的位置就是0(低电平),1(高电平)就不亮,然后在纸上画着对应位置,就可以写出对应的字型码了(采用16进制)。

常见的字符的码段
| 显示字符 | 共阴极字型码 | 共阳极字型码 |
| 0 | 3FH | C0H |
| 1 | 06H | F9H |
| 2 | 5BH | A4H |
| 3 | 4FH | B0H |
| 4 | 66H | 99H |
| 5 | 6DH | 92H |
| 6 | 7DH | 82H |
| 7 | 07H | F8H |
| 8 | 7FH | 80H |
| 9 | 6FH | 90H |
| A | 77H | 88H |
| b | 7CH | 83H |
| C | 39H | C6H |
| d | 5EH | A1H |
| E | 79H | 86H |
| F | 71H | 8EH |
| P | 73H | 8CH |
| U | 3EH | C1H |
| T | 31H | CEH |
| y | 6EH | 91H |
| H | 76H | 89H |
| L | 38H | C7H |
| "灭" | 00H | FFH |
LED数码管的静态显示
首先就是要理解他的逻辑,通过Keil生成对应的.hex文件,再导入到Proteus中进行模拟。
Keil部分
新建项目

自己选择路径,起文件名(建议是用英文,但是目前中文也没有报错)
选择AT89C51
点击是

新建C语言文件

然后就是输入代码
#include"reg51.h" //包含8051单片机寄存器定义的头文件
void main(void){P0=0xa4;//将数字“2”的码段(共阳极)送P0口P1=0x82;//将数字“6”的码段(共阳极)送P1口while(1);//无限循环
}
没有错误就问题不大,但是此时我们还没有生成.hex文件,需要勾选一下。

再重新把程序构建一下就可以了。(文件在项目的Objects文件夹下面)
到这里Keil部分就可以了,接着就是Proteus部分:
Proteus部分
先要创建一个.DSN文件


添加电路图需要的元器件



然后就是添加后连线(直接连线就不用说了),这里说一下网络标号

输入标号(标号一致表示连接)

电源在左边的工具栏和通过鼠标右键都可以找到

导入hex文件(双击AT89C51)

左下角选择开始停止


运行结果

拓展
本来以为买的是一样的,结果发现不太一样。这个选择的是AT89C52.需要借助,STC-ISP.
之后就是下载/编程,就烧录到单片机里面了。

还是有区别的,这个程序。这个的有一个消影的布置,就是如果不这样就会导致输出的时候两个会重合,所以需要有清零重新打印的布置。
#include<regx52.h>
//打印的位置
unsigned char NixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x7F,0x6F};
//延时函数
void delay(unsigned int xms){unsigned char i,j;while(xms--){i=2;j=239;do{while(--j);}while(--i);}
}
//打印的数字
void Nixie(unsigned char Location,Number){switch(Location){case 1:P2_4=1;P2_3=1;P2_2=1;break;case 2:P2_4=1;P2_3=1;P2_2=0;break;case 3:P2_4=1;P2_3=0;P2_2=1;break;case 4:P2_4=1;P2_3=0;P2_2=0;break;case 5:P2_4=0;P2_3=1;P2_2=1;break;case 6:P2_4=0;P2_3=1;P2_2=0;break;case 7:P2_4=0;P2_3=0;P2_2=1;break;case 8:P2_4=0;P2_3=0;P2_2=0;break;}//消影P0=NixieTable[Number];delay(1);#P0=0x00;
}void main(){while(1){Nixie(1,2);Nixie(2,6);}
}


LED数码管的动态显示
同理可得
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned intuchar code dis_code[]={0xA4,0xC0,0xC0,0xF9,0xA4,0x82};//200126
uchar code wei_code[]={0x01,0x02,0x04,0x08,0x10,0x20};//对应输出的位置void delay(uint t){uchar i;while(t--)for(i=0;i<200;i++);
}void main(){uchar i;while(1){for(i=0;i<6;i++){P0=dis_code[i];//P0口输出段码P2=wei_code[i];//P2口输入位控码delay(123);//延时}}
}
总线可以通过右键来找到(左边也有,还有电源和接地的符号)


流水灯
参考链接
KeilMDK5软件写不了汉字注释怎么解决?_keil怎么输入中文_第九荒岛的博客-CSDN博客
https://blog.csdn.net/qq_46600282/article/details/128550120proteus设计教程-数码管使用方法_proteus数码管_zd845101500的博客-CSDN博客
https://blog.csdn.net/zd845101500/article/details/126663186proteus常用元件图示和名称介绍 - 知乎 (zhihu.com)
https://zhuanlan.zhihu.com/p/518410309?utm_id=0单片机Proteus中的这个16个引脚的元器件是什么?_百度知道 (baidu.com)
https://zhidao.baidu.com/question/2121623824451309267.htmlProteus如何设置网络标号-百度经验 (baidu.com)
https://jingyan.baidu.com/article/adc8151342d5a7b623bf73f3.html怎样把HEX文件载入PROTEUS 7仿真软件单片机里_360问答 (so.com)
https://wenda.so.com/q/1676834827210755proteus电源在哪-百度经验 (baidu.com)
https://jingyan.baidu.com/article/4e5b3e192806d8d0911e2423.html
51单片机入门教程-2020版 程序全程纯手打 从零开始入门_哔哩哔哩_bilibili
https://www.bilibili.com/video/BV1Mb411e7re/?spm_id_from=333.1007.0.0&vd_source=7c3bfbf39d037fe80c97234396acc524
总结
还是需要一点耐心的,其实我也不确定能不能运行成功,但是最后结果和自己理想中的一样的时候还是有点小激动的,未来继续努力。
相关文章:
LED数码管的静态显示与动态显示(Keil+Proteus)
前言 就是今天看了一下书上的单片机实验,发现很多的器件在Proteus中都不知道怎么去查找,然后想做一下这个实验,尝试能不能实现,LED数码管的两个还可以实现,但是用LED点阵显示器的时候他那个网络标号不知道是什么情况&…...
webGL编程指南 第五章 TexturedQuad_Clamp_Mirror
我会持续更新关于wegl的编程指南中的代码。 当前的代码不会使用书中的缩写,每一步都是会展开写。希望能给后来学习的一些帮助 git代码地址 :空 上一章节中我们学习了如何使用varyting变量绘制图片,本章节,我们学习texParameter…...
【Azure】存储服务:Azure 的存储账户
文章目录 一、前提知识(建议了解)二、介绍 Azure 存储帐户三、使用 Microsoft Azure 门户创建存储帐户 一、前提知识(建议了解) 在每一个云厂商中,都有自身的云存储,也有根据不同功能进行区分的不同类型的…...
高等数学啃书汇总重难点(十一)曲线积分与曲面积分
依旧是公式极其复杂恶心的一章,建议是:掌握两种线面积分的计算套路即可,和第8章一样属于同济版教材中最不重要的章节,不会对底层理解做过多考察~ 1.弧长曲线积分的几何意义 2.弧长曲线积分的定义和性质 3.弧长曲线积分的计算方式 …...
【算法专题】双指针—盛最多水的容器
一、题目解析 分析这个题目不难得出一个容积公式 二、算法原理 解法一:暴力枚举(超时) 套用上述的容积公式,使用两个for循环来枚举出所有可能的情况,再挑出最大值即可,但是这种写法会超时,导致…...
java入门,程序=数据结构+算法
一、前言 在学习java的时候,我印象最深的一句话是:程序数据结构算法,对于写java程序来说,这就是java的入门。 二、java基本数据结构与算法 1、数据类型 java中的数据类型8种基本数据类型: 整型 byte 、short 、int…...
9.MySQL索引的操作
个人主页:Lei宝啊 愿所有美好如期而遇 目录 索引操作 查询索引 创建主键索引 唯一索引的创建 普通索引的创建 全文索引的创建 删除索引 索引创建原则 索引操作 查询索引 第一种方法: show keys from 表名\G 我们了解其中几个就好。 第二种方法…...
大型加油站3d全景虚拟现实展示平台实现全方位立体呈现
近年来,随着国民经济的快速发展,交通基础设施的不断改善,机动车保有量的持续飙升,以至于加油站的建设数量和密度也在不断扩张。加油站作为人流量大且常见的城市场景,对加油站进行安全防范措施具有非常重要的安全意义。…...
Reading:Deep dive into the OnPush change detection strategy in Angular
原文连接:IndepthApp 今天深入阅读并总结Angualr中onPush更新策略。 1. 两种策略 & whats Lview? Angular 实现了两种策略来控制各个组件级别的更改检测行为。这些策略定义为Default和OnPush: 被定义为枚举: export enum…...
野火霸天虎 STM32F407 学习笔记_1 stm32介绍;调试方法介绍
STM32入门——基于野火 F407 霸天虎课程学习 前言 博主开始探索嵌入式以来,其实很早就开始玩 stm32 了。但是学了一段时间之后总是感觉还是很没有头绪,不知道在学什么。前前后后分别尝试了江协科技、正点原子、野火霸天虎三次 stm32 的课程学习。江协科…...
@reduxjs/toolkit配置react-redux解决createStore或将在未来被淘汰警告
通常 我们用redux都需要通过 createStore 但目前 你去用它 基本都会被划线 甚至有点厉害的的编辑器 他会直接告诉你这个东西基本快被弃用了 这个应该大家都知道 最好不要用已经被明确未来或弃用的语法 因为一旦弃用这个系统就需要维护 而且说 一般会被淘汰的语法 本身也就是有…...
致敬1024天前的自己
今早打开手机就收到了来自CSDN的消息,哦,距离我发表第一篇技术博客已经过去1024个日夜了。 我第一次发技术博客是我大二做完我第一个网站时写的。因为网站需要上线服务器,涉及到不少linux相关的知识,我在自学的过程中走了不少弯路…...
〖Python网络爬虫实战㊱〗- JavaScript 网站加密和混淆
订阅:新手可以订阅我的其他专栏。免费阶段订阅量1000+python项目实战 Python编程基础教程系列(零基础小白搬砖逆袭) 说明:本专栏持续更新中,订阅本专栏前必读关于专栏〖Python网络爬虫实战〗转为付费专栏的订阅说明作者:爱吃饼干的小白鼠。Python领域优质创作者,2022年度…...
基于单片机设计的电子柜锁
一、前言 随着现代社会的不断发展,电子柜锁的应用越来越广泛。传统的机械柜锁存在一些不便之处,例如钥匙容易丢失、密码容易泄露等问题。设计一款基于单片机的电子柜锁系统成为了一个有趣而有意义的项目。 该电子柜锁系统通过电磁锁作为柜锁的开关&…...
Windows安装tensorflow-gpu=1.14.0CUDA=10.0cuDNN=7.4 (多版本CUDA共存)
文章目录 0. 前置说明1. 查看版本对应关系2. 安装 cuda3. 安装 cudnn4. 添加环境变量5. 安装 tensorflow 0. 前置说明 本机(Windows 11)已安装CUDA 11.7 使用命令查看显卡驱动: nvidia-smi这里显示的CUDA Version: 11.7说明支持安装11.7版本…...
CodeWhisperer 初体验
文章作者:1颗 orange 最近用了一个叫 CodeWhisperer 的插件,这个软件对于来说开发人员,插件有好多实用的功能,编码更高效,代码质量也提升了很多。 CodeWhisperer 简介 CodeWhisperer 是亚⻢逊出品的一款基于机器学习…...
HNU-算法设计与分析-讨论课1
第一次小班讨论 (以组为单位,每组一题,每组人人参与、合理分工,ppt中标记分工,尽量都有代码演示) 1.算法分析题 2-10、2-15(要求:有ppt(可代码演示)) 2.算法实现题 2-4、…...
java连接zookeeper
API ZooKeeper官方提供了Java API,可以通过Java代码来连接zookeeper服务进行操作。可以连接、创建节点、获取节点数据、监听节点变化等操作,具体有以下几个重要的类: ZooKeeper:ZooKeeper类是Java API的核心类,用于与…...
2023-11-01 node.js-electron-环境配置-记录
摘要: 2023-11-01 node.js-electron-环境配置-记录 相关文档: Node.js Build cross-platform desktop apps with JavaScript, HTML, and CSS | Electron node.js的国内源 - Python技术站 node.js 下载地址: https://nodejs.org/dist/v20.9.0/ 说明: 最好使用最新版本当前我使…...
使用 ElementUI 组件构建 Window 桌面应用探索与实践(WinForm)
零、实现原理与应用案例设计 1、原理 基础实例 Demo 可以参照以下这篇博文, 基于.Net CEF 实现 Vue 等前端技术栈构建 Windows 窗体应用-CSDN博客文章浏览阅读291次。基于 .Net CEF 库,能够使用 Vue 等前端技术栈构建 Windows 窗体应用https://blog.c…...
Ubuntu系统下交叉编译openssl
一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...
聊聊 Pulsar:Producer 源码解析
一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台,以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中,Producer(生产者) 是连接客户端应用与消息队列的第一步。生产者…...
Java面试专项一-准备篇
一、企业简历筛选规则 一般企业的简历筛选流程:首先由HR先筛选一部分简历后,在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如:Boss直聘(招聘方平台) 直接按照条件进行筛选 例如:…...
Python Einops库:深度学习中的张量操作革命
Einops(爱因斯坦操作库)就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库,用类似自然语言的表达式替代了晦涩的API调用,彻底改变了深度学习工程…...
MySQL 主从同步异常处理
阅读原文:https://www.xiaozaoshu.top/articles/mysql-m-s-update-pk MySQL 做双主,遇到的这个错误: Could not execute Update_rows event on table ... Error_code: 1032是 MySQL 主从复制时的经典错误之一,通常表示ÿ…...
认识CMake并使用CMake构建自己的第一个项目
1.CMake的作用和优势 跨平台支持:CMake支持多种操作系统和编译器,使用同一份构建配置可以在不同的环境中使用 简化配置:通过CMakeLists.txt文件,用户可以定义项目结构、依赖项、编译选项等,无需手动编写复杂的构建脚本…...
ffmpeg(三):处理原始数据命令
FFmpeg 可以直接处理原始音频和视频数据(Raw PCM、YUV 等),常见场景包括: 将原始 YUV 图像编码为 H.264 视频将 PCM 音频编码为 AAC 或 MP3对原始音视频数据进行封装(如封装为 MP4、TS) 处理原始 YUV 视频…...
20250609在荣品的PRO-RK3566开发板的Android13下解决串口可以执行命令但是脚本执行命令异常的问题
20250609在荣品的PRO-RK3566开发板的Android13下解决串口可以执行命令但是脚本执行命令异常的问题 2025/6/9 20:54 缘起,为了跨网段推流,千辛万苦配置好了网络参数。 但是命令iptables -t filter -F tetherctrl_FORWARD可以在调试串口/DEBUG口正确执行。…...
【计算机网络】NAT、代理服务器、内网穿透、内网打洞、局域网中交换机
🔥个人主页🔥:孤寂大仙V 🌈收录专栏🌈:计算机网络 🌹往期回顾🌹:【计算机网络】数据链路层——ARP协议 🔖流水不争,争的是滔滔不息 一、网络地址转…...
MQTT协议:物联网时代的通信基石
MQTT协议:物联网时代的通信基石 在当今快速发展的物联网(IoT)时代,设备之间的通信变得尤为重要。MQTT(Message Queuing Telemetry Transport)协议作为一种轻量级的消息传输协议,正逐渐成为物联…...
