📄 lcd.lst
字号:
201 2 LCD_Write_Set(yPos + i,0); //Page_LCD[i] i=0 first page i=7 seventh page
202 2 // LCD_Write_Set((xPos>>4)&0x0F|0x10,0); //set col address msb
203 2 LCD_Write_Set(xPos,0); //set col address lsb
204 2 }
205 1 }
206
207 /*--------------------------------------------------------------
208 //清除一行子程序
209 ------------------------------------------------------------*/
210 void Clear_H_LCD(unsigned char H)
211 {
212 1 unsigned char i,j;
213 1 Set_xyPos_LCD(0, H << 1 ); //set col address lsb
214 1 for( i = 0;i < 2;i++ )
215 1 {
216 2 for( j = 0;j < 61;j++ )
217 2 LCD_Write_Data( 0x55,0 );
218 2 Set_xyPos_LCD(0, (H << 1) + 1); //set col address lsb
219 2 }
220 1 Set_xyPos_LCD(61, H << 1 ); //set col address lsb
221 1 for( i = 0;i < 2;i++ )
222 1 {
223 2 for( j = 0;j < 61;j++ )
224 2 LCD_Write_Data( 0x55,1 );
225 2 Set_xyPos_LCD(61, (H << 1) + 1); //set col address lsb
226 2 }
227 1 }
228
229
230 /*---------------------------------------------------------------------------------
231 //延时1MS子程序
232 ---------------------------------------------------------------------------------*/
233 void Delay_xMs(unsigned int xMs)
234 {
235 1 unsigned int i,j;
236 1 for(i=0;i<xMs;i++)
237 1 {
238 2 for(j=0;j<500;j++)
239 2 ;
240 2 }
241 1 }
C51 COMPILER V7.06 LCD 03/13/2005 21:02:58 PAGE 5
242
243 /*---------------------------------------------------------------------------------
244 //在X,Y处显示一个16*8的西文sData (0---d)
245 ---------------------------------------------------------------------------------*/
246 void Show_XW_LCD(unsigned char xPos,unsigned char yPos,unsigned char sData)
247 {
248 1 bit F;
249 1 unsigned int nTmp;
250 1 unsigned char j,x,y;
251 1 x = xPos;
252 1 y = yPos;
253 1 nTmp = sData * 16;
254 1 for ( j = 0;j < 16;j+=2 )
255 1 {
256 2 Set_xyPos_LCD(x,y);
257 2 F = 0;
258 2 if ( x > 60 )
259 2 F = 1;
260 2 LCD_Write_Data(Large_DianZen[nTmp + j],F);
261 2 x++;
262 2 }
263 1
264 1 y++;
265 1 x = xPos;
266 1 for ( j = 1;j < 16;j+=2 )
267 1 {
268 2 Set_xyPos_LCD(x,y);
269 2 F = 0;
270 2 if ( x > 60 )
271 2 F = 1;
272 2 LCD_Write_Data(Large_DianZen[nTmp + j],F);
273 2 x++;
274 2 }
275 1 }
276
277 /*---------------------------------------------------------------------------------
278 //在X,Y处显示一个16*16的汉字
279 ---------------------------------------------------------------------------------*/
280 void Show_HZ_LCD ( unsigned char xPos, unsigned char yPos,unsigned char sData )
281 {
282 1 bit F;
283 1 unsigned int nTmp;
284 1 unsigned char j,x,y;
285 1 x = xPos;
286 1 y = yPos;
287 1 nTmp = sData * 32;
288 1 for ( j = 0;j < 32;j+=2 )
289 1 {
290 2 Set_xyPos_LCD(x,y);
291 2 F = 0;
292 2 if ( x > 60 )
293 2 F = 1;
294 2 LCD_Write_Data(HanZi[nTmp + j],F);
295 2 x++;
296 2 }
297 1
298 1 y++;
299 1 x = xPos;
300 1 for ( j = 1;j < 32;j+=2 )
301 1 {
302 2 Set_xyPos_LCD(x,y);
303 2 F = 0;
C51 COMPILER V7.06 LCD 03/13/2005 21:02:58 PAGE 6
304 2 if ( x > 60 )
305 2 F = 1;
306 2 LCD_Write_Data(HanZi[nTmp + j],F);
307 2 x++;
308 2 }
309 1 }
310
311 /*-------------------------------------------------------------------------------------
312 预先定义内容表为LCD_Show_Tab[]
313 汉字表为HanZi[]
314 大西文表为Large_DianZen[]
315 与90H的分界碰到90H则是汉字,否则是西文
316 --------------------------------------------------------------------------------------*/
317 void Print_LCD ( unsigned char xPos, unsigned char yPos,int nSentenceID )
318 {
319 1 unsigned char i,j=0;
320 1 unsigned char Temp; //存放要显示的数据
321 1
322 1 for(i=0;i<16;i++)
323 1 {
324 2 Temp=LCD_Show_Tab[nSentenceID*16+i]; //128 16个西文
325 2 if(Temp==0x90) //汉字
326 2 {
327 3 i++;
328 3 Temp=LCD_Show_Tab[nSentenceID*16+i];
329 3 Show_HZ_LCD(xPos+j,yPos,Temp); //write 1个汉字子程序
330 3 j+=16;
331 3 }
332 2 else //西文
333 2 {
334 3 Temp= LCD_Show_Tab[nSentenceID*16+i];
335 3 Show_XW_LCD(xPos+j,yPos,Temp); //write 1个西文子程序
336 3 j+=8;
337 3 }
338 2 }
339 1 }
340
341
342 /*-----------------------------------------------
343 LCD初始化子程序:
344 ------------------------------------------------*/
345 void LCD_Init( void )
346 {
347 1 LCD_ENA1 = 0;
348 1 LCD_ENA2 = 0;
349 1 // LCD_Write_Set( 0x00,0 );
350 1 LCD_Write_Set( 0xE2,0 );
351 1 // LCD_Write_Set( 0xAE,0 );
352 1 LCD_Write_Set( 0xC0,0 );
353 1 LCD_Write_Set( 0xB8,0 );
354 1 LCD_Write_Set( 0xA0,0 );
355 1 LCD_Write_Set( 0xA4,0 );
356 1 LCD_Write_Set( 0xA9,0 );
357 1 LCD_Write_Set( 0xEE,0 );
358 1
359 1 LCD_Write_Set( 0xE2,1);
360 1 // LCD_Write_Set( 0xAE,1 );
361 1 LCD_Write_Set( 0xC0,1 );
362 1 LCD_Write_Set( 0xB8,1 );
363 1 LCD_Write_Set( 0xA0,1 );
364 1 LCD_Write_Set( 0xA4,1 );
365 1 LCD_Write_Set( 0xA9,1 );
C51 COMPILER V7.06 LCD 03/13/2005 21:02:58 PAGE 7
366 1 LCD_Write_Set( 0xEE,1 );
367 1 LCD_Write_Set( 0xAF,0 );
368 1 LCD_Write_Set( 0xAF,1 );
369 1 Delay_xMs( 10 );
370 1 }
371
372 /*----------------------------------------------
373 主程序
374 功能:循环显示"欢迎使用单片机开发板祝你早日
375 成为单片机高手沈氏工作室贺"
376 ------------------------------------------------*/
377 void main()
378 {
379 1 unsigned char i;
380 1 LCD_Init();
381 1 Clear_H_LCD( 0 ); //清除第一行
382 1 Clear_H_LCD( 1 ); //清除第二行
383 1 while(1)
384 1 {
385 2 for( i = 0;i < 5 ;i+=2 )
386 2 {
387 3 Print_LCD ( 0,0,i );//在第一行上显示汉字
388 3 Print_LCD ( 0,2,i+1 );//在第二行上显示汉字
389 3 Delay_xMs(1000); //延时一段时间
390 3 }
391 2 }
392 1 }
393
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 779 ----
CONSTANT SIZE = 1232 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 14
IDATA SIZE = ---- ----
BIT SIZE = ---- 4
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -