📄 +++
字号:
145 5 }
146 4 if(K2==0)
147 4 {
148 5 delay(5);
149 5 if(K2==0)
150 5 {
151 6 th4--;
152 6 while(!K2);
153 6 if(th4==-1)th4=9;
154 6 }
155 5 }
156 4 write_cmd(0xcc);
157 4 write_dat(th4+0x30);
158 4 }break;
159 3 default:break;
160 3 }
161 2 }
162 1 else flag1=0; //m一定不能掉,否则在调节温度的时候会影响其他菜单
163 1 th=th1*10+th2; //获取设置温度的高位
164 1 tl=th3*10+th4; //获取设置温度的低位
165 1 }
166
167 void alarm_speaker() //报警系统与当前温度进行比较并处理
168 {
169 1 if(temp>(th*10)||temp<(tl*10))
170 1 {
171 2 speaker=~speaker;
172 2 L1=0;
173 2 adder++;
174 2 tab=temp/10;
175 2 write_add(adder,tab);
176 2 }
177 1 else
178 1 {
179 2 speaker=1;
C51 COMPILER V8.02 MAIN 08/04/2010 15:09:42 PAGE 4
180 2 L1=1;
181 2 }
182 1 }
183
184 void main()
185 {
186 1 systemtime realtime;
187 1 init_18b20();
188 1 init_lcd();
189 1 init_2402();
190 1 speaker=1;
191 1 while(1)
192 1 {
193 2 k=key4();
194 2 get_ds1302(&realtime);//取时间
195 2 temp=read_temp(); //取温度
196 2 delay(200); //延时 保持数据稳定 避免数据刷新
197 2 switch(k)
198 2 {
199 3 case 1: //菜单一,显示时间
200 3 {
201 4 write_cmd(0x80);
202 4 print(" Time: ");
203 4 print(realtime.TimeString);
204 4 write_cmd(0xc0);
205 4 print(" Date: ");
206 4 print(realtime.DateString);
207 4 } break;
208 3 case 2: //菜单二,显示温度
209 3 {
210 4 write_cmd(0x80);
211 4 print(" DS18B20 is OK ");
212 4 write_cmd(0xc0);
213 4 print("NOW TEMP: . C ");
214 4 if(flagt==1)datadis[0]=0x2d;
215 4 else datadis[0]=temp/1000+0x30;
216 4 datadis[1]=temp/100%10+0x30;
217 4 datadis[2]=temp/10%10+0x30;
218 4 datadis[3]=0x2e;
219 4 datadis[4]=temp%10+0x30;
220 4 write_cmd(0xca);
221 4 print(datadis);
222 4 }break;
223 3 case 3: //菜单三,显示温度设置值
224 3 {
225 4 write_cmd(0x80);
226 4 print(" change temp: ");
227 4 write_cmd(0xc0);
228 4 print("TH= TL= ");
229 4 write_cmd(0xc3);
230 4 write_dat(th1+0x30);
231 4 write_cmd(0xc4);
232 4 write_dat(th2+0x30);
233 4 write_cmd(0xc5);
234 4 write_dat(0xdf); //摄氏度远点
235 4 write_cmd(0xc6);
236 4 write_dat(0x43);
237 4 write_cmd(0xcb);
238 4 write_dat(th3+0x30);
239 4 write_cmd(0xcc);
240 4 write_dat(th4+0x30);
241 4 write_cmd(0xcd); //摄氏度符号
C51 COMPILER V8.02 MAIN 08/04/2010 15:09:42 PAGE 5
242 4 write_dat(0xdf);
243 4 write_cmd(0xce);
244 4 write_dat(0x43);
245 4 flag1=1;
246 4 }break;
247 3 case 4: //菜单四,记录报警温度
248 3 {
249 4 write_cmd(0x80);
250 4 print(" ALARM TEMP ");
251 4 write_cmd(0xc0);
252 4 print(" RECORD: ");
253 4 write_cmd(0xcb);
254 4 write_dat(0xdf);
255 4 write_cmd(0xcc);
256 4 write_dat(0x43);
257 4 flag2=1;
258 4 }break;
259 3 default:break;
260 3 }
261 2 key_lcd(); //菜单三中温度设置的按键扫描
262 2 alarm_speaker(); //报警系统通过2402存储超出的温度,并记录
263 2 if(K5==0) //按下K5,就显示当前报警的温度
264 2 {
265 3 delay(5);
266 3 if(K5==0)
267 3 {
268 4 while(!K5);
269 4 q=read_add(adder);
270 4 }
271 3 };
272 2 if(flag2==1&&k==4) //k一定不能掉,不然会在其他菜单里出现乱码,菜单四中需要显示存储的报警数据
273 2 {
274 3 write_cmd(0xc9);
275 3 write_dat(q/10%10+0x30);
276 3 write_cmd(0xca);
277 3 write_dat(q%10+0x30);
278 3 }
279 2
280 2 }
281 1 }
282
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1866 ----
CONSTANT SIZE = 119 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 27 26
IDATA SIZE = ---- ----
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -