📄 lyd.lst
字号:
156 1 Uint j;
157 1 while(i--)
158 1 {
159 2 j=7269;
160 2 while(j--);
161 2 };
162 1 }
163
164 /*_________________________________________________________________________
165 _________________________以下的为自己写的程序______________________________
166 ___________________________________________________________________________*/
167 //***************************** 延时程序*******************************//
-
168 void delay(d)//延时d微秒
169 {
170 1 while(d--);
171 1 }
172
173 /*===============================*/
174 /*系统初始化*/
175 void system_init(void)
176 {
177 1 TMOD=0x20; /* 定时器0工作在方式二,用作自动从装的8位定时器 */
178 1 EA=1; /* 开中断允许总开关 */
C51 COMPILER V8.02 LYD 04/22/2008 11:38:52 PAGE 4
179 1 EX1=1; /* 允许外部中断1 */
180 1 IT1=1; /* 外部中断源1位负条变触发方式 */
181 1
182 1 ET0=1; /* 允许定时器T0中断产生 */
183 1 TR0=0; /* 定时器0没开始工作 */
184 1 TH0=0x9c; /* 12M晶振,定时0.1ms,用来控制发波时间,并计算时间间隔*/
185 1 TL0=0x9c;
186 1
187 1 ET1=1; /* 允许定时器T1中断0产生 */
188 1 TH1 = 0x00;
189 1 TL1 = 0x00;
190 1
191 1 transmit=0; /*不发波 */
192 1 for(i=0;i<40000;i++); /*延时,使余震停止 */
193 1 reset=0; /*外部电路不能产生中断 */
194 1 }
195
196 /*=================================*/
197 /* 定时器中断0处理程序,用于计算传波时间(等待1ms)*/
198 void timer0(void) interrupt 1 using 1
199 {
200 1 counter++;
201 1
202 1 }
203
204 /*=================================*/
205 /* 定时器中断1处理程序,用于计算传波时间(等待1ms)*/
206 void timer1(void) interrupt 3
207 {
208 1 disable_flag=1;
209 1
210 1 }
211 /*===================================*/
212 /*外部中断1处理程序,接收到回波*/
213 void int0(void) interrupt 0 using 1
214 {
215 1 TR1=0; //停止计数器T1计数
216 1 receive_flag=1; //接收回波标志置位:收到回波
217 1
218 1 if(TH1>3)
219 1 {
220 2 temp1=TH1*256+TL1; //读出计数值,
221 2 temp1=(temp1*172)/25; //换算成距离 cm
222 2 }
223 1
224 1 else temp1=0;
225 1
226 1
227 1 TH1 = 0x00;
228 1 TL1 = 0x00;
229 1 TR1 = 1; //启动T1计数
230 1 }
231
232 /*===================================*/
233 /*显示距离*/
234 void showdate(unsigned int t)
235 {
236 1
237 1 unsigned int count,play;
238 1 count=t;
239 1 i=10;
240 1
C51 COMPILER V8.02 LYD 04/22/2008 11:38:52 PAGE 5
241 1 while(count&&i>0)
242 1 { play=count%10;
243 2 DispOneChar(i,1,play+'0');
244 2 count=count/10;
245 2 i--;
246 2 }
247 1 }
248 /*====================================*/
249 /*主程序处理*/
250 void main(void)
251 {
252 1 Delay400Ms(); // 启动时必须的延时,等待lcm进入工作状态
253 1 LcdReset(); // 这也是必需的....初始化
254 1 system_init();
255 1 ePutstr(0,0,exampl); // 上面一行显示一个预定字符串
256 1
257 1
258 1 while(1)
259 1 {
260 2 transmit=0; //不发波
261 2 for(i=0;i<4000;i++); //延时,使余震停止
262 2 reset=0; //外部电路不能产生中断
263 2 TL0=0x9c; // 从设定时器初值
264 2 TH0=0x9c;
265 2 counter=0;
266 2 TR0=1;
267 2 TR1=1; //开始计数
268 2 transmit=1; //发波
269 2 while(counter<4); //等待0.5ms到来,
270 2 transmit=0; //停止发波
271 2 while(counter<10); // 等待1ms到来
272 2 reset=1; //外部电路可以产生中断
273 2
274 2
275 2 if(disable_flag==0) /*在测量范围之内*/
276 2 {
277 3 if(receive_flag==1)
278 3 { receive_flag=0;
279 4
280 4
281 4 for(i=0;i<16;i++) DispOneChar(i,0,examp2[i]);
282 4 for(i=0;i<16;i++) DispOneChar(i,1,' ');
283 4 dis=temp1;
284 4 showdate(dis);
285 4 delay(60000);
286 4 }
287 3 else
288 3 { for(i=0;i<16;i++) DispOneChar(i,0,examp3[i]);
289 4 for(i=0;i<16;i++) DispOneChar(i,1,' ');
290 4 }
291 3 }
292 2
293 2
294 2 else /*不在测量范围之内*/
295 2 {
296 3 for(i=0;i<16;i++) DispOneChar(i,0,exampl[i]);
297 3 for(i=0;i<16;i++) DispOneChar(i,1,' ');
298 3 disable_flag=0;
299 3 }
300 2 }
301 1 }
C51 COMPILER V8.02 LYD 04/22/2008 11:38:52 PAGE 6
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 881 ----
CONSTANT SIZE = 59 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 10 13
IDATA SIZE = ---- ----
BIT SIZE = 2 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -