📄 200926.lst
字号:
242 2 }
243 1 DQ=1;
244 1 for(i=0;i<8;i++){delay15us();delay15us();delay15us();delay15us();}//Delay_uS(45);
245 1
246 1 }
247
248 bit readTS(void) //读DS18B20数据位
249 {
250 1 bit d;
251 1 DQ=1;
252 1 DQ=0;
253 1 _Nop();_Nop();//_Nop();
254 1 DQ=1;
255 1 _Nop();_Nop();_Nop();_Nop();_Nop();_Nop();_Nop();_Nop();_Nop();//_Nop();_Nop();_Nop();_Nop();_Nop();_Nop()
-;_Nop();
256 1 d=DQ;_Nop();_Nop();
257 1 DQ=1;
258 1 BDelay_uS(5);//delay15us();delay15us();delay15us();delay15us();
259 1 //DQ=1;
260 1 return d;
261 1 }
262
263
264 uchar readBTS(void) //读1字节
265 {char i,j;
266 1 bit d;
267 1 uchar a;
268 1 j=0;
269 1 for(i=0;i<8;i++)
270 1 {
271 2 d=readTS();
272 2 if(d)j+=1;
273 2 j=_cror_(j,1);
274 2 }
275 1 a=(uchar)j;
276 1 return a;
277 1 }
278
279 void write0TS(void) //写DS18B20数据位0
280 {
281 1 DQ=1;
282 1 DQ=0;
283 1 BDelay_uS(5);
284 1 _Nop();_Nop();_Nop();_Nop();_Nop();
285 1 DQ=1;
286 1 _Nop();
287 1 _Nop();_Nop();_Nop();_Nop();_Nop();_Nop();_Nop();
288 1 }
289 //********************************************************
290 void write1TS(void) //写DS18B20数据位1
291 {
292 1 DQ=1;
293 1 DQ=0;
294 1 _Nop();_Nop();_Nop();_Nop();_Nop();_Nop();_Nop();_Nop();_Nop();_Nop();_Nop();_Nop();_Nop();
295 1 DQ=1;
296 1
297 1 BDelay_uS(5);
298 1 }
299
300 void writeBTS(uchar byte) //写1字节
301 {uchar i;
302 1 for(i=0;i<8;i++)
C51 COMPILER V7.07 200926 02/06/2009 15:01:06 PAGE 6
303 1 {
304 2 if(byte&0x01)
305 2 write1TS();
306 2 else
307 2 write0TS();
308 2 byte=byte>>1;
309 2 }
310 1 }
311
312
313
314 void gettempTS(void) //读取测得的环境温度
315 {uchar a,d;
316 1 DS18B20_init();
317 1 writeBTS(0xcc);
318 1 writeBTS(0x44);
319 1 Delay1mS(700);
320 1 DS18B20_init();
321 1 writeBTS(0xcc);
322 1 writeBTS(0xbe);
323 1 btemp2=readBTS();_Nop();_Nop();
324 1 btemp1=readBTS();
325 1 readBTS();readBTS();readBTS();readBTS();
326 1 readBTS();readBTS();readBTS();
327 1 a=(btemp2&0xf0)>>4;
328 1 d=(btemp1&0x07)<<4;
329 1 btemp=a|d;
330 1
331 1 }
332
333 //////////////////断码输出//////////////////////
334 void send164(uchar m)
335 {uchar k,i,b;
336 1 k=SEG7[m];
337 1 i=8;
338 1 CLK=0;
339 1 while (i--)
340 1 {b=k>>i;
341 2 if((b&0x01)==0x01)DATA=1;//判断b的最低位的值是多少
342 2 else DATA=0;
343 2 CLK=1; _Nop();
344 2 CLK=0;
345 2 }
346 1
347 1 }
348 //P2 KOU //P1kou
349
350 void dis_time(uchar m)
351 {
352 1 P1&=0XC3;/// 等价于 P1=P1&0xc3;;准备送段码 ,位码口全部清零
353 1 P2=0X00;////准备送段码,位码口全部清零
354 1
355 1 {switch(m)
356 2 {case 0:{send164(mon/10);P2|=act[m];P1&=0XC3;}break;
357 3 case 1:{send164(mon%10);P2|=act[m];P1&=0XC3;}break;
358 3 case 2:{send164(day/10);P2|=act[m];P1&=0XC3;}break;
359 3 case 3:{send164(day%10);P2|=act[m];P1&=0XC3;}break;
360 3 case 4:{send164(hou/10);P2|=act[m];P1&=0XC3;}break;
361 3 case 5:{send164(hou%10);P2|=act[m];P1&=0XC3;}break;
362 3 case 6:{send164(min/10);P2|=act[m];P1&=0XC3;}break;
363 3 case 7:{send164(min%10);P2|=act[m];P1&=0XC3;}break;
364 3 case 8:{send164(sec/10);P1|=act[m];P2=0X00;}break;
C51 COMPILER V7.07 200926 02/06/2009 15:01:06 PAGE 7
365 3 case 9:{send164(sec%10);P1|=act[m];P2=0X00;}break;
366 3 case 10:{send164(btemp1/10);P1|=act[m];P2=0X00;}break;
367 3 case 11:{send164(btemp1%10);P1|=act[m];P2=0X00;}break;
368 3
369 3 default:break;}
370 2 }
371 1
372 1 }
373
374
375 void dis_adjtime(uchar m)
376 {
377 1 if(cnt>200)
378 1 {
379 2 P1&=0XC3;
380 2 P2=0X00;
381 2 switch(m)
382 2 {case 0:{send164(mon/10);P2|=act[m];P1&=0XC3;}break;
383 3 case 1:{send164(mon%10);P2|=act[m];P1&=0XC3;}break;
384 3 case 2:{send164(day/10);P2|=act[m];P1&=0XC3;}break;
385 3 case 3:{send164(day%10);P2|=act[m];P1&=0XC3;}break;
386 3 case 4:{send164(hou/10);P2|=act[m];P1&=0XC3;}break;
387 3 case 5:{send164(hou%10);P2|=act[m];P1&=0XC3;}break;
388 3 case 6:{send164(min/10);P2|=act[m];P1&=0XC3;}break;
389 3 case 7:{send164(min%10);P2|=act[m];P1&=0XC3;}break;
390 3 case 8:{send164(0);P1&=act[m];P2=0X00;}break;
391 3 case 9:{send164(0);P1&=act[m];P2=0X00;}break;
392 3 case 10:{send164(0);P1&=act[m];P2=0X00;}break;
393 3 case 11:{send164(0);P1&=act[m];P2=0X00;}break;
394 3 default:break;
395 3 }
396 2 }
397 1 else
398 1 {
399 2 P1&=0XC3;
400 2 P2=0X00;
401 2 }
402 1 }
403
404
405 void TIMERIni(void)
406 {
407 1 TMOD=0X11;
408 1 TH0=0xF8;TL0=0x30;TH1=0X3C;TL1=0XAF;
409 1 EA=1;
410 1 ET0=1;
411 1 ET1=1;
412 1 TR1=1;TR0=1;
413 1 }
414
415
416
417
418
419 /*******************************************************************
420 起动总线函数
421 函数原型: void Start_I2c();
422 功能: 启动I2C总线,即发送I2C起始条件.
423
424 ********************************************************************/
425 void Start_I2c(void)
426 {
C51 COMPILER V7.07 200926 02/06/2009 15:01:06 PAGE 8
427 1 SDA=1; /*发送起始条件的数据信号*/
428 1 _Nop();
429 1 _Nop();
430 1 SCL=1;
431 1 _Nop(); /*起始条件建立时间大于4.7us,延时*/
432 1 _Nop();
433 1 _Nop();
434 1 _Nop();
435 1 _Nop();
436 1 _Nop(); /*起始条件建立时间大于4.7us,延时*/
437 1 SDA=0; /*发送起始信号*/
438 1 _Nop(); /* 起始条件锁定时间大于4μs*/
439 1 _Nop();
440 1 _Nop();
441 1 _Nop();
442 1 _Nop();
443 1 _Nop(); /*起始条件建立时间大于4.7us,延时*/
444 1 SCL=0; /*钳住I2C总线,准备发送或接收数据 */
445 1 _Nop();
446 1 _Nop();
447 1 _Nop();
448 1 _Nop();
449 1 }
450
451
452
453
454 /*******************************************************************
455 结束总线函数
456 函数原型: void Stop_I2c();
457 功能: 结束I2C总线,即发送I2C结束条件.
458
459 ********************************************************************/
460 void Stop_I2c(void)
461 {
462 1 SDA=0; /*发送结束条件的数据信号*/
463 1 _Nop(); /*发送结束条件的时钟信号*/
464 1 _Nop(); /*发送结束条件的时钟信号*/
465 1 SCL=1; /*结束条件建立时间大于4μs*/
466 1 _Nop();
467 1 _Nop();
468 1 _Nop();
469 1 _Nop();
470 1 _Nop();
471 1 SDA=1; /*发送I2C总线结束信号*/
472 1 _Nop();
473 1 _Nop();
474 1 _Nop();
475 1 _Nop();
476 1 _Nop();
477 1 }
478
479
480
481
482 /*******************************************************************
483 字节数据传送函数
484 函数原型: void SendByte(uchar c);
485 功能: 将数据c发送出去,可以是地址,也可以是数据,发完后等待应答,并对
486 此状态位进行操作.(不应答或非应答都使ack=0 假)
487 发送数据正常,ack=1; ack=0表示被控器无应答或损坏。
488 ********************************************************************/
C51 COMPILER V7.07 200926 02/06/2009 15:01:06 PAGE 9
489 void SendByte(uchar c)
490 {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -