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

江协科技/江科大-51单片机入门教程——P[2-1] 点亮一个LED

本节将向大家介绍如何用 51 单片机去控制开发板上的 LED。开发板上的 LED 位置标注有 “LED 模块”。

第二章要写 3 个程序代码:第一个代码实现点亮开发板上的第一个 LED;第二个代码让第一个 LED 以 1 秒为周期闪烁;第三个代码使 8 个 LED 以流水灯的方式一位一位移动。左上角数码管可能因引脚冲突乱跳,不用理会,只要 LED 显示正确即可。

目录

一、新建工程

二、LED介绍

三、开发板上LED连接方式


一、新建工程

上一节已安装好软件,现在双击打开。编写代码前需新建一个工程,工程就像办公的桌子,有了它才能编写代码。

建工程步骤如下:

点击 “project”,选择 “new project”

提示保存工程位置时,默认会保存到文档,建议在桌面上新建一个名为 “keilproject” 的文件夹,将代码集中放在这里。

双击打开该文件夹,再新建一个名为 “2 -1 点亮一个 LED” 的文件夹。

工程名字建议起通用的,如 “project”,点击保存。

此时会弹出对话框让选择单片机型号,51 单片机有很多公司生产,有多种型号,我们用的是 STC89C52,但软件中没有STC,可选用 Atmel文件夹里的 AT89C52,它与 STC89C52 操作方式和功能一样。

接着会弹出复制启动文件到工程文件底下的对话框,选 “是” 或 “否” 均可,选 “是” 新建工程后会自动添加启动文件,一般不需要修改,所以选 “否”。

工程建立完成后,可看到工程及 “target 1”,点击左边加号,能看到编写代码的文件夹。

新建好工程后,要在工程里新建一个 C 语言程序文件。

选中组,右键点击添加新文件到组里

51 单片机可用 C 语言、C++ 语言和汇编语言编写,一般用 C 语言,因为 C++ 效率慢,汇编语言更底层难理解。

选中 C 语言,文件名起 “main”,点击添加,此时会出现 “main.c” 文件和编辑框。

先编译试一下,有三个按钮,“translate” 是编译,“build” 是建立工程,“rebuild” 是重新编译所有文件,一般点 “build”。

点击后下面会出现建立信息,提示没有错误但有一个警告,警告是 “无法确定根段”,这意味着缺少主函数 “main”。

在右边添加 “main” 函数,格式为 “void main ()”,回车后打两个花括号,再按 “Tab” 键缩进,使代码更有层次。

主函数字体太小,可通过 “configuration” 配置,选择第二个选项卡 “颜色和字体”,选择 “C C++” 编辑文件,点击 “font” 字体,在右边设置字体大小。

再次点击 “build”,显示 “0 error 0 warning”,即没有错误和警告。

二、LED介绍

建立好工程后,先了解本节要讲的 LED。学一个器件前,应通过百度等方式了解其原理和用法。LED 中文名是发光二极管,外文名是 “light emitting diode”,缩写为 LED。其用途广泛,可用于照明、广告灯、指引灯、屏幕等,在照明方面优势明显,相比白炽灯和节能灯,LED 更省电且亮度高。

LED 在电路图里的符号如上图所示,右边是较大的 LED 实物图,它区分正负极,图中左边是正极,右边是负极,只有正极接正极、负极接负极,才有电流通过,LED 才会亮,接反则不亮。

区分直插 LED 正负极的方法:里面较大的一块可看作 “大红旗”,较小的看作 “小红旗”,小的代表正极,大的代表负极;若引脚没剪过,长角是正极,短角是负极。开发板上的是贴片 LED,个头小,背面画有箭头指示正负极方向。

三、开发板上LED连接方式

接下来了解开发板上的 LED 连接方式。打开开发板资料,找到新版原理图(新版和旧版连接方式一样)

在原理图右下角可看到 LED 模块。

有 8 个 LED,右边是 VCC(电源正极),左边红色字是网络编号,连接到单片机的 P2引脚,P2引脚出来直接连到 LED 负极。

LED 正极出来通过一个电阻,这个电阻是四个一体的排阻,开发板上两个小黑块就是,它有八个引脚,里面是四个电阻,阻值为 1000 欧。

从排阻上写的数字 “102” 可看出,在电路元器件编号中,“102” 表示前两位 “10” 是有效数字,第三位 “2” 是倍率,即后面加2个 0,所以是 1000 欧。同理,“473” 是 47 后面加 3 个 0,即 47000 欧;“1001” 是 100 后面加1个 0,即 1000 欧。

电阻的作用是限流,若 LED 直接接 5V 电压,可能因电流过大烧毁,所以串联一个电阻。

当 LED 正极接正,负极接负时会点亮;若正负极都接正,则不亮。

这就将问题转化为控制单片机引脚输出高低电平,高电平是 5V,低电平是 0V,单片机使用的是 TTL 电平规范。接下来的主要任务是控制单片机的 P2 口输出高低电平。

通过上图解释单片机如何控制硬件设备。单片机名字叫 MCU,里面集成了 CPU,代码在 CPU 里执行。外部是引脚,如 P2 口引脚。CPU 通过寄存器控制引脚,寄存器是一种存储器,8 个为一组,每个寄存器下面都连着一根线控制硬件。比如 P2 口寄存器有 8 位,每一位背后都有一根导线,通过驱动器增大电流后连接到 P2 口端口。CPU 可通过程序直接访问寄存器并写值,写 “1” 引脚为高电平(5V),写 “0” 为低电平。P2 口也是 8 个为一组,寄存器每一位对应一个 P2 口引脚。

要点亮第一个 LED,需给 P2 口最低位低电平(0),其余为高电平(1),即二进制 “1111 1110”。但 C 语言程序不能直接写二进制,需将其转化为十六进制或十进制,一般转化为十六进制,因为二进制转十六进制可一眼看出。十六进制是二进制的简写,把四个二进制数化成一个十六进制数,十六进制数从 0 到 9,10 用字母 a 表示,依次是 b、c、d、e、f,f 代表 15,覆盖了四位二进制的所有情况。将 “1111 1110” 四个一组分开,“1111” 对应十六进制的 “f”,“1110” 对应 “e”,完整语句为 “P2 = 0xfe;”,在 C 语言里语句要以分号结尾。

写好代码点击 “build” 编译,提示 “P2 口是未定义的标识符”,需要在主函数之前添加头文件。右键点击 “insert”,选择头文件打开,里面定义了很多寄存器,包括 P2 寄存器,地址是十六进制的 A0。添加头文件后再次编译,显示没有错误和警告。

下一步将代码下载到单片机,打开 STC-ISP 软件,选择单片机型号为 STC89C52,新版本串口号可自动搜索。

点击 “打开程序文件”,在工程目录里找不到文件,因为编译器默认不生成下载文件,需在 “output” 选项卡里勾选 “create” 创建 HEX 文件,点击 “OK” 后再次编译,会生成 HEX 文件

选择该文件点击 “打开”,再点击 “下载”,下载后重新打开单片机开关,第一个 LED 点亮,第一个任务完成。

但代码还少一步,单片机上电后程序不会停止,主函数执行完会从头开始执行,“P2 = 0xfe” 会不断被执行,这不是我们想要的。

为让程序停下来,可在主函数下面写一个 “while” 循环,格式为 “while (1)”,回车后加一对花括号,“while” 是关键字,会变成蓝色。“while” 循环判断括号里的逻辑表达式,若为真则执行花括号里的语句,这里写 “1”,“1” 代表永远为真,程序会一直在循环里,相当于停下来。再次编译下载,现象不变,但程序实际上已停止对 P2 口的操作。

#includevoid main(){P2=0xFE; //1111 1110while(1){}

还可对程序进行升级,之前让 P2 口引脚电平为 “1111 1110” 点亮一个 LED,若想让 8 个 LED 一个亮一个灭,可把 “fe” 改成 “55”,十六进制的 “55” 是二进制的 “0101 0101”,下载后可看到 LED 间隔亮灭的现象。

相关文章:

江协科技/江科大-51单片机入门教程——P[2-1] 点亮一个LED

本节将向大家介绍如何用 51 单片机去控制开发板上的 LED。开发板上的 LED 位置标注有 “LED 模块”。 第二章要写 3 个程序代码:第一个代码实现点亮开发板上的第一个 LED;第二个代码让第一个 LED 以 1 秒为周期闪烁;第三个代码使 8 个 LED 以…...

leetcode hot 100 41. 缺失的第一个正数

代码 测试用例 测试用例 测试结果 41. 缺失的第一个正数 已解答 困难 相关标签 相关企业 提示 给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。 请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。 示例 1&#xf…...

UniApp 使用 u-loadmore 完整步骤

文章目录 一、前期准备1. 安装 uView - UI 二、使用 u-loadmore组件1. 创建页面2. 编写页面代码模板部分(loadmore-demo.vue)样式部分脚本部分 三、要点补充1. u-loadmore 状态说明2. 数据请求优化3. 性能优化4. 兼容性问题 在 UniApp 开发中&#xff0c…...

设置电脑一接通电源就主动开机

文章目录 1、进入BIOS2、设置4、功能弊端5、电脑自动开机的设置 1、进入BIOS 在电脑重启时,这时屏幕上会显示按XXX键到BIOS界面 没有进入BIOS提示的,按下面方法操作: 方法一 在开机显示logo的时候,立即按下面这几个按键&#xf…...

优艾智合机器人日本子公司成立,加速推进国际化布局

2月27日,工业移动机器人解决方案商优艾智合宣布日本子公司Youibot Robotics Japan株式会社(以下简称“Youibot Japan”)成立,并于东京举行开业典礼。此举标志着优艾智合在日本市场的现地服务能力进一步深化,是其全球化…...

自然语言处理NLP入门 -- 第七节预训练语言模型

1 什么是预训练模型? 在自然语言处理(NLP)里,训练一个好模型通常需要很多数据和计算资源。为了解决这个难题,就出现了“预训练模型”。 预训练模型 是指我们先在海量文本(比如网络上爬到的大量文章、对话…...

Git GitHub基础

git是什么? Git是一个分布式版本控制系统,用于管理源代码的变更。它允许多个开发者在同一个项目上协作,同时跟踪每个修改的历史记录。 关键词: 分布式版本控制软件 软件 安装到我们电脑上的一个工具 版本控制 例如论文&…...

多平台文章同步工具PostSync 安装介绍

PostSync 是一个开源的用于多平台文章同步的工具 环境安装 安装 Python:PostSync 是基于 Python 开发的,你需要确保系统中已经安装了 Python 环境,建议使用 Python 3.7 及以上版本。你可以从 Python 官方网站 下载并安装适合你操作系统的版…...

PXE批量网络装机与Kickstart自动化安装工具

目录 一、系统装机的原理 1.1、系统装机方式 1.2、系统安装过程 二、PXE批量网络装机 2.1、PXE实现原理 2.2、搭建PXE实际案例 2.2.1、安装必要软件 2.2.2、搭建DHCP服务器 2.2.3、搭建TFTP服务器 2.2.4、挂载镜像并拷贝引导文件到tftp服务启动引导文件夹下 2.2.5、编…...

css的复合选择器

1.1什么是复合选择器 在css中,选择器分为基础选择器和复合选择器,复合选择器是建立在基础选择器之上,对基本选择器进行组合形成。 复合选择器可以更准确、更高效的选择目标元素(标签)由两个或多个基础选择器,通过不同的方式组合…...

Wireshark Lua 插件教程

本⽂主要介绍 Lua 脚本在 Wireshark 中的应⽤, Lua 脚本可以在 Wireshark 中完成如下功能: 从⽹络包中提取数据, 或者统计⼀些数据包(Dumper) 需要解析⼀种 Wireshark 不提供原⽣⽀持的协议(Dissector) ⽰例 协议解析 VREP 协议是 NOGD 框架对于 TRIP 协议的⼀种延伸和扩展…...

mysql怎样优化where like ‘%字符串%‘这种模糊匹配的慢sql

一 问题描述 工作中经常遇到这种模糊匹配的慢sql: select * from 表名 where 字段 like %字符串%; 由于前面有%,导致无法走该字段上的索引。 二 解决办法 ① 给该字段创建一个全文索引 CREATE FULLTEXT INDEX 索引名 ON 表名 (字段名); ② 改写sq…...

Python代码片段-断点任务

使用Python处理一堆长耗时任务的时候,为了防止异常退出程序或者手动退出程序后丢失任务进度,可用使用断点的方式记录任务进度,下次重载任务后,继续运行上次未完成的任务即可。 这里用json文件作为数据持久化的方式,免…...

mapbox基础,使用geojson加载heatmap热力图层

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:mapbox 从入门到精通 文章目录 一、🍀前言1.1 ☘️mapboxgl.Map 地图对象1.2 ☘️mapboxgl.Map style属性1.3 ☘️heatmap热力图层样式二、🍀使用geojs…...

03.检测 Zabbix agent

TOC 利用 zabbix_get 工具测试 Zabbix Agent 是否正常 # 安装 zabbix-get [rootUbuntu2204 ~]#apt install -y zabbix-get# 使用zabbix_get 工具查看验证 agent 是否正常 返回1表示正常 [rootUbuntu2204 ~]#zabbix_get -s 10.0.0.110 -p 10050 -k "agent.ping"故障…...

Vue 3 + Vite 项目配置访问地址到服务器某个文件夹的解决方案

前言 在开发 Vue 3 Vite 项目时,我们经常需要将项目部署到服务器的某个特定文件夹下。例如,将项目部署到 /my-folder/ 目录下,而不是服务器的根目录。这时,我们需要对 Vite 和 Vue Router 进行一些配置,以确保项目能…...

JavaScript将:;隔开的字符串转换为json格式。使用正则表达式匹配键值对,并构建对象。多用于解析cssText为style Object对象

// 使用正则表达式匹配键值对,并构建对象 let string2Json(s)>{const r {};s.replace(/;/g, ;).replace(/\;/g, \n).replace(/:/g, :).replace(/\n/g, \n)//合并多个换行符.split(\n).forEach(item > {const [k, v] item.split(:);(k…...

MT-Metrics

MT-Metrics 是一类用于评估生成文本质量的指标,最初用于机器翻译任务,后来扩展到生成任务(如对话生成、文本摘要等)。它的核心思想是通过比较生成文本与参考文本之间的相似性(如词汇重叠、句法结构、语义相似性&#x…...

【数据结构第十六节】实现链式结构二叉树(详细递归图解—呕心沥血版!)

必须有为成功付出代价的决心,然后想办法付出这个代价。云边有个稻草人-CSDN博客 这节课挺抽象(苦笑),没事,我会帮你!干就完了! (目录在路上) 正文开始—— 引言 用链表…...

【Python爬虫(100)】从当下到未来:Python爬虫技术的进阶之路

【Python爬虫】专栏简介:本专栏是 Python 爬虫领域的集大成之作,共 100 章节。从 Python 基础语法、爬虫入门知识讲起,深入探讨反爬虫、多线程、分布式等进阶技术。以大量实例为支撑,覆盖网页、图片、音频等各类数据爬取,还涉及数据处理与分析。无论是新手小白还是进阶开发…...

地震勘探——干扰波识别、井中地震时距曲线特点

目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波:可以用来解决所提出的地质任务的波;干扰波:所有妨碍辨认、追踪有效波的其他波。 地震勘探中,有效波和干扰波是相对的。例如,在反射波…...

微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】

微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来,Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...

定时器任务——若依源码分析

分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...

Python爬虫(二):爬虫完整流程

爬虫完整流程详解(7大核心步骤实战技巧) 一、爬虫完整工作流程 以下是爬虫开发的完整流程,我将结合具体技术点和实战经验展开说明: 1. 目标分析与前期准备 网站技术分析: 使用浏览器开发者工具(F12&…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)

🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...

C++中string流知识详解和示例

一、概览与类体系 C 提供三种基于内存字符串的流&#xff0c;定义在 <sstream> 中&#xff1a; std::istringstream&#xff1a;输入流&#xff0c;从已有字符串中读取并解析。std::ostringstream&#xff1a;输出流&#xff0c;向内部缓冲区写入内容&#xff0c;最终取…...

Axios请求超时重发机制

Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式&#xff1a; 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...

嵌入式常见 CPU 架构

架构类型架构厂商芯片厂商典型芯片特点与应用场景PICRISC (8/16 位)MicrochipMicrochipPIC16F877A、PIC18F4550简化指令集&#xff0c;单周期执行&#xff1b;低功耗、CIP 独立外设&#xff1b;用于家电、小电机控制、安防面板等嵌入式场景8051CISC (8 位)Intel&#xff08;原始…...

嵌入式学习之系统编程(九)OSI模型、TCP/IP模型、UDP协议网络相关编程(6.3)

目录 一、网络编程--OSI模型 二、网络编程--TCP/IP模型 三、网络接口 四、UDP网络相关编程及主要函数 ​编辑​编辑 UDP的特征 socke函数 bind函数 recvfrom函数&#xff08;接收函数&#xff09; sendto函数&#xff08;发送函数&#xff09; 五、网络编程之 UDP 用…...

解析两阶段提交与三阶段提交的核心差异及MySQL实现方案

引言 在分布式系统的事务处理中&#xff0c;如何保障跨节点数据操作的一致性始终是核心挑战。经典的两阶段提交协议&#xff08;2PC&#xff09;通过准备阶段与提交阶段的协调机制&#xff0c;以同步决策模式确保事务原子性。其改进版本三阶段提交协议&#xff08;3PC&#xf…...