一、51单片机控制LED 灯

硬件:普中科技51开发板(HC6800-EM3 V2.2)
软件:Keil V5.37.0.0
MCU: STC89C516

1、目标分析

通过51单片机控制8个LED灯依次点亮,形成流水灯。

2、原理图分析

一、51单片机控制LED 灯_第1张图片

一、51单片机控制LED 灯_第2张图片

2.1、 74HC573芯片

(1) LED控制涉及到74HC573芯片,上图中的U13。想知道该芯片如何工作的,应该看他的数据手册。

(2)74HC573芯片手册参考链接74HC573数据手册 - 百度文库。

(3)74HC573引脚:OE(output enable), LE(latch enable)

(4)74HC573芯片是一个锁存器,简单来说就是由输入引脚Dx来控制输出引脚Qx(X等于0-7)。OE和LE影响Dx控制Qx的结果。

(5)当OE为L,LE为L时74HC573工作在锁存模式,此时Qx的输出被锁存(进入锁存状态之前是高就一直是高,是低就一直是低,这就叫锁存。),这就是锁存器的作用。

(6)当OE为L,LE为H时74HC573工作在跟随模式,此时Qx的输出跟随Dx的输入变化而变化。此时逻辑上可以认为74HC573是透明的。

2.2、LED

LED灯也就是我们所说的发光二极管,LED灯分为阳极和阴极。具有单向导电性。只有阳极接正,阴极接低,LED才会被点亮。根据图中,LED阴极接地,所以阳极应该接正极。

总结:这里通过P0端口接J12端口,P0端口的引脚输出高电平,则相对应的LED灯被点亮。

P00对应D11,......... P07对应P18。

3、代码编写

(1)跑马灯和流水灯: 流水灯是8颗LED其中7灭1亮,亮的在移动;跑马灯是8颗LED7亮1灭,灭的在移动。

/*头文件包含*/
#include 				
#include 


/*函数声明*/
void Delay_ms(unsigned int n);		

void main(void)
{
	unsigned char i = 0;
	P0 = 0x00;     					/*关闭所有LED灯*/
	while(1)
	{
		for(i = 0; i < 8; i++)
		{
			P0 = 0x01 << i;
			Delay_ms(500);
		}
	}
}


#if 1
void Delay_ms(unsigned int n)		//@12.000MHz   12Tģʽ
{
	unsigned char i, j;

	for( ; n>0; n--)
	{
		i = 2;
		j = 239;
		do
		{
			while (--j);
		} while (--i);
	}
	
}
#endif

4、补充

4.1、添加单片机型号和头文件到keil中

(1)51单片机我们使用最多的就是宏晶科技的单片机,该厂家单片机可到官网(STC: 32位 8051 单片机创新者, ISP/IAP 技术创新者,中华有为:除了胜利,我们已无路可走http://www.stcmcudata.com/)下载软件STC-ISP软件。

(2)打开软件,点击keil仿真设置页面中的“添加型号和头文件......”按钮,在弹出的“浏览文件夹”中,选择keil的安装目录,目录下需要有C51目录和UVx目录存在。

4.2、晶振周期等各种周期

(1)以STC89C516单片机为例。

(2)查看该单片机的外接晶振频率,这里外接的晶振为12MHz。

(3)该单片机可选择工作在12T模式和6T模式。即12时钟/机器周期和6时钟/机器周期。(说人话就是一个机器周期等于12个时钟周期就是12T,一个机器周期等于6个时钟周期就是6T)。

(4)现在新出的很多单片机都是1T的。

(5)单片机中常见的周期

晶振周期:晶振振荡的周期,一般也称为振荡周期。也就是晶振振荡一个周期所花的时间,比如1MHz晶振震荡周期是 1/1MHz(1/1000000)s,也就是1微妙。

时钟周期:时钟周期,如果晶振的输出没有经过分频或倍频就直接作为cpu的工作时钟,则时钟周期就等于晶振的振荡周期;如果晶振的输出经过分频或倍频后作为cpu的工作时钟,则时钟周期就就是分频或倍频后的。即时钟周期是CPU的实际工作频率的倒数。51单片机没有分频或倍频,而STM32中有。51单片机中晶振周期等于时钟周期。

注:学习51单片机经常看见时钟周期就是振荡周期这种说法是不够严谨的。

机器周期:机器周期也称为CPU周期。在计算机中,为了便于管理,常把一条指令的执行过程划分为若干个阶段(如取指、译码、执行等),每一阶段完成一个基本操作。完成一个基本操作所需要的时间称为机器周期。一般情况下,一个机器周期由若干个时钟周期组成。

注:机器周期要跟指令集设计有关是时钟周期的倍数,晶振周期只跟硬件脉冲的周期有关。

总结:先由晶振产生一定的晶振周期,晶振周期提供给单片机,(单片机内部可以分频或倍频)经过分频,单片机按照时钟频率工作,若干个时钟周期可以执行完一条指令的其中一部分。

4.3、软件延时

(1)使用单片机小精灵软件,我已上传到我的CSDN,不用积分下载的。

软件截图如下:一、51单片机控制LED 灯_第3张图片

该软件进行软件延时也非常的方便,选在外部晶振的频率和单片机是多少T的就行。

(2)使用STC-ISP软件。

一、51单片机控制LED 灯_第4张图片

该软件在复制代码时如出现_nop_();需要包含头文件intrins.h。

#include

该指令为单周期指令,只消耗一个机器周期。

补充:使用STC-ISP软件延时时,选择不同的8051指令集,生成的代码不同,根据所使用的单片机型号进行选择。例如:选择STC89C516时选择STC-V1指令。

你可能感兴趣的:(51单片机_完,单片机)