当前位置: 首页 > 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 …...

Vue弹窗用也可以直接调用Js方法了

问题描述 在前端开发中&#xff0c;弹窗开发是一个不可避免的场景。然而&#xff0c;按照正常的逻辑&#xff0c;通过在template模板中先引用组件&#xff0c;然后通过v-if指令控制显隐&#xff0c;进而达到弹窗的效果。然而&#xff0c;这种方法却有一个严重的缺陷&#xff0…...

【c语言测试】

1. C语言中&#xff0c;逻辑“真”等价于&#xff08; &#xff09; 题目分析&#xff1a; “逻辑真”在C语言中通常指的是非零数。 A. 大于零的数B. 大于零的整数C. 非零的数 (正确答案)D. 非零的整数 正确答案&#xff1a;C 2. 若定义了数组 int a[3][4];&#xff0c;则对…...

一种将树莓派打造为游戏机的方法——Lakka

什么是Lakka&#xff1f; Lakka是一款Linux发行版&#xff0c;轻量级的&#xff0c;可将小型计算机转变为一台复古游戏机。 图1-Lakka官网&#xff0c;见参考链接[1] Lakka是RetroArch和libretro生态系统下的官方操作系统&#xff0c;前者RetroArch是模拟器、游戏引擎和媒体播…...

如何在 MySQL 中创建一个完整的数据库备份?

在MySQL数据库中创建一个完整的数据库备份通常不是通过编程语言直接实现的&#xff0c;而是借助MySQL提供的命令行工具mysqldump来完成。 作为Java开发者&#xff0c;我们可以编写脚本来调用这些工具&#xff0c;从而实现自动化备份。 下面我们将详细介绍如何使用Java来调度m…...

京准电钟HR-901GB双GPS北斗卫星时钟服务器

京准电钟HR-901GB双GPS北斗卫星时钟服务器 京准电钟HR-901GB双GPS北斗卫星时钟服务器 作为国家电力系统最重要的设备之一,卫星时间同步装置随着电力行业的发展不断有了新的要求,从单纯的具备时间数据输出能力,发展到装置状态信息上送、对用时设备的对时质量进行监测,确保站点内…...

uniapp使用websocket

后端java websoket中的 onOpen 中。依赖注入为null 引用&#xff1a;https://blog.csdn.net/qq_63431773/article/details/132389555 https://blog.csdn.net/weixin_43961117/article/details/123989515 https://cloud.tencent.com/developer/article/2107954 https://blog.c…...

基于Pycharm和Django模型技术的数据迁移

1.配置数据库 在trip_server/settings.py中修改配置&#xff1a; 其格式可访问官网&#xff1a;Settings | Django documentation | Django 1.1 配置数据库 文件地址&#xff1a;trip_server/settings.py 配置前需要创建&#xff08;NaviCat&#xff09;个人数据库 "…...

乐尚代驾-----Day10(订单三)

hi UU 们&#xff01;&#xff01;&#xff01;我又来跟辛辣&#xff01;感谢你们的观看&#xff0c;话不多说&#xff01;~ 司机到达代驾终点&#xff0c;代驾结束了。结束代驾之后&#xff0c; – 获取额外费用&#xff08;高速费、停车费等&#xff09; – 计算订单实际里程…...

105. 聚光源SpotLight

入门部分给大家介绍过平行光DirectionalLight、点光源PointLight、环境光AmbientLight,下面给大家介绍一个新的光源对象&#xff0c;也就是聚光源SpotLight。 创建聚光源SpotLight 聚光源可以认为是一个沿着特定方会逐渐发散的光源&#xff0c;照射范围在三维空间中构成一个圆…...

系统接口权限拦截器,获取用户信息存储

UserInfo 类 这是一个表示用户信息的 Java 类&#xff0c;使用了 Lombok 注解来简化代码编写。 import lombok.Data; import lombok.EqualsAndHashCode; import lombok.ToString;import java.io.Serializable; import java.util.List;Data ToString EqualsAndHashCode public…...

温州哪里有网站建设/公司做网络推广哪个网站好

消防安全知识讲座观后感 500字 [篇1]我们一起聆听了消防知识普及专题讲座&#xff0c;受益匪浅。主讲者从鲜活的案例入题&#xff0c;讲述了近一两年发生在我国的重特大火灾事故及其引发的原因&#xff0c;给我们敲响了警钟。消防安全在日常工作中往往被忽视&#xff0c;我们往…...

乐陵网站优化/宁波关键词网站排名

指定重載方法 实际上方法在 JavaScript 不过是个特性&#xff0c;为函数实例&#xff0c;因此&#xff0c;除了使用存在的方法之外&#xff0c;也可以使用 [] 来取得代表方法的函式&#xff1a; var System Java.type(java.lang.System); System.out.println(Hello, World);…...

在福州的网站制作公司/推广软件app

转自&#xff1a;http://blog.csdn.net/cpf2016/article/details/45534527 1.相关概念 &#xff08;1&#xff09;webx中的MVC 在webx中control就是action&#xff0c;view和layout、control、screen、template等概念相关。 layout指页面布局&#xff1b;control指页头、页脚、…...

南昌网站定制服务/网站注册要多少钱

09-整合第三方技术-注解整合mybatis分析 10-整合第三方技术-注解整合mybatis 前替换后&#xff0c; 前替换后 测试 11-整合第三方技术-注解整合Junit 已看完&#xff1a;&#xff1a;&#xff1a;&#xff1a;&#xff1a;...

东台建设局网站/跨境电商平台有哪些

一、重新加入storyboard 黑屏并且提示以下错误 错误&#xff1a;[Application] Failed to instantiate the default view controller for UIMainStoryboardFile Main - pe 解决方案&#xff1a; 1、在general编辑标签中&#xff0c;deployment info 部分&#xff0c;Main inter…...

江苏建设会计学会网站/网站是怎么做出来的

一、简述 JavaScript是用来实现浏览器和用户交互的&#xff0c;与html和css不同&#xff0c;它是门弱类型编程语言。 二、引入方式 1、内部标签 <script>代码块 </script>2、外部引入 <script src"js文件路径"></script>三、基础语法 …...