51单片机学习——LED功能一系列实现

news2024/10/6 1:40:51

目录

一、开发前准备

二、点亮LED

三、LED闪烁

四、LED流水灯

五、LED流水灯plus


一、开发前准备

开发工具软件

烧录软件

其次还需要一块51单片机学习开发板及原理图

keil创造project文件及开启生成.hex文件

二、点亮LED

看二位进制对照原理图;

#include <REGX52.H>
void main()
{
    P1=0xFE;
}

三、LED闪烁

了解数据类型

在STC-isp中,在软件延时计算器中; 

生成C代码后;复制粘贴到keil中;

添加头文件;延迟函数头文件;

include<INTRINS.H>

 循环向左递位

 运行main.c;生成.hex文件,用烧录文件进行烧录;

#include <REGX52.H>
sbit p1_1=P1^0;
unsigned int a;
void main()
{
	while(1)
	{
		a=50000;
		p1_1=0;
		while(a--);
		a=50000;
		p1_1=1;
		while(a--);
	}
}

四、LED流水灯

调用延迟函数返回参数;

  1. 初始化temp变量为0xfe,这表示P1端口的高7位是高电平,最低位是低电平。如果P1端口连接了8个LED灯,这意味着除了最右边的LED灯外,其余的LED灯都是关闭状态。

  2. 在主循环中,使用_crol_内建函数将temp的值循环左移一位。这个操作会将temp最低位的值移动到最高位,其余位向左移动。因此,每次调用_crol_后,temp的值都会改变,使得下一个LED灯被点亮。

  3. 调用delay函数来实现延时。这个延时确保LED灯的点亮和熄灭足够慢,从而形成流水灯的动态效果。

  4. 更新P1端口的值,将temp的当前值输出到P1端口,这样LED灯的状态就会根据temp的值改变。

  5. 重复步骤2到4,形成一个连续的流水灯效果。

//Á÷Ë®µÆ
#include <REGX52.H>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
uchar temp; //8λÎÞ·ûºÅ×Ö·ûÐÍ
void delay(uint z)//ÑÓʱº¯Êý£»µ÷ÓòÎÊý£»ºÁÃ룻
{
	uint x,y;
	for(x=100;x>0;x--)
		for(y=z;y>0;y--);
}

void main()
{
		  temp =0xfe;
		  P1=temp;
	while(1)
	{
		temp=_crol_(temp,1);
		delay(600);
		P1=temp;
	}
}

五、LED流水灯plus

用生成1ms的函数来实现流水灯,这样就不需要一个一个换数了,和上面类似

#include <REGX52.H>
#include <intrins.h>

void Delay1ms(unsigned int xms)		//@12.000MHz
{
	unsigned char i, j;
	while(xms)
	{
		i = 2;
		j = 239;
		do
		{
			while (--j);
		} while (--i);
		xms--;
	}
}

void main()
{
	while(1)
	{
		P1=0xfe;//1111 1110
		Delay1ms(100);
		P1=0xfd;
		Delay1ms(100);
		P1=0xfb;
		Delay1ms(100);
		P1=0xf7;
		Delay1ms(100);
		P1=0xff;
		Delay1ms(100);
		P1=0xef;
		Delay1ms(100);
		P1=0xdf;
		Delay1ms(100);
		P1=0xbf;
		Delay1ms(100);
		P1=0x7f;
		Delay1ms(100);//0111 1111
	}
	
}

这代码用于8051微控制器的C语言程序,实现了一个简单的LED流水灯效果。

1. `#include <REGX52.H>` - 包含针对AT89C52(一种8051系列微控制器)的寄存器定义和特殊功能寄存器(SFR)的头文件。

2. `#include <intrins.h>` - 包含一些内建函数的头文件,比如`_nop_()`(空操作,用于延时)。

3. `void Delay1ms(unsigned int xms)` - 定义了一个名为`Delay1ms`的函数,它接受一个无符号整型参数`xms`,表示需要延时的毫秒数。

4. `unsigned char i, j;` - 在`Delay1ms`函数内部声明了两个无符号字符变量`i`和`j`,用于实现延时。

5. `while(xms)` - 一个循环,当`xms`不为0时继续执行。

6. `i = 2;` - 将`i`初始化为2。

7. `j = 239;` - 将`j`初始化为239。

8. `do { ... } while (--i);` - 一个`do...while`循环,内部是一个`while`循环,执行`j`次,每次`j`递减直到0,然后`i`递减。这个循环用于实现微秒级的延时。

9. `while (--j);` - 内部的`while`循环,直到`j`递减到0。

10. `xms--;` - 每次外层循环结束时,`xms`递减1。

11. `void main()` - 主函数的开始。

12. `while(1)` - 一个无限循环,使得程序持续运行。

13. `P1=0xfe;` - 将P1端口的值设置为`0xfe`(二进制`11111110`),如果P1端口连接了LED灯,这将点亮除了最右边的LED之外的所有LED。

14. `Delay1ms(100);` - 调用`Delay1ms`函数,延时100毫秒。

15. 接下来的几行代码重复上述步骤,但是每次将P1端口的值设置为下一个二进制数,实现LED灯逐个点亮的效果。

16. `P1=0xff;` - 将P1端口的值设置为`0xff`(二进制`11111111`),所有LED灯都熄灭。

17. 最后几行代码是将LED灯从最左边开始逐个点亮,直到所有LED灯都亮起。

整个程序通过改变P1端口的输出值,控制连接到P1端口的LED灯依次点亮和熄灭,从而形成一种流水灯的效果。`Delay1ms`函数用于控制每次LED灯状态改变之间的延时,使得流水灯效果更加明显。这个延时函数是基于8051微控制器在12MHz时钟频率下的实现,实际延时效果可能需要根据具体的时钟频率进行调整。
 

 

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

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

相关文章

面试突击:HashMap 源码详解

本文已收录于&#xff1a;https://github.com/danmuking/all-in-one&#xff08;持续更新&#xff09; 数据结构 JDK1.8 之前 JDK1.8 之前 HashMap 采用 数组和链表 结合的数据结构。如下图&#xff1a; HashMap 将 key 的 hashCode 经过扰动函数处理过后得到 hash 值&#…

Echarts地图实现:杭州市困难人数分布【动画滚动播放】

Echarts地图实现&#xff1a;杭州市困难人数分布 实现功能 杭州市地区以及散点图分布结合的形式数据展示动画轮播可进去杭州市下级地区可返回杭州市地图展示 效果预览 实现思路 使用ECharts的地图和散点图功能结合实现地区分布通过动画轮播展示数据变化实现下级地区数据的展…

VTK学习日志:基于VTK9.3.0+Visual Studio c++实现DICOM影像MPR多平面重建+V R体绘制4个视图展示功能的实现(二)

前段时间对VTK9.3.0进行了编译&#xff0c;开发了MPRVR实现的demo,显示效果不是很理想&#xff0c;正好趁着周末有时间&#xff0c;再度对之前的程序进行优化和完善&#xff0c;先展示下效果&#xff1a; VTK实现MPRVR四视图 再次讲解下基于VTK的MPRVR实现的简单项目创建过程&a…

HTTPS是什么?原理是什么?用公钥加密为什么不能用公钥解密?

HTTPS&#xff08;HyperText Transfer Protocol Secure&#xff09;是HTTP的安全版本&#xff0c;它通过在HTTP协议之上加入SSL/TLS协议来实现数据加密传输&#xff0c;确保数据在客户端和服务器之间的传输过程中不会被窃取或篡改。 HTTPS 的工作原理 客户端发起HTTPS请求&…

第三天:LINK3D核心原理讲解【第1部分】

第三天:LINK3D核心原理讲解 LINK3D学习笔记 目标 了解LINK3D velodyne64线激光雷达LINK3D质心点提取效果: 分布在车道与墙体的交界处。 课程内容 LINK3D论文精讲LINK3D聚合关键点提取代码讲解LINK3D描述子匹配代码讲解除了ALOAM的线特征、面特征,还有其他点云特征吗,是…

【项目】论坛系统项目自动化测试

论坛系统项目自动化测试 前述一、脑图二、代码编写1.公共类InitAndEnd1.登录页面测试ForumLoginTest正常登录&#xff1a;异常登录&#xff1a; 3.注册页面测试ForumRegisterTest注册成功&#xff1a;注册失败&#xff1a; 4论坛列表页面测试ForumListTest登录状态下&#xff1…

<电力行业> - 《第10课:变电》

1 变电 变电环节&#xff0c;顾名思义就是改变电压的环节&#xff0c;主要是在变电站和变电所完成的。变电站和变电所主要区别在于&#xff1a;变电站比变电所更大。 发电厂的变压器和配电变压器也属于“变电”&#xff0c;但我们在说电网环节时&#xff0c;变电特指电网公司…

python基础:设置代码格式

随着编写的程序越来越长&#xff0c;有必要了解一些代码格式的约定&#xff0c;让你的代码尽可以能易于阅读。 python代码编写规范为PEP8&#xff0c;有兴趣的朋友可以下载观看&#xff0c;这里仅作简要说明。 1、缩进 PEP8建议每级缩进都使用4个空格。多数情况下编程语言的…

无人机智能追踪反制系统技术详解

随着无人机技术的飞速发展&#xff0c;无人机在各个领域的应用越来越广泛。然而&#xff0c;无人机的无序飞行和非法使用也带来了一系列安全隐患和威胁。因此&#xff0c;无人机智能追踪反制系统应运而生&#xff0c;成为维护公共安全和防止无人机滥用的重要工具。本文将详细介…

深度学习评价指标:Precision, Recall, F1-score, mIOU, 和 mDice

在深度学习和机器学习中&#xff0c;评价模型性能是至关重要的一环。本文将详细讲解一些常见的评价指标&#xff0c;包括精确率&#xff08;Precision&#xff09;、召回率&#xff08;Recall&#xff09;、F1-score、平均交并比&#xff08;mIOU&#xff09;和平均Dice系数&am…

ConcurrentHashMap是如何保证线程安全的-put方法简要分析

简介 ConcurrentHashMap 是 Java 中并发编程中常用的线程安全的哈希表&#xff08;HashMap&#xff09;实现。它具有以下几个显著的特点和优点&#xff0c;适合在特定的并发场景中使用&#xff1a; 线程安全性&#xff1a; ConcurrentHashMap 提供了并发访问的线程安全保证&am…

AWT的菜单组件

AWT的菜单组件 前言一、菜单组件的介绍常见的菜单相关组件常见菜单相关组件集成体系图菜单相关组件使用小要点 二、AWT菜单组件的代码示例示例一示例二实现思路 前言 推荐一个网站给想要了解或者学习人工智能知识的读者&#xff0c;这个网站里内容讲解通俗易懂且风趣幽默&…

高考结束,踏上西北的美食之旅

高考的帷幕落下&#xff0c;暑期的阳光洒来&#xff0c;是时候放下书本&#xff0c;背上行囊&#xff0c;踏上一场充满期待的西北之旅。而在甘肃这片广袤的土地上&#xff0c;除了壮丽的自然风光&#xff0c;还有众多令人垂涎欲滴的美食等待着您的品尝。当您踏入甘肃&#xff0…

创建一个vue3+vite+ts项目

目录 创建项目 ​编辑 下载jsx 插件 在根目录在新建.env vue.config.js tsconfig.json tsconfig.node.json 下载ui组件库和路由&#xff08;组件库根据自己的项目需要选择&#xff09; 在根目录下新建views/index.tsx 在根目录下新建router/index.ts 修改App.vue 创建…

【C++】C++ 网店销售库存管理系统(源码+论文)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

K8S之网络深度剖析(一)(持续更新ing)

K8S之网络深度剖析 一 、关于K8S的网络模型 在K8s的世界上,IP是以Pod为单位进行分配的。一个Pod内部的所有容器共享一个网络堆栈(相当于一个网络命名空间,它们的IP地址、网络设备、配置等都是共享的)。按照这个网络原则抽象出来的为每个Pod都设置一个IP地址的模型也被称作为I…

What does the error ‘module ‘langchain‘ has no attribute ‘verbose‘ refer to?

题意&#xff1a;错误 module langchain has no attribute verbose 指的是什么意思&#xff1f; 问题背景&#xff1a; Kind of new to Langchain/Qdrant but Im building a recommendation engine to recommend users based on the contents of their associated PDF files, …

Docker配置远程连接

前置条件&#xff1a;docker所在的服务器开放2375端口 文件&#xff1a;/usr/lib/systemd/system/docker.service 节点ExecStart 追加 -H tcp://0.0.0.0:2375

allure安装教程

1、下载 allure的官网下载地址&#xff1a; https://github.com/allure-framework/allure2/releases 注意&#xff1a;官网时常访问失败&#xff0c;可以访问以下网址&#xff1a; https://repo.maven.apache.org/maven2/io/qameta/allure/allure-commandline/ 选择一个版本&…

岗位实习最终篇(汇总)——人力资源管理系统(包含DDL,DML,视图,简单/复杂查询,触发器语句和存储过程语句)

DDL CREATE TABLE users (user_id INT AUTO_INCREMENT PRIMARY KEY COMMENT 员工ID,username VARCHAR(50) NOT NULL UNIQUE COMMENT 用户名,password VARCHAR(255) NOT NULL COMMENT 密码,first_name VARCHAR(50) NOT NULL COMMENT 名,last_name VARCHAR(50) NOT NULL COMMENT…