初始化函数的作用
前面的很多章我们都有使用到初始化代码,在这里我们对初始化来进行一个详细的解释,首先我们要知道为什么要初始化。初始化顾名思义就是开始就要使用的代码,那是因为我们使用的单片机内部电路所决定的。如果没有写这初始化代码,打开单片机会发现继电器和蜂鸣器一直开启。为了避免这种情况所以我们要使用初始化代码。初始化程序是为了更好的控制模块的工作。
在学习LED灯、数码管、蜂鸣器、继电器的时候,不知道大家有没有发现,控制这些外设的都是P0口,为什么这些IO口不会冲突呢?例如:我们在控制第四个LED灯的亮灭时是P04不断的赋0和1,为什么继电器没有开关呢?那是因为有锁存器。当我们要使用那个模块时,就打开控制这个模块的锁存器,这样单片机的IO口就不会冲突了。
大家会不会很疑惑为什么要这样设计,是不是很麻烦,每次使用的时候还要打开控制的锁存器。其实这样设计是有很大好处的,因为单片机的IO口资源非常的有限,这样做大大节省了IO的资源。
原理图
下面我们还看原理图,P0口是如何同时控制那么多模块的。这样设计我们只用了3个138译码器IO和8个P0端口,就实现了控制LED灯、数码管、蜂鸣器、继电器。
控制流程
1、通过P2口的P25、P26、P27来控制Y4、Y5、Y6、Y7
2、再通过或非门打开连接外设的573锁存器
3、Y4打开LED
4、Y5打开继电器、蜂鸣器
5、Y6打开数码管位选
6、 Y7打开数码管段选
代码详解
初始化函数的使用
//初始化函数的使用
#include <STC15F2K60S2.H>
void Allinit(void);
void Delayms(unsigned int ms);
void main(void)
{
Allinit(); //初始化函数
while(1)
{
P2=0XA0;
P06=1; //打开蜂鸣器
Delayms(500); //延时500ms
P06=0; //关闭蜂鸣器
Delayms(500); //延时500ms
}
}
void Allinit(void) //初始化函数
{
P2=0X80; //打开LED灯573锁存器
P0=0XFF; //关闭使用LED灯
P2=0XA0; //打开蜂鸣器、继电器573锁存器
P0=0X00; //关闭使用蜂鸣器、继电器 ULN2003芯片是反向放大电流的,所以置零是关闭状态
P2=0XC0; //打开数码管位选573锁存器
P0=0XFF; //关闭数码管位选
P2=0XE0; //打开数码管段选573锁存器
P0=0XFF; //关闭数码管段选
}
void Delayms(unsigned int ms)
{
unsigned int i,j;
for(i=0;i<ms;i++)
for(j=845;j>0;j--);
}