【正文】
nalData acquisition and control system and Design 82(2007)13591364.[14]高衛(wèi)東、辛友順,[M]2008[15][M],2010[16][D],2009[17][M],2011[18] Chen Y. Applications of time series analysis to water demand prediction. Compute applications in water supply[J] .Vol. 2. England:Research Studies Press, 1988. 8510[19] Coulbeck B, Tennant S. Development of a demand prediction program for use in optimal control of water supply[J]. Systems Science, 1985, 11(1):7680. [20][M],2010[21][M],2010[22][D],2008[23] Perry PF. Demand forecasting in water supply networks. Journal of Hydraulics,1107(9):3752. 附錄1 總原理圖附錄2 程序清單includedefine uchar unsigned chardefine uint unsigned intsbit k1=P3^4。sbit smgd=P2^6。sbit smgk=P2^7。 uchar Pre_KeyNo=16,KeyNo=16。uchar code LEDData[]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07, 0X7F,0X6F,0X77,0X7C,0X39,0X5E,0X79, 0X71}/*****延時子程序*****/void Delay(uint x){ uchar i。 while(x)for(i=0。i120。i++)。}/**************LED顯示子程序***************/void Display_Result(int d){ smgk=1。 P0=0X7C。 smgd=1。P0=LEDData[d/100]。 //顯示百位Delay(5)。smgd=0。smgk=0。smgk=1。P0=0X7D。 smgd=1。P0=LEDData[d/10%10]。 //顯示十位Delay(5)。smgd=0。smgk=0。P0=0x7E。smgd=1。P0=LEDData[d%10]。 //顯示個位Delay(5)。smgk=0。smgd=0。smgk=1。P0=0X7C。smgd=1。P0=0x80。 //顯示小數(shù)點Delay(5)。smgd=0。smgk=0。}/************鍵盤掃描子程序**************/void Keys_Scan(){ uchar Tmp,An。P3=0XF0。 //低3位置1,放入3行Delay(1)。An=P3^0XF0。 //按鍵后111000將變成XXX000,X中有一個為0,2個仍為1,而異或操作會把2個1變成0,唯一的0變成1 Tmp=An4。 //該表達(dá)式將高3位移到低四位 swith(Tmp) //判斷按鍵發(fā)生在哪列{ case 1:KeyNo=0。break。 case 2:KeyNo=1。break。 case 3:KeyNo=2。break。 default: KeyNo=9。 //無鍵按下}P3=0X0F。 //高3位置0,放入3列Delay(1)。Tmp=P3^0xF0。 // 按鍵后00001111將變成0000XXXX,X中有一個為0,3個仍為1,而異或操作會把3個1變成0,唯一的0變成1 switch(Tmp) //0—3行分別附加起始值0,3,6{ case 1:KeyNo+=0。break。 case 2:KeyNo+=3。break。 case 4:KeyNo+=6。break。 }}/********向串口發(fā)送數(shù)據(jù)子程序*********/void putc_to_serialport(uchar C){ SBUF=C。 while(T1==0)。TI=0。}Display(){ smgK=1。 P1=0X01。 Smgd=1。 P0=OXOF。} /*******主程序*******/ void main(){ P0=0x00。 SCON=0x50。 //串口工作于方式1 TMOD=0x20。 //T1工作于模式2 PCON=0x00。 //波特率不加倍 TH1=0xFD。 //波特率為9600 TL1=0xFD。 TI=RI=0。 TR1=1。 //啟動定時器1 IE=0x90。 //允許串口中斷 while(1){ Delay(100)。 if(P3!=0X0F) Keys_Scan()。 swith(KeyNo){ case 0:putc_to_serialport(0X00)。 break。 case 1:putc_to_serialport(0XF8)。 break。 case 2:putc_to_serialport(0XF9)。 break。 case 3:putc_to_serialport(0XFA)。 break。 case 4:putc_to_serialport(0XFB)。 break。 case 5:putc_to_serialport(0XFC)。 break。 case 6:putc_to_serialport(0XFD)。 break。 case 7:putc_to_serialport(0XFE)。 break。 case 8:putc_to_serialport(0XFF)。 break。 case 16:Display() }}}/*********A/D轉(zhuǎn)換子程序*********/void Adcon(){ int j,m=0XF8。 uchar n。 for(j=0,P0=m。j++。j8) { ST=0。ST=1。ST=0。 while(EOC==0)。 OE=1。 n=P1。 putc_to_SerialPort(n)。 m++。}}