单片机学习 1-LED灯的点亮(全操作)

2023-11-04

LED灯

P0、P1、P2、P3结构图

除了P0端口需要自己外接上拉电阻(否则只能输入输出低电平),其它自带上拉电阻,因此都可以实现高低电平的输入输出


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述

LED灯介绍

LED灯本质是发光二极管。单片机输入电流控制在3mA—20mA之间,可串联电阻来控制亮度,电阻越大,亮度越弱。I=U/(R+r0),即单片机接入电压固定情况下,外加电阻R越大,电流I越小,即亮度越弱。

LED(Light Emitting Diode),发光二极管,是一种能够将电能转化为可见光的固态的半导体器件,它可以直接把电转化为光。LED的心脏是一个半导体的晶片,晶片的一端附在一个支架上,一端是负极,另一端连接电源的正极,使整个晶片被环氧树脂封装起来。

半导体晶片由两部分组成,一部分是P型半导体,在它里面空穴占主导地位,另一端是N型半导体,在这边主要是电子。但这两种半导体连接起来的时候,它们之间就形成一个P-N结。当电流通过导线作用于这个晶片的时候,电子就会被推向P区,在P区里电子跟空穴复合,然后就会以光子的形式发出能量,这就是LED灯发光的原理。而光的波长也就是光的颜色,是由形成P-N结的材料决定的。

点亮第一个灯

A2-A4开发板只能用P2管脚,A5-A5开发板可随意连线使用(P0,P1,P2,P3管脚都可以)

点亮LED灯,如点亮D1指示灯。即让D1指示灯所连接管脚输出一个低电平。完成后可再控制D1指示灯闪烁,即间隔一段时间点亮和熄灭D1指示灯。


方法一
#include "reg52.h"
sbit LED1=P2^0;

void main()
{
  LED1=0;	
	while(1)
	{
		//LED1=0;
	}
}
方法二
#include<reg52.h> //头文件
sbit LED0=P2^0;  //命名P2^0为LED0
void main()
{
    P2=0xff;  //所有灯都熄灭
    while(1)
    {
        LED0=0;  //LED0点亮
    }
}

在这里插入图片描述

间隔灯

#include<reg52.h>
void main()
{
    while(1)
    {
        P2=0xaa; //16进制数aa代表10101010,代表亮灯方式
    }
}

imgm

点亮任意灯

#include<reg52.h>
void main()
{
    P2=0x8b;
    while(1);
}

img

延时灯

#include<reg52.h>
#define unit unsigned int  //宏定义
sbit led1= P2^3;
unit i,j;
void main()
{
    P2=0x00;   //让所有灯熄灭
    while(1)
    {
        led1=0;
        for(i=1000;i>0;i--)  //双循环获得更长的延长时间
            for(j=100;j>0;j--);
        led1=1;
        for(i=1000;i>0;i--)
            for(j=100;j>0;j--);
    }
}

img

加入延时函数,由于仿真时,

1秒(s)=1000毫秒(ms)1秒(s)=1000000 微秒(μs)1(微秒)us==1/1000000=0.000001s(秒)

#include<reg52.h>
typedef unsigned int u16;
sbit LED1=P2^0;
void delay_10us(u16 ten_us)//当传入Ten_us=1时,仿真时间大约延时10us
{
		while(ten_us--);
}
void main()
{
		while(1)
		{
			LED1=0;//µãÁÁ
			delay_10us(50000);
			LED1=1;//ϨÃð
			delay_10us(50000);
		}
}
方法二
#define unit unsigned int  //宏定义
sbit led1= P2^3;
unit i,j;
void delayms(xms)  //延时函数,双循环延时法
{
    unit i,j;
    for(i=xms;i>0;i--)
        for(j=110;j>0;j--);
}
void main()
{
    P2=0x00;   //让所有灯熄灭
    while(1)
    {
        led1=0;
        delayms(500); //熄灭和点亮时间不同,可以控制延时间隔
        led1=1;
        delayms(5000);
    }
}

在这里插入图片描述

流水灯(跑马灯)

移位运算符

方法一
#include"reg52.h"
typedef unsigned int u16;
#define LED_PORT	P2

void delay_10us(u16 ten_us)
{
	while(ten_us--);
}
void main()
{
	u16 i=0;
while(1)
{
	for(i=0;i<8;i++)
	{
		LED_PORT=~(0x01<<i);//i=0,D1亮;i=1,D2亮
		delay_10us(50000);
	}
}
}

在这里插入图片描述

熄灭的灯逐渐左移

//方法二
#include<reg52.h>
#include<intrins.h>   //包含_crol_函数的头文件
#define uchar unsigned char
#define uint unsigned int
uchar A;

void delayms(uint xms);
void main()
{
    aa=0x01;  //0000 0001 只有一个灯熄灭
    // aa=0xfe;  亮着的等左移
    while(1)
    {
        P2=A;
        delayms(500);    //延时
        A=_crol_(A,1);   //将aa左移,熄灭的灯逐渐向左
        // aa=_crol_(A,-1)  右移一个单位
    }
}
void delayms(uint xms)   //延时函数
{
    uint i,j;
    for(i=xms;i>0;i--)
        for(j=110;j>0;j--);
}

img

img

库函数移位

#include"reg52.h"
#include"intrins.h"
typedef unsigned int u16;
#define LED_PORT	P2//使用宏定义将P2端口定义

void delay_10us(u16 ten_us)
{
	while(ten_us--);
}
void main()
{
	u16 i=0;
	LED_PORT=~0x01;
while(1)
{
	for(i=0;i<7;i++)
	{
			LED_PORT=_crol_(LED_PORT,1);//左移
		delay_10us(50000);
	}
		for(i=0;i<7;i++)
	{
			LED_PORT=_cror_(LED_PORT,1);//右移
		delay_10us(50000);
	}
}
}

在这里插入图片描述

引用补充

单片机—LED灯基础知识
1.有两种编程方法:
(1)并行操作:P1=0X##
-在LED灯编程中,数字1代表灯关,0代表灯亮,P1代表所有LED灯。
-可以通过2进制数转16进制数来控制灯的开关,前面一般都加上0x,例如:有8个LED灯,都为关闭状态时,可写为2进制数1111 1111,将其转换为16进制数为FF,可写为P1=0XFF

#include <reg52.h>
void main()
{   
    P1=0xF0; #代表前4个灯亮
}

(2)位操作:sbit LED1=P1^0
#其中0的意思是LED灯的第一个灯,以此类推1代表第二个灯。
现在我们让第一个和第二个灯亮

#include <reg52.h>    #reg52代表单片机类型型号
 LED1=P1^0;            #定义变量
 LED2=P1^1;
void main()
{   LED1=0;
    LED2=0;
  }                    #0代表让灯亮

2.LED灯闪亮(亮一下然后延迟)

#include <reg52.h>
unsigned int i;
while(1) #死循环,一直循环
{ P1=0;
 i=65535;
 while(i--); #延迟
 P1=0XFF;
 i=65535;
 while(i--);
 }

延迟函数

#include <reg52.h>
void delay(unsigned int z) #延迟函数
{   unsigned  int x,y;
   for(x=z;x>0;x--)
    for(y=114;y>0;y--);
	}
void main()
{   
     
	 while(1)
	 { P1=0;
	   delay(200);
	   P1=0XFF;
	   delay(200); #8个灯闪亮
	}
      
}

3.流水灯模式
左移右移函数(挨个亮)
左移:”<<”每执行一次左移,最低位补0,其它位向左移移位。
右移:”>>”每执行一次右移,最高位补0,其它位向右移一位。
循环移位函数:(1)标准库函数:intrins.h
(2)字符型循环左移:crol
(3)字符型循环右移:cror

注意:使用库函数的时候,for循环只执行7次,因为库函数不会移动过程中,高位会自动补到低位,而不是补0

流水灯代码实现:

#include <intrins.h>
#include <reg52.h>
void delay(unsigned int z)
{  int x,y;
   for(x=z;x>0;x--)
   for(y=144;y>0;y--);
   }
   void main()
   {   P1=0XFE;
     delay(200);
     while(1)
     { P1=crol(P1,1) #1代表移动了1delay(200);
     }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

单片机学习 1-LED灯的点亮(全操作) 的相关文章

随机推荐

  • C/C++语言图形化窗口创建,与设置。

    1 首先我们要引入头文件 include
  • log4j2远程代码执行漏洞原理与漏洞复现(基于vulhub,保姆级的详细教程)

    漏洞原理 啥是log4j2 log4j2是apache下的java应用常见的开源日志库 是一个就Java的日志记录工具 在log4j框架的基础上进行了改进 并引入了丰富的特性 可以控制日志信息输送的目的地为控制台 文件 GUI组建等 被应用
  • pybind11的安装以及库的使用(ubuntu20.14)

    目录 1 安装第三方库 2 安装pybind11 1 源码下载 2 编译安装 1 安装第三方库 sudo apt get install cmake 3 18 2 已经安装cmake 升级一下 sudo pip install upgrad
  • Matlab数据统计与分析(一)

    本文主要讲述matlab在统计分析中的一些简单应用 后续还将推出多项式计算 数据插值及其应用 曲线拟合及其应用 敬请期待 一 求最大元素与最小元素 max 求向量或矩阵的最大元素 min 求向量或矩阵的最小元素 调用格式如下 1 y max
  • 单细胞专题

    单细胞测序的概念 上节我们讲到转录组测序相关内容 这期将继续学习单细胞转录组测序 单细胞测序技术 single cell sequencing 简单来说 就是在单个细胞水平上 对基因组 转录组及表观基因组进行测序分析的技术 图1 图1 单细
  • 借助云开发搭建专属技术博客微信小程序(附源码)

    导语 一直对小程序开发很感兴趣 之前就准备做一款属于自己的小程序 无奈还需要购买云服务器和部署后台 有点麻烦 自从知道有了云开发这个免去服务器搭建和运维的一站式后端云服务 神器 就一鼓作气花了几个周末的时间做了一款自己的博客小程序 如果你也
  • ES写入性能的提升方案

    从社区上看到一个问题 回答了一下 总结了下提高写入性能的方案 服务端 1 refresh refresh interval 1s indices memory index buffer size 10 2 translog Index tr
  • vSphere使用技巧:自定义管理规范使用

    本文转载至 http blog chinaunix net uid 21089721 id 1565198 html 一 前言 我们在使用vCenter Client的时候 常常会使用模板来安装服务器 但是这样就会带来一些问题 例如WIND
  • Windows通过某端口号找对应的进程窗口句柄

    以下为 Qt通过netstat exe程序获取相关信息 通过端口号获取进程ID 的姊妹篇 通过端口号找对应的窗口句柄 以上所提及的API 均为Win32的系统API 不涉及Qt的相关方法
  • Shell Sort 希尔排序

    希尔排序 Shell Sort 又叫做缩小增量排序 diminishing increment sort 是一种很优秀的排序法 算法本身不难理解 也很容易实现 而且它的速度很快 插入排序 Insertion Sort 的一个重要的特点是 如
  • Oracle中没有 if exists(...)

    对于Oracle中没有 if exists 的语法 目前有许多种解决方法 这里先分析常用的三种 推荐使用最后一种 第一种是最常用的 判断count 的值是否为零 如下 declare v cnt number begin select co
  • 如何搭建自己的服务器机房

    1 地下室这种环境 铲成毛坯先做一遍防水防潮抗震套餐 这个便宜 相对 2 找国家电网拉两个不一样变电站的电线杆子来做380V 之前做过一个机房的这种需求 也就二百来万吧 3 每个运营商 不同机房 做两个方向两个井 两条8 16芯缆 运营商大
  • HTML5 详细介绍 及应用实例

    HTML5 概况 什么是 HTML5 HTML 5有两大特点 首先 强化了 Web 网页的表现性能 其次 追加了本地数据库等 Web 应用的功能 HTML 5是近十年来Web开发标准最巨大的飞跃 和以前的版本不同 HTML 5并非仅仅用来表
  • [MySQL]事务ACID详解

    专栏简介 MySql数据库从入门到进阶 题目来源 leetcode 牛客 剑指offer 创作目标 记录学习MySql学习历程 希望在提升自己的同时 帮助他人 与大家一起共同进步 互相成长 学历代表过去 能力代表现在 学习能力代表未来 目录
  • 版本管理工具——SVN

    SVN的下载和安装 1 1SVN服务器端的安装和配置 1 2SVN客户端的安装和配置 SVN的基本操作 SVN的常见问题 3 1解决文件提交冲突 一 SVN服务器端的安装和配置 1 VisualSVN下载 http www visualsv
  • 国内及Github优秀开发人员列表

    自从入了Android软件开发的行道 解决问题和学习过程中免不了会参考别人的思路 浏览博文和门户网站成了最大的入口 下面这些列表取名为 国内及Github优秀开发人员列表 就是浏览后的成果 虽然下述列表出自Android软件开发 文章定为不
  • python科研项目_通过科研人员论文项目等数据,训练识别导师/学生的分类器

    student and teacher classifier 通过科研人员论文项目等数据 训练识别导师 学生的分类器 代码包括特征选择基础 网格搜索确定特征选择方法参数 不平衡数据的处理 oversampling和undersampling
  • -day18面向对象进阶

    day18 面向对象进阶 课程目标 掌握面向对象进阶相关知识点 能更加自如的使用面向对象来进行编程 今日概要 成员 变量 实例变量 类变量 方法 绑定方法 类方法 静态方法 属性 成员修饰符 公有 私有 对象嵌套 特殊成员 对比 问题 洗衣
  • mysql group by 中文_MySQL GROUP BY 语句

    MySQL GROUP BY 语句 GROUP BY 语句根据一个或多个列对结果集进行分组 在分组的列上我们可以使用 COUNT SUM AVG 等函数 GROUP BY 语法 SELECT column name function col
  • 单片机学习 1-LED灯的点亮(全操作)

    LED灯 P0 P1 P2 P3结构图 除了P0端口需要自己外接上拉电阻 否则只能输入输出低电平 其它自带上拉电阻 因此都可以实现高低电平的输入输出 LED灯介绍 LED灯本质是发光二极管 单片机输入电流控制在3mA 20mA之间 可串联电