蓝桥杯-单片机组:51单片机Keil5程序编写与STC烧录流程详解

软件平台:Keil C51开发环境、STC ISP V6.85H程序下载软件

单片机型号:IAP15F2K61S2

硬件平台:国信天长4T四梯开发板(绿板)、国信天长单片机综合实训平台(蓝板)。二者内部硬件资源一致,不会出现板子不兼容问题,主要的区别在于4T绿板的单片机芯片直接焊接在了板子上,蓝板芯片采用传统的拔插式。

        其他开发板(如普中51开发板等与此流程相同,只是代码需要单独编写)

蓝桥杯备赛思路与指南:戳此跳转到备赛指南


硬件概览

4T绿板:

蓝板:

两个板子的原理图基本一致,都可以拿来作为备赛使用,比赛大部分地区是采用绿板,绿板也是比较新的版本。

软件操作流程

keil C51开发环境与STC ISP下载环境图标:

1.1新建keil C51工程文件

要注意路径和文件名不能出现任何中文,否则编译会出现无法解决的玄学问题。

设置工程路径与工程名,我设置的工程名是test

选择AT89C51芯片

选择“是”,将配置文件导入项目工程

打开导航栏的工程目录

在Source Group文件夹中新建C语言文件,用于编写代码

设置C语言文件名与保存路径

经过上述步骤后,文件新建完成,但我们还需要进行软件设置,使之可以正常输入代码内容

1.2设置中文字符

设置中文字符(用于正常显示中文注释,若不设置,代码中的中文注释会编程下图样式)

步骤如下:

在Editor栏目下设置简体中文Simplified编码字符

1.3 设置编译输出为16进制的.hex文件

勾选生成.hex文件,我设置的工程名为test,则最后生成的文件名为 test.hex

1.4 设置完成,输入c语言代码进行编译

以下代码功能:通过按下S7的次数来调节L1灯光的亮暗,共有五个挡位,溢出复位。

将以下代码拷贝到keil C51开发环境中,也可自行编写代码,非蓝桥杯官方的绿板和蓝板则需要根据自己的开发板重新写代码。

//按键S7通过调制pwm来控制LED1的亮度
#include < REGX52.h >
#include < INTRINS.h >

sbit S7 = P3^0;
sbit L1 = P0^0;

//设置38译码器工作模式
void select_HC573 ( unsigned char channal )
{
	switch ( channal )
	{
		case 4:
			P2 = ( P2 & 0x1f ) | 0x80;
		break;
		case 5:
			P2 = ( P2 & 0x1f ) | 0xa0;
		break;
		case 6:
			P2 = ( P2 & 0x1f ) | 0xc0;
		break;
		case 7:
			P2 = ( P2 & 0x1f ) | 0xe0;
		break;
	}
}

//延时函数定义
void Delay ( unsigned char value_delay )
{
	while ( value_delay -- )
	{
		unsigned char i,j;		
		_nop_ ();
		_nop_ ();

		i = 22;
		j = 128;
		do
		{
			while ( --j );
		}while ( --i );
	}
}

//扫描判定S7是否被按下,并返回键值
unsigned char key_value = 1;
void scan_key ()
{
	if ( S7 == 0 )
	{
		Delay ( 3 );
		if ( S7 == 0 )
		{
			while ( S7 == 0 );
			key_value ++ ;
			if ( key_value == 5 )
			{
				key_value = 1;
			}
		}
	}
}

//==========设置定时器===================================
void Init_Timer0 ()
{
	TMOD = 0x01;
	TH0 = ( 65535 - 100 ) / 256;
	TL0 = ( 65535 - 100 ) % 256;
	ET0 = 1;
	EA = 1;
	TR0 = 1;
}

unsigned char pwm_count = 0;
void Service_Timer0 () interrupt 1
{
	TH0 = ( 65535 - 100 ) / 256;
	TL0 = ( 65535 - 100 ) % 256;
	pwm_count++;
}

//======设置pwm=========================================

void set_pwm ( unsigned char duty_pwm )
{
	if ( pwm_count <= duty_pwm )
	{
		L1 = 0;
	}
	else if ( pwm_count < 100 )
	{
		L1 = 1;
	}
	else if ( pwm_count == 100 )
	{
		pwm_count = 0;
	}
	
}

//根据计数值设置灯光亮度
void L1_pwmrunning ()
{
	switch ( key_value )
	{
		case 1:
			TR0 = 0;
			L1 = 1;		
		break;
		case 2:
			TR0 = 1;
			set_pwm ( 10 );
		break;			
		case 3:
//			TR0 = 1;
			set_pwm ( 50 );
		break;			
		case 4:
//			TR0 = 1;
			set_pwm ( 90 );
		break;
	}
}

void main ()
{
	select_HC573 ( 5 );
	P0 = 0x00;
	select_HC573 ( 4 );
	P0 = 0xff;
	Init_Timer0 ();
	while ( 1 )
	{
		scan_key ();
		L1_pwmrunning ();
	}
}

1.5 编译C语言代码文件

可以看到编译完成

1.6 将生成的hex文件烧录进开发板

使用开发板对应的数据下载线,将单片机与电脑插到一起

打开STC ISP软件,选择对应的芯片型号(需要手动选择)与扫描串口(会自动选择),并点击打开程序文件

打开工程文件目录下的Objects文件夹

选择与工程名相同的.hex文件,并点击打开

点击下载/编程

按一下开发板上的下载按钮,或者重启一下开发板的电源开关

程序下载成功

此时可以通过按下矩阵键盘左上角的S7控制L1的明亮程度,共有三个挡位。

物联沃分享整理
物联沃-IOTWORD物联网 » 蓝桥杯-单片机组:51单片机Keil5程序编写与STC烧录流程详解

发表评论