蓝桥杯单片机(一) 点亮LED灯

本文介绍了通过74HC138和74HC02芯片控制LED灯的方法,包括LED的工作原理、芯片功能及应用实例。适用于初学者了解单片机控制LED的基本技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


前言

   蓝桥杯单片机介绍:
1.参赛资格:具有正式学籍的在校全日制本科及高职高专学生
2.竞赛用时:预赛时长:5小时   决赛时长:5小时
3.试题形式:竞赛试题由客观题和基于统一硬件平台的程序设计与调试试题两部分组成。
4.硬件平台:国信长天单片机竞赛实训平台(单片机型号为IAP15F2K61S2)


提示:以下是本篇文章正文内容,下面案例可供参考

一、LED原理

       LED(Light Emitting Diode),发光二极管,是一种能够将电能转化为可见光的固态的半导体器件,它可以直接把电转化为光。LED的心脏是一个半导体的晶片,晶片的一端附在一个支架上,一端是负极,另一端连接电源的正极,使整个晶片被环氧树脂封装起来。
       半导体晶片由两部分组成,一部分是P型半导体,在它里面空穴占主导地位,另一端是N型半导体,在这边主要是电子。但这两种半导体连接起来的时候,它们之间就形成一个P-N结。当电流通过导线作用于这个晶片的时候,电子就会被推向P区,在P区里电子跟空穴复合,然后就会以光子的形式发出能量,这就是LED灯发光的原理。而光的波长也就是光的颜色,是由形成P-N结的材料决定的。

二、点亮LED灯

1.LED模块

在这里插入图片描述
   二极管特性可知,当Q1=0时,L1亮。以此来控制LED灯亮灭。

2.74HC138芯片及74HC02芯片

       74HC138是一款高速CMOS器件,74HC138引脚兼容低功耗肖特基TTL(LSTTL)系列。74HC138译码器可接受3位二进制加权地址输入(A0, A1和A2),并当使能时,提供8个互斥的低有效输出(Y0至Y7)。
      74HC138特有3个使能输入端:两个低有效(E1和E2)和一个高有效(E3)。除非E1和E2置低且E3置高,否则74HC138将保持所有输出为高。
在这里插入图片描述
74HC138芯片   真值表如下图所示:
在这里插入图片描述
74HC02芯片   功能表如下图所示:
在这里插入图片描述

3.整体思路

       通过74HC138芯片及74HC02芯片输入高低电平,来控制Y4C为1或0。当Y4C为1时,方可通过P0端口来控制LED灯的亮灭。当Y4C为0时,无法控制LED灯的亮灭。如:令P27为1、P26为0、P25为0,则输出Y4为0,再通过74HC02芯片,将Y4为0输入,则Y4C输出为1。再通过P0为0xfe即Q8~Q1,为1111 1110,控制L1亮。也可令P0为0x00即Q8~Q1,为0000 0000,控制L1~L8同时亮。

三、代码实现

代码如下(示例):

#include <STC15F2K60S2.h>	//定义头文件

#define uchar unsigned char
#define uint unsigned int

#define Y4 P2=(P2&0x1f)|0x80;	//Y4C为1

void main()
{
	while(1)
	{
		Y4;P0=0x00;	//全部LED灯一直亮
	}
}

总结

       本人通过参加了第11届蓝桥杯单片机的比赛,学会了很多知识,在此分享一下。本教程仅适合初学者学习之用,诸位大佬,不喜勿喷。此教程仅讲解单个模块的使用,不予讲解多个模块的实现,毕竟本人精力有限。还请见谅!!!

未经本人许可,不得转载!!!

### 蓝桥杯单片机按键控制LED位移 在蓝桥杯竞赛中,使用单片机实现按键控制LED的位移是个常见的题目。该功能可以通过编程使能按键输入改变LED的状态并移动其位置。 #### 原理说明 当按下不同的按键时,程序会检测到相应的中断信号或状态变化,并据此调整存储于寄存器中的LED模式变量。随后,在主循环或其他处理函数内更新实际连接至LED端口的数据输出值,从而达到视觉上的光位移效果[^1]。 对于具体的硬件电路而言,般采用矩阵键盘配合行列扫描法读取按压情况;而LED则可能被串联成流水线形式以便逐个点亮或熄灭。为了简化逻辑判断过程,还可以引入标志位来记录当前活动的LED编号以及方向参数用于指示向左还是向右切换下个目标元件。 #### 示例代码 下面给出段C语言编写的简易示例代码片段: ```c #include <reg52.h> sbit KEY_UP = P3^0; // 定义上键对应的I/O引脚 sbit KEY_DOWN = P3^1; // 定义下键对应的I/O引脚 sfr LED_PORT = 0x90; // 设定P1作为LED驱动接口地址 unsigned char led_pos = 0; void main(void){ while(1){ if(KEY_UP == 0){ // 如果检测到上升沿触发事件,则执行相应操作 delay(); // 防抖动延时子程序调用 move_left(); } if(KEY_DOWN == 0){ // 同样地处理下降沿的情况 delay(); move_right(); } update_led_display(); // 刷新显示 } } // 左移位 void move_left(){ if (led_pos != 0) --led_pos; } // 右移位 void move_right(){ if (led_pos != 7) ++led_pos; } // 更新LED显示 void update_led_display(){ unsigned char i, data=0xFF; for(i=0;i<8;++i){ if(i==led_pos) data &= ~(1<<i); // 设置对应位低电平表示亮起 } LED_PORT = data; } ``` 这段代码展示了如何利用两个外部按钮分别控制串共阳极八段LED显示器内的光标左右游走。每当有新的指令到来时,`move_*()` 函数负责修改全局变量 `led_pos` 的数值范围限定在 `[0..7]`之间,之后再经由 `update_led_display()` 方法同步映射到物理层面上的变化上去。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小白正在努力

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

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

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

打赏作者

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

抵扣说明:

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

余额充值