📄 main.lst
字号:
C51 COMPILER V7.06 MAIN 05/28/2008 22:19:05 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include <reg51.h>
2 #include <intrins.h>
3 #define uchar unsigned char
4
5
6 #define E INT0 //液晶控制线定义
7 #define RS RXD
8 #define RW TXD //液晶控制线定义
9
10
11
12 sbit D0=P2^7; //传感器数据线定义
13 bit status;
14
15 code uchar ANSC[]={'0','1','2','3','4','5','6','7','8','9'};
16 code uchar error[]="NO DEVICE!";
17 code uchar table[]="The temper is:";
18 uchar Temper[2];
19
20 void delay1(uchar del)
21 {
22 1 uchar i;
23 1 for(i=0;i<del;i++);
24 1 }
25
26
27
28 void delay2(unsigned int i)
29 {
30 1 while(--i);
31 1 }
32
33
34
35
36 void delay(uchar del)
37 {
38 1 uchar i,j;
39 1 for(i=del;i>0;i--)
40 1 for(j=0;j<110;j++);
41 1 }
42
43
44
45
46
47
48 //*******************************************************
49 void Write_Com(uchar com)
50 {
51 1
52 1 RS=0;
53 1 P0=com;
54 1 delay(1);
55 1 E=1;
C51 COMPILER V7.06 MAIN 05/28/2008 22:19:05 PAGE 2
56 1 delay(1);
57 1 E=0;
58 1 }
59
60 void Write_Data(uchar date)
61 {
62 1 RS=1;
63 1 P0=date;
64 1 delay(1);
65 1 E=1;
66 1 delay(2);
67 1 E=0;
68 1 }
69 //*******************************************************
70
71
72
73 //*******************一线总线的写操作********************
74
75
76
77 void write_command(uchar com1) //一线总线写命令
78 {
79 1 unsigned char i=0;
80 1 for (i=8; i>0; i--)
81 1 {
82 2 D0 = 0;
83 2 _nop_();_nop_();
84 2 D0=1;
85 2 D0 = com1&0x01;
86 2 delay2(5);
87 2 D0 = 1;
88 2 com1>>=1;
89 2 }
90 1 }
91 //********************************************************
92
93
94
95
96
97
98
99 unsigned char read_data()
100 {
101 1 unsigned char i=0;
102 1 unsigned char temp=0;
103 1 for (i=8;i>0;i--)
104 1 {
105 2 D0 = 0;
106 2 _nop_();_nop_();
107 2 temp>>=1;
108 2 D0 = 1;
109 2 _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
110 2 if(D0) temp|=0x80;
111 2 delay2(4);
112 2 }
113 1 _nop_();_nop_();_nop_();
114 1 return(temp);
115 1 }
116
117
C51 COMPILER V7.06 MAIN 05/28/2008 22:19:05 PAGE 3
118
119 void reset()
120 {
121 1 uchar i;
122 1 D0=1;
123 1 D0=0;
124 1 for(i=0;i<60;i++)
125 1 _nop_();
126 1 for(i=0;i<61;i++)
127 1 _nop_();
128 1 D0=1;
129 1 delay1(9);
130 1 status=D0;
131 1 D0=1;
132 1 for(i=0;i<60;i++)
133 1 _nop_();
134 1 for(i=0;i<61;i++)
135 1 _nop_();
136 1 }
137
138
139 void init1()
140 {
141 1 uchar i;
142 1 reset(); //传感器初始化和错误处理
143 1 while(status)
144 1 {
145 2 reset();
146 2 if(status)
147 2 {
148 3 reset();
149 3 if(status)
150 3 {
151 4 i=0;
152 4 Write_Com(0x01);
153 4 delay(5);
154 4 Write_Com(0x80);
155 4 while(error[i]!='\0')
156 4 {
157 5 Write_Data(error[i]);
158 5 i++;
159 5 }
160 4 while(1);
161 4 }
162 3 }
163 2 break; //传感器初始化和错误处理
164 2 }
165 1 }
166
167
168
169
170 void Init()
171 {
172 1 D0=1;
173 1 E=0; //液晶初始化
174 1 RW=0;
175 1 Write_Com(0x38);
176 1 Write_Com(0x0c);
177 1 Write_Com(0x06);
178 1 Write_Com(0x01);
179 1 delay(5); //液晶初始化
C51 COMPILER V7.06 MAIN 05/28/2008 22:19:05 PAGE 4
180 1
181 1 }
182
183
184
185 //*******************************************************
186
187 void main()
188 {
189 1 uchar MSB,LSB,shiwei,gewei,xiaoshu0,xiaoshu1,xiaoshu2,xiaoshu3;
190 1
191 1 unsigned char i;
192 1 Init();
193 1 Write_Com(0x80);
194 1 i=0;
195 1 while(table[i]!='\0')
196 1 {
197 2 Write_Data(table[i]);
198 2 i++;
199 2 delay(1);
200 2 }
201 1
202 1
203 1
204 1 loop:init1();
205 1 write_command(0xcc); //跳过ROM匹配
206 1 write_command(0x44); //启动温度转换
207 1 delay(255);
208 1 delay(255);
209 1 init1(); //复位传感器
210 1 write_command(0xcc); //跳过ROM匹配
211 1 write_command(0xbe); //读取温度指令
212 1 LSB=read_data(); //温度的小数位
213 1 MSB=(read_data()<<4)|(LSB>>4);//温度的整数位
214 1 shiwei=MSB/10;
215 1 gewei=MSB%10;
216 1 xiaoshu0=(LSB&0x0f)*625/1000;
217 1 xiaoshu1=(((LSB&0x0f)*625)%1000)/100;
218 1 xiaoshu2=(((LSB&0x0f)*625)%100)/10;
219 1 xiaoshu3=((LSB&0x0f)*625)%10;
220 1 Temper[0]=ANSC[shiwei];
221 1 Temper[1]=ANSC[gewei];
222 1 Temper[2]='.';
223 1 Temper[3]=ANSC[xiaoshu0];
224 1 Temper[4]=ANSC[xiaoshu1];
225 1 Temper[5]=ANSC[xiaoshu2];
226 1 Temper[6]=ANSC[xiaoshu3];
227 1 Temper[7]=0xdf;
228 1 Temper[8]='C';
229 1 Write_Com(0x80+0x45);
230 1 Write_Data(Temper[0]);
231 1 Write_Data(Temper[1]);
232 1 Write_Data(Temper[2]);
233 1 Write_Data(Temper[3]);
234 1 Write_Data(Temper[4]);
235 1 Write_Data(Temper[5]);
236 1 Write_Data(Temper[6]);
237 1 Write_Data(Temper[7]);
238 1 Write_Data(Temper[8]);
239 1 goto loop;
240 1 }
C51 COMPILER V7.06 MAIN 05/28/2008 22:19:05 PAGE 5
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 577 ----
CONSTANT SIZE = 36 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 2 5
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 + -