此教程是鄙人蓝桥杯单片机的学习过程总结,可能会有错误,请指出批评。蓝桥杯单片机学习最重要的是将整个单片机模块化,比如,我们可以将它分为LED、蜂鸣器、继电器、数码管、按键、AD/DA、555定时器、光敏电阻、ds28b20温度传感器、超声波传感器等。
点亮LED的原理:
以往我们点亮LED灯都是直接操作IO口就可以,但是在蓝桥杯比赛的板子上则不可以使用这种方法。要点亮LED要操作HC573锁存器、74HC138译码器、或非门和IO口。学过数电的朋友都知道锁存器、译码器、或非门、与非门、异或、同或、2进制和16进制等数字电路知识。没学过的也不要担心,这里我们只要学会怎么使用就好。
一般的,我们点亮LED只需要操作IO口(高/低),但是蓝桥的板子却不同。如上图,P00~07和Q1~Q7之间存在一个573锁存器 ,要使P00~07和Q1~Q7连接起来就得使573锁存器上的LE为高电平1(也就是Y4C为高电平1),当LE为高电平1时,573锁存器导通。若想LED1点亮就是使P00为低电平0,LED2点亮就是使P01为低电平0,以此类推。那么如何让Y4C为高电平1呢?如下图
上图为四个或非门,通过上述分析我们想让Y4C为高电平1,那么就必须使Y4和WR同时为低电平0,其他三个同理。如下图,一般的我们比赛中都是IO模式,所以WR就接GND(低电平0),下左图是原理图,下右图为实物图,所以我们的WR就默认接低电平0,那么Y4如何为低电平0呢?如下
要想使Y4为低电平就必须了解下面的74HC138译码器如图1。要使Y4为低电平0就必须选中Y4,那么如何选中Y4这个引脚呢?就必须通过操作P27、P25、P26分别为1、0、0(二进制就是4的意思),可能会有人不知道P27、P25、P26为什么为1、0、0。由下面图2可以清晰地看出。以上就是点亮LED的整个过程,整个过程很繁琐但是理解起来很容易。
代码实现:
8个LED灯按1s时间闪烁
#include "stc15f2k60s2.h"
#include "intrins.h"
sbit HC138_A=P2^5; /* 此处使用sbit位定义来定义引脚,不能在代码中直接操作P2^5/P2^6/P2^7 */
sbit HC138_B=P2^6;
sbit HC138_C=P2^7;
void Delay1000ms() //@12.000MHz
{
unsigned char i, j, k;
_nop_();
_nop_();
i = 46;
j = 153;
k = 245;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void led(void)
{
HC138_A=0;
HC138_B=0;
HC138_C=1;//Y4C打开
P0=0x00; //打开LED灯
Delay1000ms();
P0=0xff; //关闭LED灯
Delay1000ms();
}
void main(void)
{
while(1)
{
led();
}
}
后续模块更新中。。。