【蓝桥杯单片机入门记录】LED灯(附多个例程)

目录

一、LED灯概述

1.1 LED发光原理

1.2电路原理图

1.3电路实物图

1.4 开发板LED灯原理图

1.4.1共阳极LED灯操控原理(本开发板)

(非实际原理图,便于理解版本)由图可以看出,每个LED灯的左边(即正极)通过限流电阻连接到电源的正极,如果想点亮一个灯(以L1为例),则需要P00输出一个低电平;熄灭L1,则需要P00输出一个高电平1.4.2共阴极LED灯操控原理

二、单片机的I/O口

(1) I/O输出/输出(Input/Output)的简称主要用于工业现场需要用到数字量输入/输出的场合

(2)并行I/O接口是实际应用中使用最多、最普遍的接口类型,开关量的输入/输出都是通过并行I/O接口实现的。

(3)单片机I/O口的使用

(4)STC15系列单片机强大的I/O口功能

三、LED例程

(1)点亮其中某个LED灯:以L1灯为例,其他LED保持熄灭

(2)点亮其中某个LED灯:以L6灯为例,其他LED保持熄灭

(3)一个LED闪烁:以L6闪烁为例,其他LED保持熄灭

(4)多个LED交替闪烁:以L1灯和L2灯交替闪烁为例,其他LED保持熄灭

(5)多个LED交替闪烁:以L1灯和L2灯交替闪烁为例,其他LED保持熄灭(采用sbit关键字)

(6)流水灯(也称跑马灯),若干个LED依次点亮:以开发板上的8个LED诸葛点亮,循环不止。

(7)点亮一个LED灯(并口控制方式):以点亮L1灯为例

(8)点亮一个LED(并口控制方式):以点亮L1、L8为例(涉及sfr关键字)

sfr关键字

(9)流水灯(库函数实现)


一、LED灯概述

1.1 LED发光原理

从物理学角度来理解:当电流通过晶片时,N型半导体内的电子与P型半导体内的空穴在发光层剧烈地碰撞复合产生光子,以光子的形式发出能量(即大家看见的光)

1.2电路原理图

1.3电路实物图

1.4 开发板LED灯原理图

1.4.1共阳极LED灯操控原理(本开发板)

(非实际原理图,便于理解版本)由图可以看出,每个LED灯的左边(即正极)通过限流电阻连接到电源的正极,如果想点亮一个灯(以L1为例),则需要P00输出一个低电平;熄灭L1,则需要P00输出一个高电平

1.4.2共阴极LED灯操控原理

通常情况下,LED的负极接地,正极接芯片的IO口

二、单片机的I/O口

(1) I/O输出/输出(Input/Output)的简称主要用于工业现场需要用到数字量输入/输出的场合

输出功能:继电器、LED、蜂鸣器等的控制

输入功能:传感器状态、高低电平等信息的读取

复用功能:片内外设的对外接口

时序模拟:模拟SPI、I2C、和UART灯常用接口的时序

(2)并行I/O接口是实际应用中使用最多、最普遍的接口类型,开关量的输入/输出都是通过并行I/O接口实现的。

(3)单片机I/O口的使用

  • 对单片机的控制,主要就是对I/O口的控制,无论单片机对外接进行何种控制,或接受外部的何种控制,都是通过I/O进行的
  • STC15/STC8/STC32G系列单片机最多有P0、P1、P2、P3、P4、P5,P6,P7四个8位双向输、 入输出端口(除P5)
  • 本开发板所用到的单片机型号IAP15F2K61S2仅用到P0-P4五组I/O口

(4)STC15系列单片机强大的I/O口功能

  • 四种工作模式:准双向口上拉(标准8051输出模式),推挽输出上拉,高阻输入,开漏输出;
  • 其他功能复用模式:串行通信、A/D转换、PWM输出、外部中断、SPI通信等等
  • STC15F系列、STC15W系列、STC8H、STC32G系列引脚功能略有区别;
  • 等等;

三、LED例程

(1)点亮其中某个LED灯:以L1灯为例,其他LED保持熄灭

//头文件声明区域
#include <STC15F2K60S2.H>
//变量声明区域//函数定义区域
//关闭蜂鸣器
void cls_buzz(void)
{P2 = (P2 & 0x1F | 0xA0);P0 = 0x00;P2 &= 0x1F;
}//程序主体
void main()
{cls_buzz();//初始化部分P2 = 0xA0;P0 = 0x00;P2 = 0X80;P0 = 0xFF;while(1){P00 = 0;//点亮L1(单个赋值)}}

(2)点亮其中某个LED灯:以L6灯为例,其他LED保持熄灭

//头文件声明区域
#include <STC15F2K60S2.H>
//变量声明区域//函数定义区域
//关闭蜂鸣器
void cls_buzz(void)
{P2 = (P2 & 0x1F | 0xA0);P0 = 0x00;P2 &= 0x1F;
}//程序主体
void main()
{cls_buzz();//初始化部分P2 = 0xA0;P0 = 0x00;P2 = 0X80;P0 = 0xFF;while(1){P05 = 0;//点亮L6(单个赋值)}}
  • 补充:STC15W/STC8H/STC32G系列单片机增加初始化程序
  • STC15W系列单片机的部分I/0口;
  • STC8A系列单片机、STC8H系列单片机、STC32G系列单片机的全部I/0口上电之后,都默认不是准双向口(弱上拉)模式,所以需要加载1/0端口初始化程序,将所有1/0口初始化为准双向口(弱上拉)模式即可。

(3)一个LED闪烁:以L6闪烁为例,其他LED保持熄灭

//头文件声明区域
#include <STC15F2K60S2.H>
#include<intrins.h>
//变量声明区域//函数定义区域
//关闭蜂鸣器
void cls_buzz(void)
{P2 = (P2 & 0x1F | 0xA0);P0 = 0x00;P2 &= 0x1F;
}
void Delay500ms()		//@11.0592MHz
{unsigned char i, j, k;_nop_();_nop_();i = 22;j = 3;k = 227;do{do{while (--k);} while (--j);} while (--i);
}//程序主体
void main()
{cls_buzz();//初始化部分P2 = 0xA0;P0 = 0x00;P2 = 0X80;P0 = 0xFF;while(1){P05 = 0;Delay500ms();P05 = 1;Delay500ms();}}

(4)多个LED交替闪烁:以L1灯和L2灯交替闪烁为例,其他LED保持熄灭

//头文件声明区域
#include <STC15F2K60S2.H>
#include<intrins.h>
//变量声明区域//函数定义区域
//关闭蜂鸣器
void cls_buzz(void)
{P2 = (P2 & 0x1F | 0xA0);P0 = 0x00;P2 &= 0x1F;
}
void Delay500ms()		//@11.0592MHz
{unsigned char i, j, k;_nop_();_nop_();i = 22;j = 3;k = 227;do{do{while (--k);} while (--j);} while (--i);
}//程序主体
void main()
{cls_buzz();//初始化部分P2 = 0xA0;P0 = 0x00;P2 = 0X80;P0 = 0xFF;while(1){P00 = 0;P01 = 1;Delay500ms();P00 = 1;P01 = 0;Delay500ms();}}

(5)多个LED交替闪烁:以L1灯和L2灯交替闪烁为例,其他LED保持熄灭(采用sbit关键字)

//头文件声明区域
#include <STC15F2K60S2.H>
#include<intrins.h>
//变量声明区域
sbit LED2 = P0^1;
//函数定义区域
//关闭蜂鸣器
void cls_buzz(void)
{P2 = (P2 & 0x1F | 0xA0);P0 = 0x00;P2 &= 0x1F;
}
void Delay500ms()		//@11.0592MHz
{unsigned char i, j, k;_nop_();_nop_();i = 22;j = 3;k = 227;do{do{while (--k);} while (--j);} while (--i);
}//程序主体
void main()
{cls_buzz();//初始化部分P2 = 0xA0;P0 = 0x00;P2 = 0X80;P0 = 0xFF;while(1){P00 = 0;LED2 = 1;Delay500ms();P00 = 1;LED2 = 0;Delay500ms();}}

(6)流水灯(也称跑马灯),若干个LED依次点亮:以开发板上的8个LED诸葛点亮,循环不止。

//头文件声明区域
#include <STC15F2K60S2.H>
#include<intrins.h>
//变量声明区域
unsigned char LED = 0xfe; //LED数据变量
//函数定义区域
//关闭蜂鸣器
void cls_buzz(void)
{P2 = (P2 & 0x1F | 0xA0);P0 = 0x00;P2 &= 0x1F;
}
void Delay500ms()		//@11.0592MHz
{unsigned char i, j, k;_nop_();_nop_();i = 22;j = 3;k = 227;do{do{while (--k);} while (--j);} while (--i);
}//程序主体
void main()
{cls_buzz();//初始化部分P2 = 0xA0;P0 = 0x00;P2 = 0X80;P0 = 0xFF;while(1){P00 = 0;P01 = 1;P02 = 1; P03 = 1; P04 = 1;P05 = 1;P06 = 1;P07 =1;Delay500ms();P00 = 1;P01 = 0;P02 = 1; P03 = 1; P04 = 1;P05 = 1;P06 = 1;P07 =1;Delay500ms();P00 = 1;P01 = 1;P02 = 0; P03 = 1; P04 = 1;P05 = 1;P06 = 1;P07 =1;Delay500ms();P00 = 1;P01 = 1;P02 = 1; P03 = 0; P04 = 1;P05 = 1;P06 = 1;P07 =1;Delay500ms();P00 = 1;P01 = 1;P02 = 1; P03 = 1; P04 = 0;P05 = 1;P06 = 1;P07 =1;Delay500ms();P00 = 1;P01 = 1;P02 = 1; P03 = 1; P04 = 1;P05 = 0;P06 = 1;P07 =1;Delay500ms();P00 = 1;P01 = 1;P02 = 1; P03 = 1; P04 = 1;P05 = 1;P06 = 0;P07 =1;Delay500ms();P00 = 1;P01 = 1;P02 = 1; P03 = 1; P04 = 1;P05 = 1;P06 = 1;P07 =0;Delay500ms();}}

(7)点亮一个LED灯(并口控制方式):以点亮L1灯为例

/头文件声明区域
#include <STC15F2K60S2.H>
#include<intrins.h>
//变量声明区域
//函数定义区域
//关闭蜂鸣器
void cls_buzz(void)
{P2 = (P2 & 0x1F | 0xA0);P0 = 0x00;P2 &= 0x1F;
}
//程序主体
void main()
{cls_buzz();//初始化部分P2 = 0xA0;P0 = 0x00;P2 = 0X80;P0 = 0xFF;while(1){P0 = OXFE;// 1111 1110}}

(8)点亮一个LED(并口控制方式):以点亮L1、L8为例(涉及sfr关键字)

//头文件声明区域
#include <STC15F2K60S2.H>
#include<intrins.h>
//变量声明区域
sfr LED = 0x80;
//函数定义区域
//关闭蜂鸣器
void cls_buzz(void)
{P2 = (P2 & 0x1F | 0xA0);P0 = 0x00;P2 &= 0x1F;
}//程序主体
void main()
{cls_buzz();//初始化部分P2 = 0xA0;P0 = 0x00;P2 = 0X80;P0 = 0xFF;while(1){LED = 0x7e;//0111 1110}}
sfr关键字
  • 用于声明特殊功能寄存器的变量。
  • sfr关键字的语法格式如下:
sfr <register> = <address>;//<register> 是你定义的变量名称,用于访问特殊功能寄存器;
//<address> 是特殊功能寄存器的物理地址。

(9)流水灯(库函数实现)

//头文件声明区域
#include <STC15F2K60S2.H>
#include<intrins.h>
//变量声明区域
unsigned char LED = 0xfe; //LED数据变量
//函数定义区域
//关闭蜂鸣器
void cls_buzz(void)
{P2 = (P2 & 0x1F | 0xA0);P0 = 0x00;P2 &= 0x1F;
}
void Delay500ms()		//@11.0592MHz
{unsigned char i, j, k;_nop_();_nop_();i = 22;j = 3;k = 227;do{do{while (--k);} while (--j);} while (--i);
}//程序主体
void main()
{cls_buzz();//初始化部分P2 = 0xA0;P0 = 0x00;P2 = 0X80;P0 = 0xFF;while(1){P0 = LED;Delay500ms();LED = _crol_(LED,1);Delay500ms();}}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WebGPT与WebGLM

WebGPT paper: WebGPT&#xff1a;Browser-assisted question-answering with human feedbackDemo: https://openaipublic.blob.core.windows.net/webgpt-answer-viewer/index.html webgpt的论文发表最早&#xff0c;但论文本身写的比较"高山仰止"&#xff0c;可能先…

[职场] 会计学专业学什么 #其他#知识分享#职场发展

会计学专业学什么 会计学专业属于工商管理学科下的一个二级学科&#xff0c;本专业培养具备财务、管理、经济、法律等方面的知识和能力&#xff0c;具有分析和解决财务、金融问题的基本能力&#xff0c;能在企、事业单位及政府部门从事会计实务以及教学、科研方面工作的工商管…

数据检索:倒排索引加速、top-k和k最邻近

之前在https://www.yuque.com/treblez/qksu6c/wbaggl2t24wxwqb8?singleDoc# 《Elasticsearch: 非结构化的数据搜索》我们看了ES的设计&#xff0c;主要侧重于它分布式的设计以及LSM-Tree&#xff0c;今天我们来关注算法部分&#xff1a;如何进行检索算法的设计以及如何加速倒排…

第5讲前端静态登录页面实现

前端静态登录页面实现 引入全局样式&#xff1a; main.js导入样式文件&#xff1a; import /assets/styles/border.css import /assets/styles/reset.css加路由&#xff1a; const routes [{path: /login,name: login,component: () > import(../views/Login.vue)} ]App…

122.乐理基础-五线谱-音程、度数、根音、冠音

内容参考于&#xff1a;三分钟音乐社 上一个内容&#xff1a;五线谱的临时变音记号规则 上一个内容里练习的答案&#xff1a; 1-121看完就可以认识乐谱、熟悉乐谱了&#xff0c;从现在开始与识谱无关&#xff0c;与创作有关 参考图&#xff1a;音程与和弦只是为了撬开去往和…

java.lang.NoClassDefFoundError: org/springframework/core/GenericTypeResolver

前言 小编我将用CSDN记录软件开发求学之路上亲身所得与所学的心得与知识&#xff0c;有兴趣的小伙伴可以关注一下&#xff01; 也许一个人独行&#xff0c;可以走的很快&#xff0c;但是一群人结伴而行&#xff0c;才能走的更远&#xff01;让我们在成长的道路上互相学习&…

解线性方程组(一)——克拉默法则求解(C++)

克拉默法则 解线性方程组最基础的方法就是使用克拉默法则&#xff0c;需要注意的是&#xff0c;该方程组必须是线性方程组。 假设有方程组如下&#xff1a; { a 11 x 1 a 12 x 2 ⋯ a 1 n x n b 1 a 21 x 1 a 22 x 2 ⋯ a 2 n x n b 2 ⋯ ⋯ ⋯ a n 1 x 1 a n 2 x 2…

14. 推荐系统之矩阵分解

本文为 「茶桁的 AI 秘籍 - BI 篇 第 14 篇」 文章目录 矩阵分解 ALS常用推荐算法什么是矩阵分解矩阵分解的目标函数 Hi&#xff0c;你好。我是茶桁。 新年过后&#xff0c;咱们要开始学一些新内容了。从今天开始&#xff0c;要给大家去讲解的是关于推荐系统的内容。推荐系统的…

设计链表(不难,代码稍微多一点)

设计链表 在链表类中实现这些功能&#xff1a; get(index)&#xff1a;获取链表中第 index 个节点的值。如果索引无效&#xff0c;则返回-1。addAtHead(val)&#xff1a;在链表的第一个元素之前添加一个值为 val 的节点。插入后&#xff0c;新节点将成为链表的第一个节点。ad…

【数据结构】并查集

并查集是简单的数据结构&#xff0c;学会并查集&#xff0c;为图打好基础。 并查集的概念 是树状的数据结构&#xff0c;用于处理相交集合的合并与查询 通常用森林表示&#xff0c;一片森林表示一个集合 并查集一般需要完成 查找元素属于哪个集合查看两个元素是否属于同一个集…

C++二叉树进阶——二叉搜索树

二叉搜索树 1. 二叉树的概念2. 二叉树的实现2.1创建节点类2.2 查找Find2.3 插入Insert2.4 删除Erase2.5 中序遍历2.6 构造/析构 3. 递归实现3.1 查找FindR3.2 插入InsertR3.3 删除EraseR 4.整体代码 1. 二叉树的概念 二叉搜索树又称二叉排序树&#xff0c;它或者是一棵空树&am…

springboot743二手交易平台

springboot743二手交易平台 获取源码——》公主号&#xff1a;计算机专业毕设大全