Build target '目標 1'
compiling 順.c...
順.C(1): error C141: syntax error near '1'
順.C(1): error C129: missing ';' before '<'
1 #include <stdio.h>
2 #include <reg52.h>
3 #include "ADC0832.h"
4 #include "LCD1602.h"
5 #include "timer1.h"
6 #include "eepom52.h"
7
8 sbit key_a_m = P3^3; //自動手動模式切換按鍵
9 sbit key_set = P3^4; //設置按鍵
10 sbit key_add = P3^5; //加按鍵
11 sbit key_sub = P3^6; //減按鍵
12 sbit LED_shuiwei_shangxian = P1^0; //水位上限
13 sbit LED_shuiwei_xiaxian = P1^2; //水位下限
14 sbit LED_S_M = P1^4; //水質上限
15 sbit beep = P3^7; //蜂鳴器
16 sbit led_run = P1^7; //運行指示燈
17 sbit reep = P1^5; //繼電器
18 sbit reep2 = P1^6; //繼電器
19
20 void delay_ms(unsigned int t); //ms延時
21 void updata_water_value(); //更新當前水深到LCD1602
22 void updata_min_max_water_value(); //更新最大最小水深到LCD1602
23 void A_M_switch(); //queren函數
24 void SET_switch(); //設置函數
25 void add_value(); //最大最小水深加函數
26 void sub_value(); //最大最小水深減函數
27
28 void update_eeprom(); //更新eeprom存儲的數據
29 void init_eeprom(); //初始化eeprom
30
31 void low_water_check(); //水位檢測比較報警函數
32
33 int cur_warter_data = 0; //當前水深
34 int max_warter_data = 70; //最大水深
35 int min_warter_data = 40; //最小水深
36 unsigned char flag_a_m = 0; //自動手動標志位
37 unsigned char flag_set = 0; //設置按鍵標志位
38 unsigned char flag_alarm = 0; //報警標志位
39 int cur_zhuodu_data = 0; //當前水深
40 unsigned char max_zhuodu_data = 70; //最大濁度
41 unsigned char min_zhuodu_data = 0; //最小濁度
42
43 void timer1(){ //20ms定時處理函數
44 1 static unsigned int i = 0;
45 1 if( i++ % 15 == 0 ){
46 2 led_run = !led_run;
47 2 updata_water_value(); //更新當前水深到LCD1602
48 2 low_water_check(); //水位檢測比較報警函數
49 2 if(flag_alarm == 1 && flag_a_m == 0){ beep = !beep; } else if(flag_a_m == 0) { beep = 1; }
50 2 }
51 1
52 1 if(i > 60000) i = 0;
53 1
54 1 A_M_switch(); //自動手動模式切換函數
55 1 SET_switch(); //設置函數
56 1 add_value(); //最大最小水深加函數
57 1 sub_value(); //最大最小水深減函數
58 1 }
59
60 //主函數
61 void main(){
62 1 init_eeprom(); //初始化eeprom
63 1 LCD1602_init(); //初始化1602
64 1 LCD1602_Clear();
65 1 LCD1602_Disp_ZF(0x80, "W: H: L: ", 16);
66 1 LCD1602_Disp_ZF(0xC0, "Z: H: L: ", 16);
67 1 updata_water_value(); //更新當前水深到LCD1602
68 1 updata_min_max_water_value(); //更新最大最小水深到LCD1602
69 1 timer1_start(20, timer1);
70 1 beep = 1; //關閉蜂鳴器
71 1 LED_shuiwei_shangxian = 1;
72 1 LED_shuiwei_xiaxian = 1;
73 1 while(1){
74 2 delay_ms(500);
75 2 }
76 1 }
77
78 void delay_ms(unsigned int t)
79 {
80 1 unsigned char a,b;
81 1 while(t--)
82 1 {
83 2 for(b=102;b>0;b--)
84 2 for(a=3;a>0;a--);
85 2 }
86 1 }
87
88 //更新當前水深到LCD1602
89 void updata_water_value(){
90 1 unsigned char lcd1602_data[4] = {0};
91 1 cur_warter_data = get_0832_AD_data(1);
92 1 cur_warter_data = cur_warter_data*100/255;
93 1 if(cur_warter_data > 99) cur_warter_data = 99;
94 1 lcd1602_data[0] = cur_warter_data%100/10 + 48;
95 1 lcd1602_data[1] = cur_warter_data%10 + 48;
96 1 LCD1602_Disp_ZF(0x80+2, lcd1602_data, 2);
97 1
98 1 cur_zhuodu_data = 255-get_0832_AD_data(0);
99 1 cur_zhuodu_data = cur_zhuodu_data*100/255;
100 1 if(cur_zhuodu_data > 99) cur_zhuodu_data = 99;
101 1 lcd1602_data[0] = cur_zhuodu_data%100/10 + 48;
102 1 lcd1602_data[1] = cur_zhuodu_data%10 + 48;
103 1 LCD1602_Disp_ZF(0xc0+2, lcd1602_data, 2);
104 1 }
105
106 //更新最大最小水深到LCD1602
107 void updata_min_max_water_value(){
108 1 unsigned char lcd1602_data[4] = {0};
109 1 if(max_warter_data > 99) max_warter_data = 99;
110 1 lcd1602_data[0] = max_warter_data%100/10 + 48;
111 1 lcd1602_data[1] = max_warter_data%10 + 48;
112 1 LCD1602_Disp_ZF(0x80+8, lcd1602_data, 2);
113 1
114 1 if(min_warter_data > 99) min_warter_data = 99;
115 1 lcd1602_data[0] = min_warter_data%100/10 + 48;
116 1 lcd1602_data[1] = min_warter_data%10 + 48;
117 1 LCD1602_Disp_ZF(0x80+14, lcd1602_data, 2)
118 1
119 1 if(max_zhuodu_data > 99) max_zhuodu_data = 99;
120 1 lcd1602_data[0] = max_zhuodu_data%100/10 + 48;
121 1 lcd1602_data[1] = max_zhuodu_data%10 + 48;
122 1 LCD1602_Disp_ZF(0xc0+8, lcd1602_data, 2);
123 1
124 1 if(min_zhuodu_data > 99) min_zhuodu_data = 99;
125 1 lcd1602_data[0] = min_zhuodu_data%100/10 + 48;
126 1 lcd1602_data[1] = min_zhuodu_data%10 + 48;
127 1 LCD1602_Disp_ZF(0xc0+14, lcd1602_data, 2);
128 1 }
129
130 //自動手動模式切換函數
131 void A_M_switch(){
132 1 key_a_m = 1;
133 1 if( key_a_m == 0 ){
134 2 delay_ms(2);
135 2 if( key_a_m == 0 ){
136 3 flag_set = 6;
137 3 LCD1602_chars( 5, 0, " " ); LCD1602_chars( 11, 0, " " ); LCD1602_chars( 5, 1, " " ); LCD1602_chars( 11,
- 1, " " );
138 3 while(key_a_m == 0);
139 3 }
140 2 }
141 1 }
142
143 //設置函數
144 void SET_switch(){
145 1 key_set = 1;
146 1 if(key_set == 0){
147 2 delay_ms(2);
148 2 if(key_set == 0){
149 3 flag_set++;
150 3 if(flag_set >= 5){ flag_set = 1; }
151 3 switch(flag_set){
152 4 case 0: LCD1602_chars( 5, 0, " " ); LCD1602_chars( 11, 0, " " ); LCD1602_chars( 5, 1, " " ); LCD1602_c
-hars( 11, 1, " " ); break;
153 4 case 1: LCD1602_chars( 5, 0, "*" ); LCD1602_chars( 11, 0, " " ); LCD1602_chars( 5, 1, " " ); LCD1602_c
-hars( 11, 1, " " ); break;
154 4 case 2: LCD1602_chars( 5, 0, " " ); LCD1602_chars( 11, 0, "*" ); LCD1602_chars( 5, 1, " " ); LCD1602_c
-hars( 11, 1, " " ); break;
155 4 case 3: LCD1602_chars( 5, 0, " " ); LCD1602_chars( 11, 0, " " ); LCD1602_chars( 5, 1, "*" ); LCD1602_c
-hars( 11, 1, " " ); break;
156 4 case 4: LCD1602_chars( 5, 0, " " ); LCD1602_chars( 11, 0, " " ); LCD1602_chars( 5, 1, " " ); LCD1602_c
-hars( 11, 1, "*" ); break;
157 4 }
158 3 while(key_set == 0);
159 3 update_eeprom();
160 3 }
161 2 }
162 1 }
163
164 //最大最小水深加函數
165 void add_value(){
166 1 key_add = 1;
167 1 if(key_add == 0 && flag_set != 0){
168 2 delay_ms(2);
169 2 if(key_add == 0 && flag_set != 0){
170 3 switch(flag_set){
171 4 case 0: break;
172 4 case 1: if(max_warter_data < 100) max_warter_data++; break;
173 4 case 2: if(min_warter_data < max_warter_data) min_warter_data++; break;
174 4 case 3: if(max_zhuodu_data < 100) max_zhuodu_data++; break;
175 4 case 4: if(min_zhuodu_data < max_zhuodu_data) min_zhuodu_data++; break;
176 4 }
177 3 updata_min_max_water_value();
178 3 while(key_add == 0);
179 3 update_eeprom();
180 3 }
181 2 }
182 1 }
183
184 //最大最小水深減函數
185 void sub_value(){
186 1 key_sub = 1;
187 1 if(key_sub == 0 && flag_set != 0){
188 2 delay_ms(2);
189 2 if(key_sub == 0 && flag_set != 0){
190 3 switch(flag_set){
191 4 case 0: break;
192 4 case 1: if( max_warter_data > min_warter_data ) max_warter_data--; break;
193 4 case 2: if( min_warter_data > 0 ) min_warter_data--; break;
194 4 case 3: if( max_zhuodu_data > min_zhuodu_data ) max_zhuodu_data--; break;
195 4 case 4: if( min_zhuodu_data > 0 ) min_zhuodu_data--; break;
196 4 }
197 3 updata_min_max_water_value();
198 3 while(key_sub == 0);
199 3 update_eeprom();
200 3 }
201 2 }
202 1 }
203
204 //初始化eeprom
205 void init_eeprom(){
206 1 unsigned char is_first_init = byte_read(0x2020);
207 1 if(is_first_init == 1){
208 2 max_warter_data = byte_read(0x2000);
209 2 min_warter_data = byte_read(0x2001);
210 2 max_zhuodu_data = byte_read(0x2002);
211 2 min_zhuodu_data = byte_read(0x2003);
212 2 }else{
213 2 SectorErase(0x2000);
214 2 byte_write(0x2000, max_warter_data);
215 2 byte_write(0x2001, min_warter_data);
216 2 byte_write(0x2002, max_zhuodu_data);
217 2 byte_write(0x2003, min_zhuodu_data);
218 2 byte_write(0x2020, 1);
219 2 }
|