1. 用單片機做溫控系統的程序誰懂
我去年做了一個差不多的,也是報警控制的,你借鑒一下吧:
軟體設計:
有兩個文件,DS18B20.c和DS18B20.h,將這兩個文件添加到工程里即可。
DS18B20.c:
/******************************************************************
程序名稱:DS18B20溫度測量、報警系統
簡要說明:DS18B20溫度計,溫度測量范圍0~99.9攝氏度
可設置上限報警溫度、下限報警溫度
即高於上限值或者低於下限值時蜂鳴器報警
默認上限報警溫度為32℃、默認下限報警溫度為10℃
報警值可設置范圍:最低上限報警值等於當前下限報警值
最高下限報警值等於當前上限報警值
將下限報警值調為0時為關閉下限報警功能
******************************************************************/
#include <AT89X52.h>
#include "DS18B20.h"
#define uint unsigned int
#define uchar unsigned char //宏定義
#define SET P3_1 //定義調整鍵
#define DEC P3_2 //定義減少鍵
#define ADD P3_3 //定義增加鍵
#define BEEP P3_7 //定義蜂鳴器
#define JDQ P3_5
bit shanshuo_st; //閃爍間隔標志
bit beep_st; //蜂鳴器間隔標志
sbit DIAN = P2^7; //小數點
uchar x=0; //計數器
signed char m; //溫度值全局變數
uchar n; //溫度值全局變數
uchar set_st=0; //狀態標志
signed char shangxian=70; //上限報警溫度,默認值為70
signed char xiaxian=0; //下限報警溫度,默認值為0
uchar code LEDData[]=;
/*****延時子程序*****/
void Delay(uint num)
{
while( --num );
}
void shortdelay(void) //誤差 0us
{
unsigned char a,b,c;
for(c=165;c>0;c--)
for(b=100;b>0;b--)
for(a=150;a>0;a--);
_nop_; //if Keil,require use intrins.h
_nop_; //if Keil,require use intrins.h
}
/*****初始化定時器0*****/
void InitTimer(void)
{
TMOD=0x1;
TH0=0x3c;
TL0=0xb0; //50ms(晶振12M)
}
/*****定時器0中斷服務程序*****/
void timer0(void) interrupt 1
{
TH0=0x3c;
TL0=0xb0;
x++;
}
/*****外部中斷0服務程序*****/
void int0(void) interrupt 0
{
EX0=0; //關外部中斷0
if(DEC==0&&set_st==1)
{
shangxian--;
if(shangxian<xiaxian)shangxian=xiaxian;
}
else if(DEC==0&&set_st==2)
{
xiaxian--;
if(xiaxian<0)xiaxian=0;
}
}
/*****外部中斷1服務程序*****/
void int1(void) interrupt 2
{
EX1=0; //關外部中斷1
if(ADD==0&&set_st==1)
{
shangxian++;
if(shangxian>99)shangxian=99;
}
else if(ADD==0&&set_st==2)
{
xiaxian++;
if(xiaxian>shangxian)xiaxian=shangxian;
}
}
/*****讀取溫度*****/
void check_wen(void)
{
uint a,b,c;
c=ReadTemperature()-5; //獲取溫度值並減去DS18B20的溫漂誤差
a=c/100; //計算得到十位數字
b=c/10-a*10; //計算得到個位數字
m=c/10; //計算得到整數位
n=c-a*100-b*10; //計算得到小數位
if(m<0) //設置溫度顯示上限
if(m>99) //設置溫度顯示上限
}
/*****顯示開機初始化等待畫面*****/
Disp_init()
{
P2 = 0xbf; //顯示-
P1 = 0xf7;
Delay(200);
P1 = 0xfb;
Delay(200);
P1 = 0xfd;
Delay(200);
P1 = 0xfe;
Delay(200);
P1 = 0xff; //關閉顯示
}
/*****顯示溫度子程序*****/
Disp_Temperature() //顯示溫度
{
P2 =0xc6; //顯示C
P1 = 0xf7;
Delay(300);
P2 =LEDData[n]; //顯示個位
P1 = 0xfb;
Delay(300);
P2 =LEDData[m%10]; //顯示十位
DIAN = 0; //顯示小數點
P1 = 0xfd;
Delay(300);
P2 =LEDData[m/10]; //顯示百位
P1 = 0xfe;
Delay(300);
P1 = 0xff; //關閉顯示
}
/*****顯示報警溫度子程序*****/
Disp_alarm(uchar baojing)
{
P2 =0xc6; //顯示C
P1 = 0xf7;
Delay(200);
P2 =LEDData[baojing%10]; //顯示十位
P1 = 0xfb;
Delay(200);
P2 =LEDData[baojing/10]; //顯示百位
P1 = 0xfd;
Delay(200);
if(set_st==1)P2 =0x89;
else if(set_st==2)P2 =0xc7; //上限H、下限L標示
P1 = 0xfe;
Delay(200);
P1 = 0xff; //關閉顯示
}
/*****報警子程序*****/
void Alarm()
{
if(x>=10)
if((m>=shangxian&&beep_st==1)||(m<xiaxian&&beep_st==1))BEEP=0;
else BEEP=1;
if((m>=shangxian)||(m<xiaxian))
{shortdelay();
JDQ=0;}
else JDQ=1;
}
/*****主函數*****/
void main(void)
{
uint z;
InitTimer(); //初始化定時器
EA=1; //全局中斷開關
TR0=1;
ET0=1; //開啟定時器0
IT0=1;
IT1=1;
check_wen();
check_wen();
for(z=0;z<300;z++)
{
Disp_init();
}
while(1)
{
if(SET==0)
{
Delay(2000);
do{}while(SET==0);
set_st++;x=0;shanshuo_st=1;
if(set_st>2)set_st=0;
}
if(set_st==0)
{
EX0=0; //關閉外部中斷0
EX1=0; //關閉外部中斷1
check_wen();
Disp_Temperature();
Alarm(); //報警檢測
}
else if(set_st==1)
{
BEEP=1; //關閉蜂鳴器
EX0=1; //開啟外部中斷0
EX1=1; //開啟外部中斷1
if(x>=10)
if(shanshuo_st)
}
else if(set_st==2)
{
BEEP=1; //關閉蜂鳴器
EX0=1; //開啟外部中斷0
EX1=1; //開啟外部中斷1
if(x>=10)
if(shanshuo_st)
}
}
}
/*****END*****/
DS18B20.h:
#include <AT89X52.h>
#define DQ P3_6 //定義DS18B20匯流排I/O
/*****延時子程序*****/
void Delay_DS18B20(int num)
{
while(num--) ;
}
/*****初始化DS18B20*****/
void Init_DS18B20(void)
{
unsigned char x=0;
DQ = 1; //DQ復位
Delay_DS18B20(8); //稍做延時
DQ = 0; //單片機將DQ拉低
Delay_DS18B20(80); //精確延時,大於480us
DQ = 1; //拉高匯流排
Delay_DS18B20(14);
x = DQ; //稍做延時後,如果x=0則初始化成功,x=1則初始化失敗
Delay_DS18B20(20);
}
/*****讀一個位元組*****/
unsigned char ReadOneChar(void)
{
unsigned char i=0;
unsigned char dat = 0;
for (i=8;i>0;i--)
{
DQ = 0; // 給脈沖信號
dat>>=1;
DQ = 1; // 給脈沖信號
if(DQ)
dat|=0x80;
Delay_DS18B20(4);
}
return(dat);
}
/*****寫一個位元組*****/
void WriteOneChar(unsigned char dat)
{
unsigned char i=0;
for (i=8; i>0; i--)
{
DQ = 0;
DQ = dat&0x01;
Delay_DS18B20(5);
DQ = 1;
dat>>=1;
}
}
/*****讀取溫度*****/
unsigned int ReadTemperature(void)
{
unsigned char a=0;
unsigned char b=0;
unsigned int t=0;
float tt=0;
Init_DS18B20();
WriteOneChar(0xCC); //跳過讀序號列號的操作
WriteOneChar(0x44); //啟動溫度轉換
Init_DS18B20();
WriteOneChar(0xCC); //跳過讀序號列號的操作
WriteOneChar(0xBE); //讀取溫度寄存器
a=ReadOneChar(); //讀低8位
b=ReadOneChar(); //讀高8位
t=b;
t<<=8;
t=t|a;
tt=t*0.0625;
t= tt*10+0.5; //放大10倍輸出並四捨五入
return(t);
}
/*****END*****/
其中控制部分我用的是5V繼電器,可以直接控制你的電機了。
兩個電路圖都差不多的,只不過我的多了幾個調整按鍵,報警溫度可以調的。我的這個程序你完全可以用到你的電路里德
2. 51單片機溫度控制系統溫控模塊要怎麼做
你好
溫度控制可以用18b20,可以根據18b20的地址,實現多點溫度控制
也可以通過串口將溫度傳到上位機電腦
3. 請教關於單片機溫控程序
我在10年做了一個差不多的,也是報警控制的,你借鑒一下吧:
軟體設計:
有兩個文件,DS18B20.c和DS18B20.h,將這兩個文件添加到工程里即可。
DS18B20.c:
/******************************************************************
程序名稱:DS18B20溫度測量、報警系統
簡要說明:DS18B20溫度計,溫度測量范圍0~99.9攝氏度
可設置上限報警溫度、下限報警溫度
即高於上限值或者低於下限值時蜂鳴器報警
默認上限報警溫度為32℃、默認下限報警溫度為10℃
報警值可設置范圍:最低上限報警值等於當前下限報警值
最高下限報警值等於當前上限報警值
將下限報警值調為0時為關閉下限報警功能
******************************************************************/
#include<AT89X52.h>
#include"DS18B20.h"
#defineuintunsignedint
#defineucharunsignedchar//宏定義
#defineSETP3_1//定義調整鍵
#defineDECP3_2//定義減少鍵
#defineADDP3_3//定義增加鍵
#defineBEEPP3_7//定義蜂鳴器
#defineJDQP3_5
bitshanshuo_st;//閃爍間隔標志
bitbeep_st;//蜂鳴器間隔標志
sbitDIAN=P2^7;//小數點
ucharx=0;//計數器
signedcharm;//溫度值全局變數
ucharn;//溫度值全局變數
ucharset_st=0;//狀態標志
signedcharshangxian=70;//上限報警溫度,默認值為70
signedcharxiaxian=0;//下限報警溫度,默認值為0
ucharcodeLEDData[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff};
/*****延時子程序*****/
voidDelay(uintnum)
{
while(--num);
}
voidshortdelay()(void)//誤差0us
{
unsignedchara,b,c;
for(c=165;c>0;c--)
for(b=100;b>0;b--)
for(a=150;a>0;a--);
_nop_;//ifKeil,requireuseintrins.h
_nop_;//ifKeil,requireuseintrins.h
}
/*****初始化定時器0*****/
voidInitTimer(void)
{
TMOD=0x1;
TH0=0x3c;
TL0=0xb0;//50ms(晶振12M)
}
/*****定時器0中斷服務程序*****/
voidtimer0(void)interrupt1
{
TH0=0x3c;
TL0=0xb0;
x++;
}
/*****外部中斷0服務程序*****/
voidint0(void)interrupt0
{
EX0=0;//關外部中斷0
if(DEC==0&&set_st==1)
{
shangxian--;
if(shangxian<xiaxian)shangxian=xiaxian;
}
elseif(DEC==0&&set_st==2)
{
xiaxian--;
if(xiaxian<0)xiaxian=0;
}
}
/*****外部中斷1服務程序*****/
voidint1(void)interrupt2
{
EX1=0;//關外部中斷1
if(ADD==0&&set_st==1)
{
shangxian++;
if(shangxian>99)shangxian=99;
}
elseif(ADD==0&&set_st==2)
{
xiaxian++;
if(xiaxian>shangxian)xiaxian=shangxian;
}
}
/*****讀取溫度*****/
voidcheck_wen(void)
{
uinta,b,c;
c=ReadTemperature()-5;//獲取溫度值並減去DS18B20的溫漂誤差
a=c/100;//計算得到十位數字
b=c/10-a*10;//計算得到個位數字
m=c/10;//計算得到整數位
n=c-a*100-b*10;//計算得到小數位
if(m<0){m=0;n=0;}//設置溫度顯示上限
if(m>99){m=99;n=9;}//設置溫度顯示上限
}
/*****顯示開機初始化等待畫面*****/
Disp_init()
{
P2=0xbf;//顯示-
P1=0xf7;
Delay(200);
P1=0xfb;
Delay(200);
P1=0xfd;
Delay(200);
P1=0xfe;
Delay(200);
P1=0xff;//關閉顯示
}
/*****顯示溫度子程序*****/
Disp_Temperature()//顯示溫度
{
P2=0xc6;//顯示C
P1=0xf7;
Delay(300);
P2=LEDData[n];//顯示個位
P1=0xfb;
Delay(300);
P2=LEDData[m%10];//顯示十位
DIAN=0;//顯示小數點
P1=0xfd;
Delay(300);
P2=LEDData[m/10];//顯示百位
P1=0xfe;
Delay(300);
P1=0xff;//關閉顯示
}
/*****顯示報警溫度子程序*****/
Disp_alarm(ucharbaojing)
{
P2=0xc6;//顯示C
P1=0xf7;
Delay(200);
P2=LEDData[baojing%10];//顯示十位
P1=0xfb;
Delay(200);
P2=LEDData[baojing/10];//顯示百位
P1=0xfd;
Delay(200);
if(set_st==1)P2=0x89;
elseif(set_st==2)P2=0xc7;//上限H、下限L標示
P1=0xfe;
Delay(200);
P1=0xff;//關閉顯示
}
/*****報警子程序*****/
voidAlarm()
{
if(x>=10){beep_st=~beep_st;x=0;}
if((m>=shangxian&&beep_st==1)||(m<xiaxian&&beep_st==1))BEEP=0;
elseBEEP=1;
if((m>=shangxian)||(m<xiaxian))
{shortdelay()();
JDQ=0;}
elseJDQ=1;
}
/*****主函數*****/
voidmain(void)
{
uintz;
InitTimer();//初始化定時器
EA=1;//全局中斷開關
TR0=1;
ET0=1;//開啟定時器0
IT0=1;
IT1=1;
check_wen();
check_wen();
for(z=0;z<300;z++)
{
Disp_init();
}
while(1)
{
if(SET==0)
{
Delay(2000);
do{}while(SET==0);
set_st++;x=0;shanshuo_st=1;
if(set_st>2)set_st=0;
}
if(set_st==0)
{
EX0=0;//關閉外部中斷0
EX1=0;//關閉外部中斷1
check_wen();
Disp_Temperature();
Alarm();//報警檢測
}
elseif(set_st==1)
{
BEEP=1;//關閉蜂鳴器
EX0=1;//開啟外部中斷0
EX1=1;//開啟外部中斷1
if(x>=10){shanshuo_st=~shanshuo_st;x=0;}
if(shanshuo_st){Disp_alarm(shangxian);}
}
elseif(set_st==2)
{
BEEP=1;//關閉蜂鳴器
EX0=1;//開啟外部中斷0
EX1=1;//開啟外部中斷1
if(x>=10){shanshuo_st=~shanshuo_st;x=0;}
if(shanshuo_st){Disp_alarm(xiaxian);}
}
}
}
/*****END*****/
DS18B20.h:
#include<AT89X52.h>
#defineDQP3_6//定義DS18B20匯流排I/O
/*****延時子程序*****/
voidDelay_DS18B20(intnum)
{
while(num--);
}
/*****初始化DS18B20*****/
voidInit_DS18B20(void)
{
unsignedcharx=0;
DQ=1;//DQ復位
Delay_DS18B20(8);//稍做延時
DQ=0;//單片機將DQ拉低
Delay_DS18B20(80);//精確延時,大於480us
DQ=1;//拉高匯流排
Delay_DS18B20(14);
x=DQ;//稍做延時後,如果x=0則初始化成功,x=1則初始化失敗
Delay_DS18B20(20);
}
/*****讀一個位元組*****/
unsignedcharReadOneChar(void)
{
unsignedchari=0;
unsignedchardat=0;
for(i=8;i>0;i--)
{
DQ=0;//給脈沖信號
dat>>=1;
DQ=1;//給脈沖信號
if(DQ)
dat|=0x80;
Delay_DS18B20(4);
}
return(dat);
}
/*****寫一個位元組*****/
voidWriteOneChar(unsignedchardat)
{
unsignedchari=0;
for(i=8;i>0;i--)
{
DQ=0;
DQ=dat&0x01;
Delay_DS18B20(5);
DQ=1;
dat>>=1;
}
}
/*****讀取溫度*****/
unsignedintReadTemperature(void)
{
unsignedchara=0;
unsignedcharb=0;
unsignedintt=0;
floattt=0;
Init_DS18B20();
WriteOneChar(0xCC);//跳過讀序號列號的操作
WriteOneChar(0x44);//啟動溫度轉換
Init_DS18B20();
WriteOneChar(0xCC);//跳過讀序號列號的操作
WriteOneChar(0xBE);//讀取溫度寄存器
a=ReadOneChar();//讀低8位
b=ReadOneChar();//讀高8位
t=b;
t<<=8;
t=t|a;
tt=t*0.0625;
t=tt*10+0.5;//放大10倍輸出並四捨五入
return(t);
}
/*****END*****/
其中控制部分我用的是5V繼電器,可以直接控制你的電機了。
兩個電路圖都差不多的,只不過我的多了幾個調整按鍵,報警溫度可以調的。我的這個程序你完全可以用到你的電路里的
4. 溫控電路用什麼單片機集成塊
越便宜越好了 ,因為功能極其簡單。
5. 求一單片機溫度控製程序
你說的不是很詳細,沒有硬體圖,不好弄的
我大概說一下,你用了一個專用ADC晶元,這樣一來,只要處理單片機與ADC晶元之間的通信就行了,你的控制比較簡單,主要是讀溫度這一塊.
而且這個ADC只是8位的,輸出也是8bit的數據,所以只要讀單片機的一個I/O口比如PD的8bit數據就OK了,很簡單的.
最重要的就是要算出多少溫度的時候對應的數值是多少,這要做一個查表.
6. 單片機 簡單溫控
STC12C4052AD 一片,FM58 10K NTC電阻一隻,4.7K電阻一隻,數碼管或液晶屏自己看著辦
沒有時控要求的話,晶振,復位電路都可以省掉,簡單吧。我的淋浴器溫控壞了,就是這么做的。沒問題。 內帶EEPROM,存儲不丟失,關機設定值不丟失。
限流電阻為4.7K接+5V 熱敏電阻為FM58玻殼 10K 接GND
ADC_CONTR|=ADC_ON;
while(ADC_CONTR==0xff ) //等待A/D轉換結束
{
ADC_CONTR&=ADC_OFF;
for(aa=0;aa<=120;aa++)
{
if(ADC_DATA>=RT10K[aa]) break;
}
查表函數如下
unsigned char cold RT10K[] = {
0x0f3, // -20.00 97.6037
0x0f2, // -19.00 92.0947
0x0f1, // -18.00 86.9305
0x0f1, // -17.00 82.0877
0x0f0, // -16.00 77.5442
0x0ef, // -15.00 73.2798
0x0ee, // -14.00 69.2759
0x0ed, // -13.00 65.5149
0x0ed, // -12.00 61.9809
0x0ec, // -11.00 58.6587
0x0eb, // -10.00 55.5345
0x0ea, // -9.00 52.5954
0x0e9, // -8.00 49.8294
0x0e7, // -7.00 47.2253
0x0e6, // -6.00 44.7727
0x0e5, // -5.00 42.4620
0x0e4, // -4.00 40.2841
0x0e3, // -3.00 38.2307
0x0e1, // -2.00 36.2940
0x0e0, // -1.00 34.4668
0x0de, // 0.00 32.7421
0x0dd, // 1.00 31.1138
0x0dc, // 2.00 29.5759
0x0da, // 3.00 28.1229
0x0d8, // 4.00 26.7496
0x0d7, // 5.00 25.4513
0x0d5, // 6.00 24.2234
0x0d3, // 7.00 23.0618
0x0d2, // 8.00 21.9625
0x0d0, // 9.00 20.9218
0x0ce, // 10.00 19.9364
0x0cc, // 11.00 19.0029
0x0ca, // 12.00 18.1184
0x0c8, // 13.00 17.2800
0x0c6, // 14.00 16.4852
0x0c4, // 15.00 15.7313
0x0c2, // 16.00 15.0161
0x0c0, // 17.00 14.3375
0x0bd, // 18.00 13.6932
0x0bb, // 19.00 13.0815
0x0b9, // 20.00 12.5005
0x0b7, // 21.00 11.9485
0x0b4, // 22.00 11.4239
0x0b2, // 23.00 10.9252
0x0af, // 24.00 10.4510
0x0ad, // 25.00 10.0000
0x0ab, // 26.00 9.5709
0x0a8, // 27.00 9.1626
0x0a6, // 28.00 8.7738
0x0a3, // 29.00 8.4037
0x0a1, // 30.00 8.0512
0x09e, // 31.00 7.7154
0x09b, // 32.00 7.3954
0x099, // 33.00 7.0904
0x096, // 34.00 6.7996
0x094, // 35.00 6.5223
0x091, // 36.00 6.2577
0x08f, // 37.00 6.0053
0x08c, // 38.00 5.7645
0x089, // 39.00 5.5345
0x087, // 40.00 5.3150
0x084, // 41.00 5.1053
0x082, // 42.00 4.9050
0x07f, // 43.00 4.7136
0x07d, // 44.00 4.5307
0x07a, // 45.00 4.3558
0x078, // 46.00 4.1887
0x075, // 47.00 4.0287
0x073, // 48.00 3.8758
0x070, // 49.00 3.7294
0x06e, // 50.00 3.5893
0x06c, // 51.00 3.4553
0x069, // 52.00 3.3269
0x067, // 53.00 3.2039
0x065, // 54.00 3.0862
0x062, // 55.00 2.9733
0x060, // 56.00 2.8652
0x05e, // 57.00 2.7616
0x05c, // 58.00 2.6622
0x05a, // 59.00 2.5669
0x057, // 60.00 2.4755
0x055, // 61.00 2.3879
0x053, // 62.00 2.3038
0x051, // 63.00 2.2231
0x04f, // 64.00 2.1456
0x04e, // 65.00 2.0712
0x04c, // 66.00 1.9998
0x04a, // 67.00 1.9312
0x048, // 68.00 1.8653
0x046, // 69.00 1.8019
0x044, // 70.00 1.7411
0x043, // 71.00 1.6826
0x041, // 72.00 1.6264
0x03f, // 73.00 1.5723
0x03e, // 74.00 1.5203
0x03c, // 75.00 1.4703
0x03b, // 76.00 1.4222
0x039, // 77.00 1.3759
0x038, // 78.00 1.3313
0x036, // 79.00 1.2884
0x035, // 80.00 1.2471
0x034, // 81.00 1.2073
0x032, // 82.00 1.1690
0x031, // 83.00 1.1321
0x030, // 84.00 1.0965
0x02f, // 85.00 1.0623
0x02d, // 86.00 1.0293
0x02c, // 87.00 0.9974
0x02b, // 88.00 0.9667
0x02a, // 89.00 0.9372
0x029, // 90.00 0.9086
0x028, // 91.00 0.8811
0x027, // 92.00 0.8545
0x026, // 93.00 0.8289
0x025, // 94.00 0.8042
0x024, // 95.00 0.7803
0x023, // 96.00 0.7572
0x022, // 97.00 0.7350
0x021, // 98.00 0.7135
0x020, // 99.00 0.6927
0x01f, // 100.00 0.6727
0x01f, // 101.00 0.6533
0x01e, // 102.00 0.6346
0x01d, // 103.00 0.6165
0x01c, // 104.00 0.5990
0x01c // 105.00 0.5821
};
試試吧
7. 用單片機實現溫控顯示和溫控系統
看不清楚。單片機實現溫控顯示用AD采樣模擬值。和PWM控制輸出量就好了。
8. PT100和51單片機做溫控
先確定烤箱的最高溫度,包括不正常的情況下的最高溫度。
其次需要確定你精度要求,解析度要求等各種要求。
最後,很重要的就是你的成本有多大的限制。
如果溫度超過100℃,建議不要用半導體的感測器,18B20就是半導體的,所以,不要用。
感測器一般PT100最貴,當然性能也最好,熱電偶便宜一些,但需要冷端溫補,NTC熱敏電阻最便宜,但離散性大,在室溫下使用的解析度比較高,但非線性嚴重,高溫時的變化小。
9. 求單片機溫控系統程序
在我的博客里有比較規范的DS18b20溫度測量程序,你可看一下,也許有幫助。
對於你的具體要求,你要改寫一下程序。
http://hi..com/xiaopc001/blog
10. 單片機溫度控制系統
要不是自己做實驗的話,建議買一個溫控表就可以啦,很便宜的啦400多就搞定,還不用你到處去買元件