工程建立、点亮1个LED灯、点亮任意几个LED灯、烧录
- 一、 建立工程
-
- 1、建立工程文件夹
- 2、创建工程文件
- 3、创建.c源文件
- 4、添加.c源文件到工程
- 二、点亮一个LED灯
-
- 1、察看原理图,明确电路原理
- 2、编写程序
- 3、烧录
- 三、点亮多个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“锁了起来”。