📄 ad.lst
字号:
219 2 LCD_en_dat(*s);
220 2 s++;
221 2 X++;
222 2 if(X==16) //当第一行显示满时,Y^=1,取另一行
223 2 {
224 3 X=0;
225 3 Y^=1;
226 3 }
227 2
228 2 }
229 1
230 1 }
231
232
233 /************LCD模块初始化******************************************************/
234 void LCD_init(void)
235 {
236 1 LCD_en_command(0x01);//清屏 (得两次清屏)
237 1 LCD_en_command(0x38);//设定双行显示,字形5*7点阵,8位数据转移
238 1 LCD_en_command(0x0c);//开显示,光标不显示,不闪烁
239 1 LCD_en_command(0x06);//右移光标(光标加1,字符不动)
240 1 LCD_en_command(0x01);//清屏
C51 COMPILER V7.06 AD 06/08/2007 19:10:53 PAGE 5
241 1 }
242
243
244 /*********************************************************************************
245 ** 函数名:void FLOAT_NUM_Display(float dd)***************************************
246 ** 功能:显示浮点型数字(6位有效数字)********************************************
247 ** 入口参数:float dd (dd 为调用这个子程序时传入的数据)*************************
248 ** 出口参数:无 ******************************************************************
249 **注意各变量的数据类型,数的有效范围***********************************************
250 **实现方式:从小数点第六位 起往左逆向取数字,存入数组,再正向输出7位数字**********
251 **该函数的缺陷是:小数部分最多显示六位,如0.000020**************************************/
252
253
254 void FLOAT_NUM_Display(float dd,uchar x,uchar y)
255 {
256 1
257 1 uchar i,j,k=0;
258 1 frequency=dd*1000000;//取小数点后六位
259 1 if(frequency>=10000000) //整数部分不为0
260 1 {
261 2 for (i=0;i<16;i++)
262 2 {
263 3 if(i==6)
264 3 {
265 4 LCDDisplaybuffer[i]='.';
266 4 }
267 3 else
268 3 {
269 4 LCDDisplaybuffer[i]=CHR[frequency%10];
270 4 frequency/=10;
271 4 }
272 3
273 3 if(frequency==0)
274 3 {
275 4 i++;
276 4 break;
277 4 }
278 3 }
279 2 }
280 1 else //整数部分为0
281 1 {
282 2 for (i=0;i<8;i++)
283 2 {
284 3 if(i==6)
285 3 {
286 4 LCDDisplaybuffer[i]='.';
287 4 }
288 3 else
289 3 {
290 4 LCDDisplaybuffer[i]=CHR[frequency%10];
291 4 frequency/=10;
292 4 }
293 3 }
294 2 }
295 1
296 1 for (j=0;j<7;j++) //可以通过改变j的范围来增减显示的位数
297 1 {
298 2 LCD_write_char(x++,y,LCDDisplaybuffer[i-1]);
299 2 i--;
300 2
301 2 }
302 1
C51 COMPILER V7.06 AD 06/08/2007 19:10:53 PAGE 6
303 1
304 1
305 1 }
306
307 /*********************************************************************************
308 ** 函数名:INT_NUM_Display(unsigned int Num)**************************************
309 ** 功能:显示整数*****************************************************************
310 ** 入口参数:unsigned int Num (Num 为调用这个子程序时传入的数据)****************
311 *********** 这里可以通过改变div的值来增减显示的位数 ******************************
312 ******这个例子显示5位数***********************************************************
313 ** 出口参数:无 ******************************************************************
314 **注意各变量的数据类型,根据数的范围来改变形参的数据类型**************************
315 **********************************************************************************/
316 void INT_NUM_Display(unsigned int Num,uchar x,uchar y)
317 {
318 1 uchar i;
319 1 unsigned int div=10000;
320 1 for (i=0;i<8;i++)
321 1 {
322 2 LCDDisplaybuffer[i]=CHR[Num/div];
323 2 Num%=div;
324 2 div/=10;
325 2 }
326 1
327 1 LCD_write_string(x,y,LCDDisplaybuffer);
328 1
329 1 }
330
331 /*********************************************************************************
332 ** 函数名:HEX_NUM_Display(long int Num,uchar Bit)********************************
333 ** 功能:16进制数值显示函数*******************************************************
334 ** 入口参数:unsigned long Num,uchar Bite( Num 需要显示的数值(最长8位)********
335 *****************************************( Bite 有效显示位数 )****************
336 ** 出口参数:无 ******************************************************************
337 **********************************************************************************/
338 void HEX_NUM_Display(unsigned long Num,uchar Bite,uchar x,uchar y) //这里的形参Num类型一定要为
339 //unsigned long,不然不会显示
340
341 {
342 1 uchar a=0,i=0;
343 1 for(a=8-Bite;a<8;a++)
344 1 {
345 2
346 2 LCDDisplaybuffer[i]=CHR[(Num<<(a<<2))>>28];
347 2 i++;
348 2 }
349 1 LCD_write_string(x,y,LCDDisplaybuffer);
350 1 }
351
352 /************************ LCD End **************************************************/
353
354
355 /**************************Other Part************************************************/
356
357
358
359
360 sbit adclk = P1^0;
361 sbit adadr = P1^1;
362 sbit adout = P1^2;
363 sbit adcs = P1^3;
364
C51 COMPILER V7.06 AD 06/08/2007 19:10:53 PAGE 7
365 unsigned int tlc1543(unsigned char port)
366 {
367 1 unsigned int data ad;
368 1 unsigned int data i;
369 1 unsigned char data al=0,ah=0;
370 1 ad=0x0000;
371 1 adclk=0;
372 1 adcs=0;
373 1 port<<=4;
374 1 for (i=0;i<4;i++) //把通道号打入1543
375 1 {
376 2 adadr=(bit)(port&0x80);
377 2 adclk=1;
378 2 adclk=0;
379 2 port<<=1;
380 2 }
381 1 for (i=0;i<6;i++) //填充6个CLOCK
382 1 {
383 2 adclk=1;adclk=0;
384 2 }
385 1
386 1 adcs=1;
387 1 _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
388 1 _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
389 1 _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
390 1 _nop_();_nop_();_nop_();
391 1 adcs=0; //等待AD转换
392 1
393 1 _nop_();_nop_();_nop_();
394 1
395 1 for (i=0;i<2;i++) //取D9,D8
396 1 {
397 2 //adadr=1;
398 2 adclk=1;
399 2 ah<<=1;
400 2 if (adout) ah|=0x01;
401 2 adclk=0;
402 2 }
403 1 for (i=0;i<8;i++) //取D7--D0
404 1 {
405 2 adout=1;
406 2 adclk=1;
407 2 al<<=1;
408 2 if (adout) al|=0x01;
409 2 adclk=0;
410 2 }
411 1
412 1 adcs=1;
413 1 ad=ah*256;
414 1 ad+=al;
415 1 return (ad);
416 1 }
417 void mian()
418 {unsigned int data ad;
419 1 float ad_data;
420 1 LCD_init();
421 1 while(1)
422 1 {
423 2 ad=tlc1543(0x00);
424 2 ad_data=(ad/1024.0)*5;
425 2 LCD_write_string(3,0,"NO.1");
426 2 FLOAT_NUM_Display(ad_data,7,0);
C51 COMPILER V7.06 AD 06/08/2007 19:10:53 PAGE 8
427 2 }
428 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 888 ----
CONSTANT SIZE = 5 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 63 30
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -