- UID
- 373967
- 帖子
- 9061
- 主題
- 2609
- 精華
- 0
- 積分
- 1010
- 楓幣
- 0
- 威望
- 987
- 存款
- 36233
- 贊助金額
- 0
- 推廣
- 0
- GP
- 1205
- 閱讀權限
- 70
- 在線時間
- 462 小時
- 註冊時間
- 2023-1-12
- 最後登入
- 2024-12-30
|
製作PIC10F200溫度控制器需要以下材料:
PIC10F200微控制器
LM35溫度傳感器
10K歐姆電阻
電容(可選)
NPN電晶體
1N4148二極體
電源供應器
繼電器(可選)
PIC10F200與其他元件的連接腳位如下:
PIC10F200的第5腳(GP2)與LM35的Vout腳相連接
LM35的Vcc腳與電源供應器的正極相連接
LM35的GND腳與電源供應器的負極相連接
10K歐姆電阻的一端與LM35的Vout腳相連接,另一端與PIC10F200的第2腳(GP1)相連接
PIC10F200的第6腳(GP3)與NPN電晶體的基極相連接
NPN電晶體的集極與繼電器的控制端相連接
繼電器的正負極分別與電源供應器的正負極相連接
PIC10F200的第1腳(Vdd)與電源供應器的正極相連接
PIC10F200的第8腳(Vss)與電源供應器的負極相連接
1N4148二極體的陰極與PIC10F200的第7腳(GP0)相連接,陽極與電源供應器的負極相連接
下面是PIC10F200溫度控制器的程式碼:
#include <pic.h>
__CONFIG (FOSC_INTOSCIO & WDTE_OFF & PWRTE_OFF & MCLRE_OFF);
#define relay GP3
#define led GP0
#define set_temp 25
void delay(unsigned int t)
{
while(t--)
{
__delay_ms(1);
}
}
void main()
{
unsigned int temp = 0;
ADCON0 = 0b00000001; // set ADC channel to GP2
CMCON0 = 0b00000111; // disable comparator
ANSEL = 0b00000100; // set GP2 as analog input
TRISIO = 0b00000100; // set GP2 as input, others as output
relay = 0; // set GP3 to output low
led = 0; // set GP0 to output low
while(1)
{
// read LM35 temperature sensor value
GO = 1;
while(GO); // wait for ADC conversion
temp = (ADRESH<<8) | ADRESL;
temp = (temp*500)/102
// control relay based on temperature
if(temp > set_temp)
{
relay = 1; // turn on relay
led = 1; // turn on LED
}
else
{
relay = 0; // turn off relay
led = 0; // turn off LED
}
delay(1000); // delay for 1 second
}
}
程式碼的作用是讀取LM35溫度傳感器的數值,根據設定的溫度值(set_temp)控制繼電器開關。如果溫度高於設定值,則繼電器將通電,控制外部裝置(例如加熱器)開始工作,並且LED燈也會亮起來。如果溫度低於設定值,則繼電器斷電,外部裝置停止工作,LED燈熄滅。程式碼中的delay函數可以讓系統等待一定時間,以減少處理器的負載和功耗。
#include <pic.h>
__CONFIG (FOSC_INTOSCIO & WDTE_OFF & PWRTE_OFF & MCLRE_OFF);
#define relay GP3
#define led GP0
#define set_temp 25
void delay(unsigned int t)
{
while(t--)
{
__delay_ms(1);
}
}
void main()
{
unsigned int temp = 0;
ADCON0 = 0b00000001; // set ADC channel to GP2
CMCON0 = 0b00000111; // disable comparator
ANSEL = 0b00000100; // set GP2 as analog input
TRISIO = 0b00000100; // set GP2 as input, others as output
relay = 0; // set GP3 to output low
led = 0; // set GP0 to output low
while(1)
{
// read LM35 temperature sensor value
GO = 1;
while(GO); // wait for ADC conversion
temp = (ADRESH<<8) | ADRESL;
temp = (temp*500)/1024;
// control relay based on temperature
if(temp > set_temp)
{
relay = 1; // turn on relay
led = 1; // turn on LED
}
else
{
relay = 0; // turn off relay
led = 0; // turn off LED
}
delay(1000); // delay for 1 second
}
}
請注意,在程式碼中使用了一個名為delay的函數,它的作用是讓系統等待一定時間。在這個程式中,delay函數的參數是以毫秒為單位的時間值。該函數使用了一個while迴圈和__delay_ms函數,以實現等待指定時間的效果。如果您希望調整延遲時間,可以更改delay函數的參數值。 |
|