点亮一个LED
在学习大多数单片机的第一步,点亮一颗LED
点亮LED能帮我们更好的理解IO口的使用,早日成为点灯大师
我们蓝桥杯单片机实训平台CT107D用的是STC15的单片机
我们打开STC15单片机的资料我们可以看见,里面有介绍特殊功能寄存器(SFRs),我们操作IO口也是对其中的关于IO口的内容进行写入。
特殊功能寄存器(SFRs)
在STC15单片机里面是这样描述特殊功能寄存器(SFRs)的:
特殊功能寄存器(SFRs)是用来对片内各功能模块进行管理、控制、监视的控制寄存器和状态寄存器,是一个特殊功能的RAM区。STC15系列单片机内的特殊功能寄存器(SFRs)与高128字节RAM共用相同的地址范围,都使用80H~FFH,特殊功能寄存器(SFR)必须用直接寻址指令访问。
在该资料中给出了STC15单片机的特殊功能寄存器名称以及地址。
在图中我们可以找到:P0寄存器地址为:0x80;
P1寄存器地址为:0x90;
P2寄存器地址为:0xA0;
P3寄存器地址为:0xB0;
……
知道了寄存器地址,我们这个时候就可以操作寄存器了。离点灯大师又近了一步。
现在我们来看蓝桥杯单片机CT107D原理图
这个时候我们发现,我们成为点灯大师路上的第一只拦路虎出现了——74HC573
这个芯片是锁存器,通俗来说就是一个抽屉,用来保存你P0IO口输出的数据的,在该芯片左上方有一个“Y4C”的网络标号连接了该芯片的LE引脚。LE引脚就相当于你抽屉的锁,“Y4C”就相当于你的钥匙,给LE赋予高电平就相当于“开锁”,给LE低电平就相当于“上锁”。
当你给LE赋予高电平时,你就可以对HC573进行操作,通过P0IO口分别给HC573上的D1~D8引脚赋予高低电平,这个时候HC573就会记住输入的高低电平,然后在Q1~Q8输出你输入的信号。当你再对LE引脚赋予低电平时,HC573就会保存你最后一次赋予的值。这个时候无论怎么给D1~D8赋值都没办法改变Q1~Q8的输出。
那么Y4C的信号又是由谁输出的呢,我们顺着“Y4C”网络编号找到
Y4C最先开始由HC138译码器发出,经过了一个或非门最后生成Y4C信号。
在蓝桥杯CT107D开发板上J13是使用跳线帽选择寄存器映射还是IO控制。这里我们示例是IO控制。
由于我们想让Y4C输出高电平,WR接地,在通过或非门时我们就要让Y4输出低电平。利用138译码器,我们控制P25~P27输出高低电平就可以选择Y4输出低电平。
了解了硬件原理之后我们就要开始编程操作了。
首先定义我们要用的IO口的地址,便于后面访问。
sfr P0 = 0x80;
sfr P2 = 0xA0;
然后编写主函数。
void main()
{
P2 = (P2 & 0x1f)| 0xa0;
P0=0x00;
P2 = (P2 & 0x1f)| 0x80;
P0=0xfe;
while(1)
{
}
}
最后将代码编译进单片机。
然后我们就可以看到,第一颗LED灯被点亮了。
恭喜你离点灯大师又近了一步。