【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();//等待}
}

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

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

创建ODBC数据源SQLConfigDataSource函数的用法

网络上没有这个函数能实际落地的用法说明&#xff0c;我实践后整理一下&#xff1a; 1.头文件与额外依赖库&#xff1a; #include <odbcinst.h> #pragma comment(lib, "legacy_stdio_definitions.lib") 2.调用函数&#xff1a; if (!SQLConfigDataSourceW(…

阿里云镜像源无法访问?使用 DaoCloud 镜像源加速 Docker 下载(Linux 和 Windows 配置指南)

&#x1f680; 作者主页&#xff1a; 有来技术 &#x1f525; 开源项目&#xff1a; youlai-mall &#x1f343; vue3-element-admin &#x1f343; youlai-boot &#x1f343; vue-uniapp-template &#x1f33a; 仓库主页&#xff1a; GitCode&#x1f4ab; Gitee &#x1f…

java :String 类

在我们之前的讲解中我们已经了解了很多的Java知识&#xff0c;这节我们讲Java中字符如何定义以及关于String如何使用还有常见的string函数。 【本节目标】 1. 认识 String 类 2. 了解 String 类的基本用法 3. 熟练掌握 String 类的常见操作 4. 认识字符串常量池 5. 认识 …

江协科技STM32学习- P21 ADC模数转换器

&#x1f680;write in front&#x1f680; &#x1f50e;大家好&#xff0c;我是黄桃罐头&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流 &#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐️ 留言&#x1f4dd;​…

基于SpringCloud的WMS管理系统源码

商品管理&#xff1a;商品类型&#xff0c;规格&#xff0c;详情等设置。 采购管理&#xff1a;采购单录入。 销售管理&#xff1a;销售单录入。 库存管理&#xff1a;库存查询、库存日志 采用前后端分离的模式&#xff0c;微服务版本前端 后端采用Spring Boot、Spring Cl…

python实现放烟花效果庆祝元旦

马上就要2025年元旦啦&#xff0c;提前祝大家新年快乐 完整代码下载地址&#xff1a;https://download.csdn.net/download/ture_mydream/89926458

vLLM推理部署Qwen2.5

vLLM vLLM 是一个用于大模型推理的高效框架。它旨在提供高性能、低延迟的推理服务&#xff0c;并支持多种硬件加速器&#xff0c;如 GPU 和 CPU。 vLLM 适用于大批量Prompt输入&#xff0c;并对推理速度要求高的场景&#xff0c;吞吐量比HuggingFace Transformers高10多倍。 …

手指关节分割系统:视觉算法突破

手指关节分割系统源码&#xff06;数据集分享 [yolov8-seg-C2f-RFAConv&#xff06;yolov8-seg-fasternet-bifpn等50全套改进创新点发刊_一键训练教程_Web前端展示] 1.研究背景与意义 项目参考ILSVRC ImageNet Large Scale Visual Recognition Challenge 项目来源AAAI Glob…

灵动AI:艺术与科技的融合

灵动AI视频官网地址&#xff1a;https://aigc.genceai.com/ 灵动AI 科技与艺术的完美融合之作。它代表着当下最前沿的影像技术&#xff0c;为我们带来前所未有的视觉盛宴。 AI 视频以强大的人工智能算法为基石&#xff0c;能够自动分析和理解各种场景与主题。无论是壮丽的自然…

网络学习/复习2套接字

LinuxCode/code26 zc/C语言程序学习 - 码云 - 开源中国

c语言中整数在内存中的存储

整数的二进制表示有三种&#xff1a;原码&#xff0c;反码&#xff0c;补码 有符号的整数&#xff0c;三种表示方法均有符号位和数值位两部分&#xff0c;符号位都是用‘0’表示“正&#xff0c;用1表示‘负’ 最高位的以为被当作符号位&#xff0c;剩余的都是数值位。 整数…

python 制作 发货单 (生成 html, pdf)

起因&#xff0c; 目的: 某个小店&#xff0c;想做个发货单。 过程: 先写一个 html 模板。准备数据&#xff0c; 一般是从数据库读取&#xff0c;也可以是 json 格式&#xff0c;或是 python 字典。总之&#xff0c;是数据内容。使用 jinja2 来渲染模板。最终的结果可以是 h…

使用 telnet 连接 dubbo 服务调用暴露的 dubbo 接口

目录 前言 环境准备 Telnet客户端 zookeeper pom 配置文件 dubbo接口 telnet连接dubbo dubbo命令 ls invoke 前言 工作中的微服务项目远程调用使用的技术是 dubbo&#xff0c;当对外提供了一个 duboo 接口时&#xff0c;无论是开发阶段自测&#xff0c;还是上线了服…

【EndNote版】如何在Word中引用文献

1、在Word中&#xff0c;鼠标光标放在所需插入文献的位置 2、点击选项卡中的“EndNote X9”&#xff0c;直接在EndNote中选中对应的文献 3、选中文献&#xff0c;点击工具栏中的“引用” 4、最后就可在Word中看到所插入的文献

华为配置BFD状态与接口状态联动实验

组网图形 图1 配置BFD状态与接口状态联动组网图 BFD简介配置注意事项组网需求配置思路操作步骤配置文件 BFD简介 为了减小设备故障对业务的影响&#xff0c;提高网络的可靠性&#xff0c;网络设备需要能够尽快检测到与相邻设备间的通信故障&#xff0c;以便及时采取措施&…

技术成神之路:设计模式(二十三)解释器模式

相关文章&#xff1a;技术成神之路&#xff1a;二十三种设计模式(导航页) 介绍 解释器模式&#xff08;Interpreter Pattern&#xff09;是一种行为设计模式&#xff0c;用于定义一种语言的文法表示&#xff0c;并提供一个解释器来处理这种文法。它用于处理具有特定语法或表达…

【C++】继承与模板

继承 1.继承的概念 概念&#xff1a;继承(inheritace)机制是面向对象程序设计使代码可以复用的最重要的手段&#xff0c;它允许程序员在保持原有类特性的基础上进行扩展&#xff0c;增加功能&#xff0c;这样产生新的类&#xff0c;称之为派生类。继承呈现了面向对象程序设计的…

时序分解 | TTNRBO-VMD改进牛顿-拉夫逊算法优化变分模态分解

时序分解 | TTNRBO-VMD改进牛顿-拉夫逊算法优化变分模态分解 目录 时序分解 | TTNRBO-VMD改进牛顿-拉夫逊算法优化变分模态分解效果一览基本介绍程序设计参考资料 效果一览 基本介绍 (创新独家)TTNRBO-VMD改进牛顿-拉夫逊优化算优化变分模态分解TTNRBO–VMD 优化VMD分解层数K和…

设计模式-单例模型(单件模式、Singleton)

单例模式是一种创建型设计模式&#xff0c; 让你能够保证一个类只有一个实例&#xff0c; 并提供一个访问该实例的全局节点。 单例模式同时解决了两个问题&#xff0c; 所以违反了单一职责原则&#xff1a; 保证一个类只有一个实例。 为什么会有人想要控制一个类所拥有的实例…

【Java并发编程】信号量Semaphore详解

一、简介 Semaphore&#xff08;信号量&#xff09;&#xff1a;是用来控制同时访问特定资源的线程数量&#xff0c;它通过协调各个线程&#xff0c;以保证合理的使用公共资源。 Semaphore 一般用于流量的控制&#xff0c;特别是公共资源有限的应用场景。例如数据库的连接&am…