在开始之前,我们首先需要对两个芯片——74HC138和74HC573进行学习。我们都知道单片机可用的IO口是有限的,但是需要控制多个器件,如LED、数码管、独立按键、矩阵键盘以及蜂鸣器继电器等,要想实现对这多个模块的控制,就需要对IO口进行扩展。单片机蓝桥杯的板就是通过74HC138和74HC573两个芯片实现的。
刚开始学习时,可以观看小蜜蜂老师的讲解视频,我觉得讲的还是很细致的
【小蜜蜂笔记】蓝桥杯大赛-单片机设计与开发基础技能与进阶强化教程_哔哩哔哩_bilibili
74HC138译码器
三八译码器,三个输入控制八路互斥的低有效输出。
引脚图:
功能表:
C(P2.7) B (P2.6) A(P2.5)
1 0 0 Y4为低(有效)
1 0 1 Y5为低(有效)
1 1 0 Y6为低(有效)
1 1 1 Y7为低(有效)
此74hc138译码器片选四个74hc573,所以只使用Y4、Y5、Y6、Y7即可。再通过74hc02(或非门),为138译码输出提供反相。即当Y4为0时,输出Y4C为1,便于后续74hc573锁存器的控制
74HC573锁存器
功能表
电路连接图:
通过控制P2.7、P2.6、P2.5三个引脚的电平,便可以控制输出哪一位有效,进而去控制不同模块。例如,分别给P2.7、P2.6、P2.5引脚1、0、0,便可以控制Y4为有效,此时Y4为低电平。经过74hc00反相后变为高电平,此时输出的Y4C为高电平。在电路图中Y4C又连接着LED所对应的74HC573锁存器, 由上图可知,当Y4C为高电平时,输出Q1~Q7与输入D1~D7相同,此时P0口直接控制LED,为0点亮,为1熄灭。当Y4C为低电平时,数值被锁存起来,输出的Q1~Q7不变,即不再随着输入而变化。
代码实现:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74//*******************引脚为0时,对应LED亮 #include"reg51.h" sbit HC138_A=P2^5; sbit HC138_B=P2^6; sbit HC138_C=P2^7; void Delay (unsigned int t)//简单的延时函数 { while(t--); while(t--); } void Init74HC138(unsigned char n) { switch(n) { case 4://Y4有效,P0直接控制LED HC138_A=0; HC138_B=0; HC138_C=1; break; //**当Y5、Y6、Y7有效时,控制其他器件,这些我们下一章继续学习 // case 5://Y5有效,P0控制蜂鸣器、继电器 // HC138_A=1; // HC138_B=0; // HC138_C=1; // break; // case 6://Y6有效,P0控制数码管位选 // HC138_A=0; // HC138_B=1; // HC138_C=1; // break; // case 7://Y7有效,P0控制数码管段选 // HC138_A=1; // HC138_B=1; // HC138_C=1; // break; } } //******简单的流水灯子程序****** void LEDRuning() { unsigned char i; //全灭 P0=0xff; Delay(90000); //全亮 P0=0x00; Delay(90000); //依次一个个点亮 P0=0x01; for(i=0;i<8;i++) { P0 <<= 1; P0=~P0; Delay(9000000); P0=~P0; } } //*************主函数************ void main() { Init74HC138(4); while(1) { LEDRuning(); } }
最后
以上就是清脆小伙最近收集整理的关于单片机蓝桥杯——LED的全部内容,更多相关单片机蓝桥杯——LED内容请搜索靠谱客的其他文章。
发表评论 取消回复