📄 测距程序.lst
字号:
185 1 for(i=0;i<32;i++)
186 1 {
187 2 Write_char(0,0x80+i);
188 2 Write_char(0,0x80);
189 2 for(j=0;j<16;j++)
190 2 {
191 3 Write_char(1,img[k++]);
192 3 }
193 2 }
194 1
195 1 for(i=0;i<32;i++)
196 1 {
197 2 Write_char(0,0x80+i);
198 2 Write_char(0,0x88);
199 2 for(j=0;j<16;j++)
200 2 {
201 3 Write_char(1,img[k++]);
202 3 }
203 2 }
204 1 }
205
206 /******************************************************************************/
207 void Clr_Scr(void)//清屏函数
208 {
209 1 Write_char(0,0x01);
210 1 }
211
212 /******************************************************************************/
213 void LCD_set_xy( unsigned char x, unsigned char y )
214 { //设置LCD显示的起始位置,X为行,Y为列
215 1 unsigned char address;
216 1 switch(x)
217 1 {
218 2 case 0: address = 0x80 + y; break;
219 2 case 1: address = 0x80 + y; break;
220 2 case 2: address = 0x90 + y; break;
221 2 case 3: address = 0x88 + y; break;
222 2 case 4: address = 0x98 + y; break;
223 2 default:address = 0x80 + y; break;
224 2 }
225 1 Write_char(0, address);
226 1 }
227
228 /******************************************************************************/
229 void LCD_Write_string(unsigned char X,unsigned char Y,unsigned char *s)
230 { // 中英文字符串显示函数
231 1 LCD_set_xy( X, Y );
232 1
233 1 while (*s)
234 1 {
235 2 Write_char( 1, *s );
236 2 s ++;
237 2 Delaynms(1);
238 2 }
239 1 }
240
241 /******************************************************************************/
C51 COMPILER V8.08 瞋距程序 05/01/2010 20:54:00 PAGE 5
242 void LCD_Write_number(unsigned char s)// 数字显示函数
243 {
244 1 Write_char(1,num[s]);
245 1 Delaynms(1);
246 1 }
247 /******************************************************************************/
248 void Lcd_Mark2(void)
249 {
250 1 Clr_Scr();//清屏
251 1 LCD_Write_string(1,0,znwk);//
252 1 LCD_Write_string(2,0,waves);//
253 1 LCD_Write_string(3,7,CM);//
254 1 }
255
256 /********************************************************/
257 void Conut(void)
258 {
259 1 time=TH0*256+TL0;
260 1 TH0=0;
261 1 TL0=0;
262 1 S=time*1.87/100; //算出来是CM 11。0592M晶振
263 1 if(flag==1) //超出测量
264 1 {
265 2 flag=0;
266 2 LCD_set_xy( 3, 4 );
267 2 LCD_Write_number(13);
268 2 LCD_Write_number(12);
269 2 LCD_set_xy( 3, 5 );
270 2 LCD_Write_number(13);
271 2 LCD_Write_number(13);
272 2
273 2 }
274 1 else
275 1 {
276 2 disbuff[1]=S%1000/100;
277 2 disbuff[2]=S%1000%100/10;
278 2 disbuff[3]=S%1000%10 %10;
279 2 LCD_set_xy( 3, 4 );
280 2 LCD_Write_number(disbuff[1]);
281 2 LCD_Write_number(12);
282 2 LCD_set_xy( 3, 5 );
283 2 LCD_Write_number(disbuff[2]);
284 2 LCD_Write_number(disbuff[3]);
285 2 }
286 1 }
287 /********************************************************/
288 void delayms(unsigned int ms)
289 {
290 1 unsigned char i=100,j;
291 1 for(;ms;ms--)
292 1 {
293 2 while(--i)
294 2 {
295 3 j=10;
296 3 while(--j);
297 3 }
298 2 }
299 1 }
300 /********************************************************/
301 void zd0() interrupt 1 //T0中断用来计数器溢出,超过测距范围
302 {
303 1 flag=1; //中断溢出标志
C51 COMPILER V8.08 瞋距程序 05/01/2010 20:54:00 PAGE 6
304 1 }
305 /********************************************************/
306 void StartModule() //T1中断用来扫描数码管和计800MS启动模块
307 {
308 1 TX=1; //800MS 启动一次模块
309 1 _nop_();
310 1 _nop_();
311 1 _nop_();
312 1 _nop_();
313 1 _nop_();
314 1 _nop_();
315 1 _nop_();
316 1 _nop_();
317 1 _nop_();
318 1 _nop_();
319 1 _nop_();
320 1 _nop_();
321 1 _nop_();
322 1 _nop_();
323 1 _nop_();
324 1 _nop_();
325 1 _nop_();
326 1 _nop_();
327 1 _nop_();
328 1 _nop_();
329 1 _nop_();
330 1 TX=0;
331 1 }
332 /********************************************************/
333 void main(void)
334 {
335 1 TMOD=0x01; //设T0为方式1,GATE=1
336 1 TH0=0;
337 1 TL0=0;
338 1 TR0=1;
339 1
340 1 Lcd_init(); //设置液晶显示器
341 1 Clr_Scr(); //清屏
342 1 Disp_img(logo); //显示欢迎使用本产品LOGO
343 1 Delaynms(1000);
344 1 Lcd_init(); //从图形显示状态下返回
345 1 Lcd_Mark2();
346 1
347 1
348 1 while(1)
349 1 {
350 2 StartModule();
351 2 //计算
352 2 while(!RX); //当RX为零时等待
353 2 TR0=1; //开启计数
354 2 while(RX); //当RX为1计数并等待
355 2 TR0=0; //关闭计数
356 2 Conut();
357 2 delayms(80); //80MS
358 2
359 2 }
360 1
361 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 872 ----
C51 COMPILER V8.08 瞋距程序 05/01/2010 20:54:00 PAGE 7
CONSTANT SIZE = 1071 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 10 15
IDATA SIZE = ---- ----
BIT SIZE = 1 1
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -