📄 12864.lst
字号:
208 1 SetLine(lin);
209 1 SetColumn(column<<3);//column*8
210 1 for(i=0;i<8;i++) WriteByte(ASCII816[address+i] ); //Y地址自动加1,不用程序控制。如果页地址要变换,才用在程
-序里体现。
211 1 }
212 /*--------------------------------------------------------------------------------------------------*/
C51 COMPILER V7.09 12864 08/06/2007 14:13:53 PAGE 5
213 //显示8*6点阵
214 //旋转90度:字模被竖着切分
215 //lin:行(0-7), column: 列(0-15)
216 //address : 字模区首地址
217 void Show86(unsigned char lin,unsigned char column,unsigned int address)
218 { unsigned char i;
219 1 if(column>16) {return;}
220 1 if(column<8) SelectScreen(2); //如果列数<8(0,1,2,3,4,5,6,7)则写在第二屏上
221 1 else {
222 2 SelectScreen(1); //否则 (8,9,10,11,12,13,14,15)写在第一屏上
223 2 column=column & 0x07; //防止越界
224 2 }
225 1 SetLine(lin);
226 1 SetColumn(column*6);//column*8
227 1 for(i=0;i<6;i++) WriteByte(ASCII816[address+i] ); //Y地址自动加1,不用程序控制。如果页地址要变换,才用在程
-序里体现。
228 1 }
229 /*------------------------------------------------------------------------------------------------*/
230 //显示8*16字符
231 //旋转90度:字模被竖着切分
232 //lin:行(0-3), column: 列(0-15)
233 //character:字符代码(标准ASCII码)
234 void ShowChar(unsigned char lin,unsigned char column,unsigned char character)
235 { lin=lin<<1;
236 1 Show88(lin ,column,character );
237 1 Show88(lin+1,column,character+8 );//页地址选择。
238 1 }
239 //显示0~99数字,主要是为进位考虑的
240 //旋转90度:字模被竖着切分
241 //lin:行(0-3), column: 列(0-15)
242 void ShowNum(unsigned char lin,unsigned char column,unsigned char num)
243 { unsigned char tmp;
244 1 if((num&0x0f)>9)
245 1 num=num+6;
246 1 tmp=(num>>4)&0x0f;
247 1 ShowChar(lin,column,tmp*16);//高位
248 1 tmp=num&0x0f;
249 1 ShowChar(lin,column+1,tmp*16);//低位
250 1 }
251 //显示0~99数字,输入为正经的十六进制数字
252 //旋转90度:字模被竖着切分
253 //lin:行(0-3), column: 列(0-15)
254 void ShowNum2(unsigned char lin,unsigned char column,unsigned char num)
255 { unsigned char tmp;
256 1 tmp=num/10;
257 1 ShowChar(lin,column,tmp*16);//高位
258 1 tmp=num%10;
259 1 ShowChar(lin,column+1,tmp*16);//低位
260 1 }
261 //显示6*16字符
262 //旋转90度:字模被竖着切分
263 //lin:行(0-3), column: 列(0-15)
264 //character:字符代码(标准ASCII码)
265 void ShowChar_6(unsigned char lin,unsigned char column,unsigned char character)
266 { lin=lin<<1;
267 1 Show86(lin ,column,character );
268 1 Show86(lin+1,column,character+6 );//页地址选择。
269 1 }
270 //显示一个16*16汉字
271 //旋转90度:字模被竖着切分
272 //lin:行(0-3), column: 列(0-7)
273 //hzcode: 汉字代码(自定义的)
C51 COMPILER V7.09 12864 08/06/2007 14:13:53 PAGE 6
274 //uchar code HZtable
275 void ShowHZ(unsigned char lin,unsigned char column,unsigned int hzcode)
276 {
277 1 lin=lin<<1; //lin*2
278 1
279 1 Show88(lin,column,hzcode);
280 1 Show88(lin,column+1,hzcode+8);
281 1 Show88(lin+1,column,hzcode+16);
282 1 Show88(lin+1,column+1,hzcode+24);
283 1 }
284 //显示一个16*12汉字
285 //旋转90度:字模被竖着切分
286 //lin:行(0-3), column: 列(0-7)
287 //hzcode: 汉字代码(自定义的)
288 //uchar code HZtable
289 void ShowHZ_6(unsigned char lin,unsigned char column,unsigned int hzcode)
290 {
291 1 lin=lin<<1; //lin*2
292 1
293 1 Show86(lin,column,hzcode);
294 1 Show86(lin,column+1,hzcode+6);
295 1 Show86(lin+1,column,hzcode+12);
296 1 Show86(lin+1,column+1,hzcode+18);
297 1 }
298 /*----------------------------------------------------------------------------------------------*/
299 //显示图片
300 //旋转90度 :字模被竖着切分
301 //startline :开始行
302 //startcolumn:开始列
303 //linechar :图片行点除8(图片以8*8点阵为单位)
304 //columnchar :图片列点除8(图片以8*8点阵为单位)
305 //address : 字模区首地址
306 void ShowPicture(unsigned char startline,unsigned char startcolumn,unsigned char linechar,unsigned char co
-lumnchar,unsigned int address)
307 { unsigned char i,j;
308 1 for(i=0;i<columnchar;i++)
309 1 for(j=0;j<linechar;j++)
310 1 Show88(startline+i , startcolumn+j , address+(i*linechar+j)*8 );
311 1 }
312 /*----------------------------------------------------------------------------------------------*/
313 //显示一行字符串(汉字,字母混排,一行16字节)
314 //lin:行
315 //lineheadaddr: 此行汉字代码区首地址
316 void ShowLine(unsigned char lin,unsigned char linehead[])
317 { unsigned char i;
318 1 unsigned char byte;
319 1 unsigned int hzcode;
320 1 for( i=0; i<16; )
321 1 { byte=linehead[i];
322 2 if(byte < 0x80) //字母
323 2 {
324 3 if(i>15) return; //!!编译器有问题,须强制退出
325 3
326 3 ShowChar(lin, i , byte);
327 3 i=i+1;
328 3
329 3 }
330 2 else // byte >= 0x80(汉字)
331 2 {
332 3 if(i>15) return; //!!编译器有问题,须强制退出
333 3
334 3 byte=byte & 0x7f; //最高位置0,即:减去0x8000
C51 COMPILER V7.09 12864 08/06/2007 14:13:53 PAGE 7
335 3 hzcode=(unsigned int)byte<<8; //?? //高8位
336 3 hzcode=hzcode+linehead[i+1]; //加低8位,组合成整型数地址
337 3 ShowHZ( lin,i,hzcode);
338 3 i=i+2;
339 3 }
340 2 }
341 1 }
342 /*----------------------------------------------------------------------------------------------------*/
343 //显示一屏汉字
344 //pageheadaddr:此屏汉字代码地址区首地址
345 void ShowPage(unsigned char pagehead[][16])
346 { unsigned char i;
347 1 for(i=0;i<4;i++) ShowLine(i,pagehead[i]); //1行8个汉字,16字节
348 1 }
349 /*----------------------------------------------------------------------------------------------------*/
350 //读显示数据
351 unsigned char ReadByte()
352 {
353 1 unsigned char dat;
354 1 CheckState();
355 1 di=1; rw=1;
356 1 LCD12864DataPort=0xff;
357 1 en=1; dat=LCD12864DataPort; en=0;
358 1 return(dat);
359 1 }
360
361 /*----------------------------------------------------------------------------------------------------*/
362 //反显一个8*8字块
363 //lin:行(0-3), column: 列(0-7)
364 void ReverseShow88(unsigned char lin,unsigned char column)
365 { unsigned char i;
366 1 unsigned char tab[8];
367 1
368 1 if(column<8) SelectScreen(1); //如果列数<4(0,1,2,3),则写在第一屏上
369 1 else SelectScreen(2); //否则 (4,5,6,7), 写在第二屏上
370 1 //读上部8列
371 1 column=column<<3; //每个方块8*8大小
372 1 SetLine(lin);
373 1 SetColumn(column);
374 1 tab[0]=ReadByte(); //空读!!!!! //?
375 1 for(i=0;i<8;i++) tab[i]=~ReadByte();
376 1 //写回
377 1 SetLine(lin);
378 1 SetColumn(column);
379 1 for(i=0;i<8;i++) WriteByte(tab[i]);
380 1 }
381 /*----------------------------------------------------------------------------------------------------*/
382 /*----------------------------------------------------------------------------------------------------*/
383 //反显一个字符
384 //lin:行(0-4), column: 列(0-15)
385 void ReverseShowChar(unsigned char lin,unsigned char column)
386 { lin=lin<<1;
387 1 ReverseShow88(lin ,column);
388 1 ReverseShow88(lin+1,column);
389 1 }
390 /*----------------------------------------------------------------------------------------------------*/
391 //反显一个汉字
392 //lin:行(0-3), column: 列(0-7)
393 ReverseShowHZ(unsigned char lin,unsigned char column)
394 {
395 1 lin=lin<<1;
396 1 column=column<<1;
C51 COMPILER V7.09 12864 08/06/2007 14:13:53 PAGE 8
397 1 ReverseShow88(lin ,column );
398 1 ReverseShow88(lin ,column+1);
399 1 ReverseShow88(lin+1,column );
400 1 ReverseShow88(lin+1,column+1);
401 1 }
402 /*----------------------------------------------------------------------------------------------------*/
403 //反显一行汉字
404 //lin:行
405 ReverseShow(unsigned char lin)
406 { unsigned char i;
407 1 for(i=0;i<8;i++) ReverseShowHZ(lin,i);
408 1 }
409 /*----------------------------------------------------------------------------------------------------*/
410 void InitLCD() //初始化LCD
411 { unsigned char i=250; //延时
412 1 while(i--);
413 1
414 1 //reset=0;//复位
415 1 //reset=1;
416 1 SelectScreen(0);
417 1 SetOnOff(0); //关显示
418 1
419 1 ClearScreen(1);//清屏
420 1 ClearScreen(2);
421 1
422 1 SelectScreen(0);
423 1 SetOnOff(1); //开显示
424 1 SelectScreen(1);
425 1 SetStartLine(0); //开始行:0
426 1 }
427 /*----------------------------------------------------------------------------------------------------*/
428
429 void Reset() //液晶复位
430 {
431 1 //reset 低复位 _|-
432 1 reset=0;
433 1 _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
434 1 reset=1;
435 1
436 1 //全屏
437 1 cs1=0;
438 1 _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
439 1 cs2=0;
440 1 _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
441 1 SendCommandToLCD(0x3F);
442 1
443 1 }
C51 COMPILATION COMPLETE. 0 WARNING(S), 27 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -