#include "STC15F2K60S2.h"
#include "bsp_tm7705.c"
#include "bsp_tm77052.c"
#include "SerialLcd12864.c"
#define FOSC 11059200L //Ïμí3ÆμÂê
#define BAUD 9600
//′®¿ú2¨ìØÂê
typedef unsigned char BYTE;
typedef unsigned int WORD;
#define u16 unsigned int
#define u8 unsigned char
u16 code WaterDatNum[21]=
{
1727, //0
2005, //1
2600, //2
3225, //3
3945, //4
4675, //5
5370, //6
6100, //7
6823, //8
7530, //9
8337, //10
9031, //11
9707, //12
10393, //13
11020, //14
11759, //15
12457, //16
13188,//17
13822,//18
14590,//19
15260 //20
};
unsigned long SysDat;
uint16_t VolDat,PHDat;
uint16_t WaterDat,SendNum;
bit busy;
#define S1_S0 0x40 //P_SW1.6
#define S1_S1 0x80 //P_SW1.7
void SysDelay(u16 ms)
{
while(ms--);
}
/*----------------------------
UART ÖD¶Ï·tÎñ3ìDò
-----------------------------*/
void Uart() interrupt 4 using 1
{
u8 Uartdat;
if (RI)
{
RI = 0; //Çå3yRIλ
Uartdat = SBUF; //Uartdat¸3Öμ′®¿úêy¾Y
if(Uartdat=='A')
{
P55=0;
}else if(Uartdat=='B')
{
P55=1;
}
}
if (TI)
{
TI = 0; //Çå3yTIλ
busy = 0; //ÇåÃ|±êÖ¾
}
}
/*----------------------------
·¢Ëí′®¿úêy¾Y
----------------------------*/
void SendData(BYTE dat)
{
while (busy); //μè′yÇ°ÃæμÄêy¾Y·¢Ëííê3é
busy = 1;
SBUF = dat; //D′êy¾Yμ½UARTêy¾Y¼Ä′æÆ÷
}
/*----------------------------
·¢Ëí×Ö·û′®
----------------------------*/
void SendString(char *s)
{
while (*s) //¼ì2a×Ö·û′®½áêø±êÖ¾
{
SendData(*s++); //·¢Ëíμ±Ç°×Ö·û
}
}
void ConfigCode(void) //Ïμí3ó2¼tÅäÖÃ3ìDòμÄ
{
P0M0=0; P0M1=0;
P1M0=0; P1M1=0;
P2M0=0; P2M1=0;
P5M0=0; P5M1=0;
P55=0; //LCD12864 ±31a¿ØÖÆIO μíμçÆ½μãáá
ACC = P_SW1;
ACC &= ~(S1_S0 | S1_S1); //S1_S0=0 S1_S1=0
P_SW1 = ACC; //(P3.0/RxD, P3.1/TxD)
SCON = 0x50; //8λ¿é±ä2¨ìØÂê
AUXR = 0x40; //¶¨ê±Æ÷1Îa1TÄ£ê½
TMOD = 0x20; //¶¨ê±Æ÷1ÎaÄ£ê½2(8λ×Ô¶ˉÖØÔØ)
TL1 = (256 - (FOSC/32/BAUD)); //éèÖÃ2¨ìØÂê֨װÖμ £¨9600£©
TH1 = (256 - (FOSC/32/BAUD));
TR1 = 1; //¶¨ê±Æ÷1¿aê¼1¤×÷
ES = 1; //ê1Äü′®¿úÖD¶Ï
EA = 1;
}
void ShowCode() // 12864òo¾§ÏÔê¾3ìDò
{
LCD12864_pos(0,1); //μúò»DD μú2áD
LCD12864_writebyte("Ë®Çé¼ì2aÏμí3");
LCD12864_pos(1,0); //μú2DD μú1áD
LCD12864_writebyte("ˮλ¸ß¶è:");
LCD12864_write(1,WaterDat/100%10+0x30);
LCD12864_write(1,WaterDat/10%10+0x30);
LCD12864_write(1,WaterDat%10+0x30);
LCD12864_writebyte("mm");
LCD12864_pos(2,0);
LCD12864_writebyte("PHÖμ:");
if(PHDat>1400)
{
LCD12864_writebyte("--.--");
}
else
{
LCD12864_write(1,PHDat/1000%10+0x30);
LCD12864_write(1,PHDat/100%10+0x30);
LCD12864_writebyte(".");
LCD12864_write(1,PHDat/10%10+0x30);
LCD12864_write(1,PHDat%10+0x30);
}
LCD12864_pos(3,0);
LCD12864_writebyte("μç3ØμçÑ1:");
LCD12864_write(1,VolDat/100%10+0x30);
LCD12864_writebyte(".");
LCD12864_write(1,VolDat/10%10+0x30);
LCD12864_write(1,VolDat%10+0x30);
LCD12864_writebyte("V");
}
void main(void) //Ö÷3ìDò
{
uint16_t adc1, adc2,adc3;
float ADNum,WaterNum;
u8 i;
ConfigCode(); //Ïμí3ÅäÖÃoˉêy
bsp_InitTM7705(); /* 3õê¼»ˉÅäÖÃTM7705 */
bsp_InitTM7705_2(); /* 3õê¼»ˉÅäÖÃTM7705 */
TM7705_CalibSelf(1); /* ×ÔD£×¼¡£Ö′DDê±¼ä½Ï3¤£¬Ô¼180ms */
adc1 = TM7705_ReadAdc(1);
TM7705_CalibSelf(2); /* ×ÔD£×¼¡£Ö′DDê±¼ä½Ï3¤£¬Ô¼180ms */
adc2 = TM7705_ReadAdc(2);
TM7705_2_CalibSelf(1); /* ×ÔD£×¼¡£Ö′DDê±¼ä½Ï3¤£¬Ô¼180ms */
adc3 = TM7705_2_ReadAdc(1);
LCD12864_init(); //LCD128643õê¼»ˉ
LCD12864_Qing(); //Çå3yÆáÄ»ÏÔê¾
while(1)
{
adc1 = TM7705_ReadAdc(1); /* Ö′DDê±¼ä 80ms */ //ˮλADÖμ
adc2 = TM7705_ReadAdc(2); /* Ö′DDê±¼ä 80ms */ //PH AD¼ì2a
adc3 = TM7705_2_ReadAdc(1); /* Ö′DDê±¼ä 80ms */
if(adc2>50000) PHDat=245;
else PHDat=(50000-adc2)/23.225+246;
VolDat=(uint16_t)(adc1*0.01917); //μçÑ1¼ÆËã1«ê½y=x£¨yÎaμçÑ1Ö죬xÎaADÖ죩
ADNum=ADNum*0.9+adc3*0.1;
for(i=0;i<21;i++)
{
if(ADNum<WaterDatNum[i])
{
break;
}
}
if(i==0)
{
WaterDat=0;
}else
{
WaterDat=i-1; //Õûêy2¿·Ö′|àí
WaterNum=(float)((ADNum-WaterDatNum[i-1])/(WaterDatNum[i]-WaterDatNum[i-1])*10);//D¡êy2¿·Ö′|àí
WaterDat=(u16)(WaterDat*10+WaterNum-1);
}
SendNum++;
if(SendNum>3)
{
SendNum=0;
SendString("\r\ndat,"); //à¶Ñà·¢ËíÏμí3êy¾YÏÔê¾
if(WaterDat>99)SendData(WaterDat/100%10+0x30); //ˮλêy¾Y
if(WaterDat>9)SendData(WaterDat/10%10+0x30);
SendData(WaterDat%10+0x30);
SendString(",");
if(PHDat>999)SendData(PHDat/1000%10+0x30); //PH Öμêy¾Y
SendData(PHDat/100%10+0x30);
SendString(".");
SendData(PHDat/10%10+0x30);
SendData(PHDat%10+0x30);
SendString(",");
if(VolDat>999)SendData(VolDat/1000%10+0x30); //Ïμí31¤×÷μçÑ1êy¾Y
SendData(VolDat/100%10+0x30);
SendString(".");
SendData(VolDat/10%10+0x30);
SendData(VolDat%10+0x30);
SendString(",ok");
}
ShowCode(); //LCD12864 òo¾§ÏÔê¾oˉêy
}
}
|