51单片机入门(2)

目录

前言

一、使用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模块的功能。

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

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

  • 31
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
STC51单片机手册是一本详细介绍STC51系列单片机功能、使用方法和特性的参考书籍。它包含了单片机的硬件架构、指令集、编程语言以及各种外设模块的使用说明。 首先,STC51单片机手册详细介绍了单片机的硬件架构。它包括了处理器核心、内存、时钟系统、IO口以及其他外设模块的连接方式和工作原理。通过手册,用户可以了解单片机内部结构以及各个模块之间的通信方式,这对于正确使用单片机至关重要。 其次,手册提供了单片机的指令集说明,即各种指令的功能和使用方法。用户可以根据需求选择合适的指令来实现特定的功能,比如数据处理、IO控制等。通过手册的指令集说明,用户可以了解每个指令的具体功能和操作方式,帮助编写正确的程序。 此外,STC51单片机手册还提供了丰富的编程示例和应用案例。这些示例和案例代码涵盖了单片机的各个方面,包括数字电子设计、模拟电子设计、通信接口设计等。用户可以通过学习和借鉴这些实例代码,加深对单片机的理解和应用能力。 最后,手册还介绍了各种外设模块的使用方法和特点,比如定时器、串口、ADC/DAC等。用户可以根据手册的说明,正确配置这些外设模块,实现更加复杂的功能和应用。 总之,STC51单片机手册是一本非常重要的参考书籍,旨在帮助用户深入了解和灵活应用STC51单片机。通过手册的指导,用户可以掌握单片机的基本原理、编程方法和外设模块的使用技巧,从而能够更好地应用单片机来完成各种电子设计和嵌入式系统开发任务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

扶光°

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值