首页 > 其他分享 >0.LED基础控制

0.LED基础控制

时间:2025-01-16 14:59:04浏览次数:1  
标签:P2 控制 LED -- void 基础 unsigned while include

典中典之发光二极管,我从小学到大

长脚是正级,断脚是负极 里面大块的是负级,小块的是正极

电阻标注:

  • 若标注102 -> 代表着为1K电阻(10^2)
  • 若标注473 -> 代表着为47K电阻(47 * 10^3)
    以此类推 其他器件标注也为类似模式

RP7 RP9模块为限流电阻
此单片机使用TTL规范(高电平5V 低电平0V)
要让上图LED亮,则引脚端要为低电平

单片机通过CPU访问寄存器,寄存器通过驱动器控制引脚,进而控制LED
单片机控制电路实则就是玩弄寄存器

C语言位运算

1. 点亮一个LED

#include <REGX52.H>

void main()
{
	//P2 = 0xFE;		// 1111 1110 
	P2 = 0x55;	// 0101 0101
	// 对变量进行赋值时使用16进制
	
	// 相当于终止对引脚的操作
	while(1)
	{
		
	}
}

其中0x代表16进制

2. 使LED闪烁

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

// 使程序休眠500ms
void Delay500ms()		//@11.0592MHz
{
	unsigned char i, j, k;

	_nop_();
	i = 4;
	j = 129;
	k = 119;
	do
	{
		do
		{
			while (--k);
		} while (--j);
	} while (--i);
}


void main()
{
	while(1)
	{
		P2 = 0xFE;
		Delay500ms();
		P2 = 0XFF;
		Delay500ms();
	}
}

3. 流水灯设计

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

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

	_nop_();
	i = 4;
	j = 129;
	k = 119;
	do
	{
		do
		{
			while (--k);
		} while (--j);
	} while (--i);
}

void main()
{
	 unsigned char i = 0x01;  // 初始化为0x01,即二进制的0000 0001,表示第一个LED先点亮
    while(1)
    {
        P2 = ~i;  // 将i的值输出到P2端口,控制LED灯的状态
        Delay500ms();  // 延时500ms
        i <<= 1;  // 将i左移一位,使下一个LED点亮
        if(i == 0x00)  // 如果i左移后变为0x00,说明已经循环了一圈
        {
            i = 0x01;  // 重新设置为0x01,从第一个LED开始
        }
    }
}

4. 使用独立按键控制LED亮灭

一个按键控制一个:

#include <REGX52.H>

void main()
{
	while(1)
	{
		if(P3_1 == 0)
		{
			P2_0 = 0;
		}
		else
		{
			P2_0 = 1;
		}
	}
}

5. 独立按键控制LED状态

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

void Delay(unsigned int xms)		//@11.0592MHz
{
	unsigned char i, j;
	while(xms)
	{
		_nop_();
		i = 2;
		j = 199;
		do
		{
			while (--j);
		} while (--i);
		xms--;
	}
}
	

void main()
{
	while(1)
	{
		if(P3_1 == 0)
		{
			Delay(10);
			while(P3_1 == 0);
			Delay(10);
			P2_0 = ~P2_0;
		}
	}
}

在触发按键前后加上延时,可以去除按键抖动,使按键更加跟手
(低延迟男孩)

实现二进制计数

按一下按键记一次数

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

void Delay(unsigned int xms)		//@11.0592MHz
{
	unsigned char i, j;

	while(xms)
	{
		_nop_();
		i = 2;
		j = 199;
		do
		{
			while (--j);
		} while (--i);
		xms--;
	}
}

void main()
{
	unsigned int ledNum = 0;
	while(1)
	{
		if(P3_1 == 0)
		{
			Delay(20);
			while(P3_1 == 0);
			Delay(20);
			
			ledNum++;
			P2 = ~ledNum;
		}		
	}	
}

6.实现按键控制LED移动

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

void Delay(unsigned int xms)		//@11.0592MHz
{
	unsigned char i, j;

	while(xms)
	{
		_nop_();
		i = 2;
		j = 199;
		do
		{
			while (--j);
		} while (--i);
		xms--;
	}
}

void main()
{
	unsigned int ledNum = 0x01;
	while(1)
	{
		if(P3_1 == 0)
		{
			Delay(20);
			while(P3_1 == 0);
			Delay(20);
			
			P2 = ~ledNum;
			ledNum <<= 1;
			// 移至超出时复位
			// 0000 0001 -> 1000 0000 -> 0000 0001
			if(ledNum > 0x80)
			{
				ledNum = 0x01;	
			}
		}		
	}	
}

长脚是正级,断脚是负极 里面大块的是负级,小块的是正极

电阻标注:

  • 若标注102 -> 代表着为1K电阻(10^2)
  • 若标注473 -> 代表着为47K电阻(47 * 10^3)
    以此类推 其他器件标注也为类似模式

![[Pasted image 20250114171745.png]]
RP7 RP9模块为限流电阻
此单片机使用TTL规范(高电平5V 低电平0V)
要让上图LED亮,则引脚端要为低电平

单片机通过CPU访问寄存器,寄存器通过驱动器控制引脚,进而控制LED
单片机控制电路实则就是玩弄寄存器

C语言位运算

![[Pasted image 20250115111820.png]]

1. 点亮一个LED

#include <REGX52.H>

void main()
{
	//P2 = 0xFE;		// 1111 1110 
	P2 = 0x55;	// 0101 0101
	// 对变量进行赋值时使用16进制
	
	// 相当于终止对引脚的操作
	while(1)
	{
		
	}
}

其中0x代表16进制

2. 使LED闪烁

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

// 使程序休眠500ms
void Delay500ms()		//@11.0592MHz
{
	unsigned char i, j, k;

	_nop_();
	i = 4;
	j = 129;
	k = 119;
	do
	{
		do
		{
			while (--k);
		} while (--j);
	} while (--i);
}


void main()
{
	while(1)
	{
		P2 = 0xFE;
		Delay500ms();
		P2 = 0XFF;
		Delay500ms();
	}
}

3. 流水灯设计

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

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

	_nop_();
	i = 4;
	j = 129;
	k = 119;
	do
	{
		do
		{
			while (--k);
		} while (--j);
	} while (--i);
}

void main()
{
	 unsigned char i = 0x01;  // 初始化为0x01,即二进制的0000 0001,表示第一个LED先点亮
    while(1)
    {
        P2 = ~i;  // 将i的值输出到P2端口,控制LED灯的状态
        Delay500ms();  // 延时500ms
        i <<= 1;  // 将i左移一位,使下一个LED点亮
        if(i == 0x00)  // 如果i左移后变为0x00,说明已经循环了一圈
        {
            i = 0x01;  // 重新设置为0x01,从第一个LED开始
        }
    }
}

4. 使用独立按键控制LED亮灭

一个按键控制一个:

#include <REGX52.H>

void main()
{
	while(1)
	{
		if(P3_1 == 0)
		{
			P2_0 = 0;
		}
		else
		{
			P2_0 = 1;
		}
	}
}

5. 独立按键控制LED状态

![[Pasted image 20250115113351.png]]

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

void Delay(unsigned int xms)		//@11.0592MHz
{
	unsigned char i, j;
	while(xms)
	{
		_nop_();
		i = 2;
		j = 199;
		do
		{
			while (--j);
		} while (--i);
		xms--;
	}
}
	

void main()
{
	while(1)
	{
		if(P3_1 == 0)
		{
			Delay(10);
			while(P3_1 == 0);
			Delay(10);
			P2_0 = ~P2_0;
		}
	}
}

在触发按键前后加上延时,可以去除按键抖动,使按键更加跟手
(低延迟男孩)

实现二进制计数

按一下按键记一次数

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

void Delay(unsigned int xms)		//@11.0592MHz
{
	unsigned char i, j;

	while(xms)
	{
		_nop_();
		i = 2;
		j = 199;
		do
		{
			while (--j);
		} while (--i);
		xms--;
	}
}

void main()
{
	unsigned int ledNum = 0;
	while(1)
	{
		if(P3_1 == 0)
		{
			Delay(20);
			while(P3_1 == 0);
			Delay(20);
			
			ledNum++;
			P2 = ~ledNum;
		}		
	}	
}

6.实现按键控制LED移动

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

void Delay(unsigned int xms)		//@11.0592MHz
{
	unsigned char i, j;

	while(xms)
	{
		_nop_();
		i = 2;
		j = 199;
		do
		{
			while (--j);
		} while (--i);
		xms--;
	}
}

void main()
{
	unsigned int ledNum = 0x01;
	while(1)
	{
		if(P3_1 == 0)
		{
			Delay(20);
			while(P3_1 == 0);
			Delay(20);
			
			P2 = ~ledNum;
			ledNum <<= 1;
			// 移至超出时复位
			// 0000 0001 -> 1000 0000 -> 0000 0001
			if(ledNum > 0x80)
			{
				ledNum = 0x01;	
			}
		}		
	}	
}

标签:P2,控制,LED,--,void,基础,unsigned,while,include
From: https://www.cnblogs.com/surime/p/18674989

相关文章

  • c++基础算法讲解(写了ccf考试中可能出现的各种算法)
    枚举法枚举法是一种基本的问题解决策略,它尝试所有可能的情况以找到解决方案。这种方法通常用于问题规模较小且可以接受一定时间复杂度的情况。例子:找出三个数中最大的数#include<iostream>usingnamespacestd;intfindMax(inta,intb,intc){returnmax(a,......
  • C# NAudio 获取控制系统音量
    https://github.com/naudio/NAudioNAudio是一个开源的.NET音频库,由MarkHeath开发,开源地址:https://github.com/naudio/NAudio支持多种音频操作,可实现多种API播放与录制、多种不同音频格式、音频格式转换(重采样、位深、声道等)、音频编码、多通道播放、音频效果处理等等。NA......
  • 随笔_电路基础_TVS/ESD管
    电路基础知识_分集41.TVS管常见电源方案有:DC座供电、Type-C供电;其通常在板级边缘的VBUS电源线通过TVS管旁路并联到地;1.1 TVS管保护原理线路板上TVS管与后级被保护电路并联。当瞬时电压超过电路正常工作电压后,TVS将发生雪崩击穿(雪崩击穿与齐纳击穿同属于二极管的电击......
  • 大数据学习记录,Java基础(4)
    多态多态的形式和体现1.对象的多态性对象的多态性:父类的引用指向子类的对象格式:(父类类型:指子类继承的父类类型,或者实现的接口类型)父类类型变量名=子类对象;例:Personp=newStudent();Objecto=newPerson();//Object类型的变量o,指向Person类型的对象o=newStuden......
  • 大数据学习记录,Java基础(3)
    面向对象面向对象的特征:封装随着系统越来越复杂,类会越来越多,那么类之间的访问边界必须把握好,面向对象的开发原则要遵循“高内聚、低耦合”,而“高内聚,低耦合”的体现之一:高内聚:类的内部数据操作细节自己完成,不允许外部干涉;低耦合:仅暴露少量的方法给外部使用,尽量方便外部调用......
  • 2025年网络安全零基础自学全攻略:避开弯路,快速上手!
     自学网络安全是一项充满挑战的任务,但只要遵循合适的学习路径,能够有效避免走弯路,逐步建立知识体系,最终可以在该领域取得成就。本文将为你提供2025年最新的网络安全自学攻略,帮助你高效地规划学习路线,掌握网络安全的核心......
  • C/C++基础之sort排序
    sort(起始地址,结束地址的下一位,比较函数)注:比较函数可写可不写。默认sort函数是升序排序的。使用方法如下:#include<bits/stdc++.h>usingnamespacestd;intmain(){ inta[100]; intn;//数组的实际长度 ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);//取消同......
  • Cyber Security 101-Offensive Security-SQLMap: The Basics(sqlmap基础)
    了解SQL注入并通过SQLMap工具利用此漏洞。任务1:介绍SQL 注入是一个普遍存在的漏洞,长期以来一直是热门网络安全主题。要了解这个漏洞,我们必须首先了解什么是数据库以及网站如何与数据库交互。数据库是可以存储、修改和检索。它将来自多个应用程序的数据存储在结构化......
  • C++基础学习01
    C++基础学习012025-01-1611:29:04星期四首先是函数的结构,具体包括四个部分:返回值类型,函数名,形参列表和函数体接下来是输出输出流和C++标准库。我们要实现一个简单的A+B的输入输出,这里需要用到C++的iostream库,于是我们就需要使用cin和cout分别表示输入输出。然后是关于......
  • Linux Shell 脚本编程基础知识篇—sed文本处理工具
    ℹ️大家好,我是练小杰,今天是周三了,距离星期五还有两天......