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

51单片机应用从零开始(三)

51单片机应用从零开始(一)-CSDN博客

51单片机应用从零开始(二)-CSDN博客

详解 KEIL C51 软件的使用·建立工程-CSDN博客

详解 KEIL C51 软件的使用·设置工程·编绎与连接程序-CSDN博客

目录

1.  用单片机控制第一个灯亮

2.  认识单片机的工作频率

3.  认识 I/O 口的引脚功能

4.  进阶使用 P3 口流水点亮 8 位 LED   


        C51是一种基于C语言和汇编语言的嵌入式微控制器开发工具,常用于单片机开发。以下是C51程序的使用步骤:

  1. 安装Keil C51软件(或其他C51开发工具)。

  2. 打开Keil C51软件,创建一个新的工程。

  3. 添加需要的C语言和汇编代码文件,并编写程序代码。

  4. 选择合适的编译选项,如目标单片机型号、编译器优化等。

  5. 进行编译和链接,生成可执行文件。

  6. 使用下载器将程序下载到目标芯片中。

  7. 调试和测试程序是否正常运行。

        C51程序的使用需要一定的编程知识和经验,需要熟练掌握C语言和汇编语言,并了解具体的单片机实现方案。同时还需要一定的硬件设备和调试工具,如调试器、仿真器等。

        前面我们已经介绍了,51单片机以及软件的使用,那么现在,我们就开始上手试验一下

1.  用单片机控制第一个灯亮

        首先,我们先使用单片机控制第一个灯亮。

代码示例:

#include <reg51.h> //使用51单片机需要包含头文件reg51.hvoid main()
{P0 = 0xfe; //将P0.0引脚置为0,其他引脚置为1,使第一个灯亮while(1); //循环等待
}

        这个程序中,我们使用了51单片机的P0口控制LED灯。P0口的8个引脚可以控制8个LED灯,每个引脚输出低电平使LED灯亮,输出高电平使LED灯灭。

        P0的默认值是0xff(二进制11111111),这表示8个引脚都输出高电平,LED灯熄灭。为了使第一个灯亮,我们将P0.0置为0,其他引脚保持高电平,这样第一个LED灯就会亮起来。

        在程序的最后,我们使用了一个死循环,使程序一直运行,以保持第一个灯的状态。

2.  认识单片机的工作频率

        单片机的工作频率指的是单片机内部主时钟的频率,也称为晶振频率或时钟频率。单片机的工作频率越高,其运算速度和响应速度就越快。

        对于51单片机而言,其最高工作频率为12MHz。在使用时,需要通过外部晶振或内部时钟源来提供时钟信号,以驱动单片机的运行。通常情况下,外部提供12MHz的晶振或时钟源是比较常见的。

控制一个灯闪烁可以通过如下步骤完成:

(1)初始化单片机,包括设置IO引脚等参数;

(2)设定闪烁的频率,可以利用定时器来实现,或者通过延时等方式;

(3)在主循环中,控制灯的状态(开/关);

(4)根据闪烁的频率进行延时操作,等待下一次闪烁。

代码示例:

#include<reg51.h> //包含单片机寄存器的头文件
/**************************************** 
函数功能:延时一段时间
*****************************************/ 
void delay(void) //两个 void 意思分别为无需返回值,没有参数传递
{ unsigned int i; //定义无符号整数,最大取值范围 65535 for(i=0;i<20000;i++) //做 20000 次空循环; //什么也不做,等待一个机器周期
} 
/******************************************************* 
函数功能:主函数 (C 语言规定必须有也只能有 1 个主函数)
********************************************************/ 
void main(void) 
{ while(1) //无限循环{ P1=0xfe; //P1=1111 1110B, P1.0 输出低电平delay(); //延时一段时间P1=0xff; //P1=1111 1111B, P1.0 输出高电平delay(); //延时一段时间} 
}

3.  认识 I/O 口的引脚功能

        I/O 口(输入/输出口)是可编程芯片中的一种通用接口,用于连接外部设备和处理器。 I/O 口的每个引脚都具有不同的功能。

        在单片机中,P0、P1、P2 和 P3 是四个常见的 I/O 口,其中每个口具有不同数量的引脚和功能。

以 P1 口为例,它有 8 个引脚(P1.0 - P1.7)和多种功能,如下所示:

  1. P1.0 - 用于外部中断 0(External Interrupt 0)

  2. P1.1 - 用于外部中断 1(External Interrupt 1)

  3. P1.2 - 用于定时器 T0 外部计数器输入(Timer 0 External Counter Input)

  4. P1.3 - 用于定时器 T1 外部计数器输入(Timer 1 External Counter Input)

  5. P1.4 - 用于串行数据输出(Serial Data Output)

  6. P1.5 - 用于串行数据输入(Serial Data Input)

  7. P1.6 - 用于串行时钟输出(Serial Clock Output)

  8. P1.7 - 用于片选输出(Chip Select Output)

        如果我们想将 P1 口的状态分别发送到 P0、P2 和 P3 口,可以使用单片机的程序控制来实现。 具体方法如下:

(1)将 P1 口设置为输入状态。

(2)读取 P1 口的状态值。

(3)将读取的状态值分别发送到 P0、P2 和 P3 口。

(4)循环执行上述步骤,以实时更新 P1 口的状态值。

代码示例:

#include<reg51.h> //包含单片机寄存器的头文件
/******************************************************* 
函数功能:主函数 (C 语言规定必须有也只能有 1 个主函数)
********************************************************/ 
void main(void) 
{ while(1) //无限循环{ P1=0xff; // P1=1111 1111B,熄灭 LED P0=P1; // 将 P1 口状态送入 P0 口P2=P1; // 将 P1 口状态送入 P2 口P3=P1; // 将 P1 口状态送入 P3 口
5} 
}

4.  进阶使用 P3 口流水点亮 8 位 LED   

要使用 P3 口流水点亮 8 位 LED,你需要按照以下步骤进行:

  1. 连接电路:将 8 个 LED 灯依次连接到 P3.0 - P3.7 的引脚上。将 LED 地线连接到 GND 引脚上。

  2. 编写程序:使用 Keil 或其他编译器编写程序。下面是一个示例代码:

#include<reg51.h> //包含单片机寄存器的头文件
/**************************************** 
函数功能:延时一段时间
*****************************************/ 
void delay(void) { unsigned char i,j; for(i=0;i<250;i++) for(j=0;j<250;j++) ; } 
/******************************************************* 
函数功能:主函数 
********************************************************/ 
void main(void) 
{ while(1) { P3=0xfe; //第一个灯亮delay(); //调用延时函数P3=0xfd; //第二个灯亮delay(); //调用延时函数P3=0xfb; //第三个灯亮delay(); //调用延时函数P3=0xf7; //第四个灯亮delay(); //调用延时函数P3=0xef; //第五个灯亮delay(); //调用延时函数P3=0xdf; //第六个灯亮delay(); //调用延时函数P3=0xbf; //第七个灯亮delay(); //调用延时函数P3=0x7f; //第八个灯亮delay(); //调用延时函数 } }

更多推荐:

时光の尘_千题千解·Java面试宝典,Linux学习,C++学习-CSDN博客

相关文章:

51单片机应用从零开始(三)

51单片机应用从零开始&#xff08;一&#xff09;-CSDN博客 51单片机应用从零开始&#xff08;二&#xff09;-CSDN博客 详解 KEIL C51 软件的使用建立工程-CSDN博客 详解 KEIL C51 软件的使用设置工程编绎与连接程序-CSDN博客 目录 1. 用单片机控制第一个灯亮 2. 认识单片…...

如何在 Nginx Proxy Manager(NPM)上部署静态网站

前言 众所周知&#xff0c;我们在之前介绍过 Nginx Proxy Manager&#xff08;以下简称 NPM) 这个反向代理的神器&#xff0c;对于一些 Docker 搭建的 Web 项目&#xff0c;NPM 能够很轻松地给他们做反向代理。 然而对于一些静态网站&#xff0c;小伙伴们可能不知道怎么用 NP…...

http的几种方法

http的几种方法在 rfc2616 中进行了定义&#xff1a; https://www.rfc-editor.org/rfc/rfc2616.html#page-51 HEAD方法&#xff1a;HEAD方法和GET方法相同&#xff0c;只不过服务端只返回头&#xff0c;不返回消息体。GET方法&#xff1a;用于获取资源POST方法&#xff1a;用于…...

var、let、const关键字的特性,以及let、const暂时性死区的作用

var、let和const都是JavaScript中的关键字&#xff0c;用于声明变量。 var关键字声明的变量是函数作用域或全局作用域的&#xff0c;它在整个函数或全局范围内都是可用的。var没有块级作用域。 let关键字声明的变量是块级作用域的&#xff0c;它只在包含它的代码块中可用。le…...

IDEA 高分辨率卡顿优化

VM设置优化 -Dsun.java2d.uiScale.enabledfalse 增加该条设置&#xff0c;关闭高分切换 https://intellij-support.jetbrains.com/hc/en-us/articles/115001260010-Troubleshooting-IDE-scaling-DPI-issues-on-Windows​intellij-support.jetbrains.com/hc/en-us/articles/1…...

【AIGC】一起学习prompt提示词(4/4)【经典】【15种提示词技巧】

写的时候并没有设计好&#xff0c;要做多少期&#xff0c;还是有始有终的比较好&#xff0c;为了方便阅读&#xff0c;我把之前的3期&#xff0c;改下名字&#xff0c;放到这里。 【AIGC】一起学习prompt提示词&#xff08;1/4&#xff09; 内容摘要&#xff1a;提示词是什么…...

Linux实战一天一个小指令--《文件管理/文件查找》

阿丹&#xff1a; 作为一个java程序员进行实战开发不接触linux操作系统基本上是不可能的&#xff0c;所以这个专题就出现了&#xff0c;本文章重点解决大家关于文件管理以及文件查找查看的疑惑。我将采用语法基础用法并在下面进行高级语法的总结使用&#xff0c;方便大家学习和…...

CocosCreator3.8神秘面纱 CocosCreator 项目结构说明及编辑器的简单使用

我们通过Dashboard 创建一个2d项目&#xff0c;来演示CocosCreator 的项目结构。 等待创建完成后&#xff0c;会得到以下项目工程&#xff1a; 一、assets文件夹 assets文件夹&#xff1a;为资源目录&#xff0c;用来存储所有的本地资源&#xff0c;如各种图片&#xff0c;脚本…...

JJJ:python学习笔记

p4 没有编译的过程 源码和输入得到输出 静态语言&#xff1a;编译型 脚本语言&#xff1a;解释型 p5 又叫做胶水语言 p7 p8 p10...

SpringSecurity6从入门到上天系列第七篇:讲明白SpringBoot的自动装配完善上篇文章中的结论

文章目录 一&#xff1a;SpringBoot的自动装配 1&#xff1a;从run方法到入口类内容被注册到注解解读器中。 2&#xff1a;解析入口类注解到加载Bean实例 大神链接&#xff1a;作者有幸结识技术大神孙哥为好友&#xff0c;获益匪浅。现在把孙哥视频分享给大家。 孙哥链接&am…...

ClickHouse 原理解析之基础知识总结

ClickHouse 基础知识整理 参考ClickHouse 官方文档:https://clickhouse.com/docs/en/intro 一:行式存储和列式存储 1.行式存储和列式存储的区别 1.1 概念说明 行式存储:指存储结构化数据时,在底层的存储介质上,数据是以行的方式来组织的,即存储完一条记录的所有字段,再…...

最小花费——最短路

在 n 个人中&#xff0c;某些人的银行账号之间可以互相转账。这些人之间转账的手续费各不相同。给定这些人之间转账时需要从转账金额里扣除百分之几的手续费&#xff0c;请问 A 最少需要多少钱使得转账后 B 收到 100 元。 输入格式 第一行输入两个正整数 n,m&#xff0c;分别表…...

Spark DataFrame join后移除重复的列

在Spark&#xff0c;两个DataFrame做join操作后&#xff0c;会出现重复的列。例如&#xff1a; Dataset<Row> moviesWithRating moviesDF.join(averageRatingMoviesDF,moviesDF.col("movieId").equalTo(averageRatingMoviesDF.col("movieId")));其s…...

NextJS工程部署到阿里云linux Ecs

nextjs项目有多种部署方式&#xff0c;本文介绍最简单的一种方式&#xff0c;将源码上传到云服务器&#xff0c;编译后使用pm2后台运行nextjs工程。 检查node、npm是否安装 查看npm版本&#xff0c;如果版本较低先升级npm版本 npm -v卸载 yum remove nodejs npm -y安装新版…...

汽车以太网IOP测试新利器

IOP测试目的 汽车以太网物理层IOP&#xff08;Interoperability &#xff09;测试&#xff0c;即测试被测对象以太网物理层之间的互操作性。用于验证车载以太网PHY能否在有限时间内建立稳定的链路&#xff1b;此外&#xff0c;还用于验证车载以太网PHY可靠性相关的诊断特性&am…...

高防IP是什么?如何隐藏源站IP?如何进行防护?

高防IP是针对互联网服务器遭受大流量的DDoS攻击后导致服务不可用的情况下,推出的付费增值服务。用户在数据不转移的情况下,就可以通过配置高防IP , 将攻击流量引流到高防|P,确保源站的稳定可靠。高防IP采用的技术手段包括DDoS防护、WAF ( Web应用程序防火墙)等,它能够有效抵御来…...

ElasticSearch---查询es集群状态、分片、索引

查看es集群状态&#xff1a; curl -XGET http://localhost:9200/_cat/health?v如果?后面加上pretty&#xff0c;能让返回的json格式化。 加上?v的返回结果&#xff0c;如下&#xff1a; epoch timestamp cluster status node.total node.data shards pri rel…...

Angular 使用教程——基本语法和双向数据绑定

Angular 是一个应用设计框架与开发平台&#xff0c;旨在创建高效而精致的单页面应用 Angular 是一个基于 TypeScript 构建的开发平台。它包括&#xff1a;一个基于组件的框架&#xff0c;用于构建可伸缩的 Web 应用&#xff0c;一组完美集成的库&#xff0c;涵盖各种功能&…...

【ASP.NET】Hello World

文章目录 1. 几个概念2. 搭建开发环境2.1 .NET SDK2.2 IDE & Editor 3 First Project3.1 步骤3.2 模板3.3 项目结构3.4 请求的处理流程 Reference Link 1. 几个概念 .NET 是一个平台&#xff0c;包括 .NET Framework、.NET Core、ASP.NET、C#等&#xff0c;可以构建桌面、W…...

AI创作系统ChatGPT网站源码+支持最新GPT-Turbo模型+支持DALL-E3文生图/AI绘画源码

一、AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如…...

Vue记事本应用实现教程

文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展&#xff1a;显示创建时间8. 功能扩展&#xff1a;记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...

IGP(Interior Gateway Protocol,内部网关协议)

IGP&#xff08;Interior Gateway Protocol&#xff0c;内部网关协议&#xff09; 是一种用于在一个自治系统&#xff08;AS&#xff09;内部传递路由信息的路由协议&#xff0c;主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...

AtCoder 第409​场初级竞赛 A~E题解

A Conflict 【题目链接】 原题链接&#xff1a;A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串&#xff0c;只有在同时为 o 时输出 Yes 并结束程序&#xff0c;否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...

解锁数据库简洁之道:FastAPI与SQLModel实战指南

在构建现代Web应用程序时&#xff0c;与数据库的交互无疑是核心环节。虽然传统的数据库操作方式&#xff08;如直接编写SQL语句与psycopg2交互&#xff09;赋予了我们精细的控制权&#xff0c;但在面对日益复杂的业务逻辑和快速迭代的需求时&#xff0c;这种方式的开发效率和可…...

高频面试之3Zookeeper

高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个&#xff1f;3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制&#xff08;过半机制&#xff0…...

条件运算符

C中的三目运算符&#xff08;也称条件运算符&#xff0c;英文&#xff1a;ternary operator&#xff09;是一种简洁的条件选择语句&#xff0c;语法如下&#xff1a; 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true&#xff0c;则整个表达式的结果为“表达式1”…...

Python实现prophet 理论及参数优化

文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候&#xff0c;写过一篇简单实现&#xff0c;后期随着对该模型的深入研究&#xff0c;本次记录涉及到prophet 的公式以及参数调优&#xff0c;从公式可以更直观…...

深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南

&#x1f680; C extern 关键字深度解析&#xff1a;跨文件编程的终极指南 &#x1f4c5; 更新时间&#xff1a;2025年6月5日 &#x1f3f7;️ 标签&#xff1a;C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言&#x1f525;一、extern 是什么&#xff1f;&…...

安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖

在Vuzix M400 AR智能眼镜的助力下&#xff0c;卢森堡罗伯特舒曼医院&#xff08;the Robert Schuman Hospitals, HRS&#xff09;凭借在无菌制剂生产流程中引入增强现实技术&#xff08;AR&#xff09;创新项目&#xff0c;荣获了2024年6月7日由卢森堡医院药剂师协会&#xff0…...

LabVIEW双光子成像系统技术

双光子成像技术的核心特性 双光子成像通过双低能量光子协同激发机制&#xff0c;展现出显著的技术优势&#xff1a; 深层组织穿透能力&#xff1a;适用于活体组织深度成像 高分辨率观测性能&#xff1a;满足微观结构的精细研究需求 低光毒性特点&#xff1a;减少对样本的损伤…...