📄 zlg7289demo2.lst
字号:
C51 COMPILER V7.50 ZLG7289DEMO2 01/12/2008 22:13:59 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE ZLG7289DEMO2
OBJECT MODULE PLACED IN ZLG7289Demo2.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\c51.exe ZLG7289Demo2.c DB OE SMALL ROM(LARGE)
line level source
1
2 #include "ZLG7289.h"
3
4
5 sbit DQ = P1^3; //定义DS18B20端口DQ
6 sbit BEEP=P1^7 ;
7
8 unsigned char presence,j ;
9 unsigned char code rom[4][8]={0x28,0x62,0x77,0x39,0x01,0x00,0x00,0xff,
10 0x28,0xbe,0x7e,0x39,0x01,0x00,0x00,0xb5,
11 0x28,0xbb,0xd7,0x5d,0x01,0x00,0x00,0x00,
12 0x28,0x73,0xeb,0x5d,0x01,0x00,0x00,0x9b};
13 unsigned char temp_data[8] = {0x00,0x00}; //读到的温度值
14 unsigned int H_T=250,L_T=190,crru_temp=0,temp=0; //设定的最高、最低温度阈值
15 unsigned char key_flag=0,HL_flag=0,mem_flag=1;
16 unsigned char display[6] ={0x00,0x00,0x00,0x00,0x00,0x00}; //数码管显示的值
17 unsigned char code ditab[16] = {0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,
18 0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09}; //小数点转换
19 volatile unsigned char key = 0xFF;
20 void beep();
21 unsigned char alarm=0; //显示开关标记
22
23
24 void INT0_SVC() interrupt 0
25 {
26 1 key = ZLG7289_Key();
27 1 key_flag=1;
28 1 }
29
30
31
32 /*
33 函数:Delay()
34 功能:延时0.01 655.36s
35 参数:
36 t>0时,延时(t*0.01)s
37 t=0时,延时655.36s
38 说明:
39 晶振采用11.0592MHz
40 */
41 void Delay(unsigned int t)
42 {
43 1 do
44 1 {
45 2 TH0 = 0xDC;
46 2 TL0 = 0x00;
47 2 TR0 = 1;
48 2 while ( !TF0 );
49 2 TF0 = 0;
50 2 TR0 = 0;
51 2 } while (--t);
52 1 }
53
54 /**********************************************************/
55 void Delayb20(unsigned int num)//延时函数
C51 COMPILER V7.50 ZLG7289DEMO2 01/12/2008 22:13:59 PAGE 2
56 {
57 1 while( --num );
58 1 }
59
60 /**********************************************************/
61 Init_DS18B20(void)//初始化ds1820
62 {
63 1 EA=0;
64 1 DQ = 1; //DQ复位
65 1 Delayb20(8); //稍做延时
66 1
67 1 DQ = 0; //单片机将DQ拉低
68 1 Delayb20(90); //精确延时 大于 480us
69 1
70 1 DQ = 1; //拉高总线
71 1 Delayb20(8);
72 1
73 1 presence = DQ; //如果=0则初始化成功 =1则初始化失败
74 1 Delayb20(100);
75 1 DQ = 1;
76 1 EA=1;
77 1 return(presence); //返回信号,0=presence,1= no presence
78 1 }
79
80 /**********************************************************/
81 ReadOneChar(void)//读一个字节
82 {
83 1 unsigned char i = 0;
84 1 unsigned char dat = 0;
85 1 EA=0;
86 1 for (i = 8; i > 0; i--)
87 1 {
88 2 DQ = 0; // 给脉冲信号
89 2 dat >>= 1;
90 2 DQ = 1; // 给脉冲信号
91 2
92 2 if(DQ)
93 2 dat |= 0x80;
94 2 Delayb20(4);
95 2 }
96 1 EA=1;
97 1 return (dat);
98 1 }
99
100 /**********************************************************/
101 WriteOneChar(unsigned char dat)//写一个字节
102 {
103 1 unsigned char i = 0;
104 1 EA=0;
105 1 for (i = 8; i > 0; i--)
106 1 {
107 2 DQ = 0;
108 2 DQ = dat&0x01;
109 2 Delayb20(5);
110 2
111 2 DQ = 1;
112 2 dat>>=1;
113 2 }
114 1 EA=1;
115 1 }
116 /*********************************************************/
117 Read_Romnum(void) //读器件的系列号
C51 COMPILER V7.50 ZLG7289DEMO2 01/12/2008 22:13:59 PAGE 3
118 {
119 1 unsigned char i = 0;
120 1 Init_DS18B20();
121 1 if(presence==1)
122 1 { beep();alarm=1;} //DS18B20不正常,蜂鸣器报警
123 1 else
124 1 {
125 2 WriteOneChar(0x33); // 跳过读序号列号的操作
126 2 // for(i=0;i<8;i++)
127 2 // rom[j][i]=ReadOneChar();
128 2 }
129 1 }
130
131 /*********************************************************/
132
133 Read_Temperature()//读取温度
134 {
135 1 unsigned char i = 0,j=0,num=0;
136 1
137 1 Init_DS18B20();
138 1 if(presence==1)
139 1 { beep();alarm=1;} //DS18B20不正常,蜂鸣器报警
140 1 else
141 1 {
142 2 WriteOneChar(0xCC); // 跳过读序号列号的操作
143 2 WriteOneChar(0x44); // 启动温度转换
144 2 }
145 1
146 1
147 1 for(num=0;num<3;num++)
148 1 {
149 2 Init_DS18B20();
150 2 WriteOneChar(0x55); //pipei序号列号的操作
151 2 for(i=0;i<8;i++)
152 2 {
153 3 WriteOneChar(rom[num][i]);
154 3 }
155 2 WriteOneChar(0xBE); //读取温度寄存器
156 2
157 2 temp_data[num<<1] = ReadOneChar(); //温度低8位
158 2 temp_data[(num<<1)+1] = ReadOneChar(); //温度高8位
159 2 }
160 1 if((mem_flag==1)||(mem_flag==2)||(mem_flag==3))
161 1 {
162 2 temp_data[6]=temp_data[(mem_flag-1)<<1];
163 2 temp_data[7]=temp_data[((mem_flag-1)<<1)+1];
164 2 }
165 1 else if(mem_flag==4)
166 1 {
167 2 for(j=0;j<3;j++)
168 2 {
169 3 display[3]=((temp_data[0]&0xf0)>>4)|((temp_data[1]&0x0f)<<4);
170 3 display[2]=((temp_data[2]&0xf0)>>4)|((temp_data[3]&0x0f)<<4);
171 3 display[1]=((temp_data[4]&0xf0)>>4)|((temp_data[5]&0x0f)<<4);
172 3 display[5]=(display[1]+display[2]+display[3])%3;
173 3 temp=(display[1]+display[2]+display[3])/3;
174 3 display[4]=(temp_data[0]&0x0f)+(temp_data[2]&0x0f)+(temp_data[4]&0x0f);
175 3 display[2]=(display[4]+(display[5]<<4))/3;
176 3 display[0]=ditab[display[2]&0x0f];
177 3 display[4]=temp+((display[2]&0xf0)>>4);
178 3 }
179 2 }
C51 COMPILER V7.50 ZLG7289DEMO2 01/12/2008 22:13:59 PAGE 4
180 1 }
181
182 /*********************************************************/
183 void beep()
184 {
185 1 unsigned char i;
186 1 for (i=0;i<10;i++)
187 1 {
188 2 Delayb20(60);
189 2 BEEP=!BEEP; //BEEP取反
190 2 }
191 1 BEEP=1; //关闭蜂鸣器
192 1 }
193
194 Disp_Temperature()//显示温度
195 {
196 1 if(alarm)
197 1 {
198 2 if(alarm==1)
199 2 {
200 3 display[3]=0x0b;
201 3 display[2]=0x0b;
202 3 display[1]=0x0a;
203 3 display[0]=0x0a;
204 3 }
205 2 else if(alarm==2)
206 2 {
207 3 display[3]=0x0c;
208 3 display[2]=0x0b;
209 3 display[1]=0x0a;
210 3 display[0]=0x0a;
211 3 }
212 2 else if(alarm==3)
213 2 {
214 3 display[3]=0x0d;
215 3 display[2]=0x0b;
216 3 display[1]=0x0a;
217 3 display[0]=0x0a;
218 3 }
219 2 }
220 1 else if(key==0xff)
221 1 {
222 2 if(mem_flag!=4)
223 2 {
224 3 display[4]=temp_data[6]&0x0f;
225 3 display[0]=ditab[display[4]]; //查表得小数位的值
226 3 display[4]=((temp_data[6]&0xf0)>>4)|((temp_data[7]&0x0f)<<4);
227 3 }
228 2 display[3]=mem_flag;
229 2 if(mem_flag==4)display[3]=0x0e;
230 2 display[1]=display[4]%100;
231 2 display[2]=display[1]/10;
232 2 display[1]=display[1]%10;
233 2 crru_temp=display[4];
234 2 crru_temp=crru_temp*10+display[0];
235 2 H_T=H_T%1000;
236 2 L_T=L_T%1000;
237 2 if(crru_temp>H_T)alarm=2;
238 2 if(crru_temp<L_T)alarm=3;
239 2 }
240 1 else if(HL_flag==1)
241 1 {
C51 COMPILER V7.50 ZLG7289DEMO2 01/12/2008 22:13:59 PAGE 5
242 2 display[3]=0x0c;
243 2 display[2]=H_T/100;
244 2 display[1]=H_T/10%10;
245 2 display[0]=H_T%10;
246 2 }
247 1 else if(HL_flag==2)
248 1 {
249 2 display[3]=0x0d;
250 2 display[2]=L_T/100;
251 2 display[1]=L_T/10%10;
252 2 display[0]=L_T%10;
253 2 }
254 1 else if(key==59)
255 1 {
256 2 display[3]=mem_flag;
257 2 if(mem_flag==4)display[3]=0x0e;
258 2 display[2]=0x0a;
259 2 display[1]=0x0a;
260 2 display[0]=0x0a;
261 2 }
262 1
263 1 ZLG7289_Download(0,4,0,display[0]);
264 1 ZLG7289_Download(0,5,1,display[1]);
265 1 ZLG7289_Download(0,6,0,display[2]);
266 1 ZLG7289_Download(0,7,1,display[3]);
267 1 //ZLG7289_Hide(8);
268 1 }
269
270 void initTarg(void) //初始化目标板
271 {
272 1 TMOD=0x21;
273 1 TH0=0xDC;
274 1 TL0=0x00;
275 1 IT0=1;
276 1 EA=1;
277 1 EX0=1;
278 1 }
279
280 void main()
281 {
282 1
283 1 initTarg();
284 1 //TMOD = 0x01;
285 1 Delay(30); //延时300ms,等待ZLG7289复位完毕
286 1 ZLG7289_Init(20); //调用ZLG7289的初始化函数
287 1 Delay(100);
288 1 //测试
289 1 ZLG7289_Test();
290 1 Delay(200);
291 1 //复位
292 1 ZLG7289_Reset();
293 1 Delay(100);
294 1 while(1)
295 1 {
296 2 if(key==0xff)
297 2 {
298 3 Read_Temperature();
299 3 }
300 2
301 2 Disp_Temperature();
302 2 if(key_flag)
303 2 {
C51 COMPILER V7.50 ZLG7289DEMO2 01/12/2008 22:13:59 PAGE 6
304 3 switch(key)
305 3 {
306 4 case 63: //设定功能键
307 4 key_flag=1;
308 4 HL_flag ++;
309 4 if(HL_flag==3)HL_flag=1;
310 4 break;
311 4 case 62: //十位数加1
312 4 if(HL_flag==1) H_T=H_T+100;
313 4 if(HL_flag==2) L_T=L_T+100;
314 4 break;
315 4 case 61: //个位数加1
316 4 if(HL_flag==1) H_T=H_T+10;
317 4 if(HL_flag==2) L_T=L_T+10;
318 4 break;
319 4 case 60: //小数位加1
320 4 if(HL_flag==1) H_T=H_T+1;
321 4 if(HL_flag==2) L_T=L_T+1;
322 4 break;
323 4 case 59: //说明测得是单个DS18b20温度 还是多个DS18b20的平均值
324 4 key_flag=1;
325 4 mem_flag++;
326 4 if(mem_flag==5)mem_flag=1;
327 4 break;
328 4 case 58: // 确认键
329 4 key_flag=0;
330 4 HL_flag=0;
331 4 key=0xff;
332 4 break;
333 4 case 57:
334 4 break;
335 4 default:break;
336 4 }
337 3 key_flag=0;
338 3 }
339 2
340 2 if(alarm)
341 2 {
342 3 beep();
343 3 }
344 2
345 2 Delay(20);
346 2 }
347 1
348 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1212 ----
CONSTANT SIZE = 48 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 29 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 + -