您的位置:首页 > 其它

51单片机最简LED驱动

2016-11-20 22:58 253 查看
得到8盏LED交替亮灭的实验效果

#include <reg51.h>

void Delay10ms(unsigned int c); // 延时10ms

void main()

{

while(1)

{

P0 = 0x00; // 设置 P0 为低电平

Delay10ms(50); // 延时

P0 = 0xff; // 设置 P0 为高电平

Delay10ms(50); // 延时

}

}

void Delay10ms(unsigned int c)

{

unsigned char a, b;

for (; c > 0; c--)

{

for (b = 38; b > 0; b--)

{

for (a = 130; a > 0; a--);

}

}

}

LED灯做二进制加1显示

#include <reg51.h>

void Delay10ms(unsigned int c); // 延时10ms

void main()

{

unsigned char count = 0x00;

while(1)

{

P0 = count;

Delay10ms(50); // 延时

count++;

}

}

void Delay10ms(unsigned int c)

{

unsigned char a, b;

for (; c > 0; c--)

{

for (b = 38; b > 0; b--)

{

for (a = 130; a > 0; a--);

}

}

}

延时实现LED流水灯效果P2口八个灯作跑马灯

#include <reg51.h>

// #include <intrins.h>

/** intrins.h 方法

_crol_ 字符循环左移

_cror_ 字符循环右移

_irol_ 整数循环左移

_iror_ 整数循环右移

_lrol_ 长整数循环左移

_lror_ 长整数循环右移

_nop_ 空操作8051 NOP 指令

_testbit_ 测试并清零位8051 JBC 指令函数名: _crol_,_irol_,_lrol_

*/

void Delay10ms(unsigned int c); // 延时10ms

void main()

{

unsigned char LED;

LED = ~0xfe; // 0xfe = 1111 1110

while(1)

{

P0 = LED;

Delay10ms(50); // 延时

LED <<= 1;

if (P0 == 0x00)

{

LED = ~0xfe;

}

// LED = _crol_(LED, 1);

}

}

void Delay10ms(unsigned int c)

{

unsigned char a, b;

for (; c > 0; c--)

{

for (b = 38; b > 0; b--)

{

for (a = 130; a > 0; a--);

}

}

}

LED灯做跑马灯左右移动

#include <reg51.h>

void Delay10ms(unsigned int c); // 延时10ms

unsigned char LED;

void main()

{

unsigned char i;

LED = 0xfe; // 0xfe = 1111 1110

while(1)

{

for (i = 0; i < 7; i++)

{

P0 = LED;

Delay10ms(50);

LED <<= 1;

LED |= 0x01;

}

for (i = 0; i < 7; i++)

{

P0 = LED;

Delay10ms(50);

LED >>= 1;

LED |= 0x80;

}

}

}

void Delay10ms(unsigned int c)

{

unsigned char a, b;

for (; c > 0; c--)

{

for (b = 38; b > 0; b--)

{

for (a = 130; a > 0; a--);

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: