【51单片机入门】点亮数码管

文章目录

  • 前言
  • 仿真图
  • 如何去绘制一个数字
  • 示例代码
    • 选择某个数码管
    • 显示某个数字
  • 示例代码
  • 总结


前言

在嵌入式系统的世界中,单片机扮演着至关重要的角色。51单片机,作为最早的微控制器之一,至今仍被广泛应用在各种设备中。本文将介绍如何使用51单片机点亮数码管,这是每个学习单片机的初学者都必须掌握的基本技能。我们将通过实际的操作步骤,让你了解如何编程控制单片机,以驱动数码管显示数字或字符。


仿真图

搜索7seg即可,MPX+数字,其中数字为数码管的个数,CA为共阳,CC为共阴,我们这里使用共阳
在这里插入图片描述
电路图:
在这里插入图片描述

如何去绘制一个数字

下面就是单个数码管的图片,我们输入对应的高低电平给对应的led就可以点亮对应的led
在这里插入图片描述

在共阳数码管中,你需要输入0给led,即可点亮他
共阴就是反一下。

示例代码

选择某个数码管

共阳数码管当该引脚为高电平时,即选中了他,比如1输入高电平,就可以操作显示0这个数码管了
在这里插入图片描述

void Choose(unsigned char index)
{
    P1 = 0;
    P1 = (1 << index);
}

显示某个数字

unsigned char num[6] = {
  0xC0, // ?? 0
  0Xf9, // ?? 1
  0Xa4, // ?? 2
  0Xb0, // ?? 3
  0X99, // ?? 4
  0X92, // ?? 5
};

void show(unsigned char digit)
{
  P2 = num[digit]; // ????????????P2??
}

这段代码是用来驱动数码管显示数字的。首先,我们来看看这个数组num

unsigned char num[6] = {
  0xC0, // ?? 0
  0Xf9, // ?? 1
  0Xa4, // ?? 2
  0Xb0, // ?? 3
  0X99, // ?? 4
  0X92, // ?? 5
};

这个数组存储了6个16进制数,每个数对应一个数字(0到5)在数码管上的显示方式。这些数是通过设置数码管的各个段(一般为7段或8段)的亮灭来显示对应的数字。

然后,我们看看show函数:

void show(unsigned char digit)
{
  P2 = num[digit];
}

这个函数接收一个数字(0到5),然后将这个数字对应的数码管显示方式(也就是num数组中对应的那个数)赋值给P2。在这里,P2是一个端口,它连接着数码管。通过改变P2的值,我们就可以改变数码管的显示。

所以,这段代码之所以能点亮数码管,是因为它通过改变连接数码管的端口P2的值,来改变数码管的显示。

如果你想添加新的字符,可以看这张图,1为开,0为关,写出对应的二进制,然后转换为16进制,放到num中即可
在这里插入图片描述

示例代码

#include <regx52.h>

typedef unsigned char u8;

unsigned char num[10] = {
  0xC0, // ?? 0
  0Xf9, // ?? 1
  0Xa4, // ?? 2
  0Xb0, // ?? 3
  0X99, // ?? 4
  0X92, // ?? 5
};


void delay(unsigned int ms) {
    unsigned int i, j;
    for(i = ms; i > 0; i--)
        for(j = 120; j > 0; j--);
}

void Choose(unsigned char index)
{
    P1 = 0;
    P1 = (1 << index);
}

// ???????
void show(unsigned char digit)
{
  P2 = num[digit]; // ????????????P2??
}

char ix = 0;

void main()
{
	P0 = 0;
	Choose(1); // ????????
	show(1); // ????1
	
	
	while(1)
	{
		
		Choose(ix);
		show(ix);
		ix++;
		ix%=6;
		delay(10);
	}
}


总结

通过本文的学习,我们了解了如何使用51单片机来点亮数码管。这个过程虽然看似简单,但它涵盖了许多重要的概念,如I/O编程,寄存器操作,以及时序控制等。掌握了这些,你就已经迈出了成为一名嵌入式系统工程师的第一步。希望你能继续探索51单片机的更多功能,并将其应用到更复杂的项目中去。记住,每个伟大的发明都始于简单的想法,而最重要的是你已经开始了这个旅程。祝你学习愉快!

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

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

相关文章

嵌入式Linux的浮点运算能力测试

嵌入式Linux的浮点运算能力测试 今天需要对一款ARM CPU的浮点数运算能力进行测试&#xff0c;采用了台式机上常用的SuperPI相同的原理&#xff1a;计算一定小数位数的圆周率来测试硬件的浮点数计算能力和稳定性。 首先下载计算软件的源代码&#xff0c;可以使用下面命令&#…

python使用动态属性访问JSON类数据,Get it!

目录 1、基础访问:内置json模块 📦 1.1 json.loads转换字符串 1.2 动态属性访问技巧 2、面向对象方式处理JSON 🛰️ 2.1 创建JSON数据模型类 2.2 动态属性与方法绑定 3、类型安全: 数据类(dataclasses)应用 🔒 3.1 数据类基础 3.2 自动从JSON解构数据 3.3 动态…

LLM大模型实战 —— DB-GPT阿里云部署指南

简介&#xff1a; DB-GPT 是一个实验性的开源应用&#xff0c;它基于FastChat&#xff0c;并使用vicuna-13b作为基础模型, 模型与数据全部本地化部署, 绝对保障数据的隐私安全。 同时此GPT项目可以直接本地部署连接到私有数据库, 进行私有数据处理&#xff0c; 目前已支持SQL生…

与国际接轨,与行业同行!2024深圳国际自有品牌展今日开幕!

2024深圳国际自有品牌展&#xff08;Marca China International Private Label Fair&#xff0c;简称“Marca China”&#xff09;于6月27日在深圳会展中心&#xff08;福田&#xff09;盛大开幕&#xff01;来自零售、电商、品牌等渠道的买家与专业观众&#xff0c;以及来自全…

提高LabVIEW程序可靠性

​提高LabVIEW程序的可靠性是确保系统稳定运行、减少故障和维护成本的重要措施。以下从多个方面详细分析如何提高LabVIEW程序的可靠性 1. 选择合适的架构 1.1 状态机架构 适用情况&#xff1a; 多状态、多步骤操作。 具体例子&#xff1a;在一个自动测试系统中&#xff0c;…

数学建模---最小生成树问题的建模~~~~~Matlab代码

目录 1.相关概念 &#xff08;1&#xff09;什么是树 &#xff08;2&#xff09;生成树和最小生成树&#xff1a; 2.适用赛题 &#xff08;1&#xff09;赛题分类 &#xff08;2&#xff09;不同之处 3.两种算法 &#xff08;1&#xff09;prim算法 &#xff08;2&…

PlatformIO开发环境

PlatformIO是一个开源的生态系统&#xff0c;用于构建物联网应用&#xff0c;它支持多种微控制器&#xff08;MCU&#xff09;和硬件开发板&#xff0c;并且与各种IDE集成良好&#xff0c;如VSCode, Atom等&#xff0c;使得跨平台的固件开发变得更加简单和高效。 ### 平台介绍…

计算机图形学入门21:辐射度量学

1.前言 在使用Blinn-Phong着色模型的时候&#xff0c;定义了一个光的强度I(Intensity)&#xff0c;假如I等于10。那么I等于10是什么意思&#xff1f;它肯定有单位和物理意义。另一方面&#xff0c;whited-style光线追踪模型也不是准确的模型&#xff0c;因为做了很多假设&#…

VS Code快速选定当前括号中内容 快速选择当前行内容(必备)

文章目录 快速选定当前括号内容效果方法 快速选定当前行内容效果操作 快速选定当前括号内容 效果 方法 下载插件 默认快捷键选中当前括号内容 ctrl w 可修改快捷键 快速选定当前行内容 效果 操作 点击左键三次即可

鸿蒙HarmonyOS自定义组件开发和使用

