📄 good2.lst
字号:
C51 COMPILER V6.12 GOOD2 05/02/2009 15:44:23 PAGE 1
C51 COMPILER V6.12, COMPILATION OF MODULE GOOD2
OBJECT MODULE PLACED IN good2.obj
COMPILER INVOKED BY: E:\Keil\C51\BIN\C51.EXE .\sucess\good2.c DEBUG OBJECTEXTEND PRINT(.\good2.lst) OBJECT(good2.obj)
stmt level source
1 /*该驱动程序是基于------ATMEL89C52-----单片机实现*/
2 #include<reg52.h>
3 #include<stdio.h>
4 #include<intrins.h>
5
6 #define uchar unsigned char
7 #define uint unsigned int
8
9 sbit dula=P2^6; //段选端口
10 sbit wela=P2^7; //位选端口
11 sbit dq=P2^2; //DS18B20数据端口
12 sbit feng=P2^3; //蜂鸣器
13
14 uint c1_temper,c2_temper; //记录两个温度传感器的温度
15 uint L_temper; //温度下限值
16 uint H_temper; //温度上限值
17
18 unsigned char aa[9]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; //记录传感器A的序列号
19 unsigned char bb[9]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; //记录传感器B的序列号
20
21 uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f};
22
23 void delay_ms(uint z);
24 void delay_us();
25 void write_cmd(uchar z);
26 void get_firstid();
27 void get_seconedid();
28 void write_bit(uchar dd);
29 void deal_temper();
30 void deal_ds1();
31 void deal_ds2();
32 void display_temper(uint wengdu,uchar fc);
33 void init();
34 void warn_temper(uchar z);
35 uchar dq_reset();
36 uchar keyscanf();
37 uchar read_byte();
38 uint get_temper(uchar z);
39 uchar read_bit();
40 uchar read_date();
41
42 /******************延迟****************/
43
44 void delay_ms(uint z)//毫秒级的延迟
45 {
46 1 uint x,y;
47 1 for(x=z;x>0;x--)
48 1 for(y=110;y>0;y--);
49 1 }
50
51 void delay_us()//延时微秒
52 {
53 1 _nop_();
54 1 }
55
C51 COMPILER V6.12 GOOD2 05/02/2009 15:44:23 PAGE 2
56 /*****************复位*************************/
57
58 uchar dq_reset()
59 {
60 1 uchar t;
61 1 uchar dd;
62 1 dq=0;
63 1 for(t=250;t>0;t--);
64 1 dq=1;
65 1 for(t=5;t>0;t--);
66 1 dd=dq;
67 1 for(t=150;t>0;t--);
68 1 return dd;
69 1 }
70
71 /******************(bit)位操作**********************/
72
73 uchar read_bit()//读一个位
74 {
75 1 uchar t;
76 1 uchar dd;
77 1
78 1 dq=0;
79 1 delay_us();delay_us();
80 1 dq=1;
81 1 for(t=3;t>0;t--);
82 1 dd=dq;//get the signal
83 1 for(t=20;t>0;t--);
84 1 return dd;
85 1 }
86
87 void write_bit(uchar dd)//写一个位
88 {
89 1 uchar t;
90 1
91 1 if(dd==1)
92 1 {
93 2 dq=0;
94 2 delay_us();
95 2 dq=1;
96 2 for(t=30;t>0;t--);
97 2 }
98 1 else
99 1 {
100 2 dq=0;
101 2 for(t=30;t>0;t--);
102 2 dq=1;
103 2 delay_us();
104 2 delay_us();
105 2 }
106 1 }
107
108 /********************字节操作**************************/
109
110 uchar read_byte()//读字节
111 {
112 1 uchar i;
113 1 uchar temp;
114 1 uchar dd;
115 1
116 1 temp=0x00;
117 1 for(i=0;i<8;i++)
C51 COMPILER V6.12 GOOD2 05/02/2009 15:44:23 PAGE 3
118 1 {
119 2 temp=_cror_(temp,1);
120 2 dd=read_bit();
121 2 if(dd==1)
122 2 {
123 3 temp=temp|0x80;
124 3 }
125 2 else
126 2 {
127 3 temp=temp|0x00;
128 3 }
129 2 }
130 1 return(temp);
131 1 }
132
133 /******************命令与数据***********************/
134
135 void write_cmd(uchar z)//发送命令或数据
136 {
137 1 uchar i,t;
138 1 uchar temp;
139 1 uchar cd=z;
140 1
141 1 for(i=0;i<8;i++)
142 1 {
143 2 temp=cd&0x01;
144 2 if(temp)
145 2 {
146 3 dq=0;
147 3 delay_us();delay_us();//
148 3 dq=1;
149 3 for(t=40;t>0;t--);
150 3 }
151 2 else
152 2 {
153 3 dq=0;
154 3 for(t=40;t>0;t--);
155 3 dq=1;
156 3 delay_us(); delay_us();
157 3 }
158 2 cd=_cror_(cd,1);
159 2 }
160 1
161 1 }
162
163 /*****************温度******************************/
164
165 uint get_temper(uchar z)//从暂存器中获取温度值
166 {
167 1
168 1 uchar LSB_temper=0x00;
169 1 uchar MSB_temper=0x00;
170 1 uchar i;
171 1 uint c_temp=0;
172 1 float f_temp=0;
173 1
174 1 dq_reset();
175 1
176 1 write_cmd(0x55);
177 1 if(z==1)//发送传感A的序列号
178 1 {
179 2 for(i=1;i<=8;i++)
C51 COMPILER V6.12 GOOD2 05/02/2009 15:44:23 PAGE 4
180 2 {
181 3 write_cmd(aa[i]);
182 3 }
183 2 }
184 1 else //发送传感器B的序列号
185 1 {
186 2 for(i=1;i<=8;i++)
187 2 {
188 3 write_cmd(bb[i]);
189 3 }
190 2 }
191 1 delay_ms(1);
192 1 write_cmd(0xbe);//读存储器内的温度
193 1
194 1 LSB_temper=read_byte();//读低温度字节
195 1 MSB_temper=read_byte();//读高温度字节
196 1 dq_reset();
197 1 c_temp=MSB_temper;
198 1 c_temp=(c_temp<<8);
199 1 c_temp=c_temp|LSB_temper;
200 1 f_temp=c_temp*0.0625;
201 1 c_temp=f_temp*10+0.5;
202 1
203 1 return (c_temp);
204 1 }
205
206 /******************获取序列号************************/
207 /*这里采用简单的“消除”算法*/
208
209 void get_firstid()//获取传感器A的序列号
210 {
211 1 uchar t;
212 1 uchar w=1;
213 1 uchar d1,d2;
214 1 uchar temp=0x00;
215 1
216 1 dq_reset();
217 1 write_cmd(0xf0);//搜索序列号命令
218 1
219 1 for(t=1;t<=64;t++)
220 1 {
221 2 d1=read_bit();
222 2 d2=read_bit();
223 2 temp=_cror_(temp,1);
224 2
225 2 if( (d1==1) && (d2==0) )
226 2 {
227 3 temp=temp|0x80;
228 3 write_bit(1);
229 3 }
230 2 else if( (d1==0) && (d2==1))
231 2 {
232 3 temp=temp|0x00;
233 3 write_bit(0);
234 3 }
235 2 else if( (d1==0) && (d2==0) )
236 2 {
237 3 temp=temp|0x00;
238 3 write_bit(0);
239 3 }
240 2 if(t%8==0)
241 2 {
C51 COMPILER V6.12 GOOD2 05/02/2009 15:44:23 PAGE 5
242 3 aa[w]=temp;
243 3 w=w+1;
244 3 temp=0x00;
245 3 }
246 2 }
247 1
248 1 }
249
250 void get_seconedid() //获取传感器B的序列号
251 {
252 1 uchar t;
253 1 uchar w=1;
254 1 uchar d1,d2;
255 1 uchar temp=0x00;
256 1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -