赞
踩
蓝桥杯单片机学习计划之点亮LED灯
昨天学校开始放寒假,由于之前正好报名参加了十五届蓝桥杯单片机竞赛,所以想利用寒假这段时间准备一下蓝桥杯的比赛,同时计划每天写一篇博客记录一下每日所学。今天当然是从最基础的点亮LED灯开始勒,Ready Go!
使用的板子是国信长天的CT107D,板载芯片为IAPF15F2K61S2,具有61K的FLASH和2K的SRAM,芯片的内部资源就不介绍了,手册上都有,直接上图:
板子上共焊有8个贴片红色LED灯,这八个LED灯的阴极分别连接到74HC573锁存器的8个输出端,而锁存器的八个输入端又连接到单片机的P0端口,所以如果想要驱动这八个LED灯,只需要给P0端口输出高低电平即可。原理图如下:
大家可以看到,锁存器的锁存使能端LE连接到Y4C,那Y4C又连接到哪里呢?我们一起来看下:
可以看到Y4C连接到了或非门74HC02的输出端,而74HC02的两个输入端又连接了Y4和WR,我们再来看下Y4和WR又分别连到了哪里(搁这套娃呢是吧!!!):
从上面两幅图片可以看到,Y4连到了74HC138译码器的Y4端口,译码器的译码输入端A、B、C又分别连接到单片机的P2.5、P2.6、P2.7三个端口,WR连到了单片机的P4.2端口,到此为止和LED灯相关的端口已经寻找完毕,看来想要驱动个LED灯还是挺麻烦的。
现在我们来理一下思路,想要控制LED灯,则需要让锁存器输入和输出同步,那么就需要给锁存使能端LE一个高电平,想要LE获得高电平,则需要给或非门HC02两个输入端都给低电平,WR已经通过J13跳线帽置零(IO口模式),则我们只需要让Y4输出低电平即可,那又怎么让Y4输出低电平呢?这时候就需看138译码器的真值表了:
从138译码器的真值表上可以看出,想要让Y4输出低电平,需要让译码输入端C输出高电平,A和B输出低电平。那么到这里,想要让LED灯点亮的思路我们已经分析完毕了,再来快速捋一遍:
给A和B(P2.5和P2.6)输出低电平,给C(P2.7)输出高电平,此时Y4输出低电平,Y4C输出高电平,锁存器输入和输出同步,这时候我们控制P0端口输出高低电平就可以使LED灯闪烁了,下面开始写程序。
这边包含了两个库文件,第一个就不用多说了,鼠标右击添加即可,第二个使用到里面的左右移函数用来实现流水灯。然后定义一下三个译码输入端。
#include <STC15F2K60S2.H>
#include "intrins.h"
sbit ADDR_A = P2^5;//74HC138译码输入端
sbit ADDR_B = P2^6;
sbit ADDR_C = P2^7;
这边的延时函数是从STC-ISP下载软件中的延时计算器生成的。
主函数中先对P0和P2端口进行初始化配置,然后设置三个译码输入端。在循环中实现闪烁和流水灯的功能。
void Delay500ms() //@12.000MHz { unsigned char i, j, k; _nop_(); _nop_(); i = 23; j = 205; k = 120; do { do { while (--k); } while (--j); } while (--i); } void main() { unsigned char temp=0x01; unsigned char i; P0M1=0x00;//P0端口配置为准双向口模式 P0M0=0x00; P2M1&=0x1F;//P2端口配置为准双向口模式 P2M0&=0x1F; ADDR_A=0;//74HC138选择Y4 ADDR_B=0; ADDR_C=1; while(1) { for(i=0;i<4;i++)//闪烁两次 { P0=~P0; Delay500ms(); } Delay500ms(); for(i=0;i<8;i++)//流水灯一次 { P0=~temp; temp=_crol_(temp,1); Delay500ms(); } P0=0xFF;//熄灭 Delay500ms(); } }
时钟配置为12M,点击下载,按下板子上的下载按键即可将程序烧录到单片机中。
下载完程序后可以看到板子上的LED灯开始闪烁,效果图如下:
今天主要对板子有一个初步的认识,然后编写程序实现了最基础的效果——点亮LED灯。期待下次的学习!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。