单片机设计与开发

来源:互联网 发布:内核源码的配置文件 编辑:程序博客网 时间:2024/05/21 10:31

一、流水灯

图1
图1 LED部分电路原理图分析 
根据上图分析,要控制LED灯,首先我们需要了解74HC573锁存器,然后控制P0口的输出。 
根据74HC573的真值表,当LE为高时,锁存器左边输入什么右边就输出什么,当LE为低时,锁存器输出的是上一次的值,即实现了锁存。如下图: 
图2 
图2 74HC573真值表 
要实现流水灯则必须改变74HC573的输出,则必须将Y4C置为高,给P0赋值后再将Y4C置为低进行锁存。我们在原理图中找到Y4C(如图3),图中WR与GND用跳帽连接起来,即WR为低电平0。

图3
图3 74HC138与74HC02

如图所示,Y4C由Y4和WR共同控制,74HC02是一个4路2输入或非门功能,WR为低电平,要使Y4C为高,则Y4必须为低电平,而Y4又由74HC138译码器控制。74HC138译码器的真值表(如图4),要使得Y4为0,则三个输入端应该为100,即P2^7=1,P2^6=0,P2^5=0。又只需要操作P2口的这三位,不需要配置其他的五位,所以P2端口应该配置为:P2 = ((P2&0x1f)|0x80);

图4

编写代码:

while(1){    for(i=0; i<8; i++)    {        P2 = ((P2&0x1f)|0x80);   //配置74HC573,使其不锁存        P0 = ~(0x01<<i);     //左移i位,按位取反        P2 &= 0x1f;    //再次配置74HC573,使其锁存        delay();       //适当延时使LED亮得充分    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

看到这里我们可能会感叹点个LED灯都这么麻烦,但是只要你把这个思路理清了,之后的蜂鸣器、继电器、数码管都是这个套路,因为他们共用的P0和P2端口,且都用到了上图3中的锁存器、138译码器和或非门。这就实现了一个8位的I/O口进行复用的分时来控制多个设备,这种设计是比较好的。

二、蜂鸣器和继电器 
查看原理图找到继电器和蜂鸣器所在,然后可以看到(如图5)继电器和蜂鸣器的都是通过ULN2003来驱动的,ULN2003内部集成了7个达林顿管,可以有7路输入输出,这里不仅驱动了继电器和蜂鸣器,还有直流电机与步进电机。同样,我们只需要控制Y5C和P0口,而Y5C的控制则与Y4C的控制大同小异,这里就不详细讲解了。我们可以得到控制Y5C的正确配置P2端口的代码为:P2 = ((P2&0x1f)|0xA0);

我们再看继电器和蜂鸣器的电路,当ULN2003输出低电平时继电器和蜂鸣器才打开,而ULN2003每一路输入输出都加有一个非门,所以ULN2003的输入为高电平时蜂鸣器继电器才打开,为低电平时关闭。继电器对应的位为P0^4,蜂鸣器对应的位为P0^6,我们将P0口的这两位赋为1时,即P0=0x50时,两个设备均打开。

图
图5 蜂鸣器与继电器电路原理图

代码部分:

P2 = ((P2&0x1f)|0xA0);    //关闭锁存P0 = 0x10;     //蜂鸣器关、继电器开P2 &= 0x1f;   //打开锁存
0 0
原创粉丝点击