📄 lcd.lst
字号:
211 }
212 */
213 /********************************************************************
214 ------图形界面初始化子程序----------------------------------------------
215 ********************************************************************/
216 /*void LCD_GRAPH_CLEAR(void)
217 {
218 unsigned char i,j;
219 for(i=0;i<0x20;i++)
220 {
221
222 for(j=0;j<0x10;j++)
223 {
224 LCD_WriteCommand(0x80+i);
225 LCD_WriteCommand(0x80+j);
226 //Delay1ms(1);
227 _nop_();
228 LCD_WriteData(0x00);
229 LCD_WriteData(0x00);
230 }
231 }
232
233 } */
234
235 /********************************************************************
236 ------向LCD初始化子程序----------------------------------------------
237 *********************************************************************
238 说明:入口参数:无
239 出口参数:无
240 *********************************************************************/
241 void LCD_Init(void) //初始化LCD
C51 COMPILER V8.02 LCD 07/21/2008 09:40:00 PAGE 5
242 {
243 1 Delay1ms(120);
244 1 FUNCTION_BASIC(); //基本指令动作
245 1 Delay1us(300);
246 1 FUNCTION_BASIC();
247 1 Delay1us(120);
248 1 LCD_DISP_ON(); //开显示
249 1 Delay1us(300);
250 1 LCD_CLEAR(); //清屏
251 1 Delay1ms(40);
252 1 LCD_ENTRYMODE_INC(); //光标移动方式为增加
253 1 }
254
255
256 /**************************************************************************
257 ------坐标变换子程序-------------------------------------------------------
258 ***************************************************************************
259 说明:入口参数:坐标,坐标
260 出口参数:成功与否
261 **************************************************************************/
262 unsigned char LCD_Goto(unsigned char x,unsigned char y)
263 {unsigned char cur;
264 1 x=x-1;y=y-1;
265 1 if((y>=0)&&(y<8))
266 1 switch(x)
267 1 {case 0:
268 2 {
269 3 cur=y;
270 3 LCD_SETADD();
271 3 break;
272 3 }
273 2 case 1:
274 2 {
275 3 cur=16+y;
276 3 LCD_SETADD();
277 3 break;}
278 2 case 2:
279 2 {
280 3 cur=8+y;
281 3 LCD_SETADD();
282 3 break;
283 3 }
284 2 case 3:
285 2 {
286 3 cur=24+y;
287 3 LCD_SETADD();
288 3 break;
289 3 }
290 2 default:
291 2 {break;}
292 2 }
293 1 else
294 1 return ERR;
295 1 }
296
297
298 /**************************************************************************
299 ------向指定坐标位置写字符子程序-------------------------------------------------------
300 ***************************************************************************
301 说明:入口参数:坐标,坐标,字符
302 出口参数:成功与否
303 **************************************************************************/
C51 COMPILER V8.02 LCD 07/21/2008 09:40:00 PAGE 6
304
305 /*void LCD_PutChar(unsigned char x,unsigned char y, unsigned char ch)
306 {LCD_Goto(x,y);
307 LCD_WriteData(ch);
308 } */
309
310 /**************************************************************************
311 ------向LCD指定位置写汉字子程序--------------------------------------------
312 ***************************************************************************
313 说明:每次只能写一个汉字
314 入口参数:坐标,坐标,待写字符
315 出口参数:成功与否
316 ***************************************************************************/
317 /*void LCD_PutHZ(unsigned char x,unsigned char y,char *ptr)
318 {
319 LCD_Goto(x,y);
320 LCD_WriteData(*ptr);
321 ptr++;
322 LCD_WriteData(*ptr);
323 }
324 */
325
326 /**************************************************************************
327 ------向LCD指定位置写字符串子程序------------------------------------------
328 ***************************************************************************
329 说明:入口参数:坐标,坐标,待写字符口串
330 出口参数:成功与否
331 ***************************************************************************/
332 void LCD_Printf(unsigned char x,unsigned char y,char *ptr)
333 {unsigned char i;
334 1 LCD_Goto(x,y);
335 1 _nop_();
336 1 for(i=0;*(ptr+i)!=0;i++)
337 1 LCD_WriteData(*(ptr+i));
338 1 }
339 //********************************************************************
340 //向lcd中连续写入半角字符,主要用于十进制数值的字符显示
341 //入口参数:x坐标,y坐标,半角(数字字符)
342 //*********************************************************************
343 /*void LCD_PutData(unsigned char x,unsigned char y, char *ch)
344 {static char chh[2];
345 if (cc==0)
346 {LCD_Goto(x,y);
347 LCD_WriteData(*ch);
348 chh[0]=*ch;
349 cc=1;
350 }
351 else
352 {chh[1]=*ch;
353 cc=0;
354 LCD_Goto(x,y);
355 LCD_WriteData(*chh);
356 LCD_WriteData(*(chh+1));
357 }
358
359 } */
360
361 //***********************************************
362 //显示十进制数字
363 //入口参数:坐标,坐标,显示的数据
364 //由于定义的数据的限制,十进制数据长度最长为9位
365 //****************************
C51 COMPILER V8.02 LCD 07/21/2008 09:40:00 PAGE 7
366 /*void LCD_PutDec(unsigned char x,unsigned char y, unsigned long decdata)
367 {unsigned char dat[Declenth];
368 unsigned char i,j;
369 for(i=0;i<Declenth;i++)
370 {dat[i]=decdata%10;
371 decdata=decdata/10;
372 }
373 for(i=Declenth;i>0;i--)
374 {if(dat[i-1]>0){j=i;break;}
375 }
376 for(i=Declenth;i>j;i--){LCD_PutData(x,(Declenth-i)/2+y,character+11);Delay1ms(1);
377 }
378
379 for(i=j;i>0;i--)
380 {LCD_PutData(x,(Declenth-i)/2+y,character+dat[i-1]);Delay1ms(1);
381 }
382 cc=0;
383
384 } */
385 //*****************************************************************
386 //显示浮点型的十进制数值
387 //入口参数:坐标,坐标,数值
388 //整数和小数部分的长度在lcd.h文件中定义 ,由于定义的数据的限制,小数和整数的长度最长为9位
389 //N=(unsigned long)floatdata;floatdata赋予小数部分的值再将小数点移至右边;Dp=(unsigned long)floatdata;
390 //******************************************
391 /*void LCD_PutFloat(unsigned char x,unsigned char y, float floatdata)
392 {unsigned char datN[FloatNlenth];
393 unsigned char datDp[FloatDplenth];
394 unsigned char datNDp[FloatLenth];
395 unsigned char i,j;
396 unsigned long N;
397 unsigned long Dp;
398
399 N=(unsigned long)floatdata;
400 floatdata=floatdata-N; //取出小数部分
401 for(i=0;i<FloatNlenth;i++) //取出整数部分按由高到低的顺序存入datN[0]到datN[FloatNlenth-1]
402 {datN[FloatNlenth-i-1]=N%10;N=N/10;}
403
404 for(i=0;i<FloatDplenth;i++) //将小数数部分按由高到低的顺序存入datDp[0]到datDp[FloatDplenth-1]
405 {floatdata=10*floatdata;}
406 Dp=(unsigned long)floatdata; //Dp最多为9位
407 for(i=0;i<FloatDplenth;i++){datDp[FloatDplenth-i-1]=Dp%10;Dp=Dp/10;}
408
409 for(i=0;i<FloatNlenth;i++){datNDp[i]=datN[i];}//按整数 小数点 小数 的连接顺序存入datNDp数组中
410 datNDp[i]=10; i=i+1;
411 for(;i<FloatNlenth+FloatDplenth+1;i++)
412 {j=i-FloatNlenth-1;
413 datNDp[i]=datDp[j];
414 }
415
416 //在指定位置依次显示数字
417 j=0;
418 for(i=0;i<FloatNlenth-1;i++){if(datNDp[i]>0){j=i;break;}}
419 if(j>0)
420 {for(i=0;i<j;i++){datNDp[i]=11;}}
421 for(i=1;i<FloatLenth+1;i++){LCD_PutData(x,(i-1)/2+y,character+datNDp[i-1]);Delay1ms(1);}
422 cc=0;//cc=0初始化函数 LCD_PutData;
423
424 }
425 */
426
427 /**************************************************************************
C51 COMPILER V8.02 LCD 07/21/2008 09:40:00 PAGE 8
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -