单片机学习笔记-day01_LED灯亮起与闪烁_C51数据类型
MCU 单片机学习笔记
Day1 2025.8.6
江科大课程-学习控制LED灯亮起与闪烁
C51数据类型

//控制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);
}
*/
}

浙公网安备 33010602011771号