蓝桥杯-单片机组: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的明亮程度,共有三个挡位。