目录

前言

一、使用Keil5创建一个项目

1、项目的创建

2、主体文件的创建

3、.hex文件的编译

二、 STC-ISP辅助软件的使用

1、STC-ISP介绍

2、STC-ISP的使用

三、LED模块及介绍

1、LED模块

2、LED模块介绍

四、编写C代码实现LED的活动

1、点亮一个LED

2、让一个LED闪烁

3、LED流水灯

总结


前言

        从本章开始,将会介绍如何实现单片机的相关功能。涉及到如何创建工程,编写C语言代码,和相关软件的使用(如何烧录程序到单片机)。


一、使用Keil5创建一个项目

1、项目的创建

        双击打开Keil5软件后,在菜单栏中点击“Project”后,再点击下方的“New μVision Project”。

        之后会提示选择创建项目的位置

        这里我创建一个名为KeilProject的文件夹,用来保存所有的Keil文件。点击打开后,还需要在创建一个项目。

        再点击打开后,在下方文件名位置输入“Project”(这个文件名可随意,尽量使用通用或易懂的名称)。

        点击保存之后,会提示输入所拥有的单片机的型号。

         这里我们点击“Atmel”左方加号,并下拉,找到“AT89C52”。

         点击OK,界面会提示我们“是否将‘STARTUP.A51’复制到工程文件夹并将文件添加到Project中?”。这里我们选择否,不用创建。

 

        如此便完成了项目的创建。

2、主体文件的创建

        首先右键左方项目中“Source Group 1”,在下拉菜单中点击“Add New Item...”。

        在弹出的文件设置界面中,选择C File,文件命名为main(第一个项目文件都应是main文件)。

        随后点击Add,即可添加完成。

        此后,编写有关于单片机的C语言代码用该软件即可。

3、.hex文件的编译

        在Keil中编译好程序之后,直接点击Build,是不会创建hex文件的。需要点击Options,再点击Output标签,勾选上“Create HEX File”,再点击OK。即可在点击Build后,创建hex文件。(.hex文件用于使用STC-ISP软件对单片机进行程序烧录)

         它会自动将生成的.hex文件保存在Project文件夹中。


二、 STC-ISP辅助软件的使用

1、STC-ISP介绍

        STC-ISP是针对STC单片机设计的在线下载程序,可用于对STC单片机进行编程、调试和烧录等操作。同时其内部集成了“定时器计算器”“软件延时计算器”等工具,在使用时会有很大帮助。

2、STC-ISP的使用

(1)首先在单片机型号中选择对应的型号。这里使用的是“STC89C52RC

 (2)选择好后,点击“打开程序文件”。

 (3)在弹出的打开文件窗口中,找到我们用Keil编译生成的.hex文件。

(4)导入之后,点击“下载/编程”。(需要重新开关单片机)

 注:一定要检查单片机是否与电脑连接成功,在选择对应的型号并连接之后,会自动扫描,显示串口名称。如下。此时COM3是在后方括号内,表示成功连接。

(5)完成以上步骤后,会在右下方的提示区显示“操作成功”,单片机也随之完成相应程序。


三、LED模块及介绍

1、LED模块

2、LED模块介绍

        图中D1~D8分别为8个LED灯,RP9与RP10是两组限流电阻,每组四个。P20~P27表示P2寄存器中八个LED的编号,分别对应为0~7。

        那如何实现点亮LED灯呢?在单片机中,CPU通过直接访问P2寄存器的方式,让对应的寄存器分别输出高电平或低电平(1代表高电平,0代表低电平)。这样就可以实现控制LED模块中LED灯的发亮或熄灭了。

        我们使用的LED模块中有8个LED,只需要让寄存器给对应LED传输发亮或熄灭的指令即可,上面提到用1或0代表高或低电平,高电平熄灭,低电平发亮。这样用8个1或0组合即可控制对应位的灯是否发亮。如1110 1111表示让第五个LED灯发亮(从右往左读),也就是对应图中编号为D5的LED发亮。

        这个8个LED灯的状态是由P2寄存器给定的,所以要将该指令给到P2。

        可以发现,这一串数就相当于是一个二进制数,而在C语言中无法写二进制数(会自动被识别成十进制),所以就需要学会数制的转换,转换成16进制数。1110 1111转换成16进制数即为0xEF(C语言中表示16进制数要在前方加上0x)。

        二进制转换成十六进制可以使用计算器来辅助操作。下面进行C语言实现LED模块相关功能。


四、编写C代码实现LED的活动

1、点亮一个LED

(1)原理分析:

        点亮第5个LED,其对应的二进制数为1110 1111,转换成16进制数为0xEF。P2表示寄存器,控制寄存器等于该段数值即可。

        注意要引入<REGX52.H>这个头文件。编写好代码后,构建代码并生成.hex文件,使用STC-ISP将程序烧录到单片机中。(程序烧录请详看STC-ISP的使用)

(2)代码示例:

#include <REGX52.H>

void main(){
	P2=0xEF;    //1110 1111
}

        要实现点亮其它LED或多个LED,可以更改赋予P2的值,如0101 0101 对应的十六进制数为0x55。

(3)实物演示:


2、让一个LED闪烁

(1)原理分析:

        要实现LED的闪烁,需要有三步。第一将LED点亮,第二将该LED熄灭,第三步将前两步进行循环,以此实现LED的闪烁。

        第一步将一个LED点亮,在第一个示例中已经实现。第二步也不难实现,即在P2中将控制该LED状态的命令更改。如点亮D1,二进制数为1111 1110,熄灭即是1111 1111。对应十六进制为0xFE(点亮),0xFF(熄灭)。

        再通过一个while循环,将两个状态写入循环结构内。不过因为单片机的计时是近乎瞬间的。所以要设置一个延时器,否则将没法观察出LED的亮灭变化。

        这里使用到STC-ISP辅助工具中的延时器功能。

        点击STC-ISP中的“软件延时计算器”按钮,将系统频率设置到“12.000Hz”,定时长度改为500,单位改为“毫秒”(1秒=1000毫秒),8051指令集为“STC-Y1”,如下。

        点击生成C代码,再点击“复制代码”,将得到的代码复制到Keil项目中去。这样我们便创建了一个延时器。因为创建的函数中有_nop()_函数,所以在代码中还需要调用<INTRINS.H>头文件。

        在循环结构中,点亮和熄灭后分别调用该函数,即可实现LED闪烁。

(2)代码示例:

#include <REGX52.H>
#include <INTRINS.H>
void Delay500ms(void)	//@12.000MHz
{
	unsigned char data i, j, k;

	_nop_();
	i = 4;
	j = 205;
	k = 187;
	do
	{
		do
		{
			while (--k);
		} while (--j);
	} while (--i);
}

void main()
{
		while(1)
		{
			P2=0xFE;
			Delay500ms();
			P2=0xFF;
			Delay500ms();
		}

}

(3)实物演示:


3、LED流水灯

(1)原理分析:

        在LED灯闪烁的基础上,改变每次亮灭的灯,即上一个灯熄灭,下一个灯亮,以此往复即可实现流水灯,当然其中仍需要使用延时器。

(2)代码示例:

#include <REGX52.H>
#include <INTRINs.H>
void Delay500ms(void)	//@12.000MHz
{
	unsigned char data i, j, k;

	_nop_();
	i = 4;
	j = 205;
	k = 187;
	do
	{
		do
		{
			while (--k);
		} while (--j);
	} while (--i);
}

void main()
{
	while(1)
	{
		P2=0xFE; //1111 1110
		Delay500ms();
		P2=0xFD; //1111 1101
		Delay500ms();
		P2=0xFB; //1111 1011
		Delay500ms();
		P2=0xF7; //1111 0111
		Delay500ms();
		P2=0xEF; //1110 1111
		Delay500ms();
		P2=0xDF; //1101 1111
		Delay500ms();
		P2=0xBF; //1011 1111
		Delay500ms();
		P2=0x7F; //0111 1111
		Delay500ms();		
	}
}

(3)实物演示:


总结

        本章主要介绍了Keil软件和STC-ISP辅助软件的使用,以及如何编写代码使单片机实现以上三种简单LED模块的功能。

        大家也可以尝试在本章基础上,编写代码,来实现更有意思的功能(比如在流水灯的基础上,改进成贪吃蛇式的)

        下章内容将使用到“独立按键”模块。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