📄 128.lst
字号:
227 2 delay(5);
228 2 DQ = 1;
229 2 dat>>=1;
230 2 }
231 1 }
232
233
234 ReadTemperature(void)//读取温度
235 {
236 1 unsigned char a=0;
237 1 unsigned char b=0;
238 1 unsigned int t=0;
239 1 float tt=0;
240 1 Init_DS18B20();
241 1 WriteOneChar(0xCC); // 跳过读序号列号的操作
242 1 WriteOneChar(0x44); // 启动温度转换
243 1 Init_DS18B20();
244 1 WriteOneChar(0xCC); //跳过读序号列号的操作
245 1 WriteOneChar(0xBE); //读取温度寄存器
246 1 a=ReadOneChar();
247 1 b=ReadOneChar();
248 1 t=b;
249 1 t<<=8;
250 1 t=t|a;
251 1 tt=t*0.0625;
252 1 t= tt*10+0.5; //放大10倍输出并四舍五入
253 1 return(t);
254 1 }
255
256 void clock_out(uchar dd)
257 {
258 1 ACC=dd;
259 1 clock_dat=a0; clock_clk=1; clock_clk=0;
260 1 clock_dat=a1; clock_clk=1; clock_clk=0;
261 1 clock_dat=a2; clock_clk=1; clock_clk=0;
262 1 clock_dat=a3; clock_clk=1; clock_clk=0;
263 1 clock_dat=a4; clock_clk=1; clock_clk=0;
264 1 clock_dat=a5; clock_clk=1; clock_clk=0;
265 1 clock_dat=a6; clock_clk=1; clock_clk=0;
266 1 clock_dat=a7; clock_clk=1; clock_clk=0;
267 1 }
268
269 uchar clock_in(void)
270 {
271 1 clock_dat=1;
272 1 a0=clock_dat;
C51 COMPILER V7.06 128 11/21/2007 13:34:35 PAGE 6
273 1 clock_clk=1; clock_clk=0; a1=clock_dat;
274 1 clock_clk=1; clock_clk=0; a2=clock_dat;
275 1 clock_clk=1; clock_clk=0; a3=clock_dat;
276 1 clock_clk=1; clock_clk=0; a4=clock_dat;
277 1 clock_clk=1; clock_clk=0; a5=clock_dat;
278 1 clock_clk=1; clock_clk=0; a6=clock_dat;
279 1 clock_clk=1; clock_clk=0; a7=clock_dat;
280 1 return(ACC);
281 1 }
282
283 uchar read_clock(uchar ord)
284 {
285 1 uchar dd=0;
286 1 clock_clk=0;
287 1 clock_rst=0;
288 1 clock_rst=1;
289 1 clock_out(ord);
290 1 dd=clock_in();
291 1 clock_rst=0;
292 1 clock_clk=1;
293 1 return(dd);
294 1 }
295
296 void write_clock(uchar ord, uchar dd)
297 {
298 1 clock_clk=0;
299 1 clock_rst=0;
300 1 clock_rst=1;
301 1 clock_out(ord);
302 1 clock_out(dd);
303 1 clock_rst=0;
304 1 clock_clk=1;
305 1 }
306
307 void Serial_Ini()//设置串行口,波特率为4800
308 {
309 1 TMOD=0x20;
310 1 TH1=TL1=0xF3;
311 1 PCON=0x80;
312 1 EA=1;
313 1 ES=1;
314 1 TR1=1;
315 1 SCON=0x50;
316 1 }
317
318
319 main()
320 {
321 1 unsigned int i=0,k;
322 1 unsigned char a=0,b=0,c=0,d,e,f=0;
323 1
324 1 lcd_init();//设置液晶显示器
325 1 Serial_Ini();//初始化串行口
326 1 EX0=1;
327 1 //在预定的位置上写入汉字
328 1 write_chinese(0,4,dang);
329 1 write_chinese(16,4,qian);
330 1 write_chinese(32,4,shi);
331 1 write_chinese(48,4,wen);
332 1 write_digit(80,4,point);
333 1 write_chinese(96,4,sheshidu);
334 1 write_chinese(80,6,tang);
C51 COMPILER V7.06 128 11/21/2007 13:34:35 PAGE 7
335 1 write_chinese(96,6,wen1);
336 1 write_chinese(112,6,tao);
337 1 write_digit(72,2,maohao);
338 1 write_digit(96,2,maohao);
339 1 write_chinese(0,2,xing);
340 1 write_chinese(16,2,qi);
341 1 write_chinese(32,0,nian);
342 1 //设置时钟的初始值
343 1 /*
344 1 write_clock(0x8e,0x00);//protect
345 1 write_clock(0x8c,0x06);//year
346 1 write_clock(0x8a,0x02);//day
347 1 write_clock(0x88,0x08);//month
348 1 write_clock(0x86,0x22);//date
349 1 write_clock(0x84,0x14);//hour
350 1 write_clock(0x82,0x20);//minute
351 1 write_clock(0x80,0x01);//second
352 1 write_clock(0x8e,0x80);//protect
353 1 */
354 1 dis=0;
355 1 while(1)//主循环
356 1 {
357 2 EX0= 1;
358 2 i=ReadTemperature();//读温度
359 2 a=i/100;
360 2 write_digit(64,4,zero+a*16);
361 2 b=i/10-a*10;
362 2 write_digit(72,4,zero+b*16);
363 2 c=i-a*100-b*10;
364 2 write_digit(88,4,zero+c*16);
365 2 d=read_clock(0x8d);//读年
366 2 e=d;
367 2 d=d>>4;
368 2 e=e&0xf;
369 2 write_digit(0,0,two);
370 2 write_digit(8,0,zero);
371 2 write_digit(16,0,zero+d*16);
372 2 write_digit(24,0,zero+e*16);
373 2 d=read_clock(0x89);//读月
374 2 e=d;
375 2 d=d>>4;
376 2 e=e&0x0f;
377 2 write_digit(56,0,zero+d*16);
378 2 write_digit(64,0,zero+e*16);
379 2 write_chinese(72,0,yue);
380 2 d=read_clock(0x87);//读日
381 2 e=d;
382 2 d=d>>4;
383 2 e=e&0x0f;
384 2 write_digit(88,0,zero+d*16);
385 2 write_digit(96,0,zero+e*16);
386 2 write_chinese(104,0,ri);
387 2 d=read_clock(0x8b);//读星期
388 2 write_chinese(32,2,cone+(d-1)*32);//写入星期的汉字
389 2 d=read_clock(0x85);//读小时
390 2 e=d;
391 2 d=d>>4;
392 2 e=e&0x0f;
393 2 write_digit(56,2,zero+d*16);
394 2 write_digit(64,2,zero+e*16);
395 2 d=read_clock(0x83);//读分钟
396 2 e=d;
C51 COMPILER V7.06 128 11/21/2007 13:34:35 PAGE 8
397 2 d=d>>4;
398 2 e=e&0x0f;
399 2 write_digit(80,2,zero+d*16);
400 2 write_digit(88,2,zero+e*16);
401 2 d=read_clock(0x81);//读秒
402 2 e=d;
403 2 d=d>>4;
404 2 e=e&0x0f;
405 2 write_digit(104,2,zero+d*16);
406 2 write_digit(112,2,zero+e*16);
407 2 if(f==5)//闪烁控制
408 2 {
409 3 write_flashcn(80,6,tang);
410 3 write_flashcn(96,6,wen1);
411 3 write_flashcn(112,6,tao);
412 3 m=!m;
413 3 f=0;
414 3 }
415 2 f=f+1;
416 2 k=100;
417 2 while(k)//延时
418 2 {
419 3 k--;
420 3 }
421 2 if(num==7||num==2)//控制字的格式
422 2 {
423 3 write_clock(0x8e,0x00);//解除ds1302的写保护
424 3 if(rec[0]=='1')//用户写年月日
425 3 {
426 4 a=rec[1]-'0';
427 4 b=rec[2]-'0';
428 4 b=(a<<4)|b;
429 4 write_clock(0x8c,b);//写年
430 4 a=rec[3]-'0';
431 4 b=rec[4]-'0';
432 4 b=(a<<4)|b;
433 4 write_clock(0x88,b);//写月
434 4 a=rec[5]-'0';
435 4 b=rec[6]-'0';
436 4 b=(a<<4)|b;
437 4 write_clock(0x86,b);//写日
438 4 }
439 3 else if(rec[0]=='2')
440 3 {
441 4 a=rec[1]-'0';
442 4 b=rec[2]-'0';
443 4 b=(a<<4)|b;
444 4 write_clock(0x84,b);//写小时
445 4 a=rec[3]-'0';
446 4 b=rec[4]-'0';
447 4 b=(a<<4)|b;
448 4 write_clock(0x82,b);//写分钟
449 4 a=rec[5]-'0';
450 4 b=rec[6]-'0';
451 4 b=(a<<4)|b;
452 4 write_clock(0x80,b);//写秒
453 4 }
454 3 else if(rec[0]=='3')
455 3 {
456 4 a=rec[1]-'0';
457 4 write_clock(0x8a,a);//写星期
458 4 }
C51 COMPILER V7.06 128 11/21/2007 13:34:35 PAGE 9
459 3 write_clock(0x8e,0x80);//加入写保护
460 3 }
461 2 num=0;//指令序号归零
462 2 }
463 1 }
464
465 void serial() interrupt 4//串行口的中断服务函数
466 {
467 1 rec[num]=SBUF;
468 1 num++;
469 1 RI=0;
470 1 }
471 void Int0()interrupt 0 using 1
472 {
473 1 EX0=0;
474 1 if(display==0)
475 1 {dis=!dis;}
476 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1944 ----
CONSTANT SIZE = 800 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 10 32
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 + -