您的位置 首页 设计

51单片机学习之2-流水灯

第五集讲解了74HC573使用方法,我在《51单片机复习笔记1(更新)》有记录。这里略。讲解了Keil的仿真方法。比较有用的内容是可以用它来测试

第五集

讲解了74HC573运用办法,我在《51单片机温习笔记1(更新)》有记载。这儿略。

讲解了Keil的仿真办法。比较有用的内容是能够用它来测验一段代码所运用的时刻,例如延时函数,在需求准确延时又不想运用定时器的时分能够运用该办法。至于其他的,个人认为仍是直接下载到单片机中调查实际情况会比较直观。

第六集

51最小体系

复位原理:

51单片机是高电平脉冲复位,在RST引脚。复位脉冲的高电平宽度有必要大于2个机器周期。为了便利核算,咱们假定晶振频率为12M,那么它的时钟周期为1/12us(微秒)。它的一个机器周期是12*(1/12)=1us(微秒)。复位脉冲高电平宽度有必要大于2个机器周期即2us,那么就要确保RST引脚高电平的时刻大于2us单片机即可主动复位。

上电复位:

当通电时,开关是断开的,那么电流从VCC→电容→RST、R32→GND。刚上电的时分,电容开端充电,充溢电后相当于断路,在电容充电到充溢的过程中电压逐步从高到低(从5V到0V)。也便是说一上电,RST端得到便是高电平,当这个时刻超越2us时单片机复位,电容快充溢到充溢后RST得到是低电平,电源不断那么RST就一向是低电平而不会一向复位。RST高电平继续的时刻取决于电容充电时刻.。(这个电容要取多大?怎样核算的?)

手动复位:

通电之后,RST会主动复位一次,当单片机在运转的过程中咱们需求它复位时能够断电使之上电复位。或许按下SW0开关也能完成复位。当SW0开关按下时电流从VCC→R33→RST、R32→GND构成回路。为便利核算R33假定为300欧即0.3K,咱们能够先核算R33得到的电压是5V*(0.3k/(4.7k+0.3k))=0.3VR32得到的电压为5V*(4.7k/(4.7k+0.3k))=4.7VRST端的电压也为4.7V,那么4.7关于单片机来说也算高电平,当按下手动按下SW按钮到松开必定超越2us,所以单片机主动复位。

晶振电路:

两个%&&&&&%一定要持平,取值规模为20-50pf越大发动越慢。

自己建立最小体系要注意的当地:

EA引脚一定要接高电平即VCC,这是最简单疏忽的。这个引脚是用来挑选是用片内存储器仍是用片外存储器。51内部存储器一般都够咱们运用。在曾经的单片机需求外扩存储器。咱们烧录的程序便是存在片内存储器。

要将P0组引脚当一般IO用时,需求接10K的上拉电阻。P1-P3里边都有上啦电阻。

1做地址/数据总线时和做输入I/O口时,p0口不必接上拉电阻。
2但作为输出I/O口时,p0口有必要要接上拉电阻才能够。

P0口是集电极开路输出,也便是OC门,这种结构没有输出高电平的才能就相当于一个一端接地的开关,按下去就输出低电平0V,断开就没有电压,是悬空状况。
至于用不必上拉电阻,取决于外部电路,假如要输出高电平控制一个器材,而这个器材自身又没有内置上拉,就有必要自己接一个上拉电阻,假如要用低电平控制一个器材,则能够不必加上拉。

第七集

一、流水灯的规划

流水灯便是让八个小Led的顺次亮灭。先看看流水灯的电路图。

这是我的试验板的流水灯电路图。其间74HC573的D输入引脚DB1—DB8接在单片机的P1组引脚。74HC573的LE接在P2.5引脚。

程序规划思路:

我试验板上有8个Led灯,正极接在VCC,负极接在单片机的P1引脚(这儿不运用74HC573锁存功用所以LE一向保存高电平,相当于Led直接接在单片机的IO口)。要让Led灯亮只需求把对应的端口设为低电平,那么Led灯亮。顺次让P1的八个引脚给凹凸电平那么Led灯也会跟着暗亮。因为51单片机履行的速度很快,所以Led灯的闪耀速度也会很快,咱们肉眼无法看到,所以要在电平切换时恰当的延时一下。

流水灯的程序规划有许多种办法,如按方位位、数组、函数_cror_()_crol()等,我原本我是比较喜爱用函数的办法,但后来看了一下AVR的,形似用的最多的是与、或、非、异或这些运算符来控制IO口,所以我就用这种方法吧,练熟一些便利今后学习。

#include”reg52.h”

#defineucharunsignedchar

#defineuintunsignedint

//用来延时

voiddelay(ucharx)

{

uinty;

for(;x>0;x–)

for(y=500;y>0;y–);

}

voidmain()

{

ucharTmp;

uchari;

while(1)

{

Tmp=0xFE;//在流之前先让第一个灯亮11111110

for(i=0;i<8;i++)

{

P1=Tmp;

Tmp=Tmp<<1;//左移动一位0xFE=11111110<<1=11111100

Tmp=Tmp|0x01;//将最终一方位111111100|00000001=11111101

delay(100); //让灯亮一段时刻

}

}
}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/ziliao/sheji/318303.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部