建议先看《​​8051单片机实战分析(以STC89C52RC为例) | 01 - 点亮一个LED​​》,我们从这个基础上修改代码。

代码修改如下:

#include "reg52.h"       //此文件中定义了单片机的一些特殊功能寄存器
typedef unsigned int u16; //对数据类型进行声明定义
typedef unsigned char u8;


sbit led=P2^2; //将单片机的P2.2端口定义为led

/*******************************************************************************
* 函 数 名 : delay
* 函数功能 : 延时函数,i=1时,大约延时10us
*******************************************************************************/
void delay(u16 i)
{
while(i--);
}

/*******************************************************************************
* 函 数 名 : main
* 函数功能 : 主函数
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
void main()
{
while(1)
{
led=0;
delay(50000); //大约延时450ms
led=1;
delay(50000); //大约延时450ms
}
}
  • 代码中使用了 typedef 对数据类型进行声明定义,这是C语言的一个语法,这个很好理解,在这里就是使用 u16 代替 unsigned int,在8位单片机中表示16位数据,可以表示从 065535(2^16-1) 这些数,同理使用 u8 代替 unsigned char
  • 增加 delay 函数,该函数实现死循环的自减,从而达到延时的目的,以后我们会知道这种方式是不建议使用的,然在这里粗略可实现LED延时约5s闪烁。