📄 bussys.lst
字号:
215 1 Delay(100);
216 1 return(d);
217 1 }
218
219 /***************************************
220 * 名称: Disp_word0(unsigned char posx,unsigned char *p,unsigned char n)
221 * 说明:
222 * 功能: 显示一串汉字
223 * 参数: pos:显示位置(第一行:0-6,第二行:7-13),
224 p:汉字码的地址指针,
225 n:显示字的个数,
226 * 返回值: 无
227 ****************************************/
228 void Disp_word0(unsigned char posx,unsigned char *p,unsigned char n)
229 {
230 1 unsigned char i=0;
231 1 unsigned char pos;
232 1 for(i=0;i<n;i++)
233 1 {
234 2 pos=posx;
235 2 if((pos<8)||((pos>15)&&(pos<24)))
236 2 {
237 3 if(pos>15)pos=pos-8;
238 3 Write_com(0x80|pos);
239 3 Write_data(p[0]);
240 3 Write_data(p[1]);
241 3 }
C51 COMPILER V8.08 BUSSYS 03/01/2008 06:10:47 PAGE 5
242 2 else
243 2 {
244 3 if(pos<16)
245 3 {
246 4 pos =pos-8;
247 4 }
248 3 else
249 3 {
250 4 pos =pos-16;
251 4 }
252 3 Write_com(0x90|pos);
253 3 Write_data(p[0]);
254 3 Write_data(p[1]);
255 3 }
256 2 posx++;
257 2 p=p+2;
258 2 }
259 1 }
260
261 /***************************************
262 * 名称: Disp_row(unsigned char row,unsigned char pos,unsigned char dat)
263 * 说明:
264 * 功能: 显示一个字母或数字
265 * 参数: row:行选择,pos:显示位置(0-15),dat:数字码
266 * 返回值: 无
267 ****************************************/
268 void Disp_row(unsigned char row,unsigned char pos,unsigned char dat)
269 {
270 1 unsigned char dat0;
271 1 unsigned char pos0;
272 1 row = row%2;
273 1 row = row<<4;
274 1 pos0 = pos/2;
275 1 if((pos+1)/2==pos0)
276 1 {
277 2 Write_com((0x80+row)|pos0);
278 2 Write_data(dat);
279 2 }
280 1 else
281 1 {
282 2 Write_com((0x80+row)|pos0);
283 2 dat0 = Read_data();
284 2 Write_data(dat);
285 2 }
286 1 }
287
288 /***************************************
289 * 名称: Disp_char(unsigned char pos,unsigned char dat)
290 * 说明:
291 * 功能: 显示一个字母或数字
292 * 参数: pos:显示位置(第一行:0-15,第二行:16-31,第一行:32-47,第二行:48-63),dat:数字码
293 * 返回值: 无
294 ****************************************/
295 void Disp_char(unsigned char pos,unsigned char dat)
296 {
297 1 if(pos<16)
298 1 {
299 2 Disp_row(0,pos,dat);
300 2 }
301 1 if((pos<32)&&(pos>15))
302 1 {
303 2 Disp_row(1,pos-16,dat);
C51 COMPILER V8.08 BUSSYS 03/01/2008 06:10:47 PAGE 6
304 2 }
305 1 if((pos<48)&&(pos>31))
306 1 {
307 2 Disp_row(2,pos-16,dat);
308 2 }
309 1 if((pos<64)&&(pos>47))
310 1 {
311 2 Disp_row(3,pos-32,dat);
312 2 }
313 1 }
314
315 /***************************************
316 * 名称: void Disp_number(unsigned char pos,unsigned long dat)
317 * 说明:
318 * 功能: 显示一个数(0-65536)
319 * 参数: pos:显示位置,dat:显示数据
320 * 返回值: 无
321 ****************************************/
322 void Disp_number(unsigned char pos,unsigned int dat)
323 {
324 1 unsigned int d;
325 1 unsigned char i=0;
326 1
327 1 unsigned char addr;
328 1 unsigned char tab[5]={0}; //
329 1 d =dat;
330 1
331 1 while(d)
332 1 {
333 2 tab[i] = d%10;
334 2 d=d/10;
335 2 i++;
336 2 }
337 1 if(i<p_last)
338 1 {
339 2 for(addr=0;addr<p_last-i;addr++)
340 2 Disp_char(addr+pos+i,0x20);
341 2 for(addr=0;addr<i;addr++)
342 2 Disp_char(addr+pos,tab[i-addr-1]+48);
343 2 }
344 1 else
345 1 {
346 2 for(addr=0;addr<i;addr++)
347 2 {
348 3 Disp_char(addr+pos,tab[i-addr-1]+48);
349 3 }
350 2
351 2 }
352 1 if(0==i)Disp_char(pos,48);
353 1 p_last=i;
354 1 }
355
356 /**********************
357 *
358 * 名称: delay0()
359 * 说明: 晶振采用24.0MHz
360 * 功能: 延时
361 * 延时(t*0.1)ms
362 * 输入: t(时间参数)
363 * 返回值: 无
364 ***********************/
365 void delay0(unsigned int t)
C51 COMPILER V8.08 BUSSYS 03/01/2008 06:10:47 PAGE 7
366 {
367 1 tm=t;
368 1 do
369 1 {
370 2 TH0 = 0xFF;
371 2 TL0 = 0x38;
372 2 TR0 = 1;
373 2 while ( !TF0 );
374 2 TF0 = 0;
375 2 TR0 = 0;
376 2 } while (--tm);
377 1 }
378
379 /**********************
380 *
381 * 名称: time1()
382 * 说明: 晶振采用24.0MHz
383 * 功能: 监视红外线信号是否结束
384 * 如果2ms内输入信号没有沿跳变,就结束译码
385 * 输入: 无
386 * 返回值: flag0
387 ***********************/
388 void time1()interrupt 3 using 2
389 {
390 1 flag0 = 0;
391 1 }
392
393 /**********************
394 *
395 * 名称: bit hw_yima()
396 * 说明:
397 * 功能: 红外线译码
398 * 输入: 无
399 * 返回值: ym:解码成功(1),失败(0)。
400 ***********************/
401 bit hw_yima()
402 {
403 1 unsigned int ymdata = 0;
404 1 unsigned char n = 0;
405 1 bit ym=0;
406 1 ymcode=0xffff;
407 1 s = P1_0;
408 1 if(0==P1_0)
409 1 {
410 2
411 2 while(flag0)
412 2 {
413 3 while(P1_0==s);
414 3 if(1==flag0)
415 3 {
416 4 TR1 = 0;
417 4 TH1 = 0xF0;
418 4 TL1 = 0x60;
419 4 TR1 = 1;
420 4 delay0(12);
421 4 ymdata = ymdata<<1;
422 4 if(0==P1_0)
423 4 {
424 5 ymdata |= 0x01;
425 5 }
426 4 n++;
427 4 s = P1_0;
C51 COMPILER V8.08 BUSSYS 03/01/2008 06:10:47 PAGE 8
428 4 }
429 3 }
430 2 if(n>9) //此参数直接影响接受的灵敏度
431 2 {
432 3 ymcode = ymdata>>1;
433 3 ymcode = ~ymcode;
434 3 ym=1; //解码成功
435 3 delay0(400); //减少连码
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -