📄 1602lcd-2.lst
字号:
233 float VoltageSurvey(unsigned char AD_ChannelNumber)
234 {
235 1 float SurveyVoltage; //测量到的电压值
236 1 float plus_ch; //通道增益
237 1
238 1 switch(AD_ChannelNumber)
239 1 {
C51 COMPILER V7.10 1602LCD_2 03/26/2006 15:26:39 PAGE 5
240 2 case 0: plus_ch = PLUS_CH0;break;
241 2 case 1: plus_ch = PLUS_CH1;break;
242 2 case 2: plus_ch = PLUS_CH2;break;
243 2 case 3: plus_ch = PLUS_CH3;break;
244 2 case 4: plus_ch = PLUS_CH4;break;
245 2 case 5: plus_ch = PLUS_CH5;break;
246 2 case 6: plus_ch = PLUS_CH6;break;
247 2 case 7: plus_ch = PLUS_CH7;break;
248 2 default:break;
249 2 }
250 1
251 1 SurveyVoltage = ADC0809test(AD_ChannelNumber);
252 1 SurveyVoltage = (SurveyVoltage / 256) * REF_Voltage * plus_ch;
253 1 return(SurveyVoltage);
254 1 }
255
256
257
258
259
260
261
262
263 /*
264 //########################################################################################################
-###############################
265 //########################################################################################################
-###############################
266 LCD驱动部分
267 */
268
269
270
271 //写数据
272 void WriteDataLCM(unsigned char WDLCM)
273 {
274 1 ReadStatusLCM(); //检测忙
275 1 LCM_Data = WDLCM;
276 1 LCM_RS = 1;
277 1 LCM_RW = 0;
278 1 LCM_E = 0; //若晶振速度太高可以在这后加小的延时
279 1 LCM_E = 0; //延时
280 1 LCM_E = 1;
281 1 }
282
283 //写指令
284 void WriteCommandLCM(unsigned char WCLCM,BuysC) //BuysC为0时忽略忙检测
285 {
286 1 if (BuysC) ReadStatusLCM(); //根据需要检测忙
287 1 LCM_Data = WCLCM;
288 1 LCM_RS = 0;
289 1 LCM_RW = 0;
290 1 LCM_E = 0;
291 1 LCM_E = 0;
292 1 LCM_E = 1;
293 1 }
294
295 //读数据
296 unsigned char ReadDataLCM(void)
297 {
298 1 LCM_RS = 1;
299 1 LCM_RW = 1;
C51 COMPILER V7.10 1602LCD_2 03/26/2006 15:26:39 PAGE 6
300 1 LCM_E = 0;
301 1 LCM_E = 0;
302 1 LCM_E = 1;
303 1 return(LCM_Data);
304 1 }
305
306 //读状态
307 unsigned char ReadStatusLCM(void)
308 {
309 1 LCM_Data = 0xFF;
310 1 LCM_RS = 0;
311 1 LCM_RW = 1;
312 1 LCM_E = 0;
313 1 LCM_E = 0;
314 1 LCM_E = 1;
315 1 while (LCM_Data & Busy); //检测忙信号
316 1 return(LCM_Data);
317 1 }
318
319 void LCMInit(void) //LCM初始化
320 {
321 1 LCM_Data = 0;
322 1 WriteCommandLCM(0x38,0); //三次显示模式设置,不检测忙信号
323 1 Delay5Ms();
324 1 WriteCommandLCM(0x38,0);
325 1 Delay5Ms();
326 1 WriteCommandLCM(0x38,0);
327 1 Delay5Ms();
328 1
329 1 WriteCommandLCM(0x38,1); //显示模式设置,8位数据,2行显示,5*7点阵,开始要求每次检测忙信号
330 1 WriteCommandLCM(0x08,1); //关闭显示,关屏幕,关光标,关闪烁
331 1 WriteCommandLCM(0x01,1); //显示清屏,光标归位,地址归位
332 1 WriteCommandLCM(0x06,1); // 显示光标移动设置,每显示一个地址加1,不整体移位.
333 1 WriteCommandLCM(0x0c,1); // 显示开及光标设置,开屏幕,关光标,关闪烁.
334 1 }
335
336 //按指定位置显示一个字符
337 //送入该字符所对应的ASCII码
338 void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData)
339 {
340 1 Y &= 0x1;
341 1 X &= 0xF; //限制X不能大于15,Y不能大于1
342 1 if (Y) X |= 0x40; //当要显示第二行时地址码+0x40;
343 1 X |= 0x80; //算出指令码
344 1 WriteCommandLCM(X, 1); //发命令字
345 1 WriteDataLCM(DData); //发数据
346 1 }
347
348 //按指定位置显示一串字符
349 //由于*DData是字符型指针变量,所以在提取该指针变量所指向的字符时得到的就是该字符的ASCII码.
350 void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData)
351 {
352 1 unsigned char ListLength;
353 1
354 1 ListLength = 0;
355 1 Y &= 0x1;
356 1 X &= 0xF; //限制X不能大于15,Y不能大于1
357 1 while (DData[ListLength]>0x19) //若到达字串尾则退出
358 1 {
359 2 if (X <= 0xF) //X坐标应小于0xF
360 2 {
361 3 DisplayOneChar(X, Y, DData[ListLength]); //显示单个字符
C51 COMPILER V7.10 1602LCD_2 03/26/2006 15:26:39 PAGE 7
362 3 ListLength++;
363 3 X++;
364 3 }
365 2 }
366 1 }
367
368 /**********************************************************
369 在送入地址上显示一个浮点数.
370 输入:地址,浮点数,小数点位数.
371 函数设计允许最大不超过100的浮点数,小数位数选择:0,1,2
372 **********************************************************/
373 void DisplayNumberFloat(unsigned char X, unsigned char Y,float Number,unsigned char point_number)
374 {
375 1 unsigned char number_10bit; //用于暂存10位数据的变量
376 1 unsigned char number_1bit; //用于暂存个位数据的变量
377 1 unsigned char number_point_1; //用于保存第一位小数
378 1 unsigned char number_point_2; //用于保存第二位小数
379 1 unsigned int int_number; //用于将输入的浮点型数字转换为整形
380 1
381 1
382 1 if((Number < 100) && (point_number <= 2))
383 1 {
384 2 Y &= 0x1;
385 2 X &= 0xF; //限制X不能大于15,Y不能大于1
386 2 if (Y) X |= 0x40; //当要显示第二行时地址码+0x40;
387 2 X |= 0x80; //算出指令码
388 2 WriteCommandLCM(X, 1); //写入地址
389 2
390 2 switch(point_number)
391 2 {
392 3 case 0:
393 3 {
394 4 int_number = (unsigned int)Number; //取整
395 4 number_10bit = (int_number / 10); //取商,取出第一位数字
396 4 number_1bit = (int_number % 10); //取出第二位数字
397 4 break;
398 4 }
399 3 case 1:
400 3 {
401 4 int_number = (unsigned int)(Number * 10); //取整,化掉小数后一位小数
402 4 number_10bit = (int_number / 100); //取商,取出第一位数字
403 4 number_1bit = (int_number % 100 / 10); //取出第二位数字
404 4 number_point_1 = (int_number % 10); //取出第三位数字
405 4 break;
406 4 }
407 3 case 2:
408 3 {
409 4 int_number = (unsigned int)(Number * 100); //取整,化掉小数后两位小数
410 4 number_10bit = (int_number / 1000); //取商,取出第一位数字
411 4 number_1bit = (int_number % 1000 / 100); //取出第二位数字
412 4 number_point_1 = (int_number % 100 / 10); //取出第二位数字
413 4 number_point_2 = (int_number % 10); //取出第三位数字
414 4 break;
415 4 }
416 3 default:break;
417 3 }
418 2
419 2 if(number_10bit != 0)
420 2 {
421 3 WriteDataLCM(number_10bit + 0x30); //写入第一个字符
422 3 }
423 2 WriteDataLCM(number_1bit + 0x30); //写入第二个字符
C51 COMPILER V7.10 1602LCD_2 03/26/2006 15:26:39 PAGE 8
424 2 if(point_number > 0)
425 2 {
426 3 WriteDataLCM(0x2E); //写入小数点
427 3 WriteDataLCM(number_point_1 + 0x30); //写入第一位小数
428 3 }
429 2 if(point_number > 1)
430 2 {
431 3 WriteDataLCM(number_point_2 + 0x30); //写入第二位小数
432 3 }
433 2
434 2 }
435 1 }
436
437
438
439 //5ms延时
440 void Delay5Ms(void)
441 {
442 1 unsigned int TempCyc = 5552;
443 1 while(TempCyc--);
444 1 }
445
446 //400ms延时
447 void Delay400Ms(void)
448 {
449 1 unsigned char TempCycA = 5;
450 1 unsigned int TempCycB;
451 1 while(TempCycA--)
452 1 {
453 2 TempCycB=7269;
454 2 while(TempCycB--);
455 2 };
456 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1281 ----
CONSTANT SIZE = 78 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 33
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 + -