1、基础介绍
LED灯,即发光二极管,有正极负极之分,方向接入正确,并且电流合适时,LED灯才会被点亮,如下图:
为了防止电流过高,LED灯被烧坏,通常会加一个限流电阻。
2、点亮LED小灯(以普中的板子为例,下同)
#include "reg52.h" //此文件中定义了一些特殊功能寄存器
sbit led=P2^0; //将单片机的P2.0端口定义为led
void main()
{
while(1)
{
led=0; //P2.0端口设置为低电平
}
}
3、单边流水灯
#include<reg52.h>
typedef unsigned int u16;
typedef unsigned char u8;
void main()
{
u16 i = 0;
u8 cnt = 0;
while(1)
{
P2 = ~(0x01<<cnt);
for(i = 0;i<20000;i++);
cnt++;
if(cnt>=8)
{
cnt = 0;
}
}
}
4、双向循环流水灯(不使用定时器)
//流水灯,双向循环
#include<reg52.h>
typedef unsigned int u16;
typedef unsigned char u8;
void main()
{
u16 i = 0;
u8 cnt = 0;
while(1)
{
for(cnt = 0;cnt<8;cnt++)
{
P2 = ~(0x01<<cnt);
for(i = 0;i<20000;i++);
}
for(cnt = 0;cnt<7;cnt++)
{
i=0;
P2 = ~(0x80>>cnt);
for(i = 0;i<20000;i++);
}
}
}
双向循环流水灯(使用定时器)
//定时器实现流水灯,双向循环
#include<reg52.h>
typedef unsigned int u16;
typedef unsigned char u8;
void main()
{
u16 i = 0;
u8 cnt = 0;
TMOD = 0x01;
TH0 = 0xB8;
TL0 = 0x00;
TR0 = 1;
while(1)
{
while(i<8)
{
if(TF0 == 1)
{
TF0 = 0;
TH0 = 0xB8;
TL0 = 0x00;
cnt++;
if(cnt>=20)
{
cnt = 0;
P2 = ~(0x01<<i);
i++;
}
}
}
i=0;
while(i<8)
{
if(TF0 == 1)
{
TF0 = 0;
TH0 = 0xB8;
TL0 = 0x00;
cnt++;
if(cnt>=20)
{
cnt = 0;
P2 = ~(0x80>>i);
i++;
}
}
}
i=0;
}
}
前一篇: 单片机学习(1)——基础知识
下一篇: 单片机学习(3)——数码管的显示+定时器+中断