📄 18b20led.lst
字号:
C51 COMPILER V7.50 18B20LED 09/01/2008 10:58:48 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE 18B20LED
OBJECT MODULE PLACED IN 18b20led.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 18b20led.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <reg52.H>
2 //--------------------------------------------------------------------------------------------------------
---------
3 #define uint unsigned int
4 #define uchar unsigned char
5 //--------------------------------------------------------------------------------------------------------
---------
6 sbit DQ = P0 ^ 0; // 定义DS18B20数据线
7 sbit BEEP = P0^2; //蜂鸣器
8 sbit SWH = P0^1;
9 uchar code dis_7[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
10 void delay(uint t)
11 {
12 1 while(t--)
13 1 ;
14 1 }
15 void Init_DS18B20(void)//初始化ds1820
16 {
17 1 uchar x=0;
18 1 DQ = 1; //DQ复位
19 1 delay(8); //稍做延时
20 1 DQ = 0; //单片机将DQ拉低
21 1 delay(80); //精确延时 大于 480us
22 1 DQ = 1; //拉高总线
23 1 delay(14);
24 1 x=DQ; //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
25 1 delay(20);
26 1 }
27 /******************************************************************************/
28 uchar ReadOneChar(void)//读一个字节
29 {
30 1 uchar i=0;
31 1 uchar dat = 0;
32 1 for (i=8;i>0;i--)
33 1 {
34 2 DQ = 0; // 给脉冲信号
35 2 dat>>=1;
36 2 DQ = 1; // 给脉冲信号
37 2 if(DQ)
38 2 dat|=0x80;
39 2 delay(4);
40 2 }
41 1 return(dat);
42 1 }
43
44 /******************************************************************************/
45 void WriteOneChar(uchar dat)//写一个字节
46 {
47 1 uchar i=0;
48 1 for (i=8; i>0; i--)
49 1 {
50 2 DQ = 0;
51 2 DQ = dat&0x01;
52 2 delay(5);
53 2 DQ = 1;
C51 COMPILER V7.50 18B20LED 09/01/2008 10:58:48 PAGE 2
54 2 dat>>=1;
55 2 }
56 1 }
57 /******************************************************************************/
58 uint ReadTemperature(void)//读取温度
59 {
60 1 uchar a=0;
61 1 uchar b=0;
62 1 uint t=0;
63 1 float tt=0;
64 1 Init_DS18B20(); //第一次复位,执行温度转换
65 1 WriteOneChar(0xCC); // 跳过读序号列号的操作
66 1 WriteOneChar(0x44); // 启动温度转换
67 1 Init_DS18B20(); // 第二次复位,读数据
68 1 WriteOneChar(0xCC); //跳过读序号列号的操作
69 1 WriteOneChar(0xBE); //读取温度寄存器
70 1 a=ReadOneChar(); //读低8位
71 1 b=ReadOneChar(); //读高8位
72 1 t=b;
73 1 t<<=8;
74 1 t=t|a;
75 1 tt=t*0.0625;
76 1 t= tt*10+0.5; //放大10倍输出并四舍五入
77 1 return(t);
78 1 }
79 main()
80 {
81 1 uint t;
82 1 while(1)
83 1 {
84 2 t= ReadTemperature();
85 2 if(t>999)
86 2 {
87 3 P1=dis_7[t/1000];
88 3 P3=0xfe;
89 3 delay(200);
90 3 P1=dis_7[(t%1000)/100];
91 3 P3=0xfd;
92 3 delay(200);
93 3
94 3 }
95 2 else
96 2 {
97 3 P1=dis_7[t/100];
98 3 P3=0xfd;
99 3 delay(200);
100 3
101 3 }
102 2 P1=(dis_7[(t%100)/10]&0x7f);
103 2 P3=0xfb;
104 2 delay(200);
105 2 P1=dis_7[t%10];
106 2 P3=0xf7;
107 2 if(t<1000)
108 2 {
109 3 SWH=0;
110 3 BEEP=1;
111 3 }
112 2 /* else if(t==999)
113 2 SWH=1;
114 2 else if(t==1000)
115 2 BEEP=0; */
C51 COMPILER V7.50 18B20LED 09/01/2008 10:58:48 PAGE 3
116 2 else
117 2 {
118 3 SWH=1;
119 3 BEEP=0;
120 3 }
121 2 }
122 1 }
123
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 407 ----
CONSTANT SIZE = 10 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 4
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -