当前位置:   article > 正文

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

蓝桥杯单片机点亮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保持熄灭

  1. //头文件声明区域
  2. #include <STC15F2K60S2.H>
  3. //变量声明区域
  4. //函数定义区域
  5. //关闭蜂鸣器
  6. void cls_buzz(void)
  7. {
  8. P2 = (P2 & 0x1F | 0xA0);
  9. P0 = 0x00;
  10. P2 &= 0x1F;
  11. }
  12. //程序主体
  13. void main()
  14. {
  15. cls_buzz();
  16. //初始化部分
  17. P2 = 0xA0;
  18. P0 = 0x00;
  19. P2 = 0X80;
  20. P0 = 0xFF;
  21. while(1)
  22. {
  23. P00 = 0;//点亮L1(单个赋值)
  24. }
  25. }

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

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

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

  1. //头文件声明区域
  2. #include <STC15F2K60S2.H>
  3. #include<intrins.h>
  4. //变量声明区域
  5. //函数定义区域
  6. //关闭蜂鸣器
  7. void cls_buzz(void)
  8. {
  9. P2 = (P2 & 0x1F | 0xA0);
  10. P0 = 0x00;
  11. P2 &= 0x1F;
  12. }
  13. void Delay500ms() //@11.0592MHz
  14. {
  15. unsigned char i, j, k;
  16. _nop_();
  17. _nop_();
  18. i = 22;
  19. j = 3;
  20. k = 227;
  21. do
  22. {
  23. do
  24. {
  25. while (--k);
  26. } while (--j);
  27. } while (--i);
  28. }
  29. //程序主体
  30. void main()
  31. {
  32. cls_buzz();
  33. //初始化部分
  34. P2 = 0xA0;
  35. P0 = 0x00;
  36. P2 = 0X80;
  37. P0 = 0xFF;
  38. while(1)
  39. {
  40. P05 = 0;
  41. Delay500ms();
  42. P05 = 1;
  43. Delay500ms();
  44. }
  45. }

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

  1. //头文件声明区域
  2. #include <STC15F2K60S2.H>
  3. #include<intrins.h>
  4. //变量声明区域
  5. //函数定义区域
  6. //关闭蜂鸣器
  7. void cls_buzz(void)
  8. {
  9. P2 = (P2 & 0x1F | 0xA0);
  10. P0 = 0x00;
  11. P2 &= 0x1F;
  12. }
  13. void Delay500ms() //@11.0592MHz
  14. {
  15. unsigned char i, j, k;
  16. _nop_();
  17. _nop_();
  18. i = 22;
  19. j = 3;
  20. k = 227;
  21. do
  22. {
  23. do
  24. {
  25. while (--k);
  26. } while (--j);
  27. } while (--i);
  28. }
  29. //程序主体
  30. void main()
  31. {
  32. cls_buzz();
  33. //初始化部分
  34. P2 = 0xA0;
  35. P0 = 0x00;
  36. P2 = 0X80;
  37. P0 = 0xFF;
  38. while(1)
  39. {
  40. P00 = 0;
  41. P01 = 1;
  42. Delay500ms();
  43. P00 = 1;
  44. P01 = 0;
  45. Delay500ms();
  46. }
  47. }

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

  1. //头文件声明区域
  2. #include <STC15F2K60S2.H>
  3. #include<intrins.h>
  4. //变量声明区域
  5. sbit LED2 = P0^1;
  6. //函数定义区域
  7. //关闭蜂鸣器
  8. void cls_buzz(void)
  9. {
  10. P2 = (P2 & 0x1F | 0xA0);
  11. P0 = 0x00;
  12. P2 &= 0x1F;
  13. }
  14. void Delay500ms() //@11.0592MHz
  15. {
  16. unsigned char i, j, k;
  17. _nop_();
  18. _nop_();
  19. i = 22;
  20. j = 3;
  21. k = 227;
  22. do
  23. {
  24. do
  25. {
  26. while (--k);
  27. } while (--j);
  28. } while (--i);
  29. }
  30. //程序主体
  31. void main()
  32. {
  33. cls_buzz();
  34. //初始化部分
  35. P2 = 0xA0;
  36. P0 = 0x00;
  37. P2 = 0X80;
  38. P0 = 0xFF;
  39. while(1)
  40. {
  41. P00 = 0;
  42. LED2 = 1;
  43. Delay500ms();
  44. P00 = 1;
  45. LED2 = 0;
  46. Delay500ms();
  47. }
  48. }

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

  1. //头文件声明区域
  2. #include <STC15F2K60S2.H>
  3. #include<intrins.h>
  4. //变量声明区域
  5. unsigned char LED = 0xfe; //LED数据变量
  6. //函数定义区域
  7. //关闭蜂鸣器
  8. void cls_buzz(void)
  9. {
  10. P2 = (P2 & 0x1F | 0xA0);
  11. P0 = 0x00;
  12. P2 &= 0x1F;
  13. }
  14. void Delay500ms() //@11.0592MHz
  15. {
  16. unsigned char i, j, k;
  17. _nop_();
  18. _nop_();
  19. i = 22;
  20. j = 3;
  21. k = 227;
  22. do
  23. {
  24. do
  25. {
  26. while (--k);
  27. } while (--j);
  28. } while (--i);
  29. }
  30. //程序主体
  31. void main()
  32. {
  33. cls_buzz();
  34. //初始化部分
  35. P2 = 0xA0;
  36. P0 = 0x00;
  37. P2 = 0X80;
  38. P0 = 0xFF;
  39. while(1)
  40. {
  41. P00 = 0;P01 = 1;P02 = 1; P03 = 1; P04 = 1;P05 = 1;P06 = 1;P07 =1;
  42. Delay500ms();
  43. P00 = 1;P01 = 0;P02 = 1; P03 = 1; P04 = 1;P05 = 1;P06 = 1;P07 =1;
  44. Delay500ms();
  45. P00 = 1;P01 = 1;P02 = 0; P03 = 1; P04 = 1;P05 = 1;P06 = 1;P07 =1;
  46. Delay500ms();
  47. P00 = 1;P01 = 1;P02 = 1; P03 = 0; P04 = 1;P05 = 1;P06 = 1;P07 =1;
  48. Delay500ms();
  49. P00 = 1;P01 = 1;P02 = 1; P03 = 1; P04 = 0;P05 = 1;P06 = 1;P07 =1;
  50. Delay500ms();
  51. P00 = 1;P01 = 1;P02 = 1; P03 = 1; P04 = 1;P05 = 0;P06 = 1;P07 =1;
  52. Delay500ms();
  53. P00 = 1;P01 = 1;P02 = 1; P03 = 1; P04 = 1;P05 = 1;P06 = 0;P07 =1;
  54. Delay500ms();
  55. P00 = 1;P01 = 1;P02 = 1; P03 = 1; P04 = 1;P05 = 1;P06 = 1;P07 =0;
  56. Delay500ms();
  57. }
  58. }

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

  1. /头文件声明区域
  2. #include <STC15F2K60S2.H>
  3. #include<intrins.h>
  4. //变量声明区域
  5. //函数定义区域
  6. //关闭蜂鸣器
  7. void cls_buzz(void)
  8. {
  9. P2 = (P2 & 0x1F | 0xA0);
  10. P0 = 0x00;
  11. P2 &= 0x1F;
  12. }
  13. //程序主体
  14. void main()
  15. {
  16. cls_buzz();
  17. //初始化部分
  18. P2 = 0xA0;
  19. P0 = 0x00;
  20. P2 = 0X80;
  21. P0 = 0xFF;
  22. while(1)
  23. {
  24. P0 = OXFE;// 1111 1110
  25. }
  26. }

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

  1. //头文件声明区域
  2. #include <STC15F2K60S2.H>
  3. #include<intrins.h>
  4. //变量声明区域
  5. sfr LED = 0x80;
  6. //函数定义区域
  7. //关闭蜂鸣器
  8. void cls_buzz(void)
  9. {
  10. P2 = (P2 & 0x1F | 0xA0);
  11. P0 = 0x00;
  12. P2 &= 0x1F;
  13. }
  14. //程序主体
  15. void main()
  16. {
  17. cls_buzz();
  18. //初始化部分
  19. P2 = 0xA0;
  20. P0 = 0x00;
  21. P2 = 0X80;
  22. P0 = 0xFF;
  23. while(1)
  24. {
  25. LED = 0x7e;//0111 1110
  26. }
  27. }
sfr关键字
  • 用于声明特殊功能寄存器的变量。
  • sfr关键字的语法格式如下:
  1. sfr <register> = <address>;
  2. //<register> 是你定义的变量名称,用于访问特殊功能寄存器;
  3. //<address> 是特殊功能寄存器的物理地址。

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

  1. //头文件声明区域
  2. #include <STC15F2K60S2.H>
  3. #include<intrins.h>
  4. //变量声明区域
  5. unsigned char LED = 0xfe; //LED数据变量
  6. //函数定义区域
  7. //关闭蜂鸣器
  8. void cls_buzz(void)
  9. {
  10. P2 = (P2 & 0x1F | 0xA0);
  11. P0 = 0x00;
  12. P2 &= 0x1F;
  13. }
  14. void Delay500ms() //@11.0592MHz
  15. {
  16. unsigned char i, j, k;
  17. _nop_();
  18. _nop_();
  19. i = 22;
  20. j = 3;
  21. k = 227;
  22. do
  23. {
  24. do
  25. {
  26. while (--k);
  27. } while (--j);
  28. } while (--i);
  29. }
  30. //程序主体
  31. void main()
  32. {
  33. cls_buzz();
  34. //初始化部分
  35. P2 = 0xA0;
  36. P0 = 0x00;
  37. P2 = 0X80;
  38. P0 = 0xFF;
  39. while(1)
  40. {
  41. P0 = LED;
  42. Delay500ms();
  43. LED = _crol_(LED,1);
  44. Delay500ms();
  45. }
  46. }
本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号