kit7828 发表于 2022-3-17 16:16

【GD32L233C-START 评测】-八、普通GPIO方式驱动1.5寸OLED屏

<p>几次测试下来,一直在通过SPI和I2C方式驱动OLED,结果在I2C驱动中遇到了很多的难题,至今没点亮哈。</p>

<p>偶然看到一个帖子,模拟SPI方式驱动OLED,仔细研究发现,通用GPIO就能够驱动OLED,于是做了本次评测。</p>

<p>为方便连接,就用了GD32L233C左侧的A口连接到OLED屏</p>

<pre>
<code>#define        RCU_OLED_PORT                RCU_GPIOA

#define OLED_CS_PORT                GPIOA
#define        OLED_CS_PIN                        GPIO_PIN_5
#define OLED_RST_PORT                GPIOA
#define        OLED_RST_PIN                GPIO_PIN_3
#define OLED_DC_PORT                GPIOA
#define        OLED_DC_PIN                        GPIO_PIN_4

#define        RCU_I2C_PORT                RCU_GPIOA
#define I2C1_SCL_Pin GPIO_PIN_1
#define I2C1_SCL_GPIO_Port GPIOA
#define I2C1_SDA_Pin GPIO_PIN_2
#define I2C1_SDA_GPIO_Port GPIOA</code></pre>

<p>各管脚只进行简单的GPIO初始化,代码就不写了哈</p>

<p>OLED的核心驱动代码如下</p>

<pre>
<code>void OLED_SendData(uint8_t data)
{
                uint8_t i = 0;
       
                OLED_SCL_0;
                for(i = 0;i &lt; 8;i++)         
                {
                                OLED_SCL_0;
                                if (data &amp; 0x80)
                                {
                                               OLED_SDA_1;         
                                }
                                else
                                {
                                               OLED_SDA_0;      
                                }
                                OLED_SCL_1;
                                data &lt;&lt;= 1;
                }
}

void OLED_WriteReg(uint8_t addr)
{
                //SCK_0();
                //OLED_CS_0;       

                OLED_DC_0;        //当DC = 0时写命令
                OLED_SendData(addr);

                //OLED_CS_1;
                OLED_DC_1;
}

void OLED_WriteData(uint8_t data)
{
                       
                        //OLED_CS_0;

                        OLED_DC_1;               //当DC = 1时写数据
                        OLED_SendData(data);
                        //OLED_CS_1;
                        OLED_DC_0;
}</code></pre>

<p>其他的代码都跟前面的评测一致</p>

<p>发现能够完美驱动OLED屏,甚至感觉速度不差</p>

<p>&nbsp;连接线的照片</p>

<p> &nbsp;</p>

<p>&nbsp;希望对OLED驱动无头绪的朋友有帮助。</p>

<p><a href="https://bbs.eeworld.com.cn/forum.php?mod=attachment&amp;aid=NTkzNDU3fGI5NGZlMzM0OTM2NjMzNTU0NzMxZjA5YTg2MDdjY2RmfDE2NDc1MDUwMTk%3D&amp;request=yes&amp;_f=.rar" target="_blank">完整的项目文件</a></p>

Jacktang 发表于 2022-3-18 07:28

<p>在I2C驱动中遇到的是什么问题</p>

kit7828 发表于 2022-3-23 21:24

Jacktang 发表于 2022-3-18 07:28
在I2C驱动中遇到的是什么问题

<p>估计是地址的问题,一直没找到合适的资料,查到有效的地址</p>
页: [1]
查看完整版本: 【GD32L233C-START 评测】-八、普通GPIO方式驱动1.5寸OLED屏