小瓦君有话说:
本教程会用到Keil uVision4软件,所以开章部份会稍微介绍一下Keil uVision4的使用教程
Keil uVision4使用教程
首先,我们用 Keil 先打开一个现成的工程,来认识一下 Keil 软件,如图 1-7 所示。
图1-7 工程文件
从图 1-7 我们可以很轻松的分辨出菜单栏、工具栏、工程管理区、程序代码区和信息输出窗口。
这个是 Keil4 的英文版,网上有一些汉化版本的,但不建议使用。即使你的英语不好,使用英文版本的软件也一点问题没有,一共没几个单词,不需要你去翻译,用几次你就记住怎么用了。
因为以后做实际开发的时候,大多数软件都是英文版的,如果现在学习的时候一直用中文软件,将来一旦换了其它的英文软件就会慌了,所以从现在开始,慢慢的来熟悉英文软件,将来再用到其他英文软件的时候,就可以做到触类旁通、驾轻就熟了。
Keil 软件菜单栏和工具栏的具体细化功能,都可以很方便的从网上查到,不需要记忆,随用随查即可。在这里我们只介绍一点,关于 Keil 软件里边的字体大小和颜色设置。在菜单Edit-->Configuration-->Colors &Fonts 里边,可以进行字体类型、颜色、大小的设置,如图 1-8所示。
图1-8 字体设置(一)
因为我们用的是 C语言编程,所以我们在 Window 栏中选择 8051:Editor C Files,然后在右侧 Element 栏目里可以选择要修改的内容,一般我们平时用到的,只是其中几项而已,比如:
Text——普通文本
Text Selection——选中的文本
Number——数字
/*Comment*/——多行注释
//Comment——单行注释
Keyword——C 语言关键字
String——字符串
Keil本身都是有默认设置的,可以直接使用默认设置,但如果你觉得不合你的口味,那就在这里更改一下,改完后直接点 OK 看效果就可以了。
图1-9 字体设置(二)
用单片机点亮LED灯C语言教程
一、使用Keil uVision新建一个工程
对于单片机程序来说,每个功能程序,都必须要有一个配套的工程(Project),即使是点亮 LED 这样简单的功能程序也不例外,因此我们首先要新建一个工程,打开我们的 Keil 软件后,点击:Project-->New uVision Project...然后会出现一个新建工程的界面。
以我们在硬盘上建立了一个 lesson2 的目录,然后把 LED 这个工程的路径指定到这里,这样方便今后管理程序,不同的功能程序放到不同的文件夹下,并且给这个工程起一个名字叫做 LED,软件会自动添加扩展名.uvproj。如图 2-9 所示。
图 2-9 保存工程
直接点保存就可以了,工程会自动保存成 LED.uvproj 文件,下次要打开 LED 这个工程时,可以直接找到文件夹,双击这个.uvproj 文件就可以直接打开了。
保存之后会弹出一个对话框,这个对话框让我们选择单片机型号。因为 Keil 软件是外国人开发的,所以并没有国内的 STC89C52,但是只要选择同类型号就可以了。51内核是由 Intel 公司创造的,所以这里直接选择 Intel 公司名下的 80/87C52 来代替,这个选项的选择对于后边的编程没有任何的不良影响。如图 2-10 所示。
图 2-10 单片机型号选择
点击 OK 之后,会弹出一个对话框,如图 2-11 所示,每个工程都需要一段启动代码,如果点“否”,编译器会自动处理这个问题,如果点“是”,这部分代码会提供给我们用户,按需要自己去处理这部分代码。
那这部分代码在初学 51 的这段时间内,一般是不需要去修改的,但是随着技术的提高和知识的扩展,我们就有可能会需要了解这块内容,因此这个地方我们选一下“是”,让这段代码出现,但是我们暂时不需要修改它,大家知道这么回事就可以了。
图 2-11 启动代码选择
这样工程就建立好了,如图 2-12 所示,如果我们点击 Target 1 左边的加号,会出现我们刚才加入的初始化文件 STARTUP.A51,这个我们先不管。
图 2-12 工程文件
工程有了之后,我们要建立编写代码的文件,点击 File-->New,如图 2-13,新建一个文件,也就是我们编写程序的平台。然后点 File-->Save 或者直接点击那个 Save 的快捷键,可以保存文件,保存时我们把它命名为 LED.c,这个地方必须加上.c,因为如果写汇编语言,这个地方的扩展名是.asm,头文件就是.h 等等,我们编写的是 C 语言程序,这个地方必须自己添加文件的扩展名.c,如图 2-14 所示。
图 2-13 新建文件
图 2-14 保存文件
现在就可以在建立好的文件中输入我们的程序代码了,在编写之前还有个工作要做。我们每做一个功能程序,必须要新建一个工程,一个工程代表了单片机要实现的一个功能。但是一个工程,有时候我们可以把我们的程序分多个文件写,所以每写一个文件,我们都要添加到我们所建立的工程中去,鼠标右键点 Source Group 1,点 Add Files to GroupSource Group 1...,如图 2-15 所示。
图 2-15 添加文件(一)
在弹出的对话框中,单击 LED.c 选中它,然后点 Add,或者直接双击 LED.c 都可以将文件加入到这个工程下,然后单击 Close,关闭添加。这个时候大家会看到在 Source Group 1下边又多了一个 LED.c 文件。
图 2-16 添加文件(二)
二、用C语言编写单片机程序
准备工作做了那么多,终于要编写程序代码了。
第一个单片机程序:
#include <reg52.h> //包含特殊功能寄存器定义的头文件
sbit LED = P0^0; //位地址声明,注意:sbit 必须小写、P 大写!
void main(){ //任何一个 C 程序都必须有且仅有一个 main 函数
LED = 0; //分号表示一条语句结束
}
先从程序语法上来分析一下:
main是主函数的函数名字,每一个 C 程序都必须有且仅有一个 main 函数。
void是函数的返回值类型,本程序没有返回值,用 void 表示。
{ } 在这里是函数开始和结束的标志,不可省略。
每条 C 语言语句以;结束的。
逻辑上来看,程序这样写就可以了,但是在实际单片机应用中,存在一个问题。
比如我们的程序空间可以容纳 100 行代码,但是我们实际上的程序只用了 50 行代码,当运行完了50 行,再继续运行时,第 51 行的程序不是我们想运行的程序,而是不确定的未知内容,一旦执行下去程序就会出错从而可能导致单片机自动复位,所以我们通常在程序中加入一个死循环,让程序停留在我们希望的这个状态下,不要乱运行,有以下两种写法可以参考:
参考程序一:
#include <reg52.h>
sbit LED = P0^0;
void main(){
while(1){
LED = 0;
}
}
参考程序二:
#include <reg52.h>
sbit LED = P0^0;
void main(){
LED = 0;
while(1);
}
程序一的功能是程序在反复不断的无限次执行 LED = 0;这条语句,而程序二的功能是执行一次,然后程序直接停留下来等待,相对程序一来说程序二更加简洁一些。
我们的开发板上,还有一个 74HC138 作为 8 个 LED 小灯的总开关,而 P0.0 仅仅是个分开关。如同我们家里总是有一个供电总闸,然后每个电灯又有一个专门的开关,我们刚才的程序仅仅打开了那个电灯的开关,但是没有打开那个总电闸,所以程序需要加上这部分代码。
因为要介绍的内容比较多,所以我们把 74HC138 的原理以及为什么要加额外的代码在以后统一介绍,这次小瓦君直接加上这部分代码,大家知道有这么一回事就可以了。
#include <reg52.h> //包含特殊功能寄存器定义的头文件
sbit LED = P0^0; //位地址声明,注意:sbit 必须小写、P 大写!
sbit ADDR0 = P1^0;
sbit ADDR1 = P1^1;
sbit ADDR2 = P1^2;
sbit ADDR3 = P1^3;
sbit ENLED = P1^4;
void main(){
ENLED = 0;
ADDR3 = 1;
ADDR2 = 1;
ADDR1 = 1;
ADDR0 = 0;
LED = 0; //点亮小灯
while (1); //程序停止在这里
}
程序编好了,我们要对程序进行编译,生成需要的可以下载到单片机里的文件,在编译之前,我们先要勾选一个选项,Project-->Options for Target Target1...,或者直接点图 2-17 中红框内的快捷图标:
图 2-17 工程选项图标
在弹出的对话框中,点击 Output 选项页,勾选其中的“Create HEX File”复选框,然后点 OK,如图 2-18 所示。
图 2-18 创建 HEX 文件
设置好以后呢,点击“Project-->rebuild all target files”,或者鼠标点击图 2-19 中红框内的快捷图标,就可以对程序进行编译了。
图2-19 编译程序
编译完成后,在 Keil 下方的 Output 窗口会出现相应的提示,大家注意看图 2-20,这个窗口告诉我们编译完成后的情况
data=9.0 ,指的是程序使用了单片机内部的 256字节 RAM 资源中的 9 个字节,
code=29 的意思是使用了 8K 代码 Flash 资源中的 29 个字节。
当提示“0 Error(s), 0 warning(s)”表示我们的程序没有错误和警告,就会出现“creating hex file from “LED”...,意思是从当前工程生成了一个 HEX 文件,我们要下载到单片机上的就是这个HEX 文件。
如果出现有错误和警告提示的话,就是 Error 和 warning 不是 0,那么我们就要对程序进行检查,找出问题,解决好了再进行编译产生 HEX 才可以。
图2-20 编译输出信息
到此为止,程序就编译好了,下边我们就要把编译好的程序文件下载到单片机里了。
三、将程序下载到单片机
首先,要把硬件连接好,把板子插到电脑上,打开设备管理器查看所使用的是哪个 COM 口,如图 2-21 所示,找到“USB-SERIAL CH340(COM5)”这一项,这里最后的数字就是开发板目前所使用的 COM 端口号。
图 2-21 查看COM口
然后 STC 系列单片的下载软件——STC-ISP,如图 2-22 所示。
图2-22 程序下载设置
下载软件列出了 5 个步骤:
第一步,选择单片机型号,我们现在用的单片机型号是STC89C52RC,这个一定不能选错了;
第二步,点击“打开程序文件”,找到我们刚才建立工程的那个 lesson2 文件夹,找到 LED.hex 这个文件,点击打开;
第三步,选择刚才查到的 COM口,波特率使用默认的就行;
第四步,这里的所有选项都使用默认设置,不要随便更改,有的选项改错了以后可能会产生麻烦。
第五步,因为 STC 单片机要冷启动下载,就是先点下载,然后再给单片机上电,所以先关闭板子上的电源开关,然后点击“Download/下载”按钮,等待软件提示你请上电后,如图 2-23 所示,然后再按下板子的电源开关,就可以将程序下载到单片机里边了。
当软件显示“已加密”就表示程序下载成功了,如图 2-24 所示。
图 2-23 程序下载过程
图 2-24 程序下载完毕
程序下载完毕后,就会自动运行,大家可以在板子上看到那一排 LED 中最右侧的小灯已经发光了。那现在如果我们把 LED = 0 改成 LED = 1,再重新编译程序下载进去新的 HEX 文件,灯就会熄灭。
至此,点亮一个 LED 的实验已经完成,终于迈出了第一步,是不是还挺好玩的呢!
点击“学学”菜单栏!获取更多机器人和单片机的相关知识,还有DIY教程哦~
回复“单片机”,获取51单片机电子教案(C语言完整版)
为您提供:
【前沿资讯】跟踪国内外机器人领域前沿最新动态
【萝卜知识】完整的机器人专业知识学习路径,人人都可以成为创客
【实践通道】提供机器人相关的产品、爱好者社区,以及工作实践机会
热门跟贴