0
点赞
收藏
分享

微信扫一扫

学习笔记——STC32---LED跑马灯

千白莫 2022-03-11 阅读 56

目录

一、任务简述

在CT107D单片机上实现LED的基本控制,首先让8路LED指示灯闪烁3遍后熄灭,接着依次点亮LED指示灯,最后依次熄灭指示灯,程序循环实现上述功能。

二、实现方法

实现方法很简单,先弄清总线:要想用P0去控制LED灯,首先需要M74HC573MIR锁存器导通,就是要Y4C输入高电平,也就是需要74HC02输出高电平,因为它是一个或非门,当51单片机上电复位后,各输出口的状态都是1,当执行指令MOVX@DPTr,A时,这是51单片机写,对应的WR为低电平,则Y4必定为低电平,这样才能通过或非门输出高电平;再利用74HC138译码器使得P25,P26,P27为0,0,1,则三个输入端A,B,C为0,0,1。这样就弄清了总线,逻辑也就清晰了。
在这里插入图片描述
在这里插入图片描述

三、参考代码

有不明白P2 = (P2 & 0x1f) | 0x80P2 = (P2 & 0x1f) | 0xa0等代码的,可以看我的上一篇博客。

#include "reg52.h" 


void initial_HC138(unsigned char n)
	
{
	switch(n)
	{
		case 4:
			P2 = (P2 & 0x1f) | 0x80;
		break;
		case 5:
			P2 = (P2 & 0x1f) | 0xa0;
		break;
		case 6:
			P2 = (P2 & 0x1f) | 0xc0;
		break;
		case 7:
			P2 = (P2 & 0x1f) | 0xe0;
		break;		
		
	}
}

void OutPutP0(unsigned char channel,unsigned char dat)
{
	initial_HC138(channel);
	P0 = dat;
}
void delay_ms(unsigned int nms)   //延时50us误差 0us
{
    unsigned int i, j;
	for(i = nms; i > 0; i--)
        for(j = 110; j > 0; j--);
}

void led_runing()
{

unsigned char i ;
 for(i = 0;i < 3;i++)
	{
		OutPutP0(4,0x00);
		delay_ms(200);
		delay_ms(200);
	
		OutPutP0(4,0xff);
		delay_ms(200);
		delay_ms(200);

	}
	for(i = 1;i <= 8;i++)
	{
		OutPutP0(4,0xff << i);
		delay_ms(200);
		delay_ms(200);
	}
	for(i = 1;i <= 8;i++)
	{
		OutPutP0(4,~(0xff << i));
		delay_ms(200);
		delay_ms(200);
	}

}
void initial_system()
{
	OutPutP0(5,0x00); // Y5输出低电平,P0输出低电平,经过ULN2003驱动管为高电平,关闭蜂鸣器和继电器。 
}
void main()
{
		initial_system();
		while(1)
		{
			led_runing();
		}
	
}
举报

相关推荐

0 条评论