STC15F100W 製作小數點溫控器
STC15F100W 製作小數點溫控器有 所需材料 連接腳位 程式碼材料:
STC15F100W微控制器
溫度傳感器(例如DS18B20)
繼電器模塊
LED數碼管
數碼管驅動芯片(例如74HC595)
電阻
電容
電源
麵包板和杜邦線等
連接腳位:
STC15F100W 微控制器有40個引腳,根據您的需求和選擇的元器件,您需要將它們連接在正確的引腳上。以下是一些常用的連接引腳:
溫度傳感器(DS18B20):連接到P3.7引腳
繼電器模塊:連接到P2.0引腳
LED數碼管:根據您的數碼管引腳分配連接到STC15F100W的多個引腳。例如,如果您使用的是共陽極LED數碼管,則可以將數碼管的每個陽極引腳連接到P0.0-P0.7引腳,而將每個陰極引腳連接到74HC595芯片的相應引腳。
74HC595芯片:將其引腳連接到STC15F100W的多個引腳。例如,將74HC595的SDI引腳連接到P1.0引腳,將74HC595的SCK引腳連接到P1.1引腳,將74HC595的RCK引腳連接到P1.2引腳。
請注意,在連接引腳之前,請仔細查閱每個元器件的數據手冊以獲取正確的引腳連接方式。
程式碼:
以下是一個基於STC15F100W微控制器的小數點溫度控制器的示例程序。此程序可以讀取溫度傳感器的值,並在LED數碼管上顯示溫度,並根據溫度控制繼電器模塊的狀態以控制溫度。
#include <reg51.h>
#define TEMP_SENSOR_PIN P3_7
#define RELAY_PIN P2_0
sbit Relay = RELAY_PIN;
unsigned char Disp = {
0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F
};
void Delay(unsigned int time)
{
unsigned int i,j;
for(i=0;i<time;i++)
for(j=0;j<100;j++);
}
void InitTempSensor()
{
EA = 1;
ES = 1;
}
void InitTimer()
{
TMOD = 0x01;
TH0 = 0x4C;
TL0 = 0x00;
TR0 = 1;
ET0 = 1;
EA = 1;
}
void SendData(unsigned char dat)
{
unsigned char i;
for(i=0;i<8;i++)
{
if(dat & 0x80)
P1 = P1 & 0xFE;
else
P1 = P1 | 0x01;
P1 = P1 | 0x02;
P1 = P1 & 0xFD;
dat <<= 1;
}
}
void Display(unsigned char num)
{
unsigned char i;
for(i=0;i<8;i++)
{
SendData(Disp);
num /= 10;
}
}
void Timer0Isr() interrupt 1
{
static unsigned int count = 0;
TH0 = 0x4C;
TL0 = 0x00;
if(++count >= 500)
{
count = 0;
unsigned char temp;
temp = ReadTemp();
Display(temp);
if(temp > 25)
Relay = 0;
else
Relay = 1;
}
}
void main()
{
InitTempSensor();
InitTimer();
while(1);
}
说明:
此程序中使用了以下函數和變量:
- `InitTempSensor()`:初始化温度传感器。
- `InitTimer()`:初始化定时器0以进行循环扫描和显示温度。
- `SendData()`:将数据发送到74HC595芯片以驱动LED数码管。
- `Display()`:将数值显示在LED数码管上。
- `Timer0Isr()`:定时器0中断服务程序,用于定期读取温度、显示温度和控制继电器模块状态。
- `ReadTemp()`:读取温度传感器的值。
在此程序中,將定時器0設置為1ms計時器,並使用Timer0中斷服務程序來循環掃描和顯示溫度。如果溫度高於25度,則控制繼電器模塊關閉,否則打開。
請注意,此程序中使用的數字顯示方式為共陽極。如果您使用的是共陰極LED數碼管,則需要相應地修改代碼以正確驅動數碼管。
在編寫和調試此程序時,請務必參考STC15F100W微控制器和其他元器件的數據手冊,並進行必要的硬件連接和調試。
頁:
[1]