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