切换到宽版
  • 3318阅读
  • 3回复

[AVR]给AVR_Transistortester写一个PCF8820 LCD驱动 [复制链接]

上一主题 下一主题
离线windily
 

发帖
68
M币
427
专家
3
粉丝
9
只看楼主 倒序阅读 我要置顶 楼主  发表于: 2018-10-06
原项目网址 https://www.mikrocontroller.net/articles/AVR_Transistortester
上次还说人家没有明显标示开源协议,这次人家都用中文写出来了。。。国内偷东西的那些人注意一点吧。


Hint to Cloners and Sellers


Dear Transistortester Cloners and Sellers!
We don't mind if you produce and sell clones of the Transistortester. Itprovides an inexpensive great little tool for electronics enthusiastsand beginners, but PLEASE note the links to the project's webpage,source repo and documentation. You would add more value by giving usersthat information to be able to update the firmware and to understand allthe features. If you do any modifications to the firmware, please sendus a copy for the repo. And if you would send us your Transistortesterclones, we would be able to keep the firmware as compatible as possible.Don't forget, this an OSHW project!
Best regards,Transistortester team
亲爱的晶体管测试仪复制品生产商和卖家:
如果您生产和销售晶体管测试仪的复制品,我们不会介意。它可以为电子爱好者和初学者提供一个便宜的小工具,但销售时请注意提供项目网页的链结,源代码和文档。通过链结向用户提供能够更新固件和了解所有功能的信息来增加产品的价值。如果您对固件进行任何修改,请向我们发送一份备份。如果您向我们发送晶体管测试仪的样品,我们将能够保持固件尽可能兼容。别忘了,这是一个OSHW(开源硬件)项目!
送上最好的祝福,晶体管测试团队



这个测试仪也是我学习单片机之后做的第一个成品,当时水平有限,所以老老实实用了个1602屏。这会儿想换个大点儿的屏,改造一下。
屏幕用的是1.4寸PCF8820芯片的I2C接口屏,因为AVR_Transistortester已经提供了SSD1306和PCF8814的I2C驱动,所以觉得应该能仿照他们写一个PCF8820的驱动出来。
这里感谢一下提供PCF8820 STC测试程序的不知名网友,正是这些人的共享精神才维持了开源社区的健康发展。


LCD的驱动说简单也很简单,尤其是I2C接口的。第一步是拿到LCD的硬件地址,这个已知是0X3C了。第二步初始化,已经有datasheet和参考的测试程序了。第三步就是根据datasheet,写几条传输数据的命令,这个要跟原来项目兼容,所以第二步第三步的问题就是要看懂源代码。


很遗憾我的知识结构非常老化,当年编程基本都是一个主文件,所有的函数和调用都在一个文件里。现在项目里有上百个文件,看起来真的很吃力。
我不知道专业人士是怎么解决的,只能自己想办法了。
首先装了个IDE(Visual Studio Code),希望能用类似单步调试的方法跟踪一下。不过很遗憾在linux下这个环境跟GCC不太兼容,只能当做源码阅读器来用。
然后就是笨办法了,用grep命令来分别查找I2C, 8814, 1306这几个关键字,看看跟那几个文件相关。
比如I2C查找结果如下,主要在4个文件里面。
> grep -irn 'i2c' *
config.h:24:#define MODE_I2C 2          /* I2C interface for SSD1306 & PCF8820???? */
config.h:621:#elif (LCD_INTERFACE_MODE == MODE_I2C)
config.h:622: /* only two wires are required for the I2C interface: SCL and SDA */
config.h:623: #ifndef LCD_I2C_ADDR
config.h:624:  #define LCD_I2C_ADDR 0x3C                /* SSD1306 controller defines 0x3c or 0x3d (SA0=1) as address */
config.h:627: #if PROCESSOR_TYP == 644  /* mega324/644/1284 with I2C interface */
config.h:634: #elif PROCESSOR_TYP == 1280       /* mega1280/2560 with I2C interface */
config.h:641: #else                             /* mega8/168/328 with I2C interface  */
config.h:647: #endif    /* PROCESSOR_TYP for the I2C Interface */
config.h:800:#else /* (LCD_INTERFACE_MODE != MODE_SPI || MODE_I2C || MODE_ST7920_SERIAL || MODE_ST7108_SERIAL) */
lcd_hw_4_bit.S:78:/* For normal I2C mode use 5us wait time, but SSD1306 is faster, the cycle time is specified as 2.5us. */
lcd_hw_4_bit.S:80:#define WAIT_I2C wait2us    
lcd_hw_4_bit.S:89:      /* SSD1306 controller defines 0x3C or 0x3D (SA0=1) as address LCD_I2C_ADDR */
lcd_hw_4_bit.S:511:#elif (LCD_INTERFACE_MODE == MODE_I2C)
lcd_hw_4_bit.S:515:     ; use I2C as master
lcd_hw_4_bit.S:519:     rcall   WAIT_I2C
lcd_hw_4_bit.S:521:     rcall   WAIT_I2C
lcd_hw_4_bit.S:522:     ldi     preg_1, (LCD_I2C_ADDR*2)
lcd_hw_4_bit.S:523:     rcall   i2c_send        ; write I2C address
lcd_hw_4_bit.S:528:     rcall   i2c_send        ; send command/data
lcd_hw_4_bit.S:530:     rcall   i2c_send        ; write the data
lcd_hw_4_bit.S:532:     rcall   WAIT_I2C
lcd_hw_4_bit.S:534:     rcall   WAIT_I2C
lcd_hw_4_bit.S:536:     rcall   WAIT_I2C
lcd_hw_4_bit.S:540:i2c_send:
lcd_hw_4_bit.S:543:i2c_wf:
lcd_hw_4_bit.S:552:     rcall   WAIT_I2C        ; wait defined time
lcd_hw_4_bit.S:554:     rcall   WAIT_I2C        ; wait defined time
lcd_hw_4_bit.S:556:     brne    i2c_wf
lcd_hw_4_bit.S:560:     rcall   WAIT_I2C        ; wait defined time
lcd_hw_4_bit.S:568:     rcall   WAIT_I2C        ; wait defined time
lcd_hw_4_bit.S:570:     rcall   WAIT_I2C        ; wait defined time
lcd_hw_4_bit.S:574:       .global       i2c_init
lcd_hw_4_bit.S:575:       .func i2c_init
lcd_hw_4_bit.S:577:i2c_init:
lcd_hw_4_bit.S:706:#else        /* !(LCD_INTERFACE_MODE == (MODE_SPI | MODE_7920_SERIAL | MODE_I2C | MODE_7108_SERIAL)) */
lcd-routines.c:422:#elif (LCD_INTERFACE_MODE == MODE_I2C)   /* ! MODE_SPI || MODE_3LINE */
lcd-routines.c:423:   i2c_init();               // init the I2C interface
lcd-routines.c:425:#elif (LCD_INTERFACE_MODE == MODE_7920_SERIAL) /* ! MODE_SPI || MODE_3LINE || MODE_I2C */
lcd-routines.c:435:#elif (LCD_INTERFACE_MODE == MODE_PARALLEL) /* ! MODE_SPI || MODE_3LINE || MODE_I2C || MODE_7920_SERIAL */
lcd-routines.c:436: /* ! MODE_SPI || MODE_3LINE || MODE_I2C || MODE_7920_SERIAL */
lcd-routines.c:742:   lcd_command(0x3a);                        // switch to 8-bit for I2C or SPI
mega328_PCF8814-20181005/Makefile:97:# with ST7565 controller. It is controlled with a 1-bit interface (SPI or I2C)
mega328_PCF8814-20181005/Makefile:105:# you can enable a I2C interface with address 0x3c for the SSD1306 controller
mega328_PCF8814-20181005/Makefile:123:# The I2C Address can be preset to a address of 0x3d instead of 0x3c by setting the constant LCD_I2C_ADDR.
mega328_PCF8814-20181005/Makefile:124:#CFLAGS += -DLCD_I2C_ADDR=0x3d
mega328_ssd1306I2C/Makefile:97:# with ST7565 controller. It is controlled with a 1-bit interface (SPI or I2C)
mega328_ssd1306I2C/Makefile:105:# you can enable a I2C interface with address 0x3c for the SSD1306 controller
mega328_ssd1306I2C/Makefile:123:# The I2C Address can be preset to a address of 0x3d instead of 0x3c by setting the constant LCD_I2C_ADDR.
mega328_ssd1306I2C/Makefile:124:#CFLAGS += -DLCD_I2C_ADDR=0x3d
tt_function.h:73:void i2c_init(void);                   // init the I2C interface


直接说结论了,LCD屏的定义在lcd_defines.h里,这里除了屏幕大小,还定义了不少命令,不过我发现这些命令只有初始化的时候用一次,所以我把8820相关的命令全省略掉了,直接写在初始化函数里。
初始化函数在lcd-routines.c文件里。
然后setup.mk,Transistortester.h,tt_globals.h也有一些判断语句需要加上8820相关条件。



Transistortester.h:198:  #if ((LCD_ST_TYPE == 7565) || (LCD_ST_TYPE == 1306) || (LCD_ST_TYPE == 8812) || (LCD_ST_TYPE == 8814) || (LCD_ST_TYPE == 8820)|| defined(LCD_DOGM))
Transistortester.h:549: #if ((LCD_ST_TYPE == 7565) || (LCD_ST_TYPE == 1306) || (LCD_ST_TYPE == 8812) || (LCD_ST_TYPE == 8814) || (LCD_ST_TYPE == 8820) || defined(LCD_DOGM))
tt_globals.h:29:#if ((LCD_ST_TYPE == 7565) || (LCD_ST_TYPE == 1306) || (LCD_ST_TYPE == 8812) || (LCD_ST_TYPE == 8814) || (LCD_ST_TYPE == 8820)|| defined(LCD_DOGM))
tt_globals.h:58: #if ((LCD_ST_TYPE == 7565) || (LCD_ST_TYPE == 1306) || (LCD_ST_TYPE == 8812) || (LCD_ST_TYPE == 8814) || (LCD_ST_TYPE == 8820) || defined(LCD_DOGM))




操作屏幕的具体命令是汇编写的,在lcd_hw_4_bit.S文件里,看了一下只要外面判断做好了,这里不需要改。


不得不说这个程序的结构不太好,翻来覆去的绕。还不如根据LCD芯片不同/接口不同,把相关的设定都放在一起呢。这样以后扩展起来也方便。这点当初修改Makefile的时候就发现了。不过也可能是现在流行这么编程。。。



最终修改前后的比较如下:

diff ./20181005/autoconf.h ./trunk/autoconf.h
46,57d45
<  #elif (LCD_ST_TYPE == 8820)
<  /* defines for PCF8820 */
<  /* The space at the display is too small for the big icons for this type, some characters are missing */
<  #define ONE_B 8
<  #define WITH_GRAPHICS 1
<  #undef PAGES_PER_LINE
<  #define PAGES_PER_LINE ((FONT_HEIGHT + 7) / 8)
<  #undef LCD_LINES
<  #define LCD_LINES ((SCREEN_HEIGHT/8) / PAGES_PER_LINE)
<  #undef LCD_LINE_LENGTH
<  #define LCD_LINE_LENGTH (SCREEN_WIDTH / FONT_WIDTH)
<  #define TEXT_RIGHT_TO_ICON ((ICON_WIDTH + 16 + 5 + 7) / FONT_WIDTH)
diff ./20181005/config.h ./trunk/config.h
6c6
< #if ((LCD_ST_TYPE == 7565) || (LCD_ST_TYPE == 1306) || (LCD_ST_TYPE == 7108) || (LCD_ST_TYPE == 8812) || (LCD_ST_TYPE == 8814)|| (LCD_ST_TYPE == 8820) || (LCD_ST_TYPE == 7735) || (LCD_ST_TYPE == 9163) || (LCD_ST_TYPE == 9341))
---
> #if ((LCD_ST_TYPE == 7565) || (LCD_ST_TYPE == 1306) || (LCD_ST_TYPE == 7108) || (LCD_ST_TYPE == 8812) || (LCD_ST_TYPE == 8814) || (LCD_ST_TYPE == 7735) || (LCD_ST_TYPE == 9163) || (LCD_ST_TYPE == 9341))
24c24
< #define MODE_I2C 2        /* I2C interface for SSD1306 & PCF8820 */
---
> #define MODE_I2C 2        /* I2C interface for SSD1306 */
398c398
< #if ((LCD_ST_TYPE == 7565) || (LCD_ST_TYPE == 1306) || (LCD_ST_TYPE == 8812) || (LCD_ST_TYPE == 8814)|| (LCD_ST_TYPE == 8820) || (LCD_ST_TYPE == 7735) || (LCD_ST_TYPE == 9163) || (LCD_ST_TYPE == 9341))
---
> #if ((LCD_ST_TYPE == 7565) || (LCD_ST_TYPE == 1306) || (LCD_ST_TYPE == 8812) || (LCD_ST_TYPE == 8814) || (LCD_ST_TYPE == 7735) || (LCD_ST_TYPE == 9163) || (LCD_ST_TYPE == 9341))
diff ./20181005/function_menu.c ./trunk/function_menu.c
117c117
<   #if ((LCD_ST_TYPE == 7565) || (LCD_ST_TYPE == 1306) || (LCD_ST_TYPE == 8812) || (LCD_ST_TYPE == 8814) || (LCD_ST_TYPE == 8820)|| defined(LCD_DOGM))
---
>   #if ((LCD_ST_TYPE == 7565) || (LCD_ST_TYPE == 1306) || (LCD_ST_TYPE == 8812) || (LCD_ST_TYPE == 8814) || defined(LCD_DOGM))
130c130
<   #if ((LCD_ST_TYPE == 7565) || (LCD_ST_TYPE == 1306) || (LCD_ST_TYPE == 8812) || (LCD_ST_TYPE == 8814)|| (LCD_ST_TYPE == 8820) || defined(LCD_DOGM))
---
>   #if ((LCD_ST_TYPE == 7565) || (LCD_ST_TYPE == 1306) || (LCD_ST_TYPE == 8812) || (LCD_ST_TYPE == 8814) || defined(LCD_DOGM))
205c205
< #if ((LCD_ST_TYPE == 7565) || (LCD_ST_TYPE == 1306) || (LCD_ST_TYPE == 8812) || (LCD_ST_TYPE == 8814)  || (LCD_ST_TYPE == 8820)|| defined(LCD_DOGM))
---
> #if ((LCD_ST_TYPE == 7565) || (LCD_ST_TYPE == 1306) || (LCD_ST_TYPE == 8812) || (LCD_ST_TYPE == 8814) || defined(LCD_DOGM))
436c436
<  #if ((LCD_ST_TYPE == 7565) || (LCD_ST_TYPE == 8814)|| (LCD_ST_TYPE == 8820) || (LCD_ST_TYPE == 8812) || (LCD_ST_TYPE == 1306) || defined(LCD_DOGM))
---
>  #if ((LCD_ST_TYPE == 7565) || (LCD_ST_TYPE == 8814) || (LCD_ST_TYPE == 8812) || (LCD_ST_TYPE == 1306) || defined(LCD_DOGM))
708c708
<  #if ((LCD_ST_TYPE == 7565) || (LCD_ST_TYPE == 1306) || (LCD_ST_TYPE == 8812) || (LCD_ST_TYPE == 8814)|| (LCD_ST_TYPE == 8820) || defined(LCD_DOGM))
---
>  #if ((LCD_ST_TYPE == 7565) || (LCD_ST_TYPE == 1306) || (LCD_ST_TYPE == 8812) || (LCD_ST_TYPE == 8814) || defined(LCD_DOGM))
718,719d717
< #elif (LCD_ST_TYPE == 8820)
<   #define MAX_CONTRAST 0xff
745,747d742
<    lcd_command(CMD_SET_VOP_UPPER | ((contrast >> 5) & 0x07));      // set upper Vop
<    lcd_command(CMD_SET_VOP_LOWER | (contrast & 0x1f));    // set lower Vop
<      #elif (LCD_ST_TYPE == 8820)    /* PCF8820 controller */
diff ./20181005/lcd_defines.h ./trunk/lcd_defines.h
194,204d193
< #elif (LCD_ST_TYPE == 8820)     /* not (LCD_ST_TYPE == 7565 || 1306 || 7108 || 7920)) */
<  // support for PCF8820
<      #undef SCREEN_WIDTH        
<     #define SCREEN_WIDTH  96        /* for ST8820 */
<     #undef SCREEN_HEIGHT
<     #define SCREEN_HEIGHT  64
<
< //Makros for LCD
<     #define lcd_write_data(data)                   _lcd_hw_write(0x01, data);
<
< /* *********************************************************************************************************** */
318c307
< #else /* not ((LCD_ST_TYPE == 7565 || 1306 || 7920 || 7108 || 8812 || 8814 ||8820|| 7735 || 9341 || 9163) */
---
> #else /* not ((LCD_ST_TYPE == 7565 || 1306 || 7920 || 7108 || 8812 || 8814 || 7735 || 9341 || 9163) */
389c378
< #if ((LCD_ST_TYPE == 7565) || (LCD_ST_TYPE == 1306) || (LCD_ST_TYPE == 7920) || (LCD_ST_TYPE == 7108) || (LCD_ST_TYPE == 8812) || (LCD_ST_TYPE == 8814)|| (LCD_ST_TYPE == 8820) || (LCD_ST_TYPE == 9163) || (LCD_ST_TYPE == 7735) || (LCD_ST_TYPE==9341))
---
> #if ((LCD_ST_TYPE == 7565) || (LCD_ST_TYPE == 1306) || (LCD_ST_TYPE == 7920) || (LCD_ST_TYPE == 7108) || (LCD_ST_TYPE == 8812) || (LCD_ST_TYPE == 8814) || (LCD_ST_TYPE == 9163) || (LCD_ST_TYPE == 7735) || (LCD_ST_TYPE==9341))
diff ./20181005/lcd-routines.c ./trunk/lcd-routines.c
362c362
< #if ((LCD_ST_TYPE == 7565) || (LCD_ST_TYPE == 1306) || (LCD_ST_TYPE == 7108) || (LCD_ST_TYPE == 7920) || (LCD_ST_TYPE == 8812) || (LCD_ST_TYPE == 8814)|| (LCD_ST_TYPE == 8820) || (LCD_ST_TYPE == 7735) || (LCD_ST_TYPE == 9163) || (LCD_ST_TYPE == 9341))
---
> #if ((LCD_ST_TYPE == 7565) || (LCD_ST_TYPE == 1306) || (LCD_ST_TYPE == 7108) || (LCD_ST_TYPE == 7920) || (LCD_ST_TYPE == 8812) || (LCD_ST_TYPE == 8814) || (LCD_ST_TYPE == 7735) || (LCD_ST_TYPE == 9163) || (LCD_ST_TYPE == 9341))
537,610c537
< #elif (LCD_ST_TYPE == 8820)
<    lcd_command(0x78);
<    lcd_command(0x80); //选择地址,0X3C,加上W/R为0X78
<    lcd_command(0x1)  //翻到0页
<    lcd_command(0x80)  //
<    lcd_command(0x9)  //翻到1页
<    lcd_command(0x80)  //
<    lcd_command(0x6)  //选择正常模式
<    lcd_command(0x80)  //
<    lcd_command(0x12)  //选择偏置
<    lcd_command(0x80)  //
<    lcd_command(0x40)  //选择前8行模式
<    lcd_command(0x80)  //
<    lcd_command(0x1)  //翻到0页
<    lcd_command(0x80)  //
<    lcd_command(0x16)  //掉电和垂直模式
<    lcd_command(0x80)  //
<    lcd_command(0xC)  //翻到4页
<    lcd_command(0x80)  //
<    lcd_command(0x5)  //打开显示和驱动 电压设置1X
<    lcd_command(0x80)  //
<    lcd_command(0x1)  //翻到0页
<    lcd_command(0x80)  //
<    lcd_command(0xA)  //翻到2页
<    lcd_command(0x80)  //
<    lcd_command(0x8)  //设定2X电压
<    lcd_command(0x80)  //
<    lcd_command(0x12)  //温度系数2
<    lcd_command(0x80)  //
<    lcd_command(0x4)  //VLCD 低范围,关
<    lcd_command(0x80)  //
<    lcd_command(0xDB)  //设定VLCD电压
<    lcd_command(0x80)  //
<    lcd_command(0x1)  //翻到0页
<    lcd_command(0x80)  //
<    lcd_command(0xB)  //翻到3页
<    lcd_command(0x80)  //
<    lcd_command(0x40)  //灰度寄存器0选择
<    lcd_command(0x80)  //
<    lcd_command(0x80)  //灰度寄存器0设定
<    lcd_command(0x80)  //
<    lcd_command(0x41)  //灰度寄存器1选择
<    lcd_command(0x80)  //
<    lcd_command(0x94)  //灰度寄存器1设定
<    lcd_command(0x80)  //
<    lcd_command(0x42)  //灰度寄存器2选择
<    lcd_command(0x80)  //
<    lcd_command(0xA8)  //灰度寄存器2设定
<    lcd_command(0x80)  //
<    lcd_command(0x43)  //灰度寄存器3选择
<    lcd_command(0x80)  //
<    lcd_command(0xBF)  //灰度寄存器3设定
<    lcd_command(0x80)  //
<    lcd_command(0x1)  //翻到0页
<    lcd_command(0x80)  //
<    lcd_command(0xA)  //翻到2页
<    lcd_command(0x80)  //
<    lcd_command(0x5)  //VLCD 低范围,开
<    lcd_command(0x80)  //
<    lcd_command(0x1)  //翻到0页
<    lcd_command(0x80)  //
<    lcd_command(0x12)  //显示开和垂直模式
<    lcd_command(0x80)  //
<    lcd_command(0xA)  //翻到2页
<    lcd_command(0x80)  //
<    lcd_command(0x9)  //设定VLCD电压3X
<    lcd_command(0x80)  //
<    lcd_command(0xA)  //设定VLCD电压4X
<    lcd_command(0x80)  //
<    lcd_command(0xB)  //设定VLCD电压5X
<    lcd_command(0x80)  //
<
< /* -------------------------------------------------------------------------- */
< #elif (LCD_ST_TYPE == 7920)  /* !(LCD_ST_TYPE == 7565 | 1306 | 8812 | 8814|8820) */
---
> #elif (LCD_ST_TYPE == 7920)  /* !(LCD_ST_TYPE == 7565 | 1306 | 8812 | 8814) */
623c550
< #elif (LCD_ST_TYPE == 7108)  /* !(LCD_ST_TYPE == 7565 | 1306 | 8812 | 8814 | 8820|7920) */
---
> #elif (LCD_ST_TYPE == 7108)  /* !(LCD_ST_TYPE == 7565 | 1306 | 8812 | 8814 | 7920) */
631c558
< #elif ((LCD_ST_TYPE == 7735) || (LCD_ST_TYPE == 9163))  /* !(LCD_ST_TYPE == 7565 | 1306 | 8812 | 8814 | 8820|7920 | 7108) */
---
> #elif ((LCD_ST_TYPE == 7735) || (LCD_ST_TYPE == 9163))  /* !(LCD_ST_TYPE == 7565 | 1306 | 8812 | 8814 | 7920 | 7108) */
670c597
< #elif (LCD_ST_TYPE == 9341)   /* !(LCD_ST_TYPE == 7565 | 1306 | 8812 | 8814 |8820| 7920 | 7108 | 7735 | 9163) */
---
> #elif (LCD_ST_TYPE == 9341)   /* !(LCD_ST_TYPE == 7565 | 1306 | 8812 | 8814 | 7920 | 7108 | 7735 | 9163) */
733c660
< #else    /* !(LCD_ST_TYPE == 7565 | 1306) | 7108 | 7920 | 7108 | 8812 | 8814 |8820| 7735 | 9163) */
---
> #else    /* !(LCD_ST_TYPE == 7565 | 1306) | 7108 | 7920 | 7108 | 8812 | 8814 | 7735 | 9163) */
895,905d821
< #elif (LCD_ST_TYPE == 8820)
<    unsigned char p;
<    unsigned char count;
<
<    for (p = 0; p < ((SCREEN_HEIGHT+7) / 8); p++) {
<      lcd_command(CMD_SET_COLUMN_UPPER);        // set horizontal position to 0
<      lcd_command(CMD_SET_COLUMN_LOWER);
<      lcd_command(CMD_SET_PAGE | (0x0f & p));    // set page 0 to 7
<      for (count = 0; count < SCREEN_WIDTH; count++)
<        lcd_write_data(0);
<    }
1094c1010
< #if ((LCD_ST_TYPE == 7565) || (LCD_ST_TYPE == 1306) || (LCD_ST_TYPE == 7108) || (LCD_ST_TYPE == 8812) || (LCD_ST_TYPE == 8814)|| (LCD_ST_TYPE == 8820))
---
> #if ((LCD_ST_TYPE == 7565) || (LCD_ST_TYPE == 1306) || (LCD_ST_TYPE == 7108) || (LCD_ST_TYPE == 8812) || (LCD_ST_TYPE == 8814))
1350c1266
< #endif /* (LCD_ST_TYPE == 7565 || 1306 || 7108 || 7920 || 8812 || 8814||8820 */
---
> #endif /* (LCD_ST_TYPE == 7565 || 1306 || 7108 || 7920 || 8812 || 8814 */
diff ./20181005/setup.mk ./trunk/setup.mk
49,52d48
< ifeq ($(WITH_LCD_ST7565),8820)
< CFLAGS += -DLCD_ST_TYPE=8820
< CFLAGS += -DLCD_ST7565_RESISTOR_RATIO=$(LCD_ST7565_RESISTOR_RATIO)
< endif
339,341d334
< OBJECTS += lcd-draw.o
< endif
< ifeq ($(WITH_LCD_ST7565),8820)
diff ./20181005/tt_globals.h ./trunk/tt_globals.h
29c29
< #if ((LCD_ST_TYPE == 7565) || (LCD_ST_TYPE == 1306) || (LCD_ST_TYPE == 8812) || (LCD_ST_TYPE == 8814) || (LCD_ST_TYPE == 8820)|| defined(LCD_DOGM))
---
> #if ((LCD_ST_TYPE == 7565) || (LCD_ST_TYPE == 1306) || (LCD_ST_TYPE == 8812) || (LCD_ST_TYPE == 8814) || defined(LCD_DOGM))
58c58
<  #if ((LCD_ST_TYPE == 7565) || (LCD_ST_TYPE == 1306) || (LCD_ST_TYPE == 8812) || (LCD_ST_TYPE == 8814) || (LCD_ST_TYPE == 8820) || defined(LCD_DOGM))
---
>  #if ((LCD_ST_TYPE == 7565) || (LCD_ST_TYPE == 1306) || (LCD_ST_TYPE == 8812) || (LCD_ST_TYPE == 8814) || defined(LCD_DOGM))
[ 此帖被windily在2018-10-06 15:45重新编辑 ]
本帖最近打赏记录:共3条打赏M币+108专家+1
kuanglf M币 +8 - 2018-10-09
發騷友 专家 +1 以資鼓勵 2018-10-06
發騷友 M币 +100 以資鼓勵 2018-10-06
离线hbozyq

发帖
365
M币
8508
专家
45
粉丝
15187
只看该作者 1楼 发表于: 2018-11-02
请登录后查看
离线朱雀zero

发帖
851
M币
3
专家
0
粉丝
52
只看该作者 2楼 发表于: 2019-03-19
请登录后查看
离线mzhboy
发帖
355
M币
736
专家
1
粉丝
15
只看该作者 3楼 发表于: 2019-03-22
请登录后查看
快速回复
限80 字节
温馨提示:欢迎交流讨论,请勿发布纯表情、纯引用等灌水帖子;以免被删除
 
上一个 下一个