📄 new.lst
字号:
220 1 }
221
222 void SEND_1(void)
223 {
224 1 /*发送1,在SCL为高电平时使SDA信号为高*/
225 1 SDA=1;
226 1 SCL=1;
227 1 Delay2408(Delay2408_TIME);
228 1 SCL=0;
229 1 Delay2408(Delay2408_TIME);
230 1 }
231
232 bit Check_Acknowledge(void)
233 {
234 1 /*发送完一个字节后检验设备的应答信号*/
235 1 SDA=1;
236 1 SCL=1;
237 1 Delay2408(Delay2408_TIME/2);
238 1 F0=SDA;
239 1 Delay2408(Delay2408_TIME/2);
240 1 SCL=0;
241 1 Delay2408(Delay2408_TIME);
242 1 if(F0==1)
243 1 return FALSE;
244 1 return TRUE;
245 1 }
246
247 void WriteI2CByte(unsigned char b)reentrant
248 {
249 1 /*向I2C总线写一个字节*/
250 1 unsigned char i;
251 1 for(i=0;i<8;i++)
252 1 if((b<<i)&0x80)
253 1 SEND_1();
254 1 else
255 1 SEND_0();
256 1 }
257
258 unsigned char ReadI2CByte(void)reentrant
259 {
260 1 /*从I2C总线读一个字节*/
261 1 unsigned char b=0,i;
262 1 for(i=0;i<8;i++)
263 1 {
264 2 SDA=1; /*释放总线*/
C51 COMPILER V8.05a NEW 11/16/2007 20:45:07 PAGE 6
265 2 SCL=1; /*接受数据*/
266 2 Delay2408(10);
267 2 F0=SDA;
268 2 Delay2408(10);
269 2 SCL=0;
270 2 if(F0==1)
271 2 {
272 3 b=b<<1;
273 3 b=b|0x01;
274 3 }
275 2 else
276 2 b=b<<1;
277 2 }
278 1 return b;
279 1 }
280
281 /**********以下为读写24c02的函数***********************************************/
282 void Write_One_Byte(unsigned char addr,unsigned char thedata)
283 {
284 1 bit acktemp=1;
285 1 /*write a byte to mem*/
286 1 I2C_Start();
287 1 WriteI2CByte(0xa0);
288 1 acktemp=Check_Acknowledge();
289 1 WriteI2CByte(addr); /*address*/
290 1 acktemp=Check_Acknowledge();
291 1 WriteI2CByte(thedata); /*thedata*/
292 1 acktemp=Check_Acknowledge();
293 1 I2C_Stop();
294 1 }
295
296 /******************************************************************************/
297 char Read_One_Byte(unsigned char addr)
298 {
299 1 bit acktemp=1;
300 1 unsigned char mydata;
301 1 /*read a byte from mem*/
302 1 I2C_Start();
303 1 WriteI2CByte(0xa0);
304 1 acktemp=Check_Acknowledge();
305 1 WriteI2CByte(addr);/*address*/
306 1 acktemp=Check_Acknowledge();
307 1 I2C_Start();
308 1 WriteI2CByte(0xa1);
309 1 acktemp=Check_Acknowledge();
310 1 mydata=ReadI2CByte();
311 1 acktemp=Check_Acknowledge();
312 1 return mydata;
313 1 I2C_Stop();
314 1 }
315
316 /******************************************************************************/
317 void Delay(int num)//延时函数
318 {
319 1 while(num--) ;
320 1 }
321
322 /*12864driver.c*/
323 /******************************************************************************/
324 void Delay12864(unsigned int t)//
325 {
326 1 unsigned int i,j;
C51 COMPILER V8.05a NEW 11/16/2007 20:45:07 PAGE 7
327 1 for(i=0;i<t;i++)
328 1 {
329 2 for(j=0;j<10;j++);
330 2 }
331 1 }
332
333 /******************************************************************************/
334 void write_com(unsigned char cmdcode)//写命令到LCD
335 {
336 1 Di = 0;
337 1 RW = 0;
338 1
339 1 Lcd_Bus = cmdcode;
340 1 Delay12864(0);
341 1 Enable = 1;
342 1 Delay12864(0);
343 1 Enable = 0;
344 1 }
345
346 /******************************************************************************/
347 void write_data(unsigned char Dispdata)//写数据到LCD
348 {
349 1 Di = 1;
350 1 RW = 0;
351 1
352 1 Lcd_Bus = Dispdata;
353 1 Delay12864(0);
354 1 Enable = 1;
355 1 Delay12864(0);
356 1 Enable = 0;
357 1 }
358
359 /*******************************************************************************/
360 void frame(void)//显示边框
361 {
362 1 unsigned char i;
363 1 Mcs = 1;
364 1 Scs = 1;
365 1 write_com(Page_Add+0);
366 1 write_com(Col_Add+0);
367 1 for(i=0;i<64;i++)
368 1 {
369 2 write_data(0x01);
370 2 }
371 1 write_com(Page_Add+7);
372 1 write_com(Col_Add+0);
373 1 for(i=0;i<64;i++)
374 1 {
375 2 write_data(0x80);
376 2 }
377 1 for(i=0;i<8;i++)
378 1 {
379 2 Mcs=0;
380 2 Scs=1;
381 2 write_com(Page_Add+i);
382 2 write_com(Col_Add+63);
383 2 write_data(0xff);
384 2 Mcs=1;
385 2 Scs=0;
386 2 write_com(Page_Add+i);
387 2 write_com(Col_Add+0);
388 2 write_data(0xff);
C51 COMPILER V8.05a NEW 11/16/2007 20:45:07 PAGE 8
389 2 }
390 1 }
391
392 /******************************************************************************/
393 void Clr_Scr(void)//清除内存
394 {
395 1 unsigned char j,k;
396 1 Mcs=1;Scs=1;
397 1 write_com(Page_Add+0);
398 1 write_com(Col_Add+0);
399 1
400 1 for(k=0;k<8;k++)
401 1 {
402 2 write_com(Page_Add+k);
403 2 write_com(Col_Add+0);
404 2
405 2 for(j=0;j<64;j++)
406 2 {
407 3 write_data(0x00);
408 3 }
409 2 }
410 1 }
411
412 /*******************************************************************************/
413 void Disp_Img(unsigned char code *img)//显示12864图片
414 {
415 1 unsigned char j,k;
416 1 for(k=0;k<8;k++)
417 1 {
418 2 Mcs=1;
419 2 Scs=0;
420 2 Delay(10);
421 2 write_com(Page_Add+k);
422 2 write_com(Col_Add+0);
423 2 for(j=0;j<64;j++)
424 2 {
425 3 write_data(img[k*128+j]);
426 3 }
427 2 Mcs=0;
428 2 Scs=1;
429 2 Delay(10);
430 2 write_com(Page_Add+k);
431 2 write_com(Col_Add+0);
432 2 for(j=64;j<128;j++)
433 2 {
434 3 write_data(img[k*128+j]);
435 3 }
436 2 }
437 1 }
438
439 /*******************************************************************************/
440 void Disp_Chinese(unsigned char pag,unsigned char col, char code *hzk)
441 { //指定位置显示汉字16*16
442 1 unsigned char j=0,i=0;
443 1
444 1 for(j=0;j<2;j++)
445 1 {
446 2 write_com(Page_Add+pag+j);
447 2 write_com(Col_Add+col);
448 2 for(i=0;i<16;i++)
449 2 {
450 3 write_data(hzk[16*j+i]);
C51 COMPILER V8.05a NEW 11/16/2007 20:45:07 PAGE 9
451 3 }
452 2 }
453 1 }
454
455 /*******************************************************************************/
456 void Disp_Digit(unsigned char pag,unsigned char col, unsigned char code *hzk)
457 { //指定位置显示字母或数字8*16
458 1 unsigned char j=0, i=0;
459 1
460 1 for(j=0;j<2;j++)
461 1 {
462 2 write_com(Page_Add+pag+j);
463 2 write_com(Col_Add+col);
464 2 for(i=0;i<8;i++)
465 2 {
466 3 write_data(hzk[8*j+i]);
467 3 }
468 2 }
469 1 }
470
471 /********************************************************************************/
472 void Init_lcd(void)//初始化LCD屏
473 {
474 1 Lcd_Rst=0;
475 1 Delay12864(100);
476 1 Lcd_Rst=1;
477 1 Delay12864(100);
478 1
479 1 Mcs=1; Scs=1;
480 1
481 1 Delay12864(100);
482 1 write_com(Disp_Off);
483 1 write_com(Page_Add+0);
484 1 write_com(Start_Line+0);
485 1 write_com(Col_Add+0);
486 1 write_com(Disp_On);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -