51单片机-LED闪烁

目录

    • 基本知识
    • 程序
    • 仿真(测试延时函数)

基本知识

延时函数

void delay(u16 i)//大约延时10us
{
	while(i--);	
}

利用while循环来占用CPU的执行时间
特点:不精确,后面会讲到用定时器和辅助软件来做

typedef使用

typedef unsigned char u8;
typedef unsigned int u16;

语句后面要加分号
tepedef前面不要加#

作用:

  • 重新定义一些常用的关键词,可以增强程序的可移植性
  • 方便判断取值范围

unsigned char是一个字节(8位:0~255):用u8代替
unsigned int是两个字节(16位:0~65535):用u16代替

程序

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


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


void delay(u16 i)
{
	while(i--);	
}


void main()
{
	while(1)
	{
		led=0;
		delay(50000); //大约延时450ms
		led=1;
		delay(50000); //大约延时450ms	
	}		
}

仿真(测试延时函数)

仿真前设置
设置12M晶振
51单片机-LED闪烁_第1张图片
确定软件使用仿真
51单片机-LED闪烁_第2张图片
打开仿真
在这里插入图片描述
设置断点
在这里插入图片描述
点击①处reset复位
令②处时间值为零

51单片机-LED闪烁_第3张图片
开始仿真
图一
51单片机-LED闪烁_第4张图片
图二
51单片机-LED闪烁_第5张图片
用图二的sec值减去图一的可得延时值,延时大概为450ms,误差大概为50ms

使用辅助软件计算出来的精确延时函数程序如下:

void delay500ms(void)   //误差 0us
{
    unsigned char a,b,c;
    for(c=23;c>0;c--)
        for(b=152;b>0;b--)
            for(a=70;a>0;a--);
}

大家要是觉得文章还行,就给我点个赞鼓励一下吧

你可能感兴趣的:(51单片机)