由16個引腳的STC8芯片為主。采用SOP封裝 小巧玲瓏。用定時器模擬PWM輸出控制RGB。整個電路簡單,所用元器件很少,但是看起來非常漂亮。而且程序寫的很簡潔,還附帶了127種顏色的RGB代碼,各種顏色都能顯示。還有PCB圖哦
制作出來的實物圖如下:
IMG_20181228_193710.jpg (1.13 MB, 下載次數: 91)
下載附件
2018-12-28 19:44 上傳
IMG_20181228_193704.jpg (937.83 KB, 下載次數: 93)
下載附件
2018-12-28 19:44 上傳
IMG_20181228_193531.jpg (1.01 MB, 下載次數: 84)
下載附件
2018-12-28 19:44 上傳
IMG_20181228_193658.jpg (995.11 KB, 下載次數: 98)
下載附件
2018-12-28 19:44 上傳
IMG_20181228_193716.jpg (1.15 MB, 下載次數: 89)
下載附件
2018-12-28 19:44 上傳
IMG_20181228_193728.jpg (1.37 MB, 下載次數: 82)
下載附件
2018-12-28 19:44 上傳
電路原理圖如下:
PCB原理圖.png (112.91 KB, 下載次數: 102)
下載附件
2018-12-28 19:50 上傳
PCB圖.png (39.17 KB, 下載次數: 108)
下載附件
2018-12-28 19:50 上傳
單片機源程序如下:
- #include "RGB.h"
- #include "RGBcode.h"
- u8 count=0;
- u16 n1=0;
- u8 QC=0;
- bit n2=0;
- u8 XS=0;
- #define N 3000000L/255/39
- #define N1 8000000L/255/39
- #define MAX 255
- #define MAX1 180
- #define MIN1 110
- void timeinit()
- {
- AUXR=0x80; //1T模式
- TMOD=0x01; //定時器0方式1,16位不自動重裝載
- TH0 = (65536-39*12)/256;
- TL0 = (65536-39*12)%256;
- ET0=1; //開放定時器0中斷
- TR0=1; //啟動定時器0,開始計時
- }
- void tm0_isr() interrupt 1 using 1
- {
-
- if(QC==0){
- TH0 =(65536-39*12)/256;
- TL0 = (65536-39*12)%256;
- count++; //頻率為100HZ
- n1++;
- if(n1>=N){n2=1;n1=0;}
- }
-
- if(QC==1){
- TH0 = (65536-10*12)/256;
- TL0 = (65536-10*12)%256;
- count++;
- n2=1;
- }
-
- if(QC==2){
- TH0 = (65536-39*12)/256;
- TL0 = (65536-39*12)%256;
- count++; //頻率為100HZ
- n1++;
- if(n1>=N1){n2=1;n1=0;}
- }
-
- if(QC==3){
- TH0 = (65536-39*12)/256;
- TL0 = (65536-39*12)%256;
- count++;
- n1++;
- if(n1>=1000000/39){n2=1;n1=0;}
- }
-
-
- }
- void RGB()
- { static u8 i=0;
- QC=3;
- RGB_(yanse[i*3+0],yanse[i*3+1],yanse[i*3+2]);
- if(n2==1){i++;n2=0;}
- if(i==127){i=0;XS=0;}
- }
- void RGB_(u8 Rdelay,u8 Gdelay,u8 Bdelay)
- {
- if(count < Rdelay)RED=1;
- else RED=0;
- if(count < Gdelay)GREEN=1;
- else GREEN=0;
- if(count < Bdelay)BULE=1;
- else BULE=0;
- if(count==255){count=0;}
- }
- void qicai()
- {
- static u8 i=0,j=0;
- static bit ZJ=1,JS=0;
- QC=0;
- if(n2==1 && ZJ){i++;n2=0;}
- if(n2==1 && JS){i--;n2=0;}
- switch(j)
- {
- case 0:RGB_(i,0,0);if(i==MAX){ZJ=0;JS=1;j++;}break; //紅色呼吸燈
- case 1:RGB_(i,0,0);if(i==0){ZJ=1;JS=0;j++;} break;
-
- case 2:RGB_(i,i,0);if(i==MAX){ZJ=0;JS=1;j++;}break; //黃色呼吸燈
- case 3:RGB_(i,i,0);if(i==0){ZJ=1;JS=0;j++;} break;
-
- case 4:RGB_(0,i,0);if(i==MAX){ZJ=0;JS=1;j++;}break; //綠色呼吸燈
- case 5:RGB_(0,i,0);if(i==0){ZJ=1;JS=0;j++;} break;
-
- case 6:RGB_(0,i,i);if(i==MAX){ZJ=0;JS=1;j++;}break; //青色呼吸燈
- case 7:RGB_(0,i,i);if(i==0){ZJ=1;JS=0;j++;} break;
-
- case 8:RGB_(0,0,i);if(i==MAX){ZJ=0;JS=1;j++;}break; //藍色呼吸燈
- case 9:RGB_(0,0,i);if(i==0){ZJ=1;JS=0;j++;} break;
-
- case 10:RGB_(i,0,i);if(i==MAX){ZJ=0;JS=1;j++;}break; //紫色呼吸燈
- case 11:RGB_(i,0,i);if(i==0){ZJ=1;JS=0;j++;} break;
-
- case 12:RGB_(i,i,i);if(i==MAX){ZJ=0;JS=1;j++;}break; //白色呼吸燈
- case 13:RGB_(i,i,i);if(i==0){ZJ=1;JS=0;j++;} break;
-
- default : j=0;XS=1;break;
-
- }
- }
-
- //void quancai() //綠燈太亮 ,導致其他顏色顯示不出來 所以屏蔽
- //{
- // static u8 i=0,j=0,k=0;
- // QC=1;
- // if(n2==1) {i++;n2=0;}
- //
- // RGB_(i,j,k);
- // if(i==255){i=0;j++;if(j==255){j=0;k++;if(i==255 && j==255 && k==255 ){i=0;j=0;k=0;}}}
- //
- //}
- void duocai()
- {
- static u8 i=0,j=0;
- static bit ZJ=1,JS=0;
- QC=2;
- if(n2==1 && ZJ){i++;n2=0;}
- if(n2==1 && JS){i--;n2=0;}
- switch(j)
- {
- case 0:RGB_(i,0,MAX);if(i==MAX){ZJ=0;JS=1;j++;}break; //單升單降 MAX
- case 1:RGB_(MAX,0,i);if(i==0){ZJ=1;JS=0;j++;} break;
-
- case 2:RGB_(MAX,i,0);if(i==MAX){ZJ=0;JS=1;j++;}break;
- case 3:RGB_(i,MAX,0);if(i==0){ZJ=1;JS=0;j++;} break;
-
- case 4:RGB_(0,MAX,i);if(i==MAX){ZJ=0;JS=1;j++;}break;
- case 5:RGB_(0,i,MAX);if(i==0){ZJ=1;JS=0;j++;} break;
-
- case 6:RGB_(i,i,MAX);if(i==MAX){ZJ=0;JS=1;j++;}break; //雙升雙降 MAX
- case 7:RGB_(i,MAX,i);if(i==0){ZJ=1;JS=0;j++;} break;
-
- case 8:RGB_(i,MAX,i);if(i==MAX){ZJ=0;JS=1;j++;}break;
- case 9:RGB_(MAX,i,i);if(i==0){ZJ=1;JS=0;j++;} break;
-
- case 10:RGB_(MAX,i,i);if(i==MAX){ZJ=0;JS=1;j++;}break;
- case 11:RGB_(i,i,MAX);if(i==0){ZJ=1;JS=0;j++;} break;
-
-
-
- case 12:RGB_(i,MIN1,MAX1);if(i==MAX){ZJ=0;JS=1;j++;}break;
- case 13:RGB_(MAX1,MIN1,i);if(i==0){ZJ=1;JS=0;j++;} break;
-
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
51hei.png (8.69 KB, 下載次數: 66)
下載附件
2021-10-12 18:11 上傳
所有資料51hei提供下載:
STC8F2K08S2.zip
(187.26 KB, 下載次數: 400)
2018-12-28 19:50 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|