📄 main.lst
字号:
235 2 LCD_set_xy( X, Y ); //设置显示的地址
236 2 LCD_en_dat(*s);
237 2 s++;
C51 COMPILER V7.06 MAIN 06/08/2007 16:16:19 PAGE 5
238 2 X++;
239 2 if(X==16) //当第一行显示满时,Y^=1,取另一行
240 2 {
241 3 X=0;
242 3 Y^=1;
243 3 }
244 2
245 2 }
246 1
247 1 }
248
249
250 /************LCD模块初始化******************************************************/
251 void LCD_init(void)
252 {
253 1 LCD_en_command(0x01);//清屏 (得两次清屏)
254 1 LCD_en_command(0x38);//设定双行显示,字形5*7点阵,8位数据转移
255 1 LCD_en_command(0x0c);//开显示,光标不显示,不闪烁
256 1 LCD_en_command(0x06);//右移光标(光标加1,字符不动)
257 1 LCD_en_command(0x01);//清屏
258 1 }
259
260
261 /*********************************************************************************
262 ** 函数名:void FLOAT_NUM_Display(float dd)***************************************
263 ** 功能:显示浮点型数字(6位有效数字)********************************************
264 ** 入口参数:float dd (dd 为调用这个子程序时传入的数据)*************************
265 ** 出口参数:无 ******************************************************************
266 **注意各变量的数据类型,数的有效范围***********************************************
267 **实现方式:从小数点第六位 起往左逆向取数字,存入数组,再正向输出7位数字**********
268 **该函数的缺陷是:小数部分最多显示六位,如0.000020**************************************/
269
270
271 void FLOAT_NUM_Display(float dd,uchar x,uchar y)
272 {
273 1
274 1 uchar i,j,k=0;
275 1 frequency=dd*1000000;//取小数点后六位
276 1 if(frequency>=10000000) //整数部分不为0
277 1 {
278 2 for (i=0;i<16;i++)
279 2 {
280 3 if(i==6)
281 3 {
282 4 LCDDisplaybuffer[i]='.';
283 4 }
284 3 else
285 3 {
286 4 LCDDisplaybuffer[i]=CHR[frequency%10];
287 4 frequency/=10;
288 4 }
289 3
290 3 if(frequency==0)
291 3 {
292 4 i++;
293 4 break;
294 4 }
295 3 }
296 2 }
297 1 else //整数部分为0
298 1 {
299 2 for (i=0;i<8;i++)
C51 COMPILER V7.06 MAIN 06/08/2007 16:16:19 PAGE 6
300 2 {
301 3 if(i==6)
302 3 {
303 4 LCDDisplaybuffer[i]='.';
304 4 }
305 3 else
306 3 {
307 4 LCDDisplaybuffer[i]=CHR[frequency%10];
308 4 frequency/=10;
309 4 }
310 3 }
311 2 }
312 1
313 1 for (j=0;j<7;j++) //可以通过改变j的范围来增减显示的位数
314 1 {
315 2 LCD_write_char(x++,y,LCDDisplaybuffer[i-1]);
316 2 i--;
317 2
318 2 }
319 1
320 1
321 1
322 1 }
323
324 /*********************************************************************************
325 ** 函数名:INT_NUM_Display(unsigned int Num)**************************************
326 ** 功能:显示整数*****************************************************************
327 ** 入口参数:unsigned int Num (Num 为调用这个子程序时传入的数据)****************
328 *********** 这里可以通过改变div的值来增减显示的位数 ******************************
329 ******这个例子显示5位数***********************************************************
330 ** 出口参数:无 ******************************************************************
331 **注意各变量的数据类型,根据数的范围来改变形参的数据类型**************************
332 **********************************************************************************/
333 /*void INT_NUM_Display(unsigned int Num,uchar x,uchar y)
334 {
335 uchar i;
336 unsigned int div=10000;
337 for (i=0;i<8;i++)
338 {
339 LCDDisplaybuffer[i]=CHR[Num/div];
340 Num%=div;
341 div/=10;
342 }
343
344 LCD_write_string(x,y,LCDDisplaybuffer);
345
346 }
347
348 /*********************************************************************************
349 ** 函数名:HEX_NUM_Display(long int Num,uchar Bit)********************************
350 ** 功能:16进制数值显示函数*******************************************************
351 ** 入口参数:unsigned long Num,uchar Bite( Num 需要显示的数值(最长8位)********
352 *****************************************( Bite 有效显示位数 )****************
353 ** 出口参数:无 ******************************************************************
354 **********************************************************************************/
355 /*void HEX_NUM_Display(unsigned long Num,uchar Bite,uchar x,uchar y) //这里的形参Num类型一定要为
356 //unsigned long,不然不会显示
357
358 {
359 uchar a=0,i=0;
360 for(a=8-Bite;a<8;a++)
361 {
C51 COMPILER V7.06 MAIN 06/08/2007 16:16:19 PAGE 7
362
363 LCDDisplaybuffer[i]=CHR[(Num<<(a<<2))>>28];
364 i++;
365 }
366 LCD_write_string(x,y,LCDDisplaybuffer);
367 }
368
369 /************************ LCD End **************************************************/
370
371
372 /**************************Other Part************************************************/
373
374
375 /*******************key******************************/
376 #define KEY P1
377
378 bit judge_hitkey();
379 uchar scan_key();
380
381 bit judge_hitkey()
382 {uchar scancode,keycode;
383 1 scancode=0x0f;
384 1 KEY=scancode;
385 1 keycode=KEY;
386 1 if(keycode==0x0f)
387 1 return(0);
388 1 else
389 1 return(1);
390 1
391 1 }
392
393
394
395 uchar scan_key()
396 {uchar scancode,keycode;
397 1 scancode=0xef;
398 1 while(scancode!=0xff)
399 1 { KEY=scancode;
400 2 keycode=KEY;
401 2 if((keycode&0x0f)!=0x0f)
402 2 break;
403 2 scancode=(keycode<<1)|0x0f;
404 2 }
405 1
406 1
407 1 keycode=~keycode;
408 1 return(keycode);
409 1 }
410 /*********************************key over****************************/
411
412 /**************************message************************************/
413
414 void message()
415 {delay_nms(100);
416 1 LCD_write_string(0,0,cd);
417 1 }
418
419 /*************************led******************************************/
420
421 void led()
422 {LCD_init();
423 1 LCD_write_string(0,0,"8LED");
C51 COMPILER V7.06 MAIN 06/08/2007 16:16:19 PAGE 8
424 1 led_data_out=led_data;
425 1 }
426 /*************************over******************************************/
427
428 /*************************adc******************************************/
429 void adc()
430 { float v_d;
431 1 v_d=(ad0_data[1]+(ad0_data[0]&0x03)*256)/1024.0*5;
432 1 LCD_write_string(0,0,"A0");
433 1 FLOAT_NUM_Display(v_d,4,0);
434 1 LCD_write_char( 10,0,'V');
435 1 v_d=(ad1_data[1]+(ad1_data[0]&0x03)*256)/1024.0*5;
436 1 LCD_write_string(0,0,"A1");
437 1 FLOAT_NUM_Display(v_d,4,0);
438 1 LCD_write_char( 10,0,'V');
439 1 }
440 /*************************adc over******************************************/
441
442
443
444
445 /*********************************************************************/
446 void data_display()
447 {uchar abc;
448 1 LCD_init();
449 1 LCD_write_string(0,0,"hello!");
450 1 abc=control_data&0xf0;
451 1 while(scan_key()!=0x28)
452 1
453 1 switch(abc)
454 1 {case 0x50:led();
455 2 break;
456 2 case 0x60:message();
457 2 break;
458 2 case 0x0a0:adc();
459 2 break;
460 2 default:break;
461 2 }
462 1 }
463 /******************************************************************/
464
465
466 /********************set_frequency*********/
467 sbit CLK=P2^3;
468 sbit Din=P2^2;
469 sbit ADin=P2^1;
470 sbit ENB=P2^0;
471
472
473 void MC145162_Reset(unsigned int Ctrl_Data,unsigned long int Ref_Data,unsigned int Tx_Count,unsigned int R
-x_Count)
474 {
475 1 unsigned int i;
476 1 unsigned long int mask;
477 1 ENB=0;
478 1 CLK=0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -