单片机学习笔记-day01_LED灯亮起与闪烁_C51数据类型

MCU 单片机学习笔记

Day1 2025.8.6

江科大课程-学习控制LED灯亮起与闪烁

C51数据类型

image-20250806231204347

//控制LED逐一亮起,额定间隔500ms
#include <REGX52.H>
#include <INTRINS.H>  //_nop_()方法需要引用

void Delay500ms();//实现延迟500毫秒	//@12.0MHz

void main()
{
	while(1)
	{
		P2 = 0xFE; //1111 1110 八位二进制控制八个灯,0亮起,1熄灭
		Delay500ms();
		P2 = 0xFD; //1111 1101
		Delay500ms();
		P2 = 0xFB; //1111 1011
		Delay500ms();
		P2 = 0xF7; //1111 0111
		Delay500ms();
		P2 = 0xEF; //1110 1111
		Delay500ms();
		P2 = 0xDF; //1101 1111
		Delay500ms();
		P2 = 0xBF; //1011 1111
		Delay500ms();
		P2 = 0x7F; //0111 1111
		Delay500ms();
	}
}

void Delay500ms()	//@12.0MHz
{
	unsigned char data i, j, k;

	_nop_();
	i = 4;
	j = 205;
	k = 187;
	do
	{
		do
		{
			while (--k);
		} while (--j);
	} while (--i);
}
//优化版本
#include <REGX52.h>

void Delay1ms(unsigned int xms)  //延迟,可通过传入参数控制
{
	unsigned char i,j;
	while(xms)
	{
		i = 2;
		j = 239;
		do
		{
			while (--j);
		} while (--i);
		xms--;
	}
}

void main()
{
    //自写代码,使用数组控制,待测试(2025.8.6)
    //测试完成,可用(2025.8.7)
	unsigned int P2Arr[] = {0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F},i = 0;
	while(1)
	{
		if(i>7)
		{
			i=0;
		}
		P2 = P2Arr[i];
		Delay1ms(500);
		i++;
	}
	/*
	while(1){                     //优化后的代码
		P2 = 0xFE; //1111 1110
		Delay1ms(500);
		P2 = 0xFD; //1111 1101
		Delay1ms(500);
		P2 = 0xFB; //1111 1011
		Delay1ms(500);
		P2 = 0xF7; //1111 0111
		Delay1ms(500);
		P2 = 0xEF; //1110 1111
		Delay1ms(500);
		P2 = 0xDF; //1101 1111
		Delay1ms(500);
		P2 = 0xBF; //1011 1111
		Delay1ms(500);
		P2 = 0x7F; //0111 1111
		Delay1ms(500);
	}
	*/
}
posted @ 2025-08-08 01:06  Acholl  阅读(32)  评论(0)    收藏  举报