51单片机(一)工程建立、点亮任意几个LED灯、烧录、锁存器

一、 建立工程

1、建立工程文件夹

在学习51的时候,养成良好习惯,建立一个工程文件夹,将学习过程中写的代码源文件、生成的各类文件都放在该文件夹下。

在桌面新建文件夹(如命名【89C52】,我的板子芯片是89C52)

在这里插入图片描述

在工程文件夹下再创建文件夹,我们每进行一次实验或者一类实验,就新建一个子文件夹,方便代码管理。

2、创建工程文件

①打开keil软件(本博是keil2)

在这里插入图片描述
②点击【New Project…】

在这里插入图片描述

③选择文件夹,找到我们创建的文件夹【89C52】——>【lesson1】

文件名为本次实验的名称(如LED),格式唯一为【.uv2】,点击【保存】

在这里插入图片描述
③选择芯片类型(本博芯片为AT89C52)

芯片类型察看如下

在这里插入图片描述在这里插入图片描述

在这里插入图片描述

找到AT89C52,点击【确定】

在这里插入图片描述
上图点击【确定】

此时状态栏有了下图所示信息,到这一步为止,我们建立了一个关于【AT89C52】的工程,但是还没有把代码与工程连接起来,整个工程就是一个空壳。

在这里插入图片描述

3、创建.c源文件

①点击【Flies】——>【new…】,建立文本

在这里插入图片描述

或者直接如下快捷键

在这里插入图片描述

在这里插入图片描述

②点击保存

在这里插入图片描述

保存位置为刚刚新建文件的位置,注意现在保存的文件是以后写C代码的文件,所以文件后缀为【.c】,名称与刚刚建立项目时的名称一样,故改为【LED.c】,点击保存。

在这里插入图片描述

建立了C代码文件,但是并不知道C代码是写给谁的,所以应该把C代码文件添加到工程中。

4、添加.c源文件到工程

①右击【Source Group 1】——>【Add Files to Group ‘Source Group 1’】

在这里插入图片描述

②选择刚刚的创建的.c文件,点击【Add】

在这里插入图片描述

此时状态栏有了.c源文件

在这里插入图片描述

到此,整个工程的建立结束。通过在.c源文件中编写代码,编译后形成单片机可执行的.hex文件,通过烧录软件将可执行文件烧录到单片机。

二、点亮一个LED灯

1、察看原理图,明确电路原理

在这里插入图片描述

①找到芯片

在这里插入图片描述

②找到LED

在这里插入图片描述

上图1是1k的排阻,2是8个LED,可以理解为每个LED接1K的电阻,如下图

在这里插入图片描述

3是锁存器,我用的单片机A/D实验与LED实验都是用的单片机的P1^0——P1 ^7,在进行A/D实验时,为了防止对LED形成干扰,就在LED与P1间加了一个锁存器,在进行A/D实验时,将LED锁住。

锁存器见本博附录,现只需知道当OE为低电平、LE为高电平时,锁存器的输入DB1——DB8与锁存器的输出Q0——Q7,电平同高、同低,即DB输入为高电平、对应Q输出为高电平,DB输入为低电平,对应Q输出为低电平。

在这里插入图片描述

由上图可知,单片机的P1的0——>7引脚连接锁存器的D0——>D7
P1的某一引脚编程序置0,则该引脚输出低电平,锁存器输出端Q对应引脚也变为低电平,此时对应的LED左边是VCC高电平,右边是低电平,LED点亮。
故LED1——>LED8 对应:Q0——>Q7; 对应D1——>D8; 对应单片机P1^0——P1 ^7
只需将P1^0——P1 ^7某个引脚置低电平就可点亮对应LED。

在.c文本下编写#include <reg52.h>,右键打开头文件

在这里插入图片描述
在这里插入图片描述

可以看到P0、P1、P2等被定义为8位寄存器(寄存器定义方法:sfr…(八位),sfr16…(16位)),则可以通过位定义语句:sbit led1=P1^0;
将P1寄存器某一位重新命名,程序中可以通过新名称对该位进行操作。

2、编写程序

