|
這種燈帶的價格比WS2812便宜很多,功能也很單一,不能流水,不能獨立控制某一位,簡單模擬。代碼是論壇網友的,不用定時器的PWM,稍微修改了一下。
可以順序點亮,可以隨機點亮。
制作出來的實物圖如下:
51hei圖片_20220310141406.jpg (84.61 KB, 下載次數: 93)
下載附件
2022-3-10 14:14 上傳
單片機源程序如下:
#include<reg52.h> //包含特殊功能寄存器的定義
#include <stdlib.h> //隨機函數包含
#include<LED.H>
#include<PWM.H>
#define uchar unsigned char
#define uint unsigned int
void Init_Timer0(void) //定時器初始化子程序
{
TMOD |= 0x01; //使用模式1,16位定時器,使用"|"符號可以在使用多個定時器時不受影響
TH0=0x00; //給定初值,這里使用定時器最大值從0開始計數一直到65535溢出
TL0=0x00;
EA=1; //總中斷打開
ET0=1; //定時器中斷打開
TR0=1; //定時器開關打開
}
void main()
{
Init_Timer0();
while(1)
{
PWMdis();
}
}
/*
********************************************************************************
** 函數名稱 : Timer0_isr(void) interrupt 1 using 1
** 函數功能 : 定時器中斷程序
********************************************************************************
*/
void Timer0_isr(void) interrupt 1 using 1
{
TH0=0x00; //重新賦值,方式1是16位計數器,不能硬件重裝初始值
TL0=0x00;
x1++;;
if(x1>=35){x1=0; x2=rand()%7; } //獲得0~8之間的隨機數,函數rand()在stdlib.h}
//if(x2>=7)x2=0;
}
#ifndef _LED_H_
#define _LED_H_
#define uchar unsigned char
uchar code table[]={0xfe,0xfb,0xfd, 0XF9, 0XFA, 0XFC, 0XF8 };
// 亮R, 亮G, 亮B, 亮RG, 亮rb 亮GB 三個都亮
sbit ledr=P0^0;
sbit ledg=P0^1;
sbit ledb=P0^2;
uchar x1,x2;
#define ledr_on ledr=0;
#define ledr_off ledr=1;
#define ledg_on ledg=0;
#define ledg_off ledg=1;
#define ledb_on ledb=0;
#define ledb_off ledb=1;
#endif
/*-----------------------------------------------
名稱:PWM調光
修改:無
內容:通過PWM(脈寬調制)調節LED的亮度
------------------------------------------------*/
#ifndef __PWM_H__
#define __PWM_H__
unsigned int CYCLE=260,PWM_LOW=0;//定義周期并賦值
void PWMDelay(unsigned int t)
{
while(--t);
}
void PWMdis()
{
PWMDelay(6000); //特意加延時,可以看到熄滅的過程
for(PWM_LOW=1;PWM_LOW<CYCLE;PWM_LOW++)
{ //PWM_LOW表示低
//電平時間,這個循環中低電平時長從1累加到CYCLE(周期)的值,即600次
// ledr=0;
P0=table[x2];
PWMDelay(PWM_LOW);//延時長度,600次循環中從1加至599
// ledr=1;
P0=0XFF;
PWMDelay(CYCLE-PWM_LOW);//延時長度,600次循環中從599減至1
}
for(PWM_LOW=CYCLE-1;PWM_LOW>0;PWM_LOW--)
{ //與逐漸變亮相反的過程
// ledr=0;
P0=table[x2];
PWMDelay(PWM_LOW);
//ledr=1;
P0=0XFF;
PWMDelay(CYCLE-PWM_LOW);
}
//主循環中添加其他需要一直工作的程序
}
#endif
|
評分
-
查看全部評分
|