在上一节教程中我们介绍了蓝桥杯单片机CT107D的LED灯的控制。
在上一节的代码里面有一段:
P2 = (P2 & 0x1f)| 0xa0;
P0=0x00;
首先我们是对P2寄存器的写入到我们P2寄存器内 :
这个时候我们P2寄存器里面的值假设为:0101 1011;
然后我们 “&(且)”上0x1F // 0001 1111
0101 1011 & 0001 1111 = 0001 1011
这个时候P2寄存器的高三位就全都为0了,而低五位不变。在我们CT107D单片机硬件图里面,138译码器的输入口仅连接三个IO口,分别为P25、P26和P27。
利用上述方法就可以使P2只更改寄存器高三位的值而不改变其他值,以免对程序产生影响。
继电器和蜂鸣器的控制
与蜂鸣器和继电器有关的电路如下:
HC573锁存器连接了一个ULN2003芯片,ULN2003芯片主要用来放大电流,增强单片机的驱动能力。高电平通过ULN2003时会转变为低电平。
继电器原理图如下:
继电器可以理解为,由一块电磁铁控制开关。当N_RELAY通入高电平时,电磁铁不工作,通入低电平时,电磁铁有磁性,吸引开关向下导通M2。
继电器的控制我们就可以这样写:
由于我们下一节已经学习了特殊寄存器SFR。我们接下来编程的时候就可以在Keil中选择好芯片型号,右键导入我们所需的头文件。头文件里面有官方定义的所有特殊寄存器。
#include <STC15F2K60S2.H>
然后建立一个主函数。
#include <STC15F2K60S2.H>
void main(void)
{
P2 = ( P2 &0x1f) | 0xa0;//选择控制LED灯的锁存器
P0 = 0xff; //将LED灯全关
P2 = ( P2 &0x1f) | 0xa0;//选择控制继电器的锁存器
P0 = 0x10; //打开继电器
while(1)
{
}
}
蜂鸣器的控制同理:
代码如下:
#include <STC15F2K60S2.H>
void main(void)
{
P2 = ( P2 &0x1f) | 0xa0;//选择控制LED灯的锁存器
P0 = 0xff; //将LED灯全关
P2 = ( P2 &0x1f) | 0xa0;//选择控制蜂鸣器的锁存器
P0 = 0x40; //打开蜂鸣器
while(1)
{
}
}
建立蜂鸣器和继电器控制函数
#include <STC15F2K60S2.H>
void Hardware_Ctrl(unsigned char Place, unsigned char Set)
{
P2 = ( P2 &0x1f) | 0xa0;
if(Set)
{
P0 = 0x01 << Place;
}
else
{
P0 = 0x00;
}
}
void main(void)
{
P2 = ( P2 &0x1f) | 0xa0;//选择控制LED的锁存器
P0 = 0xff; //关掉所有LED
Hardware_Ctrl(6,1);//打开蜂鸣器
Hardware_Ctrl(4,1);//打开继电器
while(1)
{
}
}