#include <reg52.h>
sbit led1=P1^0;
void main()
{
led1=0;
}

以上代码,第二行:sbit led1=P1^0;是对 P1的第一引脚重命名,进行led1=0;操作后会点亮第一个LED。
如果需要点亮其他的LED,则可将P1^0改为 P1 ^1、P1 ^2…P1 ^7

3、烧录

①生成hex文件

点击下图图标
在这里插入图片描述
勾选下图选项,点击【确定】
在这里插入图片描述
再重新编译
在这里插入图片描述
此时显示生成了hex文件,它与.c源文件存放在相同位置

②打开stc-isp(下载地址:http://www.stcmcudata.com/)
在这里插入图片描述

在这里插入图片描述
芯片选择型号为89C52,端口号选择(见本博附录),打开程序文件,选择工程文件下的hex文件

在这里插入图片描述

点击【下载/编程】,再打开单片机开关(注意操作顺序),显示操作成功,此时单片机的第一个LED被点亮

在这里插入图片描述

三、点亮多个LED灯

我们之前是利用寄存器的位操作,将P1寄存器的某一位重新命名,再对该位置低电平来点亮对应的LED,我们还可以对整个P1寄存器进行操作。

之前总结过,在点亮LED实验中P1寄存器每一位的输出与锁存器的DB和Q同高电平、同低电平。现用一个16进制的数控制该寄存器。

例如需要LED灯的1、3、5、7灯亮,则Q0——>Q7或DB1——>DB8或者P1的0——>7引脚输出的电平分别是01010101,其中D1灯在低位,所以这串01数字看作是二进制数的话一个是10101010(从下往上读,下面是高位),变成16进制为0xaa,所以程序中只需进行P1=0xaa操作及可点亮1、3、5、7LED灯
在这里插入图片描述

代码如下:

#include <reg52.h>
void main()
{
    
    
P1=0xaa;
}

同理,若点亮2、4、6、8,则需要输出分别是10101010,二进制为01010101(从下往上),十六进制为0x55

在这里插入图片描述
代码如下:

#include <reg52.h>
void main()
{
    
    
P1=0x55;
}

附录一 端口选择

1、鼠标右键我的电脑——>【管理】

在这里插入图片描述

2、选择【设备管理器】,察看端口

在这里插入图片描述

在这里插入图片描述

3、若找不到端口,则选择【显示隐藏的设备】

在这里插入图片描述

4、电脑初次连接单片机可能需要安装相应的串口驱动,该驱动买单片机时卖家给的资料里会有,直接运行就好,或者直接网上搜索CH340下载

在这里插入图片描述

附录二 锁存器

在这里插入图片描述

在这里插入图片描述

上面俩图中,第一图的74HC573是锁存器,第二图是单片机芯片。俩图的连接方式是:

单片机P1的8个引脚P10——>P17依次接锁存器的输入,即D0——>D7。

锁存器的输出,即Q0——>Q7接8个LED,LED接排阻后接到VCC。

下图是锁存器的真值表,根据上图一,OE接地,所以锁存器只存在下图的前三种工作状态。

在这里插入图片描述

LE是在程序中置高、置低电平的,在进行LED实验时,将LE置高电平(LE默认高电平,所以LED实验时可以不对LE进行软件置1),上面真值表的D和Q,分别表示锁存器的输入和输出,可以看到输入和输出是同高电平、同低电平。

所以单片机的P1的某一引脚输出低电平,则锁存器的对应引脚的输入D为低电平,锁存器对应引脚的输出Q也为低电平,此时LED左边是VCC和排阻,右边是低电平,LED导通,LED点亮。

当进行A/D实验时,因为要用到单片机的P1,此时为了防止LED灯乱跑,将LE软件置低电平,此时无论P1的各个引脚输出为高电平还是低电平,锁存器的输出端始终为Q0,这个定值大于使LED导通的临界电平值,这样,LED左右俩边都为高电平,LED不导通,锁存器相当与将LED“锁了起来”。

猜你喜欢

转载自blog.csdn.net/Curnane0_0/article/details/113959665