主程序
- #include <reg52.h>
- #include <intrins.h>
- #include "LCD12864.h"
- #include "timer1.h"
- #include "ADC0832.h"
- #include "DS18B20.h"
- #include "eepom52.h"
- #include "HC_SR04.h"
- sbit beep = P2^0;
- sbit setKey = P3^3;
- sbit addKey = P3^4;
- sbit subKey = P3^5;
- float dataV[4]= {0};
- unsigned char dataTH[8]={110,30, 99, 30, 8,2, 45, 15};
- unsigned char lcd[8] = {0};
- void alarm();
- void delay(unsigned int i){
- while(i--);
- }
- float pre_ph_v, phv;
- void setKeyDeal();
- void addKeyDeal();
- void subKeyDeal();
- //³õʼ»¯eeprom
- void init_eeprom(){
- unsigned char is_first_init = byte_read(0x2020);
- if(is_first_init == 1){
- dataTH[0] = byte_read(0x2000);
- dataTH[1] = byte_read(0x2001);
- dataTH[2] = byte_read(0x2002);
- dataTH[3] = byte_read(0x2003);
- dataTH[4] = byte_read(0x2004);
- dataTH[5] = byte_read(0x2005);
- dataTH[6] = byte_read(0x2006);
- dataTH[7] = byte_read(0x2007);
- }else{
- SectorErase(0x2000);
- byte_write(0x2000, dataTH[0]);
- byte_write(0x2001, dataTH[1]);
- byte_write(0x2002, dataTH[2]);
- byte_write(0x2003, dataTH[3]);
- byte_write(0x2004, dataTH[4]);
- byte_write(0x2005, dataTH[5]);
- byte_write(0x2006, dataTH[6]);
- byte_write(0x2007, dataTH[7]);
- byte_write(0x2020, 1);
- }
- }
- //¸üÐÂeeprom´æ´¢µÄÊý¾Ý
- void update_eeprom(){
- SectorErase(0x2000);
- byte_write(0x2000, dataTH[0]);
- byte_write(0x2001, dataTH[1]);
- byte_write(0x2002, dataTH[2]);
- byte_write(0x2003, dataTH[3]);
- byte_write(0x2004, dataTH[4]);
- byte_write(0x2005, dataTH[5]);
- byte_write(0x2006, dataTH[6]);
- byte_write(0x2007, dataTH[7]);
- byte_write(0x2020, 1);
- }
- void updateLCD(){
- dataV[0] = get_0832_AD_data(0); //PH
- dataV[1] = get_0832_AD_data(1); //ZD
- dataV[2] = get_hc_sr04_distance();//ˮλ
- dataV[3] = Get18B20Temp(); //WD
-
- phv = -58.87*(dataV[0]*5.0/255.0) + 216.77;
- if(phv > 141 || phv < 0 ) { phv = pre_ph_v; }
- pre_ph_v = phv;
- lcd[0] = ((int)phv)%1000/100+48;
- lcd[1] = ((int)phv)%100/10 + 48;
- lcd[2] = '.';
- lcd[3] = ((int)phv)%10 + 48;
- lcd[4] = '\0';
- PutStr(0,1, lcd);
- dataV[0] = phv;
- dataV[1] = dataV[1] /2.55;
- if(dataV[1] > 99) dataV[1] = 99;
- lcd[0] = ((int)dataV[1])%100/10 + 48;
- lcd[1] = ((int)dataV[1])%10 + 48;
- lcd[2] = '\0';
- PutStr(1,1, lcd);
-
- dataV[2] = 10 - (dataV[2]-40) /19;
- if(dataV[2] > 10) dataV[2] = 10;
- if(dataV[2] < 0) dataV[2] = 0;
- lcd[0] = ((int)dataV[2])%100/10 + 48;
- lcd[1] = ((int)dataV[2])%10 + 48;
- lcd[2] = '\0';
- PutStr(2,1, lcd);
-
- lcd[0] = ((int)dataV[3])%100/10 + 48;
- lcd[1] = ((int)dataV[3])%10 + 48;
- lcd[2] = '\0';
- PutStr(3,1, lcd);
- }
- void updateTH(){
- lcd[0] = ((int)dataTH[0])%1000/100+48;
- lcd[1] = ((int)dataTH[0])%100/10 + 48;
- lcd[2] = '\0';
- PutStr(0,4, lcd);
-
- lcd[0] = ((int)dataTH[1])%1000/100+48;
- lcd[1] = ((int)dataTH[1])%100/10 + 48;
- lcd[2] = '\0';
- PutStr(0,7, lcd);
-
- lcd[0] = ((int)dataTH[2])%100/10+48;
- lcd[1] = ((int)dataTH[2])%10 + 48;
- lcd[2] = '\0';
- PutStr(1,4, lcd);
- lcd[0] = ((int)dataTH[3])%100/10+48;
- lcd[1] = ((int)dataTH[3])%10 + 48;
- lcd[2] = '\0';
- PutStr(1,7, lcd);
- lcd[0] = ((int)dataTH[4])%100/10+48;
- lcd[1] = ((int)dataTH[4])%10 + 48;
- lcd[2] = '\0';
- PutStr(2,4, lcd);
- lcd[0] = ((int)dataTH[5])%100/10+48;
- lcd[1] = ((int)dataTH[5])%10 + 48;
- lcd[2] = '\0';
- PutStr(2,7, lcd);
- lcd[0] = ((int)dataTH[6])%100/10+48;
- lcd[1] = ((int)dataTH[6])%10 + 48;
- lcd[2] = '\0';
- PutStr(3,4, lcd);
- lcd[0] = ((int)dataTH[7])%100/10+48;
- lcd[1] = ((int)dataTH[7])%10 + 48;
- lcd[2] = '\0';
- PutStr(3,7, lcd);
- }
- void timer1(){
- updateLCD();
- updateTH();
- alarm();
- }
- void main(){
-
- init_hc_sr04();
- DS18B20Init();
- LcmInit(); //LCD12864³õʼ»¯
- LcmClearTXT(); //LCD12864ÇåÆÁ
- init_eeprom();
- timer1_start(1000, timer1);
-
- PutStr(0,0, "PH H L ");
- PutStr(1,0, "ZD H L ");
- PutStr(2,0, "SW H L ");
- PutStr(3,0, "WD H L ");
-
- while(1){
- setKeyDeal();
- addKeyDeal();
- subKeyDeal();
- }
- }
復制代碼
超聲波
- #include "HC_SR04.h"
- unsigned char FLAG_OVERFLOW = 0; //³¬Éù²¨Ê±¼ä¹ý³¤Òç³ö±êÖ¾
- //10us
- void delay10us(unsigned int i)
- {
- while(i--);
- }
- void init_hc_sr04()
- {
- TRIG = 0;
-
- TMOD &= 0xf0;
- TMOD |= 0x01;
- TH0 = 0x3c;
- TL0 = 0xb0;
- TF0 = 0;
- ET0 = 1;
- PT0 = 1;
- EA = 1;
- }
- void timer0() interrupt 1
- {
- FLAG_OVERFLOW=1;
- }
- int get_hc_sr04_distance(){
- unsigned int distance;
-
- TH0 = 0x3c;
- TL0 = 0xb0;
- TR0 = 0;
-
- FLAG_OVERFLOW = 0;
- TRIG = 1;
- delay10us(2);
- TRIG = 0;
- TR0 = 1;
-
- while(!ECHO && FLAG_OVERFLOW == 0);
- TH0 = 0x3c;
- TL0 = 0xb0;
- TR0 = 1;
-
- while(ECHO && FLAG_OVERFLOW == 0);
- TR0 = 0;
- distance = TH0 << 8 | TL0;
- distance = (distance-15536)/58;
- if(FLAG_OVERFLOW == 1){
- FLAG_OVERFLOW = 0;
- distance = 999;
- }
-
- return distance;
- }
復制代碼 |