📄 ds18b20.lst
字号:
216 3 statussend(num3);
217 3 break;
218 3 */
219 3
220 3 {
221 4 Read_18B20();
222 4 num3[0]=GetScratchpad[1];
223 4 num3[1]=GetScratchpad[0];
224 4 statussend(num3);
225 4 break;
226 4 }
227 3
228 3
229 3
230 3
231 3 default: break;
232 3 }
233 2 UARTKeyFlag=0xaa; /*清串口键盘命令标志位*/
234 2 }
235 1 }
236
237
238
239
240 void statussend(uchar num[8])
241 {
C51 COMPILER V8.02 DS18B20 06/12/2008 17:28:54 PAGE 5
242 1 uchar i;
243 1 IE&=0xef;
244 1 for(i=0;i<8;i++)
245 1 {
246 2 SBUF=num[i];
247 2 while(TI!=1);
248 2 TI=0;
249 2 }
250 1 IE|=0x10;
251 1 }
252
253 void statussend_one()
254 {
255 1 uchar i;
256 1
257 1 IE&=0xef;
258 1
259 1 for(i=0;i<8;i++)
260 1 {
261 2 //SBUF=ResultTemperatureH;
262 2 SBUF=0x45;
263 2 while(TI!=1);
264 2 TI=0;
265 2 }
266 1 IE|=0x10;
267 1 }
268
269 uchar keyjudge(void) //键盘处理
270 {
271 1 uchar j,counterKeyPressedNum;
272 1 uchar keyret=0x55;
273 1 uint keynum;
274 1 scankey();
275 1 if(keyflag!=0)
276 1 {
277 2 delay(1000);
278 2 scankey();
279 2 P1=0x0f;
280 2 while((P1&0x0f)!=0x0f);
281 2 counterKeyPressedNum=0;
282 2 for(j=0;j<16;j++)
283 2 {
284 3 keynum=((uint)0x0001)<<j;
285 3 if((keyflag&keynum)==keynum)
286 3 {
287 4 counterKeyPressedNum++;
288 4 keyret=j;
289 4 }
290 3 }
291 2 if(counterKeyPressedNum>1)
292 2 {
293 3 return(0x55);
294 3 }
295 2 else
296 2 {
297 3 return(keyret);
298 3 }
299 2 }
300 1 if(UARTKeyFlag!=0xaa)
301 1 {
302 2 return(UARTKeyFlag);
303 2 }
C51 COMPILER V8.02 DS18B20 06/12/2008 17:28:54 PAGE 6
304 1 return(0x55);
305 1 }
306
307 void scankey() //键盘扫描
308 {
309 1 uchar scanvalue=0xef,scan,scantemp;
310 1 for(scan=0;scan<4;scan++)
311 1 {
312 2 P1=scanvalue;
313 2 scantemp=P1;
314 2 if((scantemp&0x01)==0x00)
315 2 keyflag|=(0x0001<<(scan*4+0));
316 2 else
317 2 keyflag&=~(0x0001<<(scan*4+0));
318 2 if((scantemp&0x02)==0x00)
319 2 keyflag|=(0x0001<<(scan*4+1));
320 2 else
321 2 keyflag&=~(0x0001<<(scan*4+1));
322 2 if((scantemp&0x04)==0x00)
323 2 keyflag|=(0x0001<<(scan*4+2));
324 2 else
325 2 keyflag&=~(0x0001<<(scan*4+2));
326 2 if((scantemp&0x08)==0x00)
327 2 keyflag|=(0x0001<<(scan*4+3));
328 2 else
329 2 keyflag&=~(0x0001<<(scan*4+3));
330 2 scanvalue=scanvalue<<1|0x01;
331 2 }
332 1 }
333
334 void delay(uint value) //延时
335 {
336 1 while(value!=0)
337 1 {
338 2 value--;
339 2 }
340 1 }
341
342 void Timer0Int() interrupt 1 using 2 //中断Timer0
343 {
344 1 static uchar temp;
345 1 uint temp1;
346 1 temp1=65536-SCAN_CYCLE;
347 1 TH0=temp1>>8;
348 1 TL0=temp1-((temp1>>8)<<8);
349 1 if(++temp>=10)
350 1 temp=1;
351 1 get_num=temp;
352 1 }
353
354 void UARTInt() interrupt 4 using 1 //串口中断服务程序
355 {
356 1 if(TI==1) //是发送中断则返回//
357 1 {
358 2 TI=0;
359 2 return;
360 2 }
361 1 else //接收到数据//
362 1 {
363 2 uchar rcv;
364 2 while(RI!=1);
365 2 {
C51 COMPILER V8.02 DS18B20 06/12/2008 17:28:54 PAGE 7
366 3 RI=0; //请接收标志位以激活下次串口中断//
367 3 rcv=SBUF;
368 3
369 3 switch(rcv)
370 3 {
371 4 case 48:
372 4 UARTKeyFlag=0x0d; //收到'0'//
373 4 //数码管左移
374 4 break;
375 4
376 4 case 49: UARTKeyFlag=0x00; //收到'1'//
377 4 //数码管左移
378 4 break;
379 4
380 4 case 50:
381 4 UARTKeyFlag=0x01; //收到'2'//
382 4 //数码管左移
383 4 break;
384 4
385 4 case 51:
386 4 UARTKeyFlag=0x02; //收到'3'//
387 4
388 4 break;
389 4
390 4 case 52:
391 4 UARTKeyFlag=0x04; //收到'4'//
392 4
393 4 break;
394 4
395 4 case 53: UARTKeyFlag=0x05; //收到'5'//
396 4 break;
397 4
398 4 case 54: UARTKeyFlag=0x06; //收到'6'//
399 4 break;
400 4 case 55: UARTKeyFlag=0x08; //收到'7'//
401 4 break;
402 4 case 56: UARTKeyFlag=0x09; //收到'8'//
403 4 break;
404 4 case 57: UARTKeyFlag=0x0a; //收到'9'//
405 4 break;
406 4 case 65: UARTKeyFlag=0x03; //收到'A'//
407 4 break;
408 4 case 66: UARTKeyFlag=0x07; //收到'B//
409 4 break;
410 4 case 67: UARTKeyFlag=0x0b; //收到'C'//
411 4 break;
412 4 case 68: UARTKeyFlag=0x0f; //收到'D'*/
413 4 break;
414 4 case 69: UARTKeyFlag=0x0c; //收到'E'//
415 4 break;
416 4 case 70: UARTKeyFlag=0x0e; //收到'F'*/
417 4 break;
418 4 }
419 3 }
420 2 }
421 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1022 ----
CONSTANT SIZE = 32 ----
XDATA SIZE = ---- ----
C51 COMPILER V8.02 DS18B20 06/12/2008 17:28:54 PAGE 8
PDATA SIZE = ---- ----
DATA SIZE = 53 11
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 + -