找回密码
 注册会员
更新自动建库工具PCB Footprint Expert 2024.04 Pro / Library Expert 破解版

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

[复制链接]
admin 发表于 2012-8-24 11:08:36 | 显示全部楼层 |阅读模式

本文包含原理图、PCB、源代码、封装库、中英文PDF等资源

您需要 登录 才可以下载或查看,没有账号?注册会员

×
LED_单片机控制led.zip (15.91 KB, 下载次数: 0)
单片机写的波浪状的流水灯

#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 13:37 , Processed in 0.058052 second(s), 12 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表