📄 ds1820.lst
字号:
C51 COMPILER V7.50 DS1820 12/10/2008 23:14:22 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE DS1820
OBJECT MODULE PLACED IN ds1820.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ds1820.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include<reg52.h>
2 #include"start.h"
3 #include"ds1820.h"
4 #include<math.h>
5 unsigned templ,temph;
6 sbit DQ=P3^7;
7 //==================================
8 // 延时微秒
9 //==================================
10 void delay_us(int us)
11 {
12 1 for(;us>0;us--);
13 1 }
14
15 //======================================================
16 // 复位 和检测存在返回0表示没有器件,返回1表示有器件存在
17 //======================================================
18 bit ds1820_reset()//
19 {
20 1 bit flag=0;
21 1 DQ=1;
22 1 delay_us(1);
23 1 DQ=0;
24 1 delay_us(60);//延时50*8微秒
25 1 DQ=1; //DQ=1表示释放总线,并不代表总线的电平就一定就是1。
26 1 delay_us(8);
27 1 flag=DQ; //
28 1 delay_us(14);
29 1 DQ=1;
30 1 return ~flag;
31 1 }
32
33 //=============================================
34 // 读一个字节
35 //=============================================
36 unsigned ds1820_read_byte() //
37 {
38 1 unsigned value=0,i;
39 1 DQ=1;
40 1 for(i=0;i<8;i++)
41 1 {
42 2 DQ=0;
43 2 value>>=1;
44 2 DQ=1;
45 2 // delay_us(1); //加上此语句就不行,不能延时!
46 2 if(DQ)
47 2 value|=0x80;
48 2 delay_us(6);
49 2 DQ=1;
50 2 }
51 1 return value;
52 1 }
53
54
55 //========================================
C51 COMPILER V7.50 DS1820 12/10/2008 23:14:22 PAGE 2
56 // 写一个字节
57 //========================================
58 void ds1820_write_byte(unsigned num)//
59 {
60 1 unsigned i;
61 1 DQ=1;
62 1 for(i=0;i<8;i++)
63 1 {
64 2 DQ=0;
65 2 DQ=num&0x01;
66 2 num>>=1;
67 2 delay_us(7);
68 2 DQ=1;
69 2 }
70 1
71 1 }
72
73 float tempeature_read()// 读温度
74 {
75 1 unsigned hi,low,i;
76 1 float xiaoshu=0;
77 1 // bit flag=0;
78 1 EA=0;
79 1 ds1820_reset();
80 1
81 1 ds1820_write_byte(0xcc); //跳过读序号列号的操作
82 1 ds1820_write_byte(0x44); // 启动温度转换
83 1
84 1
85 1
86 1 ds1820_reset();
87 1
88 1 ds1820_write_byte(0xcc); //跳过读序号列号的操作
89 1 ds1820_write_byte(0xbe); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度
90 1
91 1 low=ds1820_read_byte();
92 1 hi=ds1820_read_byte();
93 1 EA=1;
94 1 hi=(hi&0x07)<<4;
95 1 hi=hi|((low&0xf0)>>4);
96 1 low=low&0x0f;
97 1 for(i=4;i>0;i--)
98 1 {
99 2 if(low&&0x01!=0)
100 2 xiaoshu=xiaoshu+1/pow(2,i);
101 2 low>>=1;
102 2 }
103 1 xiaoshu=xiaoshu+hi;
104 1
105 1 return xiaoshu;
106 1
107 1 }
108 //==========================
109 void delay5ms()
110 {
111 1 int i;
112 1 for(i=0;i<800;i++);
113 1 }
114
115
116 /*
117 unsigned to_bcd(unsigned char num) // 时间转换成BCD吗
C51 COMPILER V7.50 DS1820 12/10/2008 23:14:22 PAGE 3
118 {
119 unsigned ge,shi;
120 shi=num/10;
121 ge=num%10;
122 shi=(shi<<4)|ge;
123 return shi;
124 }
125
126 */
127
128
129
130 void led_display(unsigned i,unsigned num)//在第i位上显示num
131 {
132 1 //
133 1 unsigned char ledtable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
134 1 LED1=1;
135 1 LED2=1;
136 1 LED3=1;
137 1 if(i==2)
138 1 {
139 2 P0=ledtable[num]|0x80; //在第二位加上小数点
140 2 }
141 1 else
142 1 P0=ledtable[num];
143 1 switch(i)
144 1 {
145 2 case 1:LED1=0;break;
146 2 case 2:LED2=0;break;
147 2 case 3:LED3=0;break;
148 2 // case 4:LED4=1;break;
149 2 default:break;
150 2 }
151 1 delay5ms();
152 1
153 1 }
154
155
156
157 main()
158 {
159 1 // bit flag;
160 1
161 1 float temper=45.6;
162 1 unsigned char ge,shi,dot1,i=1;
163 1
164 1 //DQ=1;
165 1 LED1=0;
166 1 LED2=0;
167 1 LED3=0;
168 1 D8=0;
169 1 D9=0;
170 1
171 1 /* TR0=0;
172 1 TH0=0xee;
173 1 TL0=0;
174 1 TR0=1;
175 1 EA=1;
176 1 ET0=1; */
177 1 while(1)
178 1 {
179 2
C51 COMPILER V7.50 DS1820 12/10/2008 23:14:22 PAGE 4
180 2 temper=tempeature_read();
181 2 shi=(unsigned char)(temper/10);
182 2 ge=(unsigned char)((int)temper%10);
183 2 dot1=(unsigned char)(((int)(temper*10))%10);
184 2 if(i==1)
185 2 {
186 3 led_display(1,shi);
187 3 i++;
188 3 }
189 2 else if(i==2)
190 2 {
191 3 led_display(2,ge);
192 3 i++;
193 3 }
194 2 else if(i==3)
195 2 {
196 3 led_display(3,dot1);
197 3 i=1;
198 3 }
199 2
200 2
201 2 }
202 1
203 1
204 1 }
205 /*void timer() interrupt 1
206 {
207 TR0=0;
208 TH0=0xee;
209 TL0=0;
210 // led_display();
211 TR0=1;
212 } */
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 703 ----
CONSTANT SIZE = 10 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 4 34
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 + -