蓝桥杯电子赛单片机技术深度解析
引言
对于学习单片机来说,首先要掌握一定要学会看硬件原理图,根据芯片的各个管脚及连接的元器件进行,对应的编程。

3-8译码器
如上图所示,为SCH_硬件原理图V30中的一个重要器件(译码器)其功能是将具有特定含义的二进制码进行辨别,并转换成控制信号,具有译码功能的逻辑电路称为译码器。3-8译码器输出是8个脚,表示10进制。是根据输入的二进制数输出。如果输入是100(P27 = 1,P26 = 0,P25 = 0) 那么就是第只脚高电平(即选通Y4),表示二进制数是4。

对于蓝桥杯大赛来说,38译码器只需要选通Y4(LED)、Y5(蜂鸣器、继电器)、Y6(数码管位选)、Y7(数码管段码)。
一.初始化模块
1.LED原理图

2. System_Init()软件程序代码

由于LED为共阳极 ,当P0端口对应的位为低电平时,LED灯点亮,高电平熄灭,因此保证单片机上电初始化为灭的状态,P0赋值为0xff,使其各个位均为高电平,熄灭状态。其中P2 = P2 & 0x1f,将P27、P26、P25置0,其余保持不变,再按位或上0x80,选通对应的Y4通道,P2 &= 0x1f,再将将P27、P26、P25置0,避免下一次选通出现差错。蜂鸣器、继电器当为低电平时,为关闭状态,P0=0x00;同理再通过译码器器选择Y5通道。
二.LED、蜂鸣器及继电器模块
1.Led_Dsip()LED点亮相关代码

Led_Disp(unsigned char addr,enable),其中addr设置为位选,用于选择某个LED灯,enable为LED灯使能标志位,当enable为1时,对应的LED灯点亮,enable为0时,LED灯灭。temp |= 0x01<<addr,用于扫描并且点亮对应的LED, temp &= ~(0x01 << addr),熄灭对应LED,其中最重要是 P0 = ~temp;LED低电平点亮,需要将上变更的值取反,temp_Old = temp;辅助扫描,进入下次判断,一但temp的值更改,就进入。
2.Y5通道原理图(蜂鸣器、继电器)

如图所示,当P06引脚对应蜂鸣器;P04引脚对应继电器。
3.void BEEP()蜂鸣器相关代码

void BEEP(unsigned char flag)其中flag为蜂鸣器使能标志,flag为1时,启用蜂鸣器,flag为0时,关闭蜂鸣器。temp |= 0x40;P0 = temp;将对应的引脚置为高电平,仅仅启用蜂鸣器。P2 = P2 & 0x1f | 0xa0;选中蜂鸣器所在的通道Y5。
4.void Relay()继电器相关代码

void Relay(unsigned char flag)其中flag为继电器使能标志,flag为1时,启用继电器,flag为0时,关闭继电器。temp |= 0x10;P0 = temp;将对应的引脚置为高电平,仅仅启用继电器。P2 = P2 & 0x1f | 0xa0;选中继电器所在的通道Y5。
三.按键模块
1.按键原理图

按键共4行4列,如图所示,在进行独立按键编写时,只需要扫描P30~P33即可,判断是否为低电平,低电平时对应的按键被按下。进行矩阵按键编写时, 通过扫描P44、P42、P35、P34引脚判断哪一列的按键被按下。再扫描P30~P33引脚确定行,根据两个行列锁定具体的某个按键。
2.独立按键相关代码

按键需要定义为具有返回值的函数,其中特别注意 temp初始化一定要赋值为0,若不赋初始值,会出现按键乱跳现象。最后return temp;数值。
3.矩阵按键相关代码
通过扫描P44、P42、P35、P34引脚判断哪一列的按键被按下。再扫描P30~P33引脚确定行,根据两个行列锁定具体的某个按键。
4.特殊矩阵按键相关代码




作者:旭子的姻缘签