江协科技/江科大-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…...
UniApp 使用 u-loadmore 完整步骤
文章目录 一、前期准备1. 安装 uView - UI 二、使用 u-loadmore组件1. 创建页面2. 编写页面代码模板部分(loadmore-demo.vue)样式部分脚本部分 三、要点补充1. u-loadmore 状态说明2. 数据请求优化3. 性能优化4. 兼容性问题 在 UniApp 开发中,…...
设置电脑一接通电源就主动开机
文章目录 1、进入BIOS2、设置4、功能弊端5、电脑自动开机的设置 1、进入BIOS 在电脑重启时,这时屏幕上会显示按XXX键到BIOS界面 没有进入BIOS提示的,按下面方法操作: 方法一 在开机显示logo的时候,立即按下面这几个按键…...
优艾智合机器人日本子公司成立,加速推进国际化布局
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 基础语法、爬虫入门知识讲起,深入探讨反爬虫、多线程、分布式等进阶技术。以大量实例为支撑,覆盖网页、图片、音频等各类数据爬取,还涉及数据处理与分析。无论是新手小白还是进阶开发…...
【网络】每天掌握一个Linux命令 - iftop
在Linux系统中,iftop是网络管理的得力助手,能实时监控网络流量、连接情况等,帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...
逻辑回归:给不确定性划界的分类大师
想象你是一名医生。面对患者的检查报告(肿瘤大小、血液指标),你需要做出一个**决定性判断**:恶性还是良性?这种“非黑即白”的抉择,正是**逻辑回归(Logistic Regression)** 的战场&a…...
相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了: 这一篇我们开始讲: 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下: 一、场景操作步骤 操作步…...
大数据零基础学习day1之环境准备和大数据初步理解
学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 (1)设置网关 打开VMware虚拟机,点击编辑…...
三体问题详解
从物理学角度,三体问题之所以不稳定,是因为三个天体在万有引力作用下相互作用,形成一个非线性耦合系统。我们可以从牛顿经典力学出发,列出具体的运动方程,并说明为何这个系统本质上是混沌的,无法得到一般解…...
selenium学习实战【Python爬虫】
selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...
Spring数据访问模块设计
前面我们已经完成了IoC和web模块的设计,聪明的码友立马就知道了,该到数据访问模块了,要不就这俩玩个6啊,查库势在必行,至此,它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据(数据库、No…...
以光量子为例,详解量子获取方式
光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学(silicon photonics)的光波导(optical waveguide)芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中,光既是波又是粒子。光子本…...
服务器--宝塔命令
一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行! sudo su - 1. CentOS 系统: yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...
佰力博科技与您探讨热释电测量的几种方法
热释电的测量主要涉及热释电系数的测定,这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中,积分电荷法最为常用,其原理是通过测量在电容器上积累的热释电电荷,从而确定热释电系数…...
