51单片机入门学习------LED灯

一.LED灯的电路图

51单片机入门学习------LED灯_第1张图片

  低电平有效

1. 让第一个LED灯亮起 

  第一个灯:电平从下向上依次是 1111 1110  , 转为16进制是0xFE(0x是16进制标志)

 第2-8的LED同理

 点亮第1个LED     P2 = 0xFE;      //1111 1110

点亮第2个LED    P2 = 0xFD;      //1111 1101
点亮第3个LED   P2 = 0xFB;      //1111 1011
点亮第4个LED   P2 = 0xF7;      //1111 0111
点亮第5个LED    P2 = 0xEF;      //1110 1111
点亮第6个LED    P2 = 0xDF;      //1101 1111
点亮第7个LED     P2 = 0xBF;      //1011 1111
点亮第8个LED    P2 = 0x7F;      //0111 1111

2. 让所有LED熄灭

 电平从下向上依次是 1111 1111  ,  转为16进制是0xFF

P2 = 0xFF;      //1111 1111

3.延迟函数

想要让LED灯闪烁需要用到延迟函数

延迟函数可以在下图标红处根据要求给出,复制到程序中即可。

其中使用到_nop_(); ,需要加入 #include 头文件(大小写随意)

51单片机入门学习------LED灯_第2张图片

也可以写一个带参的延迟函数,自定义时长。

void Delay1ms(unsigned int xms)        //@12.000MHz
{
    unsigned char i, j;
    while(xms)
    {
        i = 2;
        j = 239;
        do
        {
            while (--j);
        } while (--i);
        xms --;
    }
}

4.跑马灯总程序

#include 

void Delay1ms(unsigned int xms)		//@12.000MHz
{
	unsigned char i, j;
	while(xms)
	{
		i = 2;
		j = 239;
		do
		{
			while (--j);
		} while (--i);
		xms --;
	}
}

void mian()
{
	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);
	}
}

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