单片机入门—LED指示灯的基本控制(完结)

实现过程
74HC138译码器(38译码器)——>74HC02或非门——>74HC573锁存器

三八译码器

三个输入控制八路互斥的低有效输出(三个P2口控制8个Y口,控制Y4输出低电平)

74HC02或非门

Y4输出低电平后,通过或非门,此时WR是低电平(使用I/O扩展的方式),Y4C输入高电平,即LE为高电平(相当于使锁存器工作),LED才能发光,至于P0口的编码形式就不写了(这很简单)

74HC573锁存器

  • OE:输出使能(Output Enable)
  • LE:锁存使能(Latch Enable)
    (这两个还没学过,不影响学习)

来更新了,
D端是输入端,Q为输出端
注意OE上有横杠,表示低电平有效(即低电平的时候,电路才会工作),所以OE接的是GND端
当由Y4C输入高电平时,即LE为高电平,这个时候Q端的状态由D端的状态决定;当LE为低电平时,这个时候,无论D是什么状态,Q都保持上一次的数据状态。

如图所示

  • 74HC573锁存器

在这里插入图片描述

  • 74HC138译码器(38译码器)和 74HC02或非门

在这里插入图片描述
J5,J2,J13跳线帽的不同的引脚接法(关于引脚接法,后期学深了会更新的)

跳线帽接法(这个程序的接法):J5接KBD端 J13接I/O口 J2接2-4 1-3端

代码如下:

#include <reg52.h>
//sbit	HC138_C=P2^7;
//sbit	HC138_B=P2^6;
//sbit	HC138_A=P2^5;

void Delay(unsigned int t){//延时函数
		while(t--);
	    while(t--);
}

void LEDrunning()//LED灯闪烁三次,再以流水灯形式走一遍,不断重复以上操作
{
	  unsigned char i;
	 // HC138_C=1;
	  //HC138_B=0;
	 // HC138_A=0;
	 //注释的代码和打开寄存器,关闭寄存器的代码效果是一样的
	  P2 = (P2&0x1F|0x80);//打开寄存器
	  for(i=0;i<3;i++)
	{
		P0=0x00;//led灯全开
		Delay(60000);
		Delay(60000);
		P0=0xff;//led灯全关
		Delay(60000);
		Delay(60000);
	}
	
	//下面两个for循环,构成了led灯流水灯形式
	for(i=1;i<=8;i++){
		P0=0xff <<i;
		Delay(60000);
		Delay(60000);
	}
	for(i=1;i<=8;i++){
		P0= ~(0xff<<i);
		Delay(60000);
		Delay(60000);
	}
	P2 &= 0x1F;//关闭寄存器
}

void cls_buzz(void)//关闭蜂鸣器
{
	P2 = (P2&0x1F|0xA0);
	P0 = 0x00;
	P2 &= 0x1F;
}

void main()
{
	cls_buzz();
	while(1){
		LEDrunning();
	}
}

基本就是这样控制LED灯的显示,后期学深了会更新。


来更新了,

关闭外设

void cls_buzz(void)//关闭蜂鸣器
{
	P2 = (P2&0x1F|0xA0);
	P0 = 0x00;
	P2 &= 0x1F;
}
  • P2 = (P2&0x1F|0xA0);
    0x1F写成二进制是0001 1111。P2口的默认状态是1111 1111。P2&0x1f是为了把高三位清0,因为我们在目前这个寄存器来看,我们只需要控制P7-5这三个端口,0xA0 是1010 0000 ,这个代码是为了让Y5为低电平,通过或非门是Y5C输入为高电平,来控制Y5C锁存器(如图所示)

  • P0 = 0x00;
    ULN2003,相当于一个非门,来关闭蜂鸣器和继电器(详细见这个专栏的蜂鸣器和继电器)

  • P2 &= 0x1F;
    关闭,这个寄存器的使用就结束了

打开使用LED的寄存器

	  P2 = (P2&0x1F|0x80);//打开寄存器

这个是打开Y4C锁存器

	P2 &= 0x1F;//关闭寄存器

关闭Y4C锁存器

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值