📄 tempereture.lst
字号:
C51 COMPILER V8.09 TEMPERETURE 11/28/2004 01:15:07 PAGE 1
C51 COMPILER V8.09, COMPILATION OF MODULE TEMPERETURE
OBJECT MODULE PLACED IN tempereture.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE tempereture.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <reg52.h>
2 sbit DS1820_DQ= P0^0;
3 bit ds1820_reset();
4 void ds1820_write_data(unsigned char ds1820_wdat);
5 unsigned char ds1820_read_data();
6 unsigned char data temperature[2]; //将温度存储在低128RAM单元
7
8 void read_temp()
9 {
10 1 unsigned char i;
11 1 ds1820_reset(); //复位
12 1 ds1820_write_data(0xcc); //跳过ROM命令
13 1 ds1820_write_data(0x44); //温度转换命令
14 1 ds1820_reset(); //复位
15 1 ds1820_write_data(0xcc); //跳过ROM命令
16 1 ds1820_write_data(0xbe); //读DS1820温度暂存器命令
17 1 for (i=0;i<2;i++)
18 1 {
19 2 temperature[i]=ds1820_read_data();
20 2 }
21 1 ds1820_reset(); //复位,结束读数据
22 1 }
23
24 bit ds1820_reset()
25 {
26 1 unsigned char i;
27 1 bit flag; //DS1820存在标志位
28 1 DS1820_DQ = 0; //拉低总线
29 1 for (i=240;i>0;i--);//延时480微秒,产生复位脉冲
30 1 DS1820_DQ = 1; //释放总线
31 1 for (i=40;i>0;i--); //延时80微秒对总线采样
32 1 flag = DS1820_DQ;
33 1 for (i=200;i>0;i--); //延时400微秒等待总线恢复
34 1 return (flag); //根据flag的值可以知道DS1820是否存在或损坏
35 1 } //可以加声音告警提示DS1820故障
36
37
38 void ds1820_write_data(unsigned char ds1820_wdat)
39 {
40 1 unsigned char i,j;
41 1 for (i=8;i>0;i--)
42 1 {
43 2 DS1820_DQ = 0; //拉低总线,产生写信号
44 2 for (j=2;j>0;j--); //延时4us
45 2 DS1820_DQ = ds1820_wdat&0x01; //发送1位
46 2 for (j=30;j>0;j--); //延时60us,写时序至少要60us
47 2 DS1820_DQ = 1; //释放总线,等待总线恢复
48 2 ds1820_wdat>>=1; //准备下一位数据的传送
49 2 }
50 1 }
51
52
53 unsigned char ds1820_read_data()
54 {
55 1 unsigned char i,j,ds1820_rdat;
C51 COMPILER V8.09 TEMPERETURE 11/28/2004 01:15:07 PAGE 2
56 1 for (i=8;i>0;i--)
57 1 {
58 2 ds1820_rdat>>=1;
59 2 DS1820_DQ = 0; //拉低总线,产生读信号
60 2 for (j=2;j>0;j--); //延时4us
61 2 DS1820_DQ = 1; //释放总线,准备读数据
62 2 for (j=4;j>0;j--); //延时8微秒读数据
63 2 if (DS1820_DQ == 1)
64 2 ds1820_rdat |= 0x80;
65 2 for (j=30;j>0;j--); //延时60us
66 2 DS1820_DQ = 1; //拉高总线,准备下一位数据的读取.
67 2 }
68 1 return (ds1820_rdat);//返回读到的数据
69 1 }
70
71
72 void main()
73 {
74 1 unsigned char s,t,wendu,bai,shi,ge,fen,li,hao,si;
75 1 unsigned char display[]={0xc0,0xf9,0xA4,0xB0,0x99,0x92,0x82,0xf8,0x80,0x90};
76 1 unsigned int i,TempDec;
77 1 while(1)
78 1 {
79 2 read_temp();
80 2 s= temperature[1]<<4; //取高字节低4位(温度读数高4位)
81 2 t = temperature[0]>>4; //取低字节高4位(温度读数低4位)
82 2 wendu=s|t; //组合成完整数据(整数部分)
83 2 bai=wendu/100;
84 2 shi=wendu%100/10;
85 2 ge=wendu%10;
86 2 TempDec = (temperature[0]&0x0f)*625;//小数部分,扩大1万倍
87 2 fen=TempDec/1000;
88 2 li=TempDec%1000/100;
89 2 hao=TempDec%100/10;
90 2 si=TempDec%10;
91 2
92 2 P1=0xfd;
93 2 P2=display[bai];
94 2 for(i=0;i<400;i++);
95 2
96 2 P1= 0xfb;
97 2 P2=display[shi];
98 2 for(i=0;i<400;i++);
99 2
100 2 P1= 0xf7;
101 2 P2=display[ge]&0x7f;
102 2 for(i=0;i<400;i++);
103 2
104 2 P1= 0xef;
105 2 P2=display[fen];
106 2 for(i=0;i<400;i++);
107 2
108 2 P1= 0xdf;
109 2 P2=display[li];
110 2 for(i=0;i<400;i++);
111 2
112 2 P1= 0xbf;
113 2 P2=display[hao];
114 2 for(i=0;i<400;i++);
115 2
116 2 P1= 0x7f;
117 2 P2=display[si];
C51 COMPILER V8.09 TEMPERETURE 11/28/2004 01:15:07 PAGE 3
118 2 //for(i=0;i<250;i++);
119 2
120 2 }
121 1
122 1
123 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 450 ----
CONSTANT SIZE = 10 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 2 17
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 + -