自定义组件的介绍 在开发和使用自定义组件直接&#xff0c;我们需要了解什么是自定义组件&#xff1f; 在ArkUI中&#xff0c;UI显示的内容均为组件&#xff0c;由框架直接提供的称为系统组件&#xff0c;由开发者定义的称为自定义组件。在进行 UI 界面开发时&#xff0c;通常…

操作系统之《处理器机调度算法》【知识点+详细解题过程】

目录 PS:处理机调度算法相关公式&#xff1a; 1、【FCFS】先来先服务调度算法 2、【SJF&#xff08;SPF&#xff09;】短作业&#xff08;进程&#xff09;优先调度算法 3、【HRRF】最高响应比优先算法 4、【SRTF】最短剩余时间优先调度算法&#xff08;抢占式&am…

图解支付账务系统入门

这篇文章主要从研发的视角讲清楚&#xff1a;账务相关的一些基础概念&#xff0c;账务系统核心的职责&#xff0c;以及一些关键模块的设计要点。 进入正题前&#xff0c;先讲个小故事。 几年前一个狂风暴雨电闪雷鸣的下午&#xff0c;老板把负责账务系统的技术经理炒了鱿鱼&a…

Android 14 独立编译 Setting apk

我们在setting 目录下是用 mm 会报错。 所以应该在 源码主目录 采用 make Settings 进行编译 很多时候如果在apk 目录下 mm 单独编译会出错&#xff0c; 都可以才用这种方式进行编译。

Electron录制应用-打包静态文件问题【命令行ffmpeg导不出视频】

问题描述 在开发环境下,所有功能都运行正常,但一旦进行打包并运行生产环境的版本,导出mp4视频的功能就失效了。没有文件生成,也没有任何错误提示。 排查问题 为了找到问题的根源,我首先决定通过日志来追踪。我使用了winston和winston-daily-rotate-file这两个强大的日志…

招聘,短信与您:招聘人员完整指南

招聘人员面临的最大挑战之一就是沟通和联系候选人。为何?我们可以从以下原因开始&#xff1a;候选人通常被太多的招聘人员包围&#xff0c;试图联系他们&#xff0c;这使得你很难吸引他们的注意。在招聘过程的不同阶段&#xff0c;根据不同的工作量&#xff0c;让申请人保持最…

HBuilder X 小白日记01

1.创建项目 2.右击项目&#xff0c;可创建html文件 3.保存CtrlS&#xff0c;运行一下 我们写的内容&#xff0c;一般是写在body里面 注释的快捷键&#xff1a;Ctrl/ h标签 <h1> 定义重要等级最高的(最大)的标题。<h6> 定义最小的标题。 H标签起侧重、强调的作用…

【R语言】plot输出窗口大小的控制

如果需要输出png格式的图片并设置dpi&#xff0c;可采用以下代码 png("A1.png",width 10.09, height 10.35, units "in",res 300) 为了匹配对应的窗口大小&#xff0c;在输出的时候保持宽度和高度一致即可&#xff0c;步骤如下&#xff1a; 如上的“10…

vue2axios的使用

1.安装axios npm i axios 2.配置代理服务器 1.在config.js中配置单个代理服务器 // 开启代理服务器 需要重新启动项目devServer: {proxy: http://localhost:5000}配置简单&#xff0c;请求资源时直接发给前端&#xff08;8080&#xff09;即可&#xff1b;但不能配置多个代理…

11.常见的Transforms(二)

常见的Transforms&#xff08;二&#xff09; 1.Resize() 的使用 1.1 作用 resize可以把输入的图片按照输入的参数值重新设定大小。 1.2 所需参数 需要输入想要重新设定的图片大小。 输入的参数类型可以为包含长和宽数值的一个序列&#xff08;h,w&#xff09;或者一个整…

css做旋转星球可举一反三

<!DOCTYPE html> <html lang"en"><head> <meta charset"UTF-8" /> <title>旋转的星球</title> <style type"text/css">.box {/*position: relative;*/position: absolute;width: 139px;height: 139p…