当前位置: 首页 > news >正文

【51单片机】第一个小程序 —— 点亮LED灯

学习使用的开发板:STC89C52RC/LE52RC
编程软件:Keil5
烧录软件:stc-isp

开发板实图:
在这里插入图片描述

文章目录

  • 单片机介绍
  • LED灯介绍
  • 练习
    • 创建第一个项目
    • 点亮LED灯
    • LED周期闪烁

单片机介绍

单片机,英文Micro Controller Unit,简称MCU
内部集成了CPU、RAM、ROM、定时器、中断系统、通讯接口等一系列电脑的常用硬件功能
单片机的任务是信息采集(依靠传感器)、处理(依靠CPU)和硬件设备(例如电机,LED等)的控制
单片机跟计算机相比,单片机算是一个袖珍版计算机,一个芯片就能构成完整的计算机系统。但在性能上,与计算机相差甚远,但单片机成本低、体积小、结构简单,在生活和工业控制领域大有所用
同时,学习使用单片机是了解计算机原理与结构的最佳选择

基础信息
在这里插入图片描述

  • RAM(Random Access Memory):随机存取存储器,也叫主存/内存,是与CPU直接交换数据的内部存储器。断电数据失效
  • ROM(Read-Only Memory):只读存储器,常用于硬盘,断电数据也不会失效

在这里插入图片描述
例:STC89C52 35I-DIP40

  • STC是一家公司的简称
  • 8表示该芯片为8051内核芯片
  • 9表示内部含 FlashE²PROM 寄存器。还有如80C51中0表示内部含有 Mask Rom(掩模ROM)存储器;又如87C51中7表示内部含有EPROM存储器(紫外线可擦出除ROM)。
  • C表示工作电压为5.5V~3,8V
  • 52如图表示8K字节程序空间和512字节RAM空间
  • 35表示工作频率可达35MHz
  • I表示工作温度范围:工业级 -40~85
  • DIP表示封装类型
  • 40表示管脚数,即两侧突出的引脚

封装类型,就是外层的塑料壳
在这里插入图片描述

管脚
在这里插入图片描述
其中,Vcc表示正极,Gnd表示负极

LED灯介绍

如图,右侧用红线框出来的区域是LED,第一排为LED,第二排的RP9和RP7是两个电阻,用于限流,防止电压过高,烧坏LED
在这里插入图片描述
仔细看电阻上的字102,此处表示电阻为1000Ω = 1K

转换方式为:10 * 10 ^ 2 = 1000Ω = 1K
若为1003,则为 100 * 10 ^ 3 = 100000Ω = 100K
若为473,则为 47 * 10 ^ 3 = 47000Ω = 47K
若为680,则为 68 * 10 ^ 1 = 68Ω


在这里插入图片描述
注意点:

  • 图标中,类似箭头的图标是从正极指向负极,电路中要正极接正极,负极接负极才能通电
  • 实物图中,管中较细的部分是正极,较粗的部分是负极
  • 引脚更长的为正极,引脚较短的为负极

原理图如下:
在这里插入图片描述
注意点:

  • VCC代表电源正极,也正对接着LED的正极部分
  • 右侧的P20、P21为I/O口,表示接线,在其他部件中同样可以看到,相同编号表示线路连接
  • 因为该单片机位数为8位,所以一组线位8条

在这里插入图片描述

  • 在单片机核心中,我们可以看到P2系列的I/O口,这表明单片机和LED是线路连通的
  • 左下角的GND表示负极,右侧那个多个竖线的图标也表示负极,也可以表示接地

控制灯亮的原理
在这里插入图片描述

  • CPU往寄存器中写入0/1,然后通过驱动器形成电信号,形成高低电频。0为低电频,1为高电频
  • 因为LED灯一端已经接了VCC,即正极,另一端接了P2系列的I/O串口
  • 所以只要让P2的某一位为0,负极,那么电路就会被连通。相反为1则电路不会连通

练习

编程软件使用Keil5

创建第一个项目

首先介绍如何创建第一个程序

  1. 点击工具栏的"Project",选择新建项目
    在这里插入图片描述
  2. 选择项目目录,输入项目名称
    在这里插入图片描述
  3. 选择单片机类型。因为STC是中国公司,该软件并没有兼容,但是其中的AT89C52STC89C52几乎是一样的,我们可以选其作为替代
    在这里插入图片描述
  4. 选择是否生成STARTUP.A51文件,目前选择不生成
    在这里插入图片描述

STARTUP.A51 文件通常是用于8051系列微控制器的汇编启动代码。它的主要功能包括:

  • 初始化堆栈:设置堆栈指针,以便程序在执行过程中可以正确地进行函数调用和返回。
  • 全局变量初始化:在主程序开始运行之前,对静态和全局变量进行初始化,确保它们具有正确的初始值。
  • 中断向量表:设置中断服务例程的入口地址,确保在发生中断时能够正确响应。
  • 调用主函数:完成所有初始化后,跳转到主程序的入口点,开始执行主逻辑。

如果不添加"startup.a51"文件,编译器就会自动加入一段初始化内存以及堆栈等的代码,这时的内存初始化部分你就无法去控制了,当然这在大部分情况下没什么关系。但是如果你想你的程序在复位后,内存里面的信息依然还保存着(所说的“热复位”),那么你就需要添加该启动文件,并且去里面修改内存初始化部分,不要初始化你需要保留的部分内存。

  1. 添加文件
    在这里插入图片描述
  2. 选择C语言文件
    在这里插入图片描述

如此就可以将代码编写在该文件中

点亮LED灯

上面我们说到,只要让LED灯对应的串口为0,就可以让灯亮,为1则让灯熄灭
为此,我们需要能操作P2系列的串口。
<REGX52.H>函数中,就包含了P2串口的地址,CPU可以通过地址访问该串口。
可以通过右键快速添加该头文件
在这里插入图片描述

8位操作数,对应8个LED灯,操作P2是一次性操作8个灯
在这里插入图片描述
代码如下:

//让灯亮
void test1()
{//P2寄存器连接LED的负极,设置二进制位为0则为亮灯P2 = 0xFE;//1111 1110
}int main()
{test1();return 0;
}

代码编写完后,接下来就是要将代码下载到开发板上,这个过程称之为烧录
使用的烧录软件是STC-ISP

  1. 首先我们要生成项目,因为烧录需要.hex文件,Keil5生成目标文件默认不会生成.hex文件,需要在"控制生成文件"中设置
    在这里插入图片描述
  2. 设置生成.hex文件

在这里插入图片描述
3. 点击“生成项目”——Build
4. 打开STC-ISP
在这里插入图片描述

  • 首先选择“单片机型号”!!!!如果没有选择匹配,后续点击“下载/编程”后会一直显示“正在检测目标单片机···”
    在这里插入图片描述
  • 其次选择串口号,一般通过USB接口连接开发板和电脑时,会自动匹配(前提是驱动已经下载好)。也可以手动查看。设置 -> 设备管理器 -> 端口(需要连接开发板才会显示)
    在这里插入图片描述
  • 选择程序文件,该Project.hex就是Keil5点击Build生成的
    在这里插入图片描述
  • 点击下载/编程(保证已连接开发板和电脑),重启开发板——按下左下角的按键
    在这里插入图片描述
    先下载,再重启STC-ISP显示如下信息即为成功
    在这里插入图片描述
    如果一直显示"正在检测目标单片机···",大概率是单片机型号不匹配!如遇到其他问题,欢迎在评论区讨论
    D1成功点亮
    在这里插入图片描述

LED周期闪烁

要想实现周期闪烁,可以在亮起后等一段时间再熄灭,然后再等一段时间再亮起
即指定的P2先为0,等一段时间再为1,再等一段时间为0

STC-ISP不仅可以烧录程序,还可以生成一些方法
在这里插入图片描述

  • 选择“软件延时计算器”
  • 注意选择系统频率,STC89C52STC89C52RC都是12MHz
  • 定时长度单位有毫秒和微秒
  • 指令集一定要选对,右侧有显示该指令集适用于哪些单片机
  • 最后生成C代码,复制
  • 如图是生成延迟1ms的方法

PS:其他方法可能包含_nop_()方法,该方法是个空函数,也是用来延迟一定时间,使用该方法需要包含<INTRINS.H>这个头文件

我们可以延迟500ms,代码如下:

//等待500ms
void Delay500ms()		//@12.000MHz
{unsigned char i, j, k;_nop_();i = 4;j = 205;k = 187;do{do{while (--k);} while (--j);} while (--i);
}

周期闪烁代码如下:

void test2()
{while(1){P2 = 0xFE;//D1亮灯Delay500ms();//等待500毫秒,0.5秒P2 = 0xFF;//D1灭灯Delay500ms();//等待}
}

PS:有两个头文件<REG52.H><REGX52.H>,两者都包含P2等的地址信息,但后者还包含了P2_0、P2_1…允许我们操控单个串口
在这里插入图片描述
周期闪烁的代码可以改成如下代码:

void test2()
{while(1){P2_0 = 0;//单独控制Delay500ms();//等待500毫秒,0.5秒P2_0 = 1;//灭灯Delay500ms();//等待}
}

以上就是本篇博客的所有内容,感谢你的阅读
如果觉得本篇文章对你有所帮助的话,不妨点个赞支持一下博主,拜托啦,这对我真的很重要。
在这里插入图片描述

相关文章:

【51单片机】第一个小程序 —— 点亮LED灯

学习使用的开发板&#xff1a;STC89C52RC/LE52RC 编程软件&#xff1a;Keil5 烧录软件&#xff1a;stc-isp 开发板实图&#xff1a; 文章目录 单片机介绍LED灯介绍练习创建第一个项目点亮LED灯LED周期闪烁 单片机介绍 单片机&#xff0c;英文Micro Controller Unit&#xff0…...

如何通过自动化有效地简化 Active Directory 操作?

我们都知道规模稍微大一点的企业为了便于计算机的管理&#xff0c;基本都上了微软的AD域控制器。 那么肯定就会存在这么一个问题&#xff0c; 不断的会有计算机加入或者是退出域控制器&#xff0c;批量的创建、修改、删除AD域用户&#xff0c;如果企业的架构需要改变&#xff…...

Java-POI导出EXCEL(动态表头)

1、主要功能 导出excel&#xff0c;表头有固定的和动态的。动态表头之间不能穿插固定表头。 2、使用方法 引入下方两个工具类&#xff0c;定义excel固定表头类。调用方法即可。 调用方法&#xff1a; ExcelDynamicHeader<MajorNameChangeReport> ledgerSafetyProblemEx…...

利用 Direct3D 绘制几何体—9.流水线状态对象

到目前为止展示过编写输入布局描述、创建顶点着色器和像素着色器&#xff0c;以及配置光栅器状态组这 3 个步骤。接下来讲如何将这些对象绑定到图形流水线上&#xff0c;用以实际绘制图形。大多数控制图形流水线状态的对象被统称为流水线状态对象&#xff08;Pipeline State Ob…...

【开源项目】libfaketime安装、使用——小白教程

项目 Github&#xff1a;GitHub - wolfcw/libfaketime: libfaketime modifies the system time for a single application libfaketime安装 01.切换路径&#xff0c;目标路径&#xff1a;/usr/local &#xff08;在/usr/local路径下git clone 开源项目) 切换路径指令: cd …...

java.util.concurrent包

java.util.concurrent包是Java中用于并发编程的重要工具集&#xff0c;提供了丰富的并发原语和组件&#xff0c;以简化多线程编程的复杂性&#xff0c;并帮助开发者编写高效、可伸缩和线程安全的并发程序。其主要功能包括以下几个方面&#xff1a; 一、线程池和任务执行框架 …...

Django创建项目模块+创建映射类+视图

确保你的项目已经正确链接数据库 链接数据库的工具有很多,数据库的种类也有很多&#xff0c;我使用的数据库是mysql&#xff0c;工具是pmysql&#xff0c;使用pymysql链接数据库&#xff0c;在settings文件中这么设置&#xff1a; DATABASES {# default: {# ENGINE: dja…...

使用AMD GPU和LangChain构建问答聊天机器人

Question-answering Chatbot with LangChain on an AMD GPU — ROCm Blogs 作者&#xff1a;Phillip Dang 2024年3月11日 LangChain是一个旨在利用语言模型强大功能来构建前沿应用程序的框架。通过将语言模型连接到各种上下文资源并基于给定的上下文提供推理能力&#xff0c;L…...

2024年808数据结构答案

1.已知带头结点单链表&#xff0c;H为头指针。设计一个算法&#xff0c;查找到链表的第m个结点(不包含头结点)&#xff0c;并将元 素值为X的结点插入到该结点后&#xff0c;形成一个新的链表。 // 定义单链表节点结构 typedef struct Node {int data;struct Node* next; } Nod…...

Amazon Linux 2023 安装 Docker

Amazon Linux 2023 安装 Docker 1. 简介 在公司需要将代码部属到 Amazon Linux 2023 系统上时&#xff0c;去 Docker 官方文档里面看也没有针对该系统的部属文档。虽然有通用的 Linux 部属方案但不能应用包管理工具。 首先执行yum、dnf、apt&#xff0c;执行yum和dnf都有正确…...

接口测试(八)jmeter——参数化(CSV Data Set Config)

一、CSV Data Set Config 需求&#xff1a;批量注册5个用户&#xff0c;从CSV文件导入用户数据 1. 【线程组】–>【添加】–>【配置元件】–>【CSV Data Set Config】 2. 【CSV数据文件设置】设置如下 3. 设置线程数为5 4. 运行后查看响应结果...

GGD证明推导学习

GGD证明推导学习 这篇文章&#xff0c;建议先看相关的论文。这篇是我读证明的感悟&#xff0c;因此&#xff0c;不会论文的主体内容 首先&#xff0c;给出命题&#xff1a; DGI的sumary向量是一个常数 给定一个图&#xff1a; G { X ∈ R N D , A ∈ R N N } \mathcal{G…...

Flink难点和高频考点:Flink的反压产生原因、排查思路、优化措施和监控方法

目录 反压定义 反压影响 WebUI监控 Metrics指标 backPressureTimeMsPerSecond idleTimeMsPerSecond busyTimeMsPerSecond 反压可视化 资源优化 算子优化 数据倾斜优化 复杂算子优化 背压机制 反压预防 性能调优 内置工具 第三方工具 反压定义 在探讨Flink的性…...

Swarm - Agent 编排工具

文章目录 一、关于 Swarm&#xff08;实验性、教育性&#xff09;为什么选择蜂群文档 二、安装使用安装基本用法其它示例 三、Running Swarmclient.run()ArgumentsResponse字段 四、AgentFields Agent指令函数切换和更新上下文变量函数模式 流媒体评估工具 一、关于 Swarm&…...

使用Python中的jieba库进行简单情感分析

在自然语言处理&#xff08;NLP&#xff09;领域&#xff0c;情感分析是一项重要的任务&#xff0c;它可以帮助我们理解文本背后的情感倾向。本文将通过一个简单的例子来介绍如何使用Python的jieba库对中文文本进行基本的情感分析。 1. 环境准备 首先&#xff0c;确保已经安装…...

`pip` 下载速度慢

pip 下载速度慢&#xff08;例如只有 50KB/s&#xff09;可能由多个因素导致&#xff0c;以下是一些常见原因和解决方法&#xff1a; 1. 使用国内镜像源 国内访问 PyPI 服务器可能会较慢&#xff0c;您可以通过配置国内镜像源来提升下载速度。以下是一些常用的国内镜像源&…...

【WRF数据准备】基于GEE下载静态地理数据-叶面积指数LAI及绿色植被率Fpar

【WRF数据准备】基于GEE下载静态地理数据 准备:WRF所需静态地理数据(Static geographical data)数据范围说明基于GEE下载叶面积指数及绿色植被率GEE数据集介绍数据下载:LAI(叶面积指数)和Fpar(绿色植被率)数据处理:基于Python处理为单波段LAI数据参考GEE的介绍可参见另…...

网管平台(进阶篇):网管软件的配置方式

正确选择网管软件配置方式对于确保网络运行的高效性、稳定性和安全性至关重要&#xff0c;因为它直接影响到网络管理的灵活性、监控的深度以及故障响应的速度&#xff0c;从而保障整体网络环境的顺畅运行和业务连续性。下面我们就分别介绍一下。 一、集中式网络管理配置 在集…...

推荐系统中的AB测试

在现代互联网平台中&#xff0c;推荐系统起着至关重要的作用&#xff0c;无论是视频平台、社交网络还是电商网站&#xff0c;推荐系统都能够帮助用户找到最感兴趣的内容。为了不断优化推荐效果&#xff0c;AB测试&#xff08;A/B Testing&#xff09;作为评估新算法或功能改进的…...

.NET 8 Web API 中的身份验证和授权

本次介绍分为3篇文章&#xff1a; 1&#xff1a;.Net 8 Web API CRUD 操作.Net 8 Web API CRUD 操作-CSDN博客 2&#xff1a;在 .Net 8 API 中实现 Entity Framework 的 Code First 方法https://blog.csdn.net/hefeng_aspnet/article/details/143229912 3&#xff1a;.NET …...

JavaSec-RCE

简介 RCE(Remote Code Execution)&#xff0c;可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景&#xff1a;Groovy代码注入 Groovy是一种基于JVM的动态语言&#xff0c;语法简洁&#xff0c;支持闭包、动态类型和Java互操作性&#xff0c…...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql

智慧工地管理云平台系统&#xff0c;智慧工地全套源码&#xff0c;java版智慧工地源码&#xff0c;支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求&#xff0c;提供“平台网络终端”的整体解决方案&#xff0c;提供劳务管理、视频管理、智能监测、绿色施工、安全管…...

线程同步:确保多线程程序的安全与高效!

全文目录&#xff1a; 开篇语前序前言第一部分&#xff1a;线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分&#xff1a;synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分&#xff…...

解锁数据库简洁之道:FastAPI与SQLModel实战指南

在构建现代Web应用程序时&#xff0c;与数据库的交互无疑是核心环节。虽然传统的数据库操作方式&#xff08;如直接编写SQL语句与psycopg2交互&#xff09;赋予了我们精细的控制权&#xff0c;但在面对日益复杂的业务逻辑和快速迭代的需求时&#xff0c;这种方式的开发效率和可…...

3403. 从盒子中找出字典序最大的字符串 I

3403. 从盒子中找出字典序最大的字符串 I 题目链接&#xff1a;3403. 从盒子中找出字典序最大的字符串 I 代码如下&#xff1a; class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...

华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建

华为云FlexusDeepSeek征文&#xff5c;DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色&#xff0c;华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型&#xff0c;能助力我们轻松驾驭 DeepSeek-V3/R1&#xff0c;本文中将分享如何…...

Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理

引言 Bitmap&#xff08;位图&#xff09;是Android应用内存占用的“头号杀手”。一张1080P&#xff08;1920x1080&#xff09;的图片以ARGB_8888格式加载时&#xff0c;内存占用高达8MB&#xff08;192010804字节&#xff09;。据统计&#xff0c;超过60%的应用OOM崩溃与Bitm…...

逻辑回归暴力训练预测金融欺诈

简述 「使用逻辑回归暴力预测金融欺诈&#xff0c;并不断增加特征维度持续测试」的做法&#xff0c;体现了一种逐步建模与迭代验证的实验思路&#xff0c;在金融欺诈检测中非常有价值&#xff0c;本文作为一篇回顾性记录了早年间公司给某行做反欺诈预测用到的技术和思路。百度…...

Git常用命令完全指南:从入门到精通

Git常用命令完全指南&#xff1a;从入门到精通 一、基础配置命令 1. 用户信息配置 # 设置全局用户名 git config --global user.name "你的名字"# 设置全局邮箱 git config --global user.email "你的邮箱example.com"# 查看所有配置 git config --list…...

[ACTF2020 新生赛]Include 1(php://filter伪协议)

题目 做法 启动靶机&#xff0c;点进去 点进去 查看URL&#xff0c;有 ?fileflag.php说明存在文件包含&#xff0c;原理是php://filter 协议 当它与包含函数结合时&#xff0c;php://filter流会被当作php文件执行。 用php://filter加编码&#xff0c;能让PHP把文件内容…...