|
采用51單片機(jī)主控的整個(gè)遠(yuǎn)程溫度監(jiān)控系統(tǒng)設(shè)計(jì)出來的實(shí)物圖如下:
QQ圖片20170421162843.jpg (46.22 KB, 下載次數(shù): 143)
下載附件
實(shí)物(上位機(jī)在電腦搭建)
2017-4-21 16:28 上傳
左上角是gprs模塊,需要插入手機(jī)卡才能遠(yuǎn)程通訊。具有串口接口,顯示部分采用的是lcd12864液晶.
QQ圖片20170421161124.png (4.28 KB, 下載次數(shù): 121)
下載附件
原創(chuàng)全套資料
2017-4-21 16:11 上傳
QQ圖片20170421161018.png (7.65 KB, 下載次數(shù): 115)
下載附件
原創(chuàng)全套資料
2017-4-21 16:11 上傳
任務(wù)書1.png (29.54 KB, 下載次數(shù): 141)
下載附件
2017-4-21 17:07 上傳
任務(wù)書2.png (15.9 KB, 下載次數(shù): 112)
下載附件
2017-4-21 17:07 上傳
任務(wù)書3.png (14.88 KB, 下載次數(shù): 105)
下載附件
2017-4-21 17:07 上傳
原理圖,pcb文件(是用ad畫的附件中可下載工程文件):
0.png (52.82 KB, 下載次數(shù): 122)
下載附件
2017-4-21 17:08 上傳
0.png (67.58 KB, 下載次數(shù): 133)
下載附件
2017-4-21 17:09 上傳
詳盡資料在附件中,因網(wǎng)站上傳限制,需要其他相關(guān)資料可留言。這個(gè)設(shè)計(jì)花了大概三個(gè)星期時(shí)間,gprs實(shí)時(shí)通訊方面難度相對(duì)大。望多多指教!
部分源程序預(yù)覽:
- /*******************************************************************************
- * 實(shí)驗(yàn)名 :溫度顯示實(shí)驗(yàn)
- * 使用的IO :
- * 實(shí)驗(yàn)效果 :1602顯示溫度
- * 注意 :
- *******************************************************************************/
- #include<reg51.h>
- #include"LCD12864_SPI.h"
- #include"temp.h"
- #include<math.h>
- #include<string.h>
- #include <all.h>
- sbit K1 = P1^3;
- sbit K2 = P1^4;
- sbit K3 = P1^5;
- sbit K4 = P1^6;
- sbit K5 = P1^7;
- sbit Buzzer1 = P0^2;
- sbit LED1 = P0^0;
- sbit Buzzer2 = P0^5;
- sbit LED2 = P0^6;
- int Temperature = 0; //用于存儲(chǔ)溫度值
- int Deviation = 0; //1存儲(chǔ)偏差
- int Report = 5000; //1高溫報(bào)警值
- int Temperature1 = 0; //用于存儲(chǔ)溫度值
- int Deviation1 = 0; //2存儲(chǔ)偏差
- int Report1 = 5000; //2高溫報(bào)警值
- char Set = 0;
- unsigned char xdata TCP[] = {"AT+CIPSTART=TCP,103.44.145.245,33601\x0D\x0A"}; //映射的域名對(duì)應(yīng)IP及端口在這里修改
- unsigned char dat[8] = {0, 0, 0, 0, 0, 0, 0, 0}; //定義數(shù)組
- unsigned int count=0;
- unsigned char Flag=0;
- unsigned char Num=0;
- #define LenRxBuf 50
- char AT_SK[]="\x0D\x0A> "; // 0D 0A 3E 20 \x0D\x0A
- char AT_Code[]="\x0D\x0AOK"; // 0D 0A 4F 4B 0D 0A
- char CONNECT_OK[]="\x0D\x0ACONNECT OK"; //CONNECT OK // 0D 0A 43 4F 4E 4E 45 43 54 20 4F 4B 0D 0A 0D 0A 4F 4B 0D 0A
- char RsPoint=0; //發(fā)送 數(shù)組指針
- char xdata RsBuf[LenRxBuf]; //接收緩存
- void REPORT(int temperature, int report, uchar es);
- void UsartConfiguration();
- void TX_Char(unsigned char TXData);
- void Send_Str(unsigned char *str);
- void SendnStr(char *str, char n);//發(fā)送字符串
- void Int_Char(int temp);
- void ClrRsBuf(char *p, int len);
- char WaitOK(char *th, char time);
- char Connect_GPRS();
- void KeyScan();
- int TempDeal(int temp);
- void LcdDisplay(int temp);
- void LcdDisplay1(int temp); //lcd顯示
- /*******************************************************************************
- * 函數(shù)名 : main
- * 函數(shù)功能 : 主函數(shù)
- * 輸入 : 無
- * 輸出 : 無
- *******************************************************************************/
- void main()
- {
- unsigned char i;
- P0=0XFF;
- Buzzer1 = 1; //熄滅LED及關(guān)閉蜂鳴器
- LED1 = 1;
- Buzzer2 = 1;
- LED2 = 1;
-
- Lcd_Init(); //初始化LCD12864
- UsartConfiguration(); //初始化串口,波特率9600
- while(1)
- {
-
- KeyScan();
-
- if(Set==0)
- {
- LcdWriteStr(0x80, "Temp1:", 6);
- LcdWriteStr(0x90, "Temp2:", 6);
-
- Temperature = TempDeal(Ds18b20ReadTemp()) + Deviation;
- Temperature1 = TempDeal(Ds18b20ReadTemp1()) + Deviation1;
-
- LcdDisplay(Temperature); //顯示溫度
- LcdDisplay1(Temperature1); //顯示溫度
-
- REPORT(Temperature, Report, 1); //報(bào)警
- REPORT(Temperature1, Report1, 2); //報(bào)警
-
- }
- // delay_1ms(1000);//1s鐘刷一次
-
-
- if((count>=200) && (Flag==1)) //10s
- {
- count=0;
-
- // ClrRsBuf(RsBuf,50); //清空接收緩沖區(qū)
- // RsPoint=0;
- //
- // ES=0; //關(guān)閉接收中斷
- // Send_Str("AT+CIPSTATUS\x0D\x0A"); //查詢tcp連接狀態(tài) 0D 0A 0D 0A 2B 43 49 50 53 54 41 54 55 53 3A 30 2C 43 4F 4E 4E 45 43 54 20 4F 4B 20 20 0D 0A
- // ES=1; //打開接收中斷
- // if(WaitOK(AT_Code, 10)==1)
- // {
- // LcdWriteCom(0x98); //清空lcd后1行
- // for(i=0;i<16;i++)
- // LcdWriteData(' ');
- // Flag=1;
- // LcdWriteStr(0x98, "CONNECT OK", 10);
- //
-
- ClrRsBuf(RsBuf,50); //清空接收緩沖區(qū)
- RsPoint=0;
-
- ES=0; //關(guān)閉接收中斷
- Send_Str("AT+CIPSEND\x0D\x0A"); //tcp發(fā)送
- ES=1; ////打開接收中斷
- if(WaitOK(AT_SK, 2)==1) // '>' 0D 0A 3E 20
- {
- ES=0; //關(guān)閉接收中斷
- Int_Char(Temperature);
- Send_Str("節(jié)點(diǎn)1溫度值為:");
- SendnStr(dat,8);
- Send_Str(";\x0A");
-
- Int_Char(Temperature1);
- Send_Str("節(jié)點(diǎn)2溫度值為:");
- SendnStr(dat,8);
- Send_Str(";\x0A\x1A");
- ES=1; ////打開接收中斷
-
- switch(WaitOK(AT_Code, 3))
- {
- case 0:
- {
- LcdWriteCom(0x98); //清空lcd后1行
- for(i=0;i<16;i++)
- LcdWriteData(' ');
- LcdWriteStr(0x98, "SEND FAIL", 9);
- Num++;
- if(Num==10)
- {
- Num=0;
- Flag=0;
- LcdWriteCom(0x88); //清空lcd后2行
- for(i=0;i<16;i++)
- LcdWriteData(' ');
- LcdWriteCom(0x98);
- for(i=0;i<16;i++)
- LcdWriteData(' ');
- }
- }
- break;
-
- case 1:
- {
- LcdWriteCom(0x98); //清空lcd后1行
- for(i=0;i<16;i++)
- LcdWriteData(' ');
- LcdWriteStr(0x98, "SEND SUCCESS", 12);
- Flag=1;
- }
- break;
-
- default:
- break;
- }
- }
-
- }
-
- }
-
- }
- /*******************************************************************************
- * 函數(shù)名 : Int_Char
- * 函數(shù)功能 : 整形數(shù)據(jù)轉(zhuǎn)換為字符型
- * 輸入 : temp
- * 輸出 : 無
- *******************************************************************************/
- void Int_Char(int temp)
- {
-
- dat[0] = (temp % 10000 / 1000)+0x30;
- dat[1] = (temp % 1000 / 100)+0x30;
- dat[2] = '.';
- dat[3] = (temp % 100 / 10)+0x30;
- dat[4] = (temp % 10)+0x30;
- dat[5] = '\xA1';
- dat[6] = '\xE3';
- dat[7] = 'C';
- }
- /*******************************************************************************
- * 函數(shù)名 : REPORT(int temperature, int report, uchar es)
- * 函數(shù)功能 : 報(bào)警處理,
- * 輸入 : 采集的溫度:temperature;報(bào)警溫度:report; 節(jié)點(diǎn)選擇:es
- * 輸出 : 無
- *******************************************************************************/
- void REPORT(int temperature, int report, uchar es)
- {
- switch(es)
- {
- case 1:
- {
- if(temperature>=report) //報(bào)警temperature
- {
- Buzzer1 = 0;
- LED1 = 0;
-
- }
- else
- {
- Buzzer1 = 1;
- LED1 = 1;
- }
- }
- break;
-
- case 2:
- {
- if(temperature>=report) //報(bào)警
- {
- Buzzer2 = 0;
- LED2 = 0;
- }
- else
- {
- Buzzer2 = 1;
- LED2 = 1;
- }
- }
- break;
-
- default:
- break;
- }
- }
- /*******************************************************************************
- * 函數(shù)名 :UsartConfiguration()
- * 函數(shù)功能 :設(shè)置串口
- * 輸入 : 無
- * 輸出 : 無
- *******************************************************************************/
- void UsartConfiguration()
- {
- SCON=0X50; //設(shè)置為工作方式1
- TMOD=0X21; //設(shè)置計(jì)數(shù)器1工作方式2;定時(shí)器 0工作方式1
- PCON=0X80; //波特率加倍
- TH1=0XFA; //計(jì)數(shù)器初始值設(shè)置,注意波特率是9600;4800的f3
- TL1=0XFA;
-
- TH0=0X3C; //定時(shí)50ms
- TL0=0XB0;
-
- ES=0; //bu打開接收中斷
- ET0=1; //打開定時(shí)器0中斷
- EA=1; //打開總中斷
-
- TR1=1; //打開計(jì)數(shù)器1
- TR0=0; //關(guān)閉定時(shí)器0
- }
- /*******************************************************************************
- * 函數(shù)名 : TX_Char(unsigned char TXData)
- * 函數(shù)功能 : 串口發(fā)送字符
- * 輸入 : TXData
- * 輸出 : 無
- *******************************************************************************/
- void TX_Char(unsigned char TXData)
- {
- SBUF=TXData; //發(fā)送數(shù)據(jù)
- while(!TI); //等待發(fā)送數(shù)據(jù)完成
- TI=0; //清除發(fā)送完成標(biāo)志位
- }
- /*******************************************************************************
- * 函數(shù)名 : TX_Char(unsigned char TXData)
- * 函數(shù)功能 : 串口發(fā)送字符串
- * 輸入 : TXData
- * 輸出 : 無
- *******************************************************************************/
- void Send_Str(unsigned char *str)//發(fā)送字符串
- {
- while(*str!='\0')
- {
- TX_Char(*str);
- str++;
- }
- }
- /*******************************************************************************
- * 函數(shù)名 : SendnStr(char *str, char n)
- * 函數(shù)功能 : 串口發(fā)送n字節(jié)字符串
- * 輸入 : TXData
- * 輸出 : 無
- *******************************************************************************/
- void SendnStr(char *str, char n)//發(fā)送字符串
- {
- while((n--) && (*str!='\0'))
- {
- TX_Char(*str);
- str++;
- }
- }
- /*******************************************************************************
- * 函數(shù)名 : ClrRsBuf(char *p,int len)
- * 函數(shù)功能 : 清空p指針里len字節(jié)長(zhǎng)度的內(nèi)存
- * 輸入 : 指針:p ; 清空長(zhǎng)度:len
- * 輸出 : 無
- *******************************************************************************/
- void ClrRsBuf(char *p,int len) //清空
- {
- while(len--)
- {
- *p='\0';
- p++;
- }
- }
- /*******************************************************************************
- * 函數(shù)名 : strncmp ( char * s1, char * s2, size_t n)
- * 函數(shù)功能 :比較str1與str2的前n個(gè)字符,相同返回0;不同返回( *s1 - *s2 )
- * 輸入 : 指針:str1 ; 指針:str2 ;長(zhǎng)度:n
- * 輸出 : 比較結(jié)果相同返回0;不同返回( *s1 - *s2 )
- *******************************************************************************/
- char strncmp ( char * s1, char * s2, size_t n)
- {
- if ( !n ) //n為0,則返回0
- return(0);
- //在接下來的while循環(huán)中
- //第一個(gè)循環(huán)條件:--n,如果比較到前n個(gè)字符,則退出循環(huán)
- //第二個(gè)循環(huán)條件:*s1,如果s1指向字符串末尾,則退出循環(huán)
- //第三個(gè)循環(huán)條件:*s1 == *s2,如果兩字符不等,則退出循環(huán)
- while (--n && *s1 && *s1 == *s2)
- {
- s1++;
- s2++;
- }
- return( *s1 - *s2 );
- }
- /*******************************************************************************
- * 函數(shù)名 : strlen(const char *str)
- * 函數(shù)功能 : 求指針的長(zhǎng)度
- * 輸入 : 指針:str
- * 輸出 : 指針的長(zhǎng)度
- *******************************************************************************/
- size_t strlen(const char *str)
- {
- size_t length = 0;
- while (*str++)
- ++length;
- return length;
- }
- /*******************************************************************************
- * 函數(shù)名 : *strstr( const char *s1, const char *s2 )
- * 函數(shù)功能 : 找出s2字符串在s1字符串中第一次出現(xiàn)的位置
- * 輸入 : 指針:s1 ; 指針:s2
- * 輸出 : 返回該位置的指針,如找不到則返回NULL
- *******************************************************************************/
- char *strstr( const char *s1, const char *s2 )
- {
- int len2;
- if ( !(len2 = strlen(s2)) )
- return (char *)s1;
- for ( ; *s1; ++s1 )
- {
- if ( *s1 == *s2 && strncmp( s1, s2, len2 )==0 )
- return (char *)s1;
- }
- return NULL;
- }
- /*******************************************************************************
- * 函數(shù)名 : WaitOK(uchar *th, uchar time)
- * 函數(shù)功能 : 等待time s的時(shí)間,判斷6A模組返回信息是否OK
- * 輸入 : 指針:th ; 等待時(shí)間:time
- * 輸出 : OK返回1,否則返回0
- *******************************************************************************/
- char WaitOK(char *th, char time)
- {
- while(time--)
- {
- if(strstr(RsBuf,th) != NULL) //strncmp
- {
- return 1;
- }
-
- else
- {
- if(time!=0)
- delay_1ms(1000);
- }
- }
- return 0;
- }
- /*******************************************************************************
- * 函數(shù)名 : Connect_GPRS()
- * 函數(shù)功能 : 連接GPRS
- * 輸入 : 無
- * 輸出 : 無
- *******************************************************************************/
- char Connect_GPRS()
- {
- char i;
-
- ClrRsBuf(RsBuf,50); //清空接收緩沖區(qū) AT_Code
- RsPoint=0;
- ES=0; //關(guān)閉接收中斷
- Send_Str("ATE0\x0D\x0A"); //ATE0:關(guān)閉回顯; ATE1:打開回顯
- ES=1; //打開接收中斷
- if(WaitOK(AT_Code, 10)!=1)
- return 0;
-
- ClrRsBuf(RsBuf,50); //清空接收緩沖區(qū) AT_Code
- RsPoint=0;
- ES=0; //關(guān)閉接收中斷
- Send_Str("AT+CGATT=1\x0D\x0A"); //GPRS 附著; AT+CGATT=0 GPRS分離
- ES=1; //打開接收中斷
- if(WaitOK(AT_Code, 10)!=1)
- return 0;
-
- ClrRsBuf(RsBuf,50); //清空接收緩沖區(qū) AT_Code
- RsPoint=0;
- ES=0; //關(guān)閉接收中斷
- Send_Str("AT+CGACT=1,1\x0D\x0A"); //PDP上下文激活 去激活:AT+CGACT=0,1
- ES=1; //打開接收中斷
- if(WaitOK(AT_Code, 10)!=1)
- return 0;
-
- ClrRsBuf(RsBuf,50); //清空接收緩沖區(qū) AT_Code
- RsPoint=0;
- ES=0; //關(guān)閉接收中斷
- Send_Str("AT+CIFSR\x0D\x0A"); //查詢 IP 地址
- ES=1; //打開接收中斷
- if(WaitOK(AT_Code,10)==1)
- {
- LcdWriteCom(0x88); //清空第3行
- for(i=0;i<16;i++)
- LcdWriteData(' ');
- LcdWriteCom(0x88);
-
- for(i=2;i<17;i++)
- {
- if((RsBuf[i]!='\x0D')&&(RsBuf[i]!='\x0A')&&(RsBuf[i]!=' '))
- LcdWriteData(RsBuf[i]);
- }
- }
-
- ClrRsBuf(RsBuf,50); //清空接收緩沖區(qū) AT_Code
- RsPoint=0;
- ES=0; //關(guān)閉接收中斷
- Send_Str(TCP); //GPRS TCP 連接
- ES=1; //打開接收中斷
- if(WaitOK(AT_Code,10)==1) //strncmp(RsBuf+17,CONNECT_OK, 10)==0 WaitOK(CONNECT_OK, 10)==1
- {
- LcdWriteCom(0x98); //清空lcd后1行
- for(i=0;i<16;i++)
- LcdWriteData(' ');
- LcdWriteStr(0x98, "CONNECT OK", 10);
- Flag=1; //置GPRS連接標(biāo)志
-
- return 1;
- }
-
- LcdWriteCom(0x88); //清空lcd后1行
- for(i=0;i<16;i++)
- LcdWriteData(' ');
- LcdWriteCom(0x98); //清空lcd后1行
- for(i=0;i<16;i++)
- LcdWriteData(' ');
- LcdWriteStr(0x98, "CONNECT ERROR", 13);
- Flag=0; //清GPRS連接標(biāo)志
-
- return 0;
-
- }
- /*******************************************************************************
- * 函數(shù)名 : void Usart()
- * 函數(shù)功能 : 串口中斷函數(shù)
- * 輸入 : 無
- * 輸出 : 無
- *******************************************************************************/
- void Usart() interrupt 4 using 3
- {
- if(RI==1)
- {
- RI=0;
- RsBuf[RsPoint++]=SBUF;
- if (RsPoint>=50)
- {
- ES=0; //關(guān)閉接收中斷
- RsPoint=50;
- }
- }
- }
- /*******************************************************************************
- * 函數(shù)名 : Timer0
- * 函數(shù)功能 : 定時(shí)器0中斷函數(shù)
- * 輸入 : 無
- * 輸出 : 無
- *******************************************************************************/
- void Timer0() interrupt 1 using 3
- {
- TH0=0X3C; //重裝定時(shí)值50ms
- TL0=0XB0;
- count++;
-
- }
- /*******************************************************************************
- * 函數(shù)名 : KeyScan
- * 函數(shù)功能 : 按鍵檢測(cè)函數(shù)
- * 輸入 : 無
- * 輸出 : 無
- *******************************************************************************/
- void KeyScan()
- {
- unsigned char i=0;
- int Dev;
-
- K1=1;
- if(K1==0) //檢測(cè)按鍵K1是否按下
- {
- delay_1ms(10); //消除抖動(dòng)
- if(K1==0) //按鍵1按下時(shí)執(zhí)行該動(dòng)作
- {
-
- Set += 1;
- if(Set==5)
- Set=0;
-
- LcdWriteCom(0x01); //寫入空格清屏幕
-
- LcdWriteCom(0x80); //設(shè)定首行顯示位置
-
- if(Set==1)
- {
- LcdWriteStr(0x80, "Correct Temp1:", 14);
-
- LcdWriteCom(0x91); //設(shè)定顯示位置
-
- if(Deviation == 0)
- LcdWriteData(' '); //顯示
- if(Deviation > 0)
- LcdWriteData('+'); //顯示正
- if(Deviation < 0)
- LcdWriteData('-'); //顯示負(fù)
-
- Dev = abs(Deviation);
-
- dat[0] = Dev % 1000 / 100;
- dat[1] = Dev % 100 / 10;
- dat[2] = Dev % 10;
-
- LcdWriteData('0'+dat[0]); //個(gè)位
- LcdWriteData('.'); //顯示 ‘.’
- LcdWriteData('0'+dat[1]); //十分位
- LcdWriteData('0'+dat[2]); //百分位
- LcdWriteData(' ');
- LcdWriteData('C');
- }
-
- if(Set==2)
- {
- LcdWriteStr(0x80, "Correct Temp2:", 14);
-
- LcdWriteCom(0x91); //設(shè)定顯示位置
-
- if(Deviation1 == 0)
- LcdWriteData(' '); //顯示
- if(Deviation1 > 0)
- LcdWriteData('+'); //顯示正
- if(Deviation1 < 0)
- LcdWriteData('-'); //顯示負(fù)
-
- Dev = abs(Deviation1);
-
- dat[0] = Dev % 1000 / 100;
- dat[1] = Dev % 100 / 10;
- dat[2] = Dev % 10;
-
- LcdWriteData('0'+dat[0]); //個(gè)位
- LcdWriteData('.'); //顯示 ‘.’
- LcdWriteData('0'+dat[1]); //十分位
- LcdWriteData('0'+dat[2]); //百分位
- LcdWriteData(' ');
- LcdWriteData('C');
- }
-
- if(Set==3)
- {
- LcdWriteStr(0x80, "High Ring1:", 10);
-
- LcdWriteCom(0x91); //設(shè)定顯示位置
-
- if(Report == 0)
- LcdWriteData(' '); //顯示
- if(Report > 0)
- LcdWriteData('+'); //顯示正
- if(Report < 0)
- LcdWriteData('-'); //顯示負(fù)
-
- Dev = abs(Report);
-
- dat[0] = Dev % 10000 / 1000;
- dat[1] = Dev % 1000 / 100;
- dat[2] = Dev % 100 / 10;
- dat[3] = Dev % 10;
-
- LcdWriteData('0'+dat[0]); //十位
- LcdWriteData('0'+dat[1]); //個(gè)位
- LcdWriteData('.'); //顯示 ‘.’
- LcdWriteData('0'+dat[2]); //十分位
- LcdWriteData('0'+dat[3]); //百分位
- LcdWriteData(' ');
- LcdWriteData('C');
- }
-
- if(Set==4)
- {
- LcdWriteStr(0x80, "High Ring2:", 10);
-
- LcdWriteCom(0x91); //設(shè)定顯示位置
-
- if(Report1 == 0)
- LcdWriteData(' '); //顯示
- if(Report1 > 0)
- LcdWriteData('+'); //顯示正
- if(Report1 < 0)
- LcdWriteData('-'); //顯示負(fù)
-
- Dev = abs(Report1);
-
- dat[0] = Dev % 10000 / 1000;
- dat[1] = Dev % 1000 / 100;
- dat[2] = Dev % 100 / 10;
- dat[3] = Dev % 10;
-
- LcdWriteData('0'+dat[0]); //十位
- LcdWriteData('0'+dat[1]); //個(gè)位
- LcdWriteData('.'); //顯示 ‘.’
- LcdWriteData('0'+dat[2]); //十分位
- LcdWriteData('0'+dat[3]); //百分位
- LcdWriteData(' ');
- LcdWriteData('C');
- }
-
- while((i<50)&&(K1==0)) //檢測(cè)按鍵是否松開
- {
- delay_1ms(10);
- i++;
- }
- i=0;
- }
- }
-
- K2=1;
- if(K2==0) //檢測(cè)按鍵K1是否按下
- {
- delay_1ms(10); //消除抖動(dòng)
- if(K2==0)
- {
-
- if(Set==1)
- {
- Deviation += 10; //按鍵2按下時(shí)執(zhí)行該動(dòng)作,按一下溫度值正向糾正 0.1°C,最多糾正5°C
- if(Deviation >= 500)
- {
- Deviation = 500;
- }
- LcdWriteCom(0x91); //設(shè)定顯示位置
-
- if(Deviation == 0)
- LcdWriteData(' '); //顯示
- if(Deviation > 0)
- LcdWriteData('+'); //顯示正
- if(Deviation < 0)
- LcdWriteData('-'); //顯示負(fù)
-
- Dev = abs(Deviation);
-
- dat[0] = Dev % 1000 / 100;
- dat[1] = Dev % 100 / 10;
- dat[2] = Dev % 10;
-
- LcdWriteData('0'+dat[0]); //個(gè)位
- LcdWriteData('.'); //顯示 ‘.’
- LcdWriteData('0'+dat[1]); //十分位
- LcdWriteData('0'+dat[2]); //百分位
- LcdWriteData(' ');
- LcdWriteData('C');
- }
-
- if(Set==2)
- {
- Deviation1 += 10; //按鍵2按下時(shí)執(zhí)行該動(dòng)作,按一下溫度值正向糾正 0.1°C,最多糾正5°C
- if(Deviation1 >= 500)
- {
- Deviation1 = 500;
- }
- LcdWriteCom(0x91); //設(shè)定顯示位置
-
- if(Deviation1 == 0)
- LcdWriteData(' '); //顯示
- if(Deviation1 > 0)
- LcdWriteData('+'); //顯示正
- if(Deviation1 < 0)
- LcdWriteData('-'); //顯示負(fù)
-
- Dev = abs(Deviation1);
-
- dat[0] = Dev % 1000 / 100;
- dat[1] = Dev % 100 / 10;
- dat[2] = Dev % 10;
-
- LcdWriteData('0'+dat[0]); //個(gè)位
- LcdWriteData('.'); //顯示 ‘.’
- LcdWriteData('0'+dat[1]); //十分位
- LcdWriteData('0'+dat[2]); //百分位
- LcdWriteData(' ');
- LcdWriteData('C');
- }
-
- if(Set==3)
- {
- Report += 10; //按鍵2按下時(shí)執(zhí)行該動(dòng)作,按一下溫度報(bào)警值正向增加0.1°C
- if(Report >= 9000)
- {
- Report = 9000;
- }
-
- …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
0.png (45.84 KB, 下載次數(shù): 144)
下載附件
2017-4-21 17:22 上傳
資料下載:
程序 原理圖 用到的包括串口助手,服務(wù)器等資料.zip
(4 MB, 下載次數(shù): 405)
2017-4-21 16:23 上傳
點(diǎn)擊文件名下載附件
基于單片機(jī)的遠(yuǎn)程實(shí)時(shí)溫度監(jiān)控系統(tǒng)設(shè)計(jì) 上位機(jī)(gprs通訊) 下載積分: 黑幣 -5
|
評(píng)分
-
查看全部評(píng)分
|