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

51单片机应用从零开始(一)-CSDN博客
51单片机应用从零开始(二)-CSDN博客
51单片机应用从零开始(三)-CSDN博客
详解 KEIL C51 软件的使用·建立工程-CSDN博客
详解 KEIL C51 软件的使用·设置工程·编绎与连接程序-CSDN博客
目录
5. 通过对 P3 口地址的操作流水点亮 8 位 LED
6. 用不同数据类型控制灯闪烁时间
5. 通过对 P3 口地址的操作流水点亮 8 位 LED
前面,我们已经通过P3进行了8位流水灯的控制,现在我们通过对 P3 口地址的操作流水点亮 8 位 LED。
使用操作寄存器的方式:
(1)首先需要定义 P3 口的地址,即将 P3 口的地址存入一个寄存器中,比如说:
MOV A, #90H ; 将 P3 口的地址 90H 存入 A 寄存器中 MOV R0, A ; 将 A 寄存器中的值存入 R0 寄存器中
(2)然后需要将 P3 口配置为输出模式,这可以通过将 P3CON 寄存器的相应位设置为 1 来实现,比如说:
MOV A, #80H ; 将 P3CON 寄存器的地址 80H 存入 A 寄存器中 MOV R1, A ; 将 A 寄存器中的值存入 R1 寄存器中 MOV A, #FFH ; 将 P3 端口配置为输出模式,即将 P3CON 的第 7 位设置为 1 ANL R1, A ; 将 R1 寄存器中的值与 FFH 按位与运算,将第 7 位设置为 1 MOVX @DPTR, R1 ; 将 R1 寄存器中的值存入 P3CON 寄存器中
(3)接下来就可以对 P3 口进行操作了,比如说点亮 LED。可以通过将 8 个 LED 的状态存入一个寄存器中,再将该寄存器的值存入 P3 端口,实现点亮 8 个 LED。代码示例:
MOV A, #0FFH ; 将需要点亮的 8 个 LED 的状态存入 A 寄存器中 MOV R2, A ; 将 A 寄存器中的值存入 R2 寄存器中 MOVX @R0, R2 ; 将 R2 寄存器中的值存入 P3 端口,即点亮 8 个 LED
(4)最后可以添加延时等操作,使 LED 闪烁或者呈现其他效果,比如说:
DELAY: MOV R3, #FFH LOOP1: DJNZ R3, LOOP1 DJNZ R2, DELAY RET
使用C语言的代码示例:
#include<reg51.h> //包含单片机寄存器的头文件
sfr x=0xb0; //P3 口在存储器中的地址是 b0H, 通过 sfr 可定义 8051 内核单
片机//的所有内部 8 位特殊功能寄存器,对地址 x 的操作也就是对 P1 口的
操作
/****************************************
函数功能:延时一段时间
*****************************************/
void delay(void) { unsigned char i,j; for(i=0;i<250;i++) for(j=0;j<250;j++) ; //利用循环等待若干机器周期,从而延时一段时间}
/*****************************************
函数功能:主函数
******************************************/
void main(void)
{ while(1) { x=0xfe; //第一个灯亮delay(); //调用延时函数x=0xfd; //第二个灯亮delay(); //调用延时函数x=0xfb; //第三个灯亮delay(); //调用延时函数x=0xf7; //第四个灯亮delay(); //调用延时函数x=0xef; //第五个灯亮delay(); //调用延时函数x=0xdf; //第六个灯亮delay(); //调用延时函数x=0xbf; //第七个灯亮delay(); //调用延时函数x=0x7f; //第八个灯亮delay(); //调用延时函数 }
}
6. 用不同数据类型控制灯闪烁时间
51单片机可以使用不同的数据类型来控制灯闪烁时间,其中包括:
-
整型变量:可以使用int型或者unsigned int型来控制灯的闪烁时间,比如:
int time = 1000; // 定义一个int型变量time,表示灯闪烁的时间为1000ms -
长整型变量:可以使用long型或者unsigned long型来控制灯的闪烁时间,比如:
unsigned long time = 5000; // 定义一个unsigned long型变量time,表示灯闪烁的时间为5000ms -
浮点型变量:可以使用float型或者double型来控制灯的闪烁时间,比如:
float time = 0.5; // 定义一个float型变量time,表示灯闪烁的时间为0.5s需要注意的是,在使用浮点型变量控制灯的闪烁时间时,需要将其转换为整型,比如:
int time = (int)(0.5 * 1000); // 将0.5s转换为500ms,然后定义一个int型变量time,表示灯闪烁的时间为500ms
不同的数据类型可以用于不同的应用场景,需要根据具体情况进行选择。
代码示例:
#include<reg51.h> //包含单片机寄存器的头文件
/******************************************************
函数功能:用整形数据延时一段时间
******************************************************/
void int_delay(void) //延时一段较长的时间
{ unsigned int m; //定义无符号整形变量,双字节数据,值域为 0~65535 for(m=0;m<36000;m++) ; //空操作
}
/******************************************************
函数功能:用字符型数据延时一段时间
******************************************************/
void char_delay(void) //延时一段较短的时间
{ unsigned char i,j; //定义无符号字符型变量,单字节数据,值域 0~255 for(i=0;i<200;i++) for(j=0;j<180;j++) ; //空操作
}
/******************************************************
函数功能:主函数
******************************************************/
void main(void)
{ unsigned char i; while(1) { for(i=0;i<3;i++) { P1=0xfe; //P1.0 口的灯点亮int_delay(); //延时一段较长的时间P1=0xff; //熄灭int_delay(); //延时一段较长的时间} for(i=0;i<3;i++) { P1=0xef; //P1.4 口的灯点亮char_delay(); //延时一段较长的时间P1=0xff; //熄灭char_delay(); //延时一段较长的时间} } }
51单片机流水灯是一个简单的练手项目,可以帮助初学者熟悉51单片机的基本操作和编程知识。以下是一些总结:
-
流水灯是一种基本的LED控制应用。将多个LED连接在一起,依次点亮和熄灭,形成一个动态的灯光效果。
-
51单片机流水灯的原理是将多个LED连接在单片机的输出端口上,通过编写程序控制输出端口的高低电平,从而实现LED的控制。
-
在编写51单片机流水灯程序时,需要掌握51单片机的单片机指令和汇编语言,以及用到的GPIO控制相关的寄存器。
-
51单片机流水灯有多种实现方式,包括轮流点亮每个LED和依次点亮每个LED两种方式。
-
编写51单片机流水灯程序时,需要注意硬件电路的连接和电气特性,如LED的电流限制和电阻的选取等。
-
通过实现51单片机流水灯项目,可以加深对单片机GPIO控制和编程知识的理解和掌握。同时,也可以为后续更复杂的项目打下基础。
更多推荐:
时光の尘_千题千解·Java面试宝典,Linux学习,C++学习-CSDN博客

相关文章:
51单片机应用从零开始(四)
51单片机应用从零开始(一)-CSDN博客 51单片机应用从零开始(二)-CSDN博客 51单片机应用从零开始(三)-CSDN博客 详解 KEIL C51 软件的使用建立工程-CSDN博客 详解 KEIL C51 软件的使用设置工程编绎与连接程序…...
Django下的Race Condition漏洞
目录 环境搭建 无锁无事务的竞争攻击复现 无锁有事务的竞争攻击复现 悲观锁进行防御 乐观锁进行防御 环境搭建 首先我们安装源码包:GitHub - phith0n/race-condition-playground: Playground for Race Condition attack 然后将源码包上传到Ubuntu 为了方便使…...
【数据结构】希尔排序(最小增量排序)
👦个人主页:Weraphael ✍🏻作者简介:目前正在学习c和算法 ✈️专栏:数据结构 🐋 希望大家多多支持,咱一起进步!😁 如果文章有啥瑕疵 希望大佬指点一二 如果文章对你有帮助…...
Android Native崩溃信息分析和 工具(addr2line和ndkstack)使用
这里以一个实际的crash案例未demo进行分析和讲解。针对native的崩溃信息。一般来讲,较快的方式是直接检索到backtrace,然后通过分析和使用工具addr2line和 ndk-stack等定位到出问题的地方。这里截取了一段 崩溃日志,具体如下: 01…...
2023年05月 Python(六级)真题解析#中国电子学会#全国青少年软件编程等级考试
Python等级考试(1~6级)全部真题・点这里 一、单选题(共25题,每题2分,共50分) 第1题 明明每天坚持背英语单词,他建立了英语单词错题本文件“mistakes.txt”,将每天记错的单词增加到该文件中,下列打开文件的语句最合适的是?( ) A: f = open(“mistakes.txt”) B: …...
SQLite3 数据库学习(文章链接汇总)
参考引用 SQLite 权威指南(第二版)SQLite3 入门 SQLite3 数据库学习(一):数据库和 SQLite 基础 SQLite3 数据库学习(二):SQLite 中的 SQL 语句详解 SQLite3 数据库学习(三…...
【VSCode】Visual Studio Code 下载与安装教程
前言 Visual Studio Code(简称 VS Code)是一个轻量级的代码编辑器,适用于多种编程语言和开发环境。本文将介绍如何下载和安装 Visual Studio Code。 下载安装包 首先,我们需要从官方网站下载 Visual Studio Code 的安装包。请访…...
分布式教程从0到1【1】分布式基础
1 分布式基础概念 1.1 微服务 微服务架构风格,就像是把一个单独的应用程序开发为一套小服务,每个小服务运行在自己的进程中,并使用轻量级机制通信,通常是 HTTP API。这些服务围绕业务能力来构建,并通过完全自动化部署…...
Ubuntu22.04 部署Mqtt服务器
1、打开Download EMQX (www.emqx.io)下载mqtt服务器版本 2、Download the EMQX repository curl -s https://assets.emqx.com/scripts/install-emqx-deb.sh | sudo bash 3.Install EMQX sudo apt-get install emqx 4.Run EMQX sudo systemctl start…...
HMM与LTP词性标注之LTP介绍
文章目录 LTP 上图缺点:参数太多,中文语料库匮乏 注意力机制,相当于给每一个词赋予一个权重,权重越大的越重要。 bert的缺点:神经元太多,较慢。 LTP 如果只是需要做词性的识别,那么用LTP就可…...
基于SSM的学生疫情信息管理系统设计与实现
末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用JSP技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…...
分类预测 | Matlab实现PSO-GRU粒子群算法优化门控循环单元的数据多输入分类预测
分类预测 | Matlab实现PSO-GRU粒子群算法优化门控循环单元的数据多输入分类预测 目录 分类预测 | Matlab实现PSO-GRU粒子群算法优化门控循环单元的数据多输入分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab实现PSO-GRU粒子群算法优化门控循环单元的数据…...
用电子签章软件怎么给标书一键签章的小故事
在这个数字化时代,电子签章已经成为了商务往来的重要一环。作为国内电子签章软件的佼佼者,微签凭借其19年的电子签研发应用经验,为中小企业提供了安全可靠的电子签章软件服务。 从审批场景到合同签署,微签都展现出卓越的电子签章…...
Windows10电脑没有微软商店的解决方法
在Windows10电脑中用户可以打开微软商店,下载自己需要的应用程序。但是,有用户反映自己Windows10电脑上没有微软商店,但是不清楚具体的解决方法,接下来小编给大家详细介绍关于解决Windows10电脑内微软商店不见了的方法,…...
SpringCloud-Gateway修改Response响应体,并解决大数据量返回不全等问题
官网相关案例: Spring Cloud Gatewayhttps://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/#the-modifyresponsebody-gatewayfilter-factory ModifyRequestBodyGatewayFilterFactory类: https://github.com/spring-cloud/spring-cloud-gate…...
Spark与SQL之间NB的转换_withClumn,split及SubString
业务中有这样一个场景,我想实现的是将dataframe表table1中的字段b1与c1的内容使用下划线_连接起来列的名字为d1,比如比如学习_1,睡觉_2,吃饭_3,这是我的第一个需求;随后我想保留的是dataframe表table1中的字段d1中的数据比如学习_…...
修改服务器端Apache默认根目录
目标:修改默认Apache网站根目录 /var/www/html 一、找到 DocumentRoot “/var/www/html” 这一段 apache的根目录,把/var/www/html 这个目录改 #DocumentRoot "/var/www/html" DocumentRoot "/home/cloud/tuya_mini_h5/build" 二、…...
网络安全(大厂面试真题集)
前言 随着国家政策的扶持,网络安全行业也越来越为大众所熟知,想要进入到网络安全行业的人也越来越多。 为了拿到心仪的 Offer 之外,除了学好网络安全知识以外,还要应对好企业的面试。 作为一个安全老鸟,工作这么多年…...
系列五、JVM的内存结构【PC寄存器】
一、位置 CPU中 二、作用 每个线程都有一个程序计数器,是线程私有的,所谓PC寄存器其实就是一个指针,指向方法区中的方法字节码(用来存储指向下一条指令的地址,也即将要执行的指令代码),由执行引…...
ClickHouse UDF 运行速度慢问题
一、环境版本 环境版本docker clickhouse22.3.10.22 二、UDF运行速度时快时慢 udf配置文件xxx_function.xml type- 可执行类型。如果type设置为executable则启动单个命令。如果设置为,executable_pool则创建命令池。 pool_size- 命令池的大小。可选参数ÿ…...
深度学习在微纳光子学中的应用
深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...
装饰模式(Decorator Pattern)重构java邮件发奖系统实战
前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...
IGP(Interior Gateway Protocol,内部网关协议)
IGP(Interior Gateway Protocol,内部网关协议) 是一种用于在一个自治系统(AS)内部传递路由信息的路由协议,主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...
C++ 基础特性深度解析
目录 引言 一、命名空间(namespace) C 中的命名空间 与 C 语言的对比 二、缺省参数 C 中的缺省参数 与 C 语言的对比 三、引用(reference) C 中的引用 与 C 语言的对比 四、inline(内联函数…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序
一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...
ios苹果系统,js 滑动屏幕、锚定无效
现象:window.addEventListener监听touch无效,划不动屏幕,但是代码逻辑都有执行到。 scrollIntoView也无效。 原因:这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作,从而会影响…...
《C++ 模板》
目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板,就像一个模具,里面可以将不同类型的材料做成一个形状,其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式:templa…...
基于 TAPD 进行项目管理
起因 自己写了个小工具,仓库用的Github。之前在用markdown进行需求管理,现在随着功能的增加,感觉有点难以管理了,所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD,需要提供一个企业名新建一个项目&#…...
[ACTF2020 新生赛]Include 1(php://filter伪协议)
题目 做法 启动靶机,点进去 点进去 查看URL,有 ?fileflag.php说明存在文件包含,原理是php://filter 协议 当它与包含函数结合时,php://filter流会被当作php文件执行。 用php://filter加编码,能让PHP把文件内容…...
HybridVLA——让单一LLM同时具备扩散和自回归动作预测能力:训练时既扩散也回归,但推理时则扩散
前言 如上一篇文章《dexcap升级版之DexWild》中的前言部分所说,在叠衣服的过程中,我会带着团队对比各种模型、方法、策略,毕竟针对各个场景始终寻找更优的解决方案,是我个人和我司「七月在线」的职责之一 且个人认为,…...
