【C51基础实验 点亮一颗LED】

news2025/1/16 21:18:43

51单片机项目基础篇

  • 点亮一颗LED
    • 1、认识头文件
      • 1.1、头文件的书写格式分类
      • 1.2、头文件存放的内容
    • 2、硬件电路设计
    • 3、软件设计
    • 4、编译结果
    • 5、结束语

点亮一颗LED

前言:
了解了前面篇章的内容,工程模板就不多赘述了,这篇就开始写51 单片机的第一个入门实验,点亮一颗LED。另外我是以购买的普中开发板进行学习写的笔记,所以本专栏就围绕的此开发板实验和分享,谢谢。

1、认识头文件

代码中引用头文件,其实际意义就是将这个头文件中的全部内容放到引用头文件的位置处,免去我们每次编写同类程序都要将头文件中的语句重复编写。
通常都是以 #include 预编译格式符引导 <头文件>,如:#include <stdio.h> 标准输入输出头文件

1.1、头文件的书写格式分类

在代码中加入头文件有两种书写方法,分别为 #include <reg52.h> 和 #include"reg52.h",包含头文件时都不需要在后面加分号。
主要区别
①当使用 < > 包含头文件时,编译器先进入到软件安装文件夹处开始搜索这个头文件,也就KEILC51/C51/INC 这个文件夹下,如果这个文件夹没有引用的头文件,编译器将会报错。

②当使用 " " 包含头文件时,编译器先进入到当前工程所在文件夹处开始搜索该头文件,如果当前工程所在文件夹下没有该头文件,编译器将继续回到软件安装文件夹处搜索这个头文件,若找不到该头文件,编译器将报错。

1.2、头文件存放的内容

我们如何查看头文件中存放的什么内容呢?以 “reg52.h” 为例,想打开该头文件查看其内容,只需要将鼠标移动到 reg52.h 上,单击右键,选择“Open document <reg52.h>”,即可打开该头文件。如图所示:
在这里插入图片描述
以后若需打开工程中的其他头文件,也可采用这种方式,或者使用将工程编译后,通过右边工程组“+”下拉找到对应头文件双击打开的方法,同样可以查看头文件的内容。如图所示:
在这里插入图片描述
打开 “reg52.h”头文件,部分内容如图所示:
在这里插入图片描述
该头文件中定义了 52 系列单片机内部所有的功能寄存器,所以以后凡是编写 51 内核单片机程序时,我们再源代码的第一行就可以直接包含该头文件,直接调用进行操作即可。
头文件里的 sfr 和 sbit 这两个关键字,比如:“sfr P0=0x80;” 语句的意义是,把单片机内部地址 0x80 处的这个寄存器重新起名叫 P0,以后我们在程序中可直接操作 P0,就相当于直接对单片机内部的 0x80 地址处的寄存器进行操作。又比如:sbit CY=PSW^7;” 语句的意思是,将 PSW 这个寄存器的最高位重新命名为 CY,以后我们要单独操作 PSW 寄存器的最高位时,便可直接操作 CY,其他的定义都相仿如此。

2、硬件电路设计

开发板上 LED 模块电路原理图如下图所示:
在这里插入图片描述
看上图中 LED 采用共阳接法,D1-D8 连接到单片机的 P20-P27 口,即所有LED 阳极管脚接电源 VCC,阴极管脚通过一个 470 欧的限流电阻接到 P2 口上。根据前面篇章 LED 的介绍我们知道,要让 LED 发光即对应的阴极管脚应该为低电平,若为高电平则熄灭。
所以如果要想 51 单片机控制 LED,就必须通过单片机管脚在 P2 口上输出低电平。
实物图,如图所示:
在这里插入图片描述

3、软件设计

实现的功能是:点亮 D1 指示灯,即让 P2.0 管脚输出一个低电平。
第一个程序很简单,我先贴代码如下:

//实验现象:下载程序后开发板的“LED 模块”D1 指示灯点亮/闪烁

//区别头文件< >和" "
//1.< >是优先从软件安装目录中搜索头文件的
//2." "是优先从当前工程中搜索头文件的
//#include <reg52.h>
#include "reg52.h"

sbit LED1 = P2^0;//将 P2.0 管脚定义为 LED1
//LED1用户自定义变量名
//P2^0 指P2.0 --- D1的LED灯
//原理图LED端口对应 --- P2端口

void main()
{
	LED1 = 0;//LED1 端口设置为0低电平,形成通路从而点亮一颗led
	while(1)//死循环,兜圈子避免反复改写寄存器,减少资源小消耗
	{
	}
}

解释说明
前面我们知道了头文件的重要性,所以开始直接调用声明头文件,然后就能使用 sbit 关键字来定义 P2.0 管脚,定义好后即可使用 LED1 来替代 P2.0口的操作。

(1)、LED用户自定义变量名
(2)、P2^0 指P2.0 — D1的LED灯
(3)、看原理图LED端口对应 — P2端口
(4)、sbit 位类型符用于定义在可位寻址字节或特殊功能寄存器中的位,定义时须指明其位地址,可以是位直接地址,可以是可位寻址变量带位号,也可以是特殊功能寄存器名带位号。
格式如下:
sbit 位变量名 = 位地址;

然后经过前面原理图的分析,我们主函数中,只需要将刚定义的LED1端口拉低即可,也就是置逻辑‘0’,即低电平,与阳极的高电平达成通路,同时也满足发光二极管的特性单向导通,从而成功点亮。
那么此时已经按照分析来说已经能够完成点亮一颗LED了,那么为什么主函数中还会继续写一个while(1)
死循环呢?
主要有以下两个方面的原因

(1)、因为当我们只操作寄存器使P2.0端口拉低时,程序总是从主函数mian开始执行,达成的始终点亮LED,但是在单片机的内部其实是随着程序重复的开始和结束,反复的在调用寄存器改写端口的电平信号,所以相比之下就造成了内存等资源的消耗或功耗浪费。
(2)、另外一个原因,就是由于我们是软硬件相互结合的使用,程序会下载到开发板的,要求同样是始终执行当前代码的内容,基本不会只要求执行一遍就不跑程序了。所以常常写入while(1)里面执行的。

所以,这里仅仅是点亮一颗LED,可以把控制语句放在 while 之前来执行,也可以写在循环内部都是可以的。
至此,整个程序就编写完成,我们编译一下,如下图所示:
在这里插入图片描述
可以看到没有错误,也没有警告,说明我们整个程序的编写没有什么大的问题。同理,想要点亮D1~D8任意一颗LED都是一样的道理。

4、编译结果

从上图编译信息可以看出,我们的代码占用FLASH 大小为:code = 19 字节,所用的 SRAM 大小为:data = 9 个字节(9+0)。
这里解释一下,编译结果里面的几个数据的意义

code:表示程序所占用 FLASH 的大小。
data:数据储存器内部 RAM 占用大小。
xdata:数据储存器外部 RAM 占用大小。

通过查看这些编译信息,就可以知道当前使用的 flash 和 sram 大小了。
一定要注意的是程序的大小不是.hex 文件的大小,而是编译后的 code 和 data 之和

硬件实验效果如图所示
在这里插入图片描述

5、结束语

写这篇文章记录作为自己学习的笔记,有错误的地方还请多多指教,谢谢阅读。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Compose眼珠跟随手势移动的笑脸

眼珠跟随手势移动的笑脸&#x1f601; 前言一、Canvas画图笑脸微笑眼睛和眼珠子 二、跟随手势移动transformableanimateFloatAsState 总结 前言 阅读本文需要一定compose基础&#xff0c;如果没有请移步Jetpack Compose入门详解&#xff08;实时更新&#xff09; 在网上看到有…

MySql DATE_ADD()实践

DATE_ADD() 函数使用 定义和用法 DATE_ADD() 函数向日期添加指定的时间间隔。 DATE_ADD(date,INTERVAL expr type) -- 获取当前时间2天后的时间 SELECT DATE_ADD(NOW(),INTERVAL 2 day) -- 获取当前时间2天前的时间 SELECT DATE_ADD(NOW(),INTERVAL -2 day)

2023最新MathType7.4中文版数学公式编辑器

MathType是一款专业的数学公式编辑器&#xff0c;理科生专用的必备工具&#xff0c;可应用于教育教学、科研机构、工程学、论文写作、期刊排版、编辑理科试卷等领域。可视化公式编辑器轻松创建数学方程式和化学公式。兼容Office Word、PowerPoint、Pages、Keynote、Numbers 等7…

容器和宿主机之间的存储问题

简介 作用&#xff1a;方便备份恢复数据&#xff0c;实现数据共享 一、单台机器中 用数据卷挂载 二、多台机器中 ssh 建立免密通道将数据scp过去&#xff0c;然后再用卷挂载到容器内 nfs 网络文件系统 搭建nfs服务器客户端挂载 过程如下 一.安装软件包yum install -…

tp5使用redis及redis7.2安装到window系统上面

redis安装教程 redis7.2安装到window系统上面 https://download.csdn.net/download/qq_39161501/88269037 解决方案&#xff1a;修改配置php.ini文件 打开Apache目录下的php.ini文件&#xff0c;搜索extension&#xff0c;在空白处加上下列代码&#xff1a; 注&#xff1a;e…

Cloudpods 私有云平台有哪些优势?

作为一套完整的私有云管理软件&#xff0c;我们经常会被问到 Cloudpods 和其他的同类产品相比&#xff0c;有哪些优势&#xff1f;我总结了 2 个方面&#xff0c;供大家参考。 功能方面 产品化&#xff0c;开箱即用&#xff0c;易用性较高&#xff0c;基本上都可以傻瓜式的操…

网络直播源码UDP协议搭建:为平台注入一份力量

网络直播源码中的UDP协议的定义&#xff1a; UDP协议又名用户数据报协议&#xff0c;是一种轻量级、无连接的协议。在网络直播源码平台中&#xff0c;UDP协议有着高速传输与实时性的能力&#xff0c;尤其是在网络直播源码实时性要求较高的场景&#xff0c;UDP协议的应用有着重要…

GDB 源码分析 -- 断点源码解析

文章目录 一、断点简介1.1 硬件断点1.2 软件断点 二、断点源码分析2.1 断点相关结构体2.1.1 struct breakpoint2.1.2 struct bp_location 2.2 断点源码简介2.3 break设置断点2.4 enable break2.5 disable breakpoint2.6 delete breakpoint2.7 info break 命令源码解析 三、Linu…

我想开通期权?如何开通期权账户?

场内期权的合约由交易所统一标准化定制&#xff0c;大家面对的同一个合约对应的价格都是一致的&#xff0c;比较公开透明&#xff0c;期权开户当天不能交易的&#xff0c;期权开户需要满足20日日均50万及半年交易经验即可操作&#xff0c;下文科普我想开通期权&#xff1f;如何…

软件测试的CMA和CNAS分别是什么?有什么用途和区别?

各行各业都有不同的证书&#xff0c;第三方软件检测机构也需要经过考核检验以获取认可。今天我们将围绕软件测试的CMA和CNAS展开讨论&#xff0c;以帮助您更好地了解它们的定义、区别和用途。 一、CMA软件测试&#xff1a; 1、定义&#xff1a;CMA软件测试是指基于中国计量认…

maven部署

一、下载Maven 地址&#xff1a;Maven – Download Apache Maven 二、解压缩&#xff0c;设置环境变量 tar -xvf apache-maven-3.8.8-bin.tar.gz export MAVEN_HOME/opt/apache-maven-3.8.8 export PATH$MAVEN_HOME/bin:$PATH echo $MAVEN_HOME echo $PATH mvn -v

从零开始的Hadoop学习(四)| SSH无密登录配置、集群配置

1. SSH 无密登录配置 1.1 配置 ssh &#xff08;1&#xff09;基本语法 ssh 另一台电脑的IP地址 &#xff08;2&#xff09;ssh 连接时出现 Host key verification failed 的解决方法 [atguiguhadoop102 ~]$ ssh hadoop103&#xff08;3&#xff09;回退到 hadoop102 [at…

linux离线安装rdbtools,需先安装python

离线安装python3 下载python包&#xff0c;下载地址&#xff1a;https://www.python.org/ftp/python/ 我选的是https://www.python.org/ftp/python/3.9.0/Python-3.9.0.tgz 将文件上传至linux服务器&#xff0c;解压 tar -xf Python-3.9.0.tgz cd Python-3.9.0 mkdir /usr/l…

SpringBoot v2.7.x+ 整合Swagger3入坑记?

目录 一、依赖 二、集成Swagger Java Config 三、配置完毕 四、解决方案 彩蛋 想尝鲜&#xff0c;坑也多&#xff0c;一起入个坑~ 一、依赖 SpringBoot版本&#xff1a;2.7.14 Swagger版本&#xff1a;3.0.0 <dependency><groupId>com.github.xiaoymin<…

Java面试之斐波那契数列(Fibonacci)及其应用:青蛙跳台阶问题

文章目录 一、斐波那契数列问题1.1 题目1.2 什么是斐波那契数列1.3 效率很低的解法&#xff1a;递归1.4 递归缺点分析 二、比较好的解决办法2.1 保存数列中间项2.2 从下往上计算 三、公式法四、青蛙跳台阶问题4.1 题目及分析4.2 代码实现 一、斐波那契数列问题 1.1 题目 写一…

制作鲜花商城小程序的详细步骤

如果你是一个新手商家&#xff0c;想要进入鲜花团购市场&#xff0c;但是不知道如何制作一个小程序商城&#xff0c;那么这篇文章就是为你准备的。以下是制作鲜花团购小程序商城的详细步骤&#xff1a; 1. 登录乔拓云平台后台&#xff0c;进入商城管理页面 首先&#xff0c;你需…

Shopee测评补单技巧:优化商品流量与权重

在Shopee平台上进行测评是一种低成本、高回报的推广方式&#xff0c;可以对商品的流量、转化率、质量分和权重等多个指标起到辅助作用。以下是一些Shopee测评的技巧和注意事项&#xff1a; 1. 测评原理与周期&#xff1a; Shopee的新品周期为7天&#xff0c;平台会在这段时间…

【管理运筹学】第 6 章 | 运输问题(4,表上作业法 |闭回路调整法以及特殊情况 | 产销不平衡的运输问题)

文章目录 引言二、表上作业法2.3 改进的方法 —— 闭回路调整法2.4 表上作业法中的特殊情况&#xff08;一&#xff09;无穷多最优解&#xff08;二&#xff09;退化 三、产销不平衡的运输问题3.1 产量大于销量3.2 销量大于产量 写在最后 引言 接下来我们学习表上作业法的最后…

图论算法基础:单源最短路径Dijkstra算法分析

文章目录 图的邻接矩阵 一.Dijkstra算法分析算法的核心逻辑要素算法的执行逻辑 二.Dijkstra算法接口实现邻接矩阵堆优化版本: 图的邻接矩阵 namespace Graph_Structure {//Vertex是代表顶点的数据类型,Weight是边的权值的数据类型,MAX_W是权值的上限值(表示不相两)//Direction…

项目 - 后端技术栈转型方案

前言 某开发项目的后端技术栈比较老了&#xff0c;现在想换到新的技术栈上。使用更好的模式、设计思想、更合理的架构等&#xff0c;为未来的需求迭代做铺垫。怎么办呢&#xff1f;假设系统目前在线上运行着的&#xff0c;直接整体换的话耗时太久&#xff0c;且中间还有新的需…