8051单片机实战分析(以STC89C52RC为例) | 02 - LED延时约5s闪烁
原创
©著作权归作者所有:来自51CTO博客作者Neutionwei的原创作品,请联系作者获取转载授权,否则将追究法律责任
建议先看《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位数据,可以表示从 0 到 65535(2^16-1) 这些数,同理使用 u8 代替 unsigned char。
- 增加 delay 函数,该函数实现死循环的自减,从而达到延时的目的,以后我们会知道这种方式是不建议使用的,然在这里粗略可实现LED延时约5s闪烁。