CH1115显示屏使用U8G2库调试

         U8G2库是一个开源图形库,去github上查询了支持的显示屏驱动芯片,发现没有CH1115,但是发现网上有人使用SSD1306的驱动跑起来了,于是我在SSD1306的驱动上改,事实证明可行。

        首先就是修改初始化指令,在u8x8 _ssd1306_126x64_noname.c里,有一个数组u8x8_d_ssd1306_128x64_noname_init_seq,修改成如图所示,如果有其他需求,比如有其他规格的屏幕,也可以修改成对应的。想要了解更详细的可以在网上找CH1115芯片的手册。

/* more or less generic setup of all these small OLEDs */
static const uint8_t u8x8_d_ssd1306_128x64_noname_init_seq[] = {

    U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */

	U8X8_C(0xAE),
	
	
	U8X8_CA(0x81, 0x30),	// 亮度 00-FFH
	U8X8_CA(0xA8, 0x2F),	// 屏幕行数 = x+1,0x2F=47+1
	U8X8_CA(0x20, 0x00),	// 水平寻址/垂直寻址/页寻址		00/01/02H
	U8X8_CA(0xD3, 0x08),	// 屏幕偏移行数 00-3FH
	U8X8_CA(0xD5, 0xA0),	// 时钟分频比/振荡器频率
	U8X8_CA(0xD9, 0x22),	// 预充放电周期
	U8X8_CA(0xDB, 0x35),	// 输出电压档位 00-FFH
	U8X8_CA(0xAD, 0x8B),	// DCDC不使能/使能 8A/8B
	U8X8_CA(0x82, 0x00),	// 外部电阻
	
	U8X8_C(0x2e),	// 屏幕滚动关闭
	U8X8_C(0xA2),	// OLED硬件列方向 A2/A3H
	U8X8_C(0x40),	// 显示的起始行	40-7FH
	U8X8_C(0xA0),	// 行方向 A0/A1H
	U8X8_C(0xC8),	// 列方向 C8/C0H
	U8X8_C(0xA6),	// 正常/反转显示 A6/A7H
	U8X8_C(0x31),	// 充电泵输出电压 30-33H
	U8X8_C(0xA4),	// 正常/全亮 A4/A5H
	
    U8X8_END_TRANSFER(), /* disable chip */
    U8X8_END()           /* end of sequence */
};

        还有一个就是修改同一个文件里的另一个数组,u8x8_ssd1306_128x64_noname_display_info,配置显示参数,也是要配置屏幕对应的宽度和高度。不然,有可能会出现部分地方显示花屏的情况。

static const u8x8_display_info_t u8x8_ssd1306_128x64_noname_display_info =
{
        /* chip_enable_level = */ 0,
        /* chip_disable_level = */ 1,

        /* post_chip_enable_wait_ns = */ 1,
        /* pre_chip_disable_wait_ns = */ 1,
        /* reset_pulse_width_ms = */ 1,  /* SSD1306: 3 us */
        /* post_reset_wait_ms = */ 1,    /* far east OLEDs need much longer setup time */
        /* sda_setup_time_ns = */ 1,     /* SSD1306: 15ns, but cycle time is 100ns, so use 100/2 */
        /* sck_pulse_width_ns = */ 1,    /* SSD1306: 20ns, but cycle time is 100ns, so use 100/2, AVR: below 70: 8 MHz, >= 70 --> 4MHz clock */
        /* sck_clock_hz = */ 32000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be  1000000000/sck_pulse_width_ns */
        /* spi_mode = */ 0,              /* active high, rising edge */
        /* i2c_bus_clock_100kHz = */ 1,
        /* data_setup_time_ns = */ 1,
        /* write_pulse_width_ns = */ 1, /* SSD1306: cycle time is 300ns, so use 300/2 = 150 */
        /* tile_width = */ 11,    // pixel_width/8 = 88/8=11
        /* tile_height = */ 6,    // pixel_height/8 = 48/8=6
        /* default_x_offset = */ 0,    // 初始化的时候,已经让显示区域居中,这里就不需要再偏移了
        /* flipmode_x_offset = */ 0,
        /* pixel_width = */ 88,    // 屏幕宽度
        /* pixel_height = */ 48,    // 屏幕高度
        
};

        最后,就是按照例程调用U8G2库接口,就可以愉快的显示想要的效果了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值