📄 18b20test.lst
字号:
C51 COMPILER V7.50 18B20TEST 08/31/2007 15:57:10 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE 18B20TEST
OBJECT MODULE PLACED IN 18B20test.OBJ
COMPILER INVOKED BY: D:\Program Files\keil\C51\BIN\C51.EXE 18B20test.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /************************************************************
2 *File Name: 数字温度计
3 *Author: LiZhaosuo
4 *Date: 2007//8/31
5 *Modify: NO
6 *Description: 以ADuC812为主控芯片,MAX7219为显示控制芯片,
7 DS18B20为温度传感器,精度可以达到0.1度
8 *************************************************************/
9
10 #include <aduc812.h>
11 #include "intrins.h"
12 #include "max7219.h"
13 #include "delay.h"
14
15 #define uchar unsigned char
16 #define uint unsigned int
17
18
19 sbit dq=P3^3; //温度输入口 temperature input
20
21 /*温度小数部分查表法用*/
22 uchar data distab[16]=
23 {0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09};
24
25 /*温度数据暂存*/
26 uchar data display[5]={0x00,0x00,0x00,0x00,0x00};
27 uchar data temp_data[2]={0x00,0x00};
28
29 void TempDelay (uint t);
30 void Init18b20 (void);
31 void WriteByte (uchar wr);
32 uchar ReadByte (void);
33 void read_temp (void);
34 void work_temp(void);
35 void Temp_Display (void);
36
37 /************************************************************
38 *Function:延时处理
39 *parameter:
40 *Return:
41 *Modify:
42 *************************************************************/
43 void TempDelay (uint t)
44 {
45 1 for(;t>0;t--)
46 1 ;
47 1 }
48 /************************************************************
49 *Function:18B20初始化
50 *parameter:
51 *Return:
52 *Modify:
53 *************************************************************/
54 void Init18b20 (void)
55 {
C51 COMPILER V7.50 18B20TEST 08/31/2007 15:57:10 PAGE 2
56 1 uchar flag;
57 1 while(flag)
58 1 {
59 2 while(flag)
60 2 {
61 3 dq=1;
62 3 _nop_();_nop_();
63 3 dq=0;
64 3 TempDelay(50); //delay 550 us
65 3 _nop_();
66 3 dq=1;
67 3 TempDelay(6); //delay 66 us
68 3 _nop_(); _nop_();
69 3 flag=dq;
70 3 }
71 2 TempDelay(45);//500us
72 2 flag=~dq;
73 2 }
74 1 dq=1;
75 1 }
76 /************************************************************
77 *Function:向18B20写入一个字节
78 *parameter:
79 *Return:
80 *Modify:
81 *************************************************************/
82 void WriteByte (uchar wr) //单字节写入
83 {
84 1 uchar i;
85 1 for (i=8;i>0;i--)
86 1 {
87 2 dq=1;
88 2 _nop_();_nop_();
89 2 dq=0;
90 2 _nop_();_nop_();_nop_();_nop_();_nop_();//5us
91 2 dq=wr&0x01;//最低位移出
92 2 TempDelay(6); //delay 66us
93 2 wr>>= 1;//右移一位
94 2 }
95 1 dq=1;
96 1 TempDelay(1);
97 1 }
98 /************************************************************
99 *Function:读18B20的一个字节
100 *parameter:
101 *Return:
102 *Modify: lzs
103 *************************************************************/
104 uchar ReadByte (void) //读取单字节
105 {
106 1 uchar i,value=0;
107 1 for(i=8;i>0;i--)
108 1 {
109 2 dq=1;_nop_();_nop_();
110 2 value >>= 1;
111 2 dq=0;
112 2 _nop_();_nop_();_nop_();_nop_();//4us
113 2 dq=1;
114 2 _nop_();_nop_();_nop_();_nop_();//4us
115 2 if(dq)
116 2 value|=0x80;
117 2 TempDelay (6); //66us
C51 COMPILER V7.50 18B20TEST 08/31/2007 15:57:10 PAGE 3
118 2 _nop_();
119 2 }
120 1 dq=1;
121 1 return(value);
122 1 }
123 /************************************************************
124 *Function:读出18B20 的温度值
125 *parameter:
126 *Return:
127 *Modify:
128 *************************************************************/
129 void read_temp (void)
130 {
131 1 Init18b20 (); //总线复位
132 1 WriteByte (0xCC);//发SkipROM指令
133 1 WriteByte (0xBE);//发读指令
134 1 temp_data[0]=ReadByte ();//温度低8位值
135 1 temp_data[1]=ReadByte ();//温度高8位值
136 1 Init18b20 (); //复位
137 1 WriteByte (0xCC);//发SkipROM指令
138 1 WriteByte (0x44);//发转换指令
139 1 }
140 /************************************************************
141 *Function:温度数据处理
142 *parameter:
143 *Return:
144 *Modify:
145 *************************************************************/
146 void work_temp(void)
147 {
148 1 uchar n;
149 1 if(temp_data[1]>127) //负温度求补码
150 1 {
151 2 temp_data[1]=(256-temp_data[1]);
152 2 temp_data[0]=(256-temp_data[0]);
153 2 n=1;
154 2 }
155 1
156 1 display[4]=temp_data[0]&0x0f;
157 1 display[0]=distab[display[4]];
158 1 display[4]=((temp_data[0]&0xf0)>>4)|((temp_data[1]&0x0f)<<4);
159 1 display[3]=display[4]/100;
160 1 display[1]=display[4]%100;
161 1 display[2]=display[1]/10;
162 1 display[1]=display[1]%10;
163 1 display[1]=display[1]+10; //个位的数字加点
164 1 if(!display[3])
165 1 {
166 2 display[3]=21;
167 2 if(!display[2])
168 2 {
169 3 display[2]=21;
170 3 }
171 2 }//最高位为零时不显示
172 1 if(n){display[3]=20;}//负温度时显示-
173 1 }
174 /************************************************************
175 *Function:显示函数
176 *parameter:
177 *Return:
178 *Modify:
179 *************************************************************/
C51 COMPILER V7.50 18B20TEST 08/31/2007 15:57:10 PAGE 4
180 void Temp_Display (void)
181 {
182 1 uchar i,k;
183 1 for(i=0;i<=8;i++)
184 1 {
185 2 Max7219Clear (i);//first clear the digit
186 2 }
187 1 for(k=0;k<=3;k++)
188 1 {
189 2 Max7219DisplayChar (k+1, display[k]);
190 2 }
191 1 }
192 /************************************************************
193 *Function:main函数
194 *parameter:
195 *Return:
196 *Modify:
197 *************************************************************/
198 void main(void)
199 {
200 1 char i;
201 1 // char j;
202 1 Max7219Init (); // 初始化MAX7219
203 1 Max7219SetBrightness (0x04); // 设置显示亮度
204 1
205 1 for(i=0;i<=8;i++)
206 1 {
207 2 Max7219DisplayChar (i, 18);//开机显示8.
208 2 }
209 1
210 1 Init18b20 (); //初始化18b20
211 1 WriteByte (0xCC);//发SkipROM指令
212 1 WriteByte (0x44);//发转换指令
213 1 /* for(j=0;j<3;j++) //数码管循环显示跑8 三次,复位时显示界面
214 1 {
215 1 for(i=0;i<=8;i++)
216 1 {
217 1 Max7219DisplayChar (i, 18);
218 1 Delay_nms(150);
219 1 Max7219Clear (i);
220 1 }
221 1 }
222 1 */
223 1 Delay_nms(2000);//显示2s
224 1 while(1)
225 1 {
226 2 read_temp();
227 2 work_temp();
228 2 Temp_Display();
229 2 Delay_nms(2000);//显示2s
230 2 }
231 1 }
232 /*************************结束*************************/
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 820 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 23 7
IDATA SIZE = ---- ----
C51 COMPILER V7.50 18B20TEST 08/31/2007 15:57:10 PAGE 5
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 + -