基于DS18B20的8路溫度檢測程序
原理圖altium格式.SchDoc:
單片機源程序如下:
- #include "lcd1602.h"
- #include "18b20.h"
- #include "key_contrl.h"
- #include <reg52.h>
- #include <usart.c>
- sbit beep = P2^0; //beep = 0時候發聲
- sbit K1=P1^4;
- sbit K2=P1^5;
- sbit K3=P1^6;
- unsigned char Mode;
- int TempH = 380; //初始上限值
- int TempL = 100; //初始下限值
- unsigned char SN[8][8]={
- {0x28,0xEE,0xc8,0x47,0x1b,0x16,0x02,0x2f},
- {0x28,0xee,0x97,0xf6,0x1c,0x16,0x02,0xb1},
- {0x28,0xee,0x6c,0x48,0x1b,0x16,0x02,0x99},
- {0x28,0xee,0xcf,0x46,0x1b,0x16,0x02,0xf1},
- {0x28,0xee,0x1e,0x49,0x1b,0x16,0x02,0xf8},
- {0x28,0xee,0x55,0x67,0x1b,0x16,0x02,0x04},
- {0x28,0xee,0x4c,0x4b,0x1b,0x16,0x02,0xe9},
- {0x28,0xee,0x30,0x6a,0x1b,0x16,0x02,0x5a},
- };//二維數組存取序列號
- void KEY()
- {
- if(K1==0)
- {
- delay_ms(10);
- if(K1==0);
- {
- Mode++;
- if(Mode==4)
- Mode=0;
- while(!K1);
- }
- }
- }
- void main(void)
- { u8 num;
- u16 temp1,temp2,temp3,temp4,temp5,temp6,temp7,temp8;
- LCD_Init();
- UartInit();
- while(1)
- {
- temp1=ReadTemperature(0);Send_string("第1路溫度:");SendData(temp1/100%10+48);SendData(temp1/10%10+48);SendData('.');SendData(temp1/1%10+48);Send_string("度:");SendData('\r');SendData('\n');
- temp2=ReadTemperature(1);Send_string("第2路溫度:");SendData(temp2/100%10+48);SendData(temp2/10%10+48);SendData('.');SendData(temp2/1%10+48);Send_string("度:");SendData('\r');SendData('\n');
- temp3=ReadTemperature(2);Send_string("第3路溫度:");SendData(temp3/100%10+48);SendData(temp3/10%10+48);SendData('.');SendData(temp3/1%10+48);Send_string("度:");SendData('\r');SendData('\n');
- temp4=ReadTemperature(3);Send_string("第4路溫度:");SendData(temp4/100%10+48);SendData(temp4/10%10+48);SendData('.');SendData(temp4/1%10+48);Send_string("度:");SendData('\r');SendData('\n');
- temp5=ReadTemperature(4);Send_string("第5路溫度:");SendData(temp5/100%10+48);SendData(temp5/10%10+48);SendData('.');SendData(temp5/1%10+48);Send_string("度:");SendData('\r');SendData('\n');
- temp6=ReadTemperature(5);Send_string("第6路溫度:");SendData(temp6/100%10+48);SendData(temp6/10%10+48);SendData('.');SendData(temp6/1%10+48);Send_string("度:");SendData('\r');SendData('\n');
- temp7=ReadTemperature(6);Send_string("第7路溫度:");SendData(temp7/100%10+48);SendData(temp7/10%10+48);SendData('.');SendData(temp7/1%10+48);Send_string("度:");SendData('\r');SendData('\n');
- temp8=ReadTemperature(7);Send_string("第8路溫度:");SendData(temp8/100%10+48);SendData(temp8/10%10+48);SendData('.');SendData(temp8/1%10+48);Send_string("度:");SendData('\r');SendData('\n');SendData('\r');SendData('\n');
- delay_ms(1000);
- KEY();
- switch(Mode)
- {
-
- case 0:
- {
- num++;
- if(num<3)
- { LCD_Display_String(0x00,"1:");
- LCD_Write_Cmd(0x82);
- LCD_Write_Data(temp1/100%10+48);
- LCD_Write_Data(temp1/10%10+48);
- LCD_Write_Data('.');
- LCD_Write_Data(temp1%10+48);
- LCD_Write_Data(0xdf);
- LCD_Write_Data(' ');
- LCD_Display_String(0x08,"2:");
- LCD_Write_Cmd(0x8a);
- LCD_Write_Data(temp2/100%10+48);
- LCD_Write_Data(temp2/10%10+48);
- LCD_Write_Data('.');
- LCD_Write_Data(temp2%10+48);
- LCD_Write_Data(0xdf);
- LCD_Write_Data(' ');
- LCD_Display_String(0x40,"3:");
- LCD_Write_Cmd(0xc2);
- LCD_Write_Data(temp3/100%10+48);
- LCD_Write_Data(temp3/10%10+48);
- LCD_Write_Data('.');
- LCD_Write_Data(temp3%10+48);
- LCD_Write_Data(0xdf);
- LCD_Write_Data(' ');
- LCD_Display_String(0x48,"4:");
- LCD_Write_Cmd(0xca);
- LCD_Write_Data(temp4/100%10+48);
- LCD_Write_Data(temp4/10%10+48);
- LCD_Write_Data('.');
- LCD_Write_Data(temp4%10+48);
- LCD_Write_Data(0xdf);
- LCD_Write_Data(' ');
- }
- else if(num<6)
- {
- LCD_Display_String(0x00,"5:");
- LCD_Write_Cmd(0x82);
- LCD_Write_Data(temp5/100%10+48);
- LCD_Write_Data(temp5/10%10+48);
- LCD_Write_Data('.');
- LCD_Write_Data(temp5%10+48);
- LCD_Write_Data(0xdf);
- LCD_Write_Data(' ');
- LCD_Display_String(0x08,"6:");
- LCD_Write_Cmd(0x8a);
- LCD_Write_Data(temp6/100%10+48);
- LCD_Write_Data(temp6/10%10+48);
- LCD_Write_Data('.');
- LCD_Write_Data(temp6%10+48);
- LCD_Write_Data(0xdf);
- LCD_Write_Data(' ');
- LCD_Display_String(0x40,"7:");
- LCD_Write_Cmd(0xc2);
- LCD_Write_Data(temp7/100%10+48);
- LCD_Write_Data(temp7/10%10+48);
- LCD_Write_Data('.');
- LCD_Write_Data(temp7%10+48);
- LCD_Write_Data(0xdf);
- LCD_Write_Data(' ');
- LCD_Display_String(0x48,"8:");
- LCD_Write_Cmd(0xca);
- LCD_Write_Data(temp8/100%10+48);
- LCD_Write_Data(temp8/10%10+48);
- LCD_Write_Data('.');
- LCD_Write_Data(temp8%10+48);
- LCD_Write_Data(0xdf);
- LCD_Write_Data(' ');
- }
- else num=0;
- }
- break;
- case 1:
- LCD_Display_String(0x00,"High Limit:");
- LCD_Write_Cmd(0x8b);
- LCD_Write_Data(TempH/100%10+48);
- LCD_Write_Data(TempH/10%10+48);
- LCD_Write_Data('.');
- LCD_Write_Data(TempH%10+48);
- LCD_Write_Data(0xdf);
- LCD_Display_String(0x40,"Low Limit:");
- LCD_Write_Cmd(0xcb);
- LCD_Write_Data(TempL/100%10+48);
- LCD_Write_Data(TempL/10%10+48);
- LCD_Write_Data('.');
- LCD_Write_Data(TempL%10+48);
- LCD_Write_Data(0xdf);
- break;
- case 2:
- if(K2==0)
- {
- delay_ms(10);
- if(K2==0)
- {
- TempH+=10;
- if(TempH>=990)
- TempH=990;
- }
- }
- if(K3==0)
- {
- delay_ms(10);
- if(K3==0)
- {
- TempH-=10;
- if(TempH<=TempL)
- TempH=TempL;
- }
- }
- LCD_Write_Cmd(0x8b);
- LCD_Write_Data(TempH/100%10+48);
- LCD_Write_Data(TempH/10%10+48);
- LCD_Write_Data('.');
- LCD_Write_Data(TempH%10+48);
- LCD_Write_Data(0xdf);
- LCD_Write_Cmd(0x8d);
- LCD_Write_Cmd(0x0f); //開光標
- break;
- case 3:
- if(K2==0)
- {
- delay_ms(10);
- if(K2==0)
- {
- TempL+=10;
- if(TempL>=TempH)
- TempL=TempH;
- }
- }
- if(K3==0)
- {
- delay_ms(10);
- if(K3==0)
- {
- TempL-=10;
- if(TempL<=0)
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
資料2.zip
(197.09 KB, 下載次數: 108)
2017-5-30 10:47 上傳
點擊文件名下載附件
程序及原理圖
|