找回密码
 注册会员
搜索附件  
MCU资讯论坛 附件中心 单片机论坛 51单片机论坛 LED_单片机控制led.zip

LED_单片机控制led.zip

 

单片机写的波浪状的流水灯:

单片机写的波浪状的流水灯

#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit P00=P0^0; //P0口为低电平时LED亮
sbit P01=P0^1;
sbit P02=P0^2;
sbit P03=P0^3;
sbit P04=P0^4;
sbit P05=P0^5;
sbit P06=P0^6;
sbit P07=P0^7;
uchar cnt[8]={8,16,24,32,40,48,56,64}; //定义8个初始亮度级别
uchar flgdir[8]={1,1,1,1,1,1,1,1}; //在LED从暗到渐亮再从亮到渐暗是做计数方向标志
void main()
{
TMOD=0x11; //定时器0定时0.156mS,晶振是11.0592M
TH0=0xFF;
TL0=0x70;
ET0=1;
EA=1;
TR0=1;
P0=0x00;
while(1);
}
void timer0() interrupt 1
{
static uchar n;
uchar i;
TH0=0xFF;
TL0=0x70;
n++;
if(n==cnt[0])P00=1; //用n定时计数与cnt比较用来在P0各个位出现不同脉宽的PWM波形
if(n==cnt[1])P01=1;
if(n==cnt[2])P02=1;
if(n==cnt[3])P03=1;
if(n==cnt[4])P04=1;
if(n==cnt[5])P05=1;
if(n==cnt[6])P06=1;
if(n==cnt[7])P07=1;
if(n>63) //每过64*0.156=10ms,P0变为0,重新开始一个PWM周期,即PWM波的频率是100Hz
{
n=0;
P0=0;
for(i=0;i<8;i++) //并且每过10ms每个灯的脉宽变化一次,即亮度变化一次
{
if(flgdir==1) //分别控制每个灯的脉宽由窄变宽再到窄,由于计数的初始值不同,因此出现波浪状的流水灯
{
cnt++;
if(cnt>71)flgdir=0;
}
else
{
cnt--;
if(cnt<9)flgdir=1;
}
}
}
}

有兴趣的朋友可以免费索取源程序

QQ|手机版|MCU资讯论坛 ( 京ICP备18035221号-2 )|网站地图

GMT+8, 2024-11-23 22:52 , Processed in 0.035658 second(s), 8 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

返回顶部