51单片机之LED
LED介绍
点亮第一个小灯
#include <REGX52.H>
void main()
{
P2 = 0xfe;//1111 1110
while(1)
{
}
}
LED的亮灭
下面展示一些 内联代码片
。
#include <REGX52.H>
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--);
}
void main()
{
P2 = 0xff;
Delay500ms();
P2 = 0xfe();
Delay500ms();
}
LED流水灯
下面展示一些 内联代码片
。
#include <REGX52.H>
#include <REGX52.H>
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--);
}
void main()
{
P2 = 0xff;//1111 1111
Delay500ms();
P2 = 0xfe();//1111 1110
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();
}
延时函数的改进
用1ms程序进行改进 ,使其只需要改动内部参数就可以改变延时时间。
void delay1ms(unsigned int xms) //误差 0us
{
unsigned char a,b,c;
while(xms)
{
for(c=1;c>0;c--)
for(b=142;b>0;b--)
for(a=2;a>0;a--);
xms--;
}
}
总结
遇到的问题
进行延时函数改进时,误把while(xms)写成while(1),导致形成死循环,一直看不到结果。
需要进一步做的
16位二进制转换16进制速度较慢,接下来应熟练掌握。