51单片机-控制LED灯

51单片机-独立按键控制LED 首先我们要懂,任何代码的表示方式都基于我们的原理图;也就是说原理图上显示LED灯的引脚接到芯片P3_1上,所以我们的循环语句用到 P3_1 , p3_1==0的意思引脚工作状态下,也就是我们按下第一个独立按键的时候,默认不按第一个独立按键的时候,就是if语句的否则状态,也就是else,所有灯都是灭的状态;对于机械开关,当机械触点断开、闭合时,由于机械触点的弹性作用,一个开关在闭合时不会马上稳点的接通,在断开时也不会一下子断开,所以在开关闭合及断开的瞬间会伴随一连串的抖动。P3_ 表示1位; 阅读详情

目录

1.硬件设计

2.软件设计

2.1.点亮一颗LED灯

2.2.LED闪烁

2.3.LED流水灯

3.知识点

3.1.while函数的应用

3.2.常用数据类型

3.3.延时函数的自动生成


1.硬件设计

        通过原理图分析,LED 采用共阳接法,即所有 LED 阳极管脚接电源 VCC(5V),阴极管脚通过一个限流电阻接到 P2 口上;要让 LED 发光即对应的阴极管脚应该为低电平,若为高电平则熄灭;所以如何配置P2口的高低电平(P2寄存器),就是怎么去控制这8颗LED灯。

2.软件设计

2.1.点亮一颗LED灯

功能需求:点亮D1这一颗LED灯

程序设计:根据原理图去配置对应的寄存器(P2口),去控制LED灯的亮灭状态,如:D1亮,其他灯不亮,即P20输入低电平,其他管脚输入高电平;

#include <REGX52.H>

void main()
{
	P2=0XFE;//1111 1110 D1灯亮,其他灯不亮
}

进阶1:除了main函数,增加循环语句while,while(1)表示当括号里边的逻辑表达式为真的时候;就执行大括号里边的内容

#include <REGX52.H>

void main()
{
	while(1)
	{
	    P2=0XFE;//1111 1110
	}
}

进阶2:利用头文件中已经定义好的位寄存器,去单独控制我们想要控制的管脚,如:P2=0XFE-相当于P2_0=0

#include <REGX52.H>

void main()
{
	while(1)
	{
		P2_0=0;//P2=0XFE;
	}
}

2.2.LED闪烁

功能需求:要让D1这颗LED灯,按固定延时呈闪烁现象

程序设计:闪烁无非就是将LED点亮,再熄灭,然后重复这个动作,但如果只是如下的程序方案,我们无法看到闪烁现象,因单片机的工作频率是以MHz为单位,亮灭之间,停留的时间太短,所以看到的现象就是个LED常亮的现象

#include <REGX52.H>

void main()
{
	while(1)
	{
		P2=0XFE;//1111 1110 点亮第一颗灯
		P2=0XFF;//1111 1111 熄灭第一颗灯
	}
}

所以想要肉眼能看到LED的闪烁现象,需在亮灭之间,增加延时函数,如下:在亮灭各自的状态下,增加500毫秒延时;

#include <REGX52.H>
#include <INTRINS.H>

void Delay500ms()		//@12.000MHz
{
	unsigned char i, j, k;

	_nop_();
	i = 4;
	j = 205;
	k = 187;
	do
	{
		do
		{
			while (--k);
		} while (--j);
	} while (--i);
}

void main()
{
	while(1)
	{
		P2=0XFE;//1111 1110
		Delay500ms();//延时500毫秒
		P2=0XFF;//1111 1111
		Delay500ms();//延时500毫秒
	}
}

        延时函数,对初学者来说,不需要自己去编写,甚至其原理都可以不需要懂,可通过STC等工具自动生成,如:

2.3.LED流水灯

功能需求:LED流水灯的原理是让这8颗LED灯依次点亮,呈流水灯效果

软件设计:考虑LED灯依次点亮,考虑固定延时,如下:从第1-8颗灯依次点亮,且在每颗灯之间加入固定500ms的延时

#include <REGX52.H>
#include <INTRINS.H>

void Delay500ms()		//@12.000MHz
{
	unsigned char i, j, k;

	_nop_();
	i = 4;
	j = 205;
	k = 187;
	do
	{
		do
		{
			while (--k);
		} while (--j);
	} while (--i);
}

void main()
{
	while(1)
	{
		P2=0XFE;//1111 1110
		Delay500ms();
		P2=0XFD;//1111 1101
		Delay500ms();
		P2=0XFB;//1111 1011
		Delay500ms();
		P2=0XF7;//1111 0111
		Delay500ms();
		P2=0XEF;//1110 1111
		Delay500ms();
		P2=0XDF;//1101 1111
		Delay500ms();
		P2=0XBF;//1011 1111
		Delay500ms();
		P2=0X7F;//0111 1111
		Delay500ms();
	}
}

        以上流水灯方案的的缺点是:延时固定,且不可调,除非重新修改延时函数;那怎么让流水灯的延时变得可调呢,如下:

进阶1:首先通过STC的延时计算器,生成1个固定的基本延时函数,然后增加无符号整形变量xms,然后通过改变delay函数括号里边的行参,即可调整每颗LED灯的延时参数;

#include <REGX52.H>
#include <INTRINS.H>

void Delay1ms(unsigned int xms)		//@12.000MHz;设置无符号整形变量Xms
{
	unsigned char i, j;
	while(xms)// 当xms非0,即循环后面的延时函数
	{
		i = 2;
		j = 239;
		do
		{
			while (--j);
		} while (--i);
			xms--;
	}
}
void main()
{
	while(1)
	{
		P2=0XFE;//1111 1110
		Delay1ms(100);//延时100ms 执行括号里边的参数(行参)
		P2=0XFD;//1111 1101
		Delay1ms(500);//延时500ms
		P2=0XFB;//1111 1011
		Delay1ms(100);
		P2=0XF7;//1111 0111
		Delay1ms(100);
		P2=0XEF;//1110 1111
		Delay1ms(100);
		P2=0XDF;//1101 1111
		Delay1ms(300);//延时300ms
		P2=0XBF;//1011 1111
		Delay1ms(100);
		P2=0X7F;//0111 1111
		Delay1ms(100);
	}
}

3.知识点

3.1.while函数的应用

/*------------------------------------------------
如果逻辑表达式成立
    执行循环体
执行后再次判断
若还成立则继续执行直到表达式不成立
------------------------------------------------*/
while(逻辑表达式)
{
	循环体;
}

3.2.常用数据类型

3.3.延时函数的自动生成

通过STC生成想要的延时函数,需要注意的是系统频率要选择单片机对应的频率,确定需要延时的长度,选择适用单片机型号的指令集;

51单片机独立按键控制LED(二) 对于机械开关,当机械触点断开、闭合时,由于机械触点的弹性作用,一个开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开,所以在开关闭合及断开的瞬间会伴随一连串的抖动。独立按键控制LED显示二进制。独立按键控制LED灯亮灭。独立按键控制LED状态。独立按键控制LED移位。 阅读详情

相关推荐

用51单片机中断控制LED灯亮灭

用51单片机中断控制LED灯亮灭 #include<reg51.h>//头文件 sbit LED=P2^0;//位定义LED灯 sbit k3=P3^2;//位定义按键 void delay()//延时函数 { unsigned char a,b; for(a=0;a<200;a++) for(b=0;b<200;b++); } void Int0()//使用中断所做的处理函数 { IT0=1; EX0=1; EA=1; } void main()//主函数 {

基极向上的三极管的博客 2万+

C51单片机16个LED流水灯(针对51单片机初学者)

针对51单片机初学者

Stevendongge的博客 1万+

使用51单片机实现延时控制LED灯闪烁

闪烁,就是灯一会儿亮一会儿灭,这个一会儿就是时间间隔,也就是今天我们说的延时了。比如灯亮1s,再灭1s,循环往复就是闪烁。延时函数使用for循环或者while循环,其实就是执行一段空代码,因为每执行一次for或者while循环都要耗费一点时间,这个时间就由指令周期决定,指令周期由时钟频率决定,也就是外部晶振的频率决定。主函数理解就很简单了,在永不休止的循环里面,给LED的引脚P1.0隔段时间赋不同的值,让其一会儿输出高电平,一会儿输出低电平,LED也就随着一会儿灭,一会儿亮了。

2301_81855412的博客 2841

51单片机点亮LED灯(一)

选择打开程序文件后,打开KeilProject/2-1点亮一个LED/project/object中hex后缀的文件。系统频率选择12MHZ,定时长度选择500ms,指令集选择STC-Y1,然后将代码复制至Keil编译器。在option选项中的output,勾选生成HEX后缀文件,才能通过STC-ISP软件烧录程序。串口号可以通过右键我的电脑,选择属性,再找到设备管理器,在端口一栏查看。最后再点击下载/编程,然后将按下单片机的复位键,即完成烧录程序。选择语言,第一个是C语言,第二个是C++,第三个是汇编。

m0_50562428的博客 2万+

掌握51单片机:LED灯控制深入实践

51单片机(也称为8051微控制器)是经典的微控制器之一,它在嵌入式系统领域有着广泛的应用。51单片机以其结构简单、易于编程和成本低廉的特点,受到了许多电子爱好者和专业人士的青睐。51单片机的工作原理基于冯·诺依曼架构,其核心是执行从内存中取出的指令。单片机的CPU按照程序的指令序列,通过控制I/O端口对外部设备进行读写操作,并利用定时器和中断系统进行精确的时间控制和事件响应,完成预定的功能。

weixin_28746213的博客 962

51单片机LED灯双向循环控制实践项目

Keil C51是一个针对8051系列单片机的集成开发环境,它为C语言和汇编语言提供了编译器,同时还包括了调试器和其他一些辅助工具。Keil C51易于使用,且具有丰富的库函数,非常适合51单片机的开发工作。安装Keil C51开发环境需要遵循以下步骤:从Keil官网下载最新版本的Keil uVision安装包。运行安装程序,遵循安装向导完成安装。在安装过程中选择所需的组件,比如MDK-ARM核心、C编译器、调试器等。

weixin_42361478的博客 849

手机蓝牙控制51单片机实现对led灯的开关

根据蓝牙模块通过手机app实现对51单片机led灯的控制

weixin_49050407的博客 1万+

按键控制16个LED流水灯

通过对应按键的闭合可以控制16个流水灯的亮灭

用51单片机实现按键控制LED灯亮灭

用51单片机实现按键控制LED灯亮灭 #include<reg51.h>//头文件 sbit LED=P2^0;//位定义LED灯 sbit k1=P3^1;//位定义按键 void delay()//延时函数 { unsigned char a,b; for(a=0;a<200;a++) for(b=0;b<200;b++); } void key()//按键处理函数 { if(k1==0)//判断按键是否按下(按键按下时k=0) { delay();//如果按

基极向上的三极管的博客 4万+

51单片机控制多个LED灯

资源中是采用51单片机的GPIO引脚对多路LED灯进行控制的代码,包含两个工程,分别采用两种不同的方法对多路LED灯进行控制。

快速理解OSI七层模型(举例理解,数据传输过程,深入理解OSI七层模型)

我们需要了解互联网的本质是一系列的网络协议,这个协议就叫做OSI协议(开放系统互联(Open System Interconnection)),它是由ISO(国际标准化组织)定义的。 需要注意,随着时代的发展,OSI已经被TCP/IP 4层模型淘汰,在当今世界上并没有大规模的使用。 那么对于OSI,人们按照功能不同,分工不同,人为的将OSI的分为七层。实际上这七层是并不存在的,也就是说没有这些概念,而我们今天提到的七层概念,只是人为的划分而已。目的只是为了让大家更好地理解这些都是用来做什么的。

CN_TangZheng的博客 3万+

51单片机控制LED灯

控制单个LED灯 基础知识 C-51的数据类型扩充定义 sfr:特殊功能寄存器声明 sbit:特殊功能位声明 bit:位变量声明 例:sfr SCON = 0X98; sbit OV = PSW^2; LED灯常亮: 上面程序是让P2.0连接的LED灯常量 LED灯闪烁: 延时函数的原理及作用 在上例中,delay函数里面只是while循环,让i不断递减,因为i自减一次,消耗一定的时间,所以在调用delay函数时,传入50000的数值,让延时函数内部i自减50000次,达到延时

Hermit的博客 9778

机械臂 关节电机选型计算

电机 机械臂

hisen92的专栏 8983

51单片机通过WIFI模块ESP8266控制LED灯

一、系统方案 手机APP通过ESP8266 WIFI模块与51单片机通信控制LED灯的开关。下位机由单片机、ESP8266模块和LED灯组成,上位机由Android手机APP承担。我们在APP上发送LED灯的开关控制指令,ESP8266将收到的数据发送给单片机,从而实现对LED灯进行开关控制。 设计好的实物是这个样子: 二、硬件设计 ESP8266模块作为一个透传模块使用,RXD、...

tongxin082的专栏 8万+

告别配置迷茫:手把手教你用Vivado 2023.1配置Xilinx FPGA的DDR4 MIG IP核(含AXI接口详解)

本文详细介绍了如何在Vivado 2023.1中配置Xilinx FPGA的DDR4 MIG IP核,包括AXI接口的深度解析与优化。通过实战案例和调试技巧,帮助工程师快速掌握DDR4内存与FPGA的协同工作,提升系统性能。特别适合需要高性能计算和实时信号处理的开发者。

weixin_29231725的博客 437

LLVM实战:如何用Clang+LLVM打造你的第一个C++编译器(附完整配置步骤)

本文详细介绍了如何使用Clang+LLVM构建C++编译器的完整配置步骤,从环境准备到编译流程剖析,再到调试与优化技巧。通过实战指南,帮助开发者深入理解LLVM编译器框架的工作原理,并掌握交叉编译与性能分析等高级功能。

sprite的博客 748

Android studio开发APP通过esp8266WiFi控制51单片机LED灯亮灭

本章介绍基于Android studio设计的APP通过esp8266WiFi控制51单片机LED灯的亮灭实现过程。 目录对ESP8266WiFi模块进行设置编写Android studio代码编写89C51单片机代码 对ESP8266WiFi模块进行设置 1、ESP8266WiFi特点: ①支持 STA/AP/STA+AP 工作模式; ②支持安卓、IOS 的 Smart Config(APP)/AirKiss(微信)一键配网; ③支持串口本地升级固件; ④通用 AT 指令可快速上手; ⑤支持二次开发,集成

Run的博客 2万+

72、海洋地理信息系统:电子海图的全面解析

本文全面解析了海洋地理信息系统中的电子海图技术,从AIS数据的应用、电子海图数据的存储与显示,到电子导航的发展趋势和S-100通用水文数据模型的推广,系统地阐述了电子海图在现代航海中的核心作用及其未来发展方向。

hhh00的博客 252

51单片机按键控制LED灯的亮灭

通过两个按键来控制2个lded的灭亮 按一下灯亮在按一下灯灭 #include <reg52.h> //位绑定操作 sbit ADDR0 = P1^0; sbit ADDR1 = P1^1; sbit ADDR2 = P1^2; sbit ADDR3 = P1^3; sbit ENLED = P1^4; sbit LED1 = P0^0; sbit LED2 = P0^1; //按键绑定 sbit KEY1 = P2^4; sbit KEY2 = P2^5; sbit KEYOUT1 =

君莫笑_的博客 2万+

【Arduino 动手做】构建一个迷你 Las Vegas RGB LED 球体

《Arduino迷你拉斯维加斯球体项目:15岁少年的创意挑战》 15岁的Ben通过本项目展示了如何利用Arduino平台制作一个经济实惠的迷你拉斯维加斯球体夜灯。该项目涉及LED选择(采用WS2812B可编程灯带)、电子元件配置(含Arduino Nano微控制器和红外遥控)以及3D建模设计(100毫米直径球体)。项目难点包括LED布局优化、供电方案设计和3D打印外壳制作。Ben详细记录了从背景研究、电路设计到最终实现的完整过程,特别强调了分辨率与成本的平衡,以及如何通过白色扩散器改善视觉效果。这个项目不仅

雕爷学编程 1024

34、Text2KGBench与GeoQuestions1089:知识图谱生成与地理空间问答的新进展

本文介绍了Text2KGBench和GeoQuestions1089在知识图谱生成与地理空间问答领域的最新进展。Text2KGBench提供了一个开放且可复现的基准,用于从文本生成知识图谱,并结合多个LLM模型和评估工具推动研究。GeoQuestions1089是目前最大的地理空间问答数据集,与GeoQA2系统结合,推动了地理空间问答系统的发展。文章还探讨了技术挑战和未来研究方向,包括多模态知识图谱生成和深度学习优化的地理空间问答系统。

css33的专栏 114

51单片机 4个独立按键控制LED灯 (protues仿真)(C语言版)

51单片机 4个独立按键控制LED灯 (protues仿真)(C语言版) 一、思路及相关问题 1、逻辑思路: 当按下key1时 led1亮起来 因为按下去具有瞬时性不用while,用if语句,当松开时,用while(!key1) ,函数调用。 先在脑海里想象它的大致运行过程,其次在仿真软件protues上摆好元器件并连接,最后用keil4写对应代码。 需注意keil4软件上的设置如波特率,添加文件...

qq_45420694的博客 5万+

《大数据最全面试题-Offer直通车》目录

做好这些不用担心试用期不通过:程序员入职新公司如何快速上手项目本人遇到大数据面试题和参考答案(超过1万字精华版)大数据面试英文自我介绍参考(万字长文)大数据运维应用场景面试题汇总及参考答案(持续更新)万字数据仓库面试题及参考答案数据仓库数据质量监控和处理方法最佳实践数据仓库建模方法万字详解Doris的3种数据模型详解和数据仓库每一层的模型选用大数据面试临阵磨枪不知看什么?看这份心理就有底了-大数据常用技术栈常见面试100道题最全Hive面试题2024年(2万字详解)Elasticsearch 面试题及参考答

大模型大数据攻城狮的专栏 2642

51单片机入门————LED灯的控制

LED灯的控制,LED灯的闪烁,自定义延时,独立按钮,流水灯的设计

m0_73850645的博客 7483

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

51单片机按键控制LED灯(二)

(1)轻触按键:相当于是一种电子开关,按下时开关接通,松开时开关断开,实现原理是通过轻触按键内部的金属弹片受力弹动来实现接通和断开由上面两张图可以知道,独立按键是接在MCU的P3.0口到P3.3口的;可以看到,独立按键的右端是接地的;这里需要注意,独立按键跟LED灯的原理有区别,LED灯是通过高低电平通电,进而使灯亮;而独立按键不一样,独立按键的一端接地,独立按键就是一个开关;以K1为例,K1右端是GND,左端是RXD,我们知道,单片机在刚上电时,所有i/o口默认都是高电平的;

AW496的博客 4320

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

基于51单片机+ESP-01WIFI模块LED灯的控制

基于51单片机+ESP-01WIFI模块LED灯的控制1、前期准备2、ESP-01与USB-TTL接线图3、ESO-01的调试4、单片机软件程序的设计4、感想 1、前期准备 提前了解ESP-01WIFI模块的AT指令,了解串口调试助手的基本使用方法,准备一个USB-TTL模块工具,准备一块C51单片机开发板,当然也可以自己制作一个简单的开发版,这个根据个人的情况,手机上下载一个网络调试助手,前期的工作基本准备就绪。 2、ESP-01与USB-TTL接线图 ESP-01wifi模块中供电电压一般是3.0~3.

xiaogudianzi的博客 5322

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

上一篇: 数字电路基础-逻辑门电路
下一篇: 51单片机-独立按键控制LED灯
桃亭TT
博客等级 码龄5年 268粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

桃亭TT

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值