基于51单片机开发板的应用(LED灯)

      再有了C语言和C++的一些应用能力与项目经验之后,我对单片机有了一定的兴趣。买了一套开发板,跟着视频学习了一段时间。

    之前学校里也上过关于单片机的课程,而且还是我们班主任上的,听得那叫一个认真啊,再有了一些原理、概念的了解之后,我很想能做出一点东西出来,就先开始自己学习,毕竟学校里是以理论为主,而对于这么一门侧重于硬件的学科,还是实际动手能理解的更透彻。

    而对于单片机,最简单的一个应用就是流水灯了,这就是与LED灯有关的应用了。

    下面有四个与LED灯有关的程序。

     1、点亮一个LED灯

      这个是最基础的,无非就是任意一个P口与LED灯相连,而最好是用P1口,因为它只作因为为I/O口使用,P0和P2口也可用,P3口有第二功能,一般不用。接下来就是延时函数的作用了,这样就可以看出一闪一闪的。

      我用到的delay()函数:

void delay(unsigned char i)
{
	unsigned char j,k;
	for(j=0; j<255; j++)
		for(k=0; k

第二个for循环是空操作,而外层的for循环则是表示延迟,就是“空转”。


完整代码:

#include

//LED灯

//1、点亮一个LED灯
sbit P1_0 = P1^0;

void delay(unsigned char i)
{
	unsigned char j,k;
	for(j=0; j<255; j++)
		for(k=0; k


    2、让8个LED灯亮灭
    一个与八个的区别在于一个是连P口的一个引脚,而八个则是要连接整个的P1口,就是在定义的时候有所不同。P1_0要定义,而用到P1则可以直接使用。

代码:

//2、让8个LED灯亮灭
void delay(unsigned char i)
{
	unsigned char j,k;
	for(j=0; j<255; j++)
		for(k=0; k


     3、8个灯灭延时大约200ms

     延时大约200ms因为不是一个准确的概念,所以用到了一个公式即可。在晶振为12MHZ时,D=2t+7(此处的D和t的单位为us)。要得到ms单位的延时,可以写两个函数,一个是DelayUs2x(),另一个是DelayMs()。

代码:

//3、8个灯灭延时大约200ms
void DelayUs2x(unsigned char t)
{
	while(--t);
}
void DelayMs(unsigned char t)
{
	while(t--)
	{
		DelayUs2x(245);
		DelayUs2x(245);	
	}
}
void main(void)
{
	while(1)
	{
		P1=0x00;
		DelayMs(200);
		P1=0xff;
		DelayMs(200);
	}
}


    4、8个灯一个一个亮(0为亮),先左往右点亮(左移),再从右往左点亮(右移)

    这个就可以用来做流水灯了,让LED灯“动”起来。可以凭心意改变灯移动的方向和亮灭的时间。我只是简单的写了一个程序。

代码:

//4、8个灯一个一个亮(0为亮),先左往右点亮(左移),再从右往左点亮(右移)
void delay(unsigned char i)
{
	unsigned char j,k;
	for(j=0; j<255; j++)
		for(k=0; k>=1;
		}
	}
}





      

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