📄 display.lst
字号:
219 1 char i,j;
220 1 LCD_RST=0;
221 1 Delay1ms(2);
222 1 LCD_RST=1;
223 1 LCD_WriteCommand1(0xc0);
224 1 LCD_WriteCommand2(0xc0);
225 1 LCD_WriteCommand1(0x3f); //开显示
226 1 LCD_WriteCommand2(0x3f);
227 1 for (j=0;j<8;j++) //清屏
228 1 {
229 2 LCD_WriteCommand1(0xB8+j); //清左半屏
230 2 LCD_WriteCommand1(0x40);
231 2 for (i=0;i<64;i++)
232 2 LCD_WriteData1(0x00);
233 2 LCD_WriteCommand2(0xB8+j); //清右半屏
234 2 LCD_WriteCommand2(0x40);
235 2 for (i=0;i<64;i++)
236 2 LCD_WriteData2(0x00);
237 2 }
238 1 }
239
240 //-=====================================================================
241 void Delay1us(unsigned char us) //延时
C51 COMPILER V8.05a DISPLAY 07/22/2007 11:27:38 PAGE 5
242 {
243 1 while (--us) ;//参数为1是延时6US 2时为8US依次递增
244 1
245 1 }
246 void Delay15us(void)
247 {
248 1 Delay1us(13); //延时15秒
249 1 }
250 void Delay10us(void)
251 {
252 1 Delay1us(8);
253 1 }
254 bit RstDS1820(void) //返回0-有设备连接1-无设备连接
255 {
256 1 unsigned char i;
257 1 bit RstFlag;
258 1 RstFlag=1;
259 1 DataPortDS1820=0;
260 1 for (i=0;i<40;i++) //480us 延时
261 1 Delay15us();
262 1 DataPortDS1820=1;
263 1 for(i=0;i<4;i++) //15us-60us 延时
264 1 {
265 2 Delay15us();
266 2 }
267 1 for (i=0;i<16;i++) //60us-240us 延时
268 1 {
269 2 Delay15us();
270 2 if (DataPortDS1820==0) RstFlag=0;
271 2 }
272 1 for (i=0;i<16;i++) //240us
273 1 {
274 2 Delay15us();
275 2 }
276 1 return RstFlag;
277 1 }
278 void WriteDS1820(unsigned char ch)
279 {
280 1 unsigned char i;
281 1 DataPortDS1820=1;
282 1 Delay1us(1);
283 1 for (i=0;i<8;i++)
284 1 {
285 2 EA=0;
286 2 DataPortDS1820=0;
287 2 Delay15us();
288 2 DataPortDS1820=ch&0x1;
289 2 EA=1;
290 2 Delay15us();Delay15us();Delay15us();
291 2 DataPortDS1820=1;
292 2 ch=ch>>1;
293 2 Delay1us(1);
294 2 }
295 1 }
296 unsigned char ReadDS1820(void)
297 {
298 1 unsigned char i,ch;
299 1 ch=0;
300 1 DataPortDS1820=1;
301 1 Delay1us(1);
302 1 for (i=0;i<8;i++)
303 1 {
C51 COMPILER V8.05a DISPLAY 07/22/2007 11:27:38 PAGE 6
304 2 EA=0;
305 2 DataPortDS1820=0;
306 2 Delay10us();
307 2 DataPortDS1820=1;
308 2 Delay1us(2);
309 2 ch=ch>>1;
310 2 if (DataPortDS1820==1)
311 2 {
312 3 ch=ch+0x80;
313 3 }
314 2 EA=1;
315 2 Delay15us();Delay15us();Delay15us();
316 2 }
317 1 return ch;
318 1 }
319 void SkipROMCode(void) //主机发跳过读序列号的操作命令:0xcc
320 {
321 1 // RstDS1820();
322 1 WriteDS1820(0xcc);
323 1 }
324 void StartADC(void)
325 {
326 1 // RstDS1820(); //复位
327 1 // WriteDS1820(0xcc); //广播
328 1 WriteDS1820(0x44); //启动温度转换转换 12bit700ms
329 1 }
330 unsigned int GetTempValue(void)//读取温度值的程序
331 {
332 1 unsigned char i,j;
333 1 unsigned int T;
334 1
335 1 RstDS1820();
336 1 SkipROMCode();
337 1 WriteDS1820(0xBE); //发布读取温度值的命令(0xBE)
338 1 i=ReadDS1820();
339 1 j=ReadDS1820();
340 1 StartADC();
341 1 T=i+j*256;
342 1 if (T==0xffff) return 0xffff;
343 1 if (T>0x8000) //温度为负号
344 1 {
345 2 T=-T;
346 2 return(0x8000+T*5/8); //计算温度值
347 2 }
348 1 else //温度为正号
349 1 return(T*5/8);
350 1 }
351 void sleep_ms(unsigned int count) //延时
352 {
353 1 unsigned char ii,jj;
354 1 for(ii=0;ii<count;ii++)
355 1 {
356 2 for(jj=0;jj<250;jj++)
357 2 _nop_();
358 2 }
359 1 }
360 /*void Init18b20(void)
361 {
362 SkipROMCode(); //主机发跳过读序列号的操作命令:0xcc
363 WriteDS1820(0x44); //启动温度转换
364 } */
365 //=================================================================================
C51 COMPILER V8.05a DISPLAY 07/22/2007 11:27:38 PAGE 7
366 void oxy(void)
367 { unsigned char temp;
368 1 unsigned int w;
369 1 RstDS1820();
370 1 SkipROMCode();
371 1 StartADC();
372 1 Delay1s(1);
373 1 InitLCD(); //清屏
374 1 w = GetTempValue(); //读出温度值的原始数据存入W
375 1 Delay1s(1);
376 1 LCD_WriteHZ(0,0,wen);
377 1 LCD_WriteHZ(16,0,du);
378 1 temp = (w%1000)/100;
379 1 LCD_WriteSZ(32,0,shuzi[temp]);
380 1 temp = (w%100)/10;
381 1 LCD_WriteSZ(40,0,shuzi[temp]); //个位
382 1 temp = (w%10);
383 1 LCD_WriteSZ(48,0,shuzi[temp]); //小数位
384 1 }
385 //===============================================================================
386 void presskey() interrupt 0 using 0
387 {
388 1
389 1 EA=0;
390 1 if(button1==0)
391 1 {
392 2 Delay1ms(100);
393 2 if(button1==0)
394 2 oxy();
395 2 }
396 1 if(button2==0)
397 1 {
398 2 Delay1ms(100);
399 2 if(button2==0)
400 2 oxy();
401 2 }
402 1 if(button3==0)
403 1 {
404 2 Delay1ms(100);
405 2 if(button3==0)
406 2 oxy();
407 2 }
408 1 if(button4==0)
409 1 {
410 2 Delay1ms(100);
411 2 if(button4==0)
412 2 oxy();
413 2 }
414 1 EA=1;
415 1 }
416
417
418 void main (void)
419 {
420 1 InitLCD();
421 1 Delay1ms(1);
422 1 EA=1;
423 1 EX0=1;
424 1 while(1)
425 1 {
426 2 }
427 1
C51 COMPILER V8.05a DISPLAY 07/22/2007 11:27:38 PAGE 8
428 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1172 ----
CONSTANT SIZE = 288 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 16
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 + -