打印
[综合信息]

【华大测评】03 + 漂亮的OLED中英文混合显示(1)

[复制链接]
4417|38
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
caizhiwei|  楼主 | 2020-7-7 23:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
首先,在这里感谢某网友(lisingch),对我的测评进行了技术指导。      OLED目前是比较普遍的显示器件了,淘宝价格也是很便宜的。
网上搜了一圈,找到了数据手册,初始化寄存器的时候会用到的,所以手册还是有必要看一看。
方便网友下载,这里我先贴出来:
091寸OLED模块原理图_IIC接口.pdf (52.35 KB) SSD1306-Revision 1.0.pdf (1.35 MB)
一,此款OLED为IIC接口,硬件原理图如图,说明从IIC地址为0x78.与MCU的I2C2 接口相连接。
对于IIC,这里采用了硬件IIC,没有用模拟的,这样效率更高一些,看看我们的初始化函数,iic的速率设置为400K的Fast 模式。
/**
******************************************************************************
** \brief Initialize the I2C peripheral for master
**
** \param None
**
** \retval
**
**
******************************************************************************/
void I2C_Master_Config(void)
{
stc_i2c_init_t stcI2cInit;
stc_clk_freq_t stcClkFreq;

/* Initialize I2C port*/
PORT_SetFunc(I2C2_SCL_PORT, I2C2_SCL_PIN, Func_I2c2_Scl, Disable);
PORT_SetFunc(I2C2_SDA_PORT, I2C2_SDA_PIN, Func_I2c2_Sda, Disable);

/* Enable I2C Peripheral*/
PWC_Fcg1PeriphClockCmd(PWC_FCG1_PERIPH_I2C2, Enable);

I2C_DeInit(I2C_CH);

/* Get system clock frequency */
CLK_GetClockFreq(&stcClkFreq);

MEM_ZERO_STRUCT(stcI2cInit);
stcI2cInit.enI2cMode = I2cMaster;
stcI2cInit.u32Pclk3 = stcClkFreq.pclk3Freq;
stcI2cInit.u32Baudrate = 400000ul;
stcI2cInit.u32SclTime = 0ul;
I2C_Init(I2C_CH, &stcI2cInit);

I2C_Cmd(I2C_CH, Enable);
}
然后就是最关键的IIC读写函数了。
/**
******************************************************************************
** \brief Send data to slave
**
** \param pTxData Pointer to the data buffer
** \param u32Size Data size
**
** \retval
**
**
******************************************************************************/
void Master_WriteData(uint8_t Data, uint32_t u32Size)
{
uint32_t u32TimeOut = TIMEOUT;

while(u32Size--)
{
/* Wait tx buffer empty */
u32TimeOut = TIMEOUT;
while(Reset == I2C_GetStatus(I2C_CH, I2C_SR_TEMPTYF))
{
if(0ul == (u32TimeOut--))
{
break;
}
}

/* Send one byte data */
I2C_SendData(I2C_CH, Data);

/* Wait transfer end*/
u32TimeOut = TIMEOUT;
while(Reset == I2C_GetStatus(I2C_CH, I2C_SR_TENDF))
{
if(0ul == (u32TimeOut--))
{
break;
}
}

/* Check ACK */
u32TimeOut = TIMEOUT;
while(Set == I2C_GetStatus(I2C_CH, I2C_SR_NACKDETECTF))
{
if(0ul == (u32TimeOut--))
{
break;
}
}
}
}

基本的iic驱动就OK了,剩下的就是oled取模,这里贴一下取模方式,方便网友参考。

驱动好了,再看看Main函数:

整个工程目录非常清爽!
再上一张靓照效果图:







使用特权

评论回复
沙发
caizhiwei|  楼主 | 2020-7-7 23:04 | 只看该作者
最后,附上完整的MDK工程,欢迎指正! I2C_OLED_091.rar (638.86 KB)

使用特权

评论回复
板凳
smartpower| | 2020-7-7 23:17 | 只看该作者
牛人啊。。

使用特权

评论回复
地板
比神乐| | 2020-7-8 19:49 | 只看该作者
不错不错

使用特权

评论回复
5
caizhiwei|  楼主 | 2020-7-8 22:39 | 只看该作者

多谢辣椒小哥哥~

使用特权

评论回复
6
usysm| | 2020-7-9 08:03 | 只看该作者
OLED不是有串口的吗   

使用特权

评论回复
7
typeof| | 2020-7-9 08:04 | 只看该作者
做个gui的吧   

使用特权

评论回复
8
yujielun| | 2020-7-9 08:04 | 只看该作者
怎么不让OLED滚动起来  

使用特权

评论回复
9
htmlme| | 2020-7-9 08:04 | 只看该作者
                     

使用特权

评论回复
10
pklong| | 2020-7-9 08:05 | 只看该作者
caizhiwei 发表于 2020-7-7 23:04
最后,附上完整的MDK工程,欢迎指正!

学习一下这个。      

使用特权

评论回复
11
touser| | 2020-7-9 08:09 | 只看该作者
TFT LCD吧     

使用特权

评论回复
12
myiclife| | 2020-7-9 08:09 | 只看该作者
这个是申请的开发板吗   

使用特权

评论回复
13
iyoum| | 2020-7-9 08:10 | 只看该作者
手册还是有必要看一看。  

使用特权

评论回复
14
uytyu| | 2020-7-9 08:10 | 只看该作者
期待楼主更多的资料分析了。   

使用特权

评论回复
15
jkl21| | 2020-7-9 08:11 | 只看该作者
使用的硬件IIC吗   

使用特权

评论回复
16
pklong| | 2020-7-9 08:12 | 只看该作者
caizhiwei 发表于 2020-7-7 23:04
最后,附上完整的MDK工程,欢迎指正!

是自带字库的LED吗?   

使用特权

评论回复
17
htmlme| | 2020-7-9 08:12 | 只看该作者
谢谢楼主分享的资料了。   

使用特权

评论回复
18
touser| | 2020-7-9 08:12 | 只看该作者
可以做触摸控制的TFT LCD给力。   

使用特权

评论回复
19
myiclife| | 2020-7-9 08:12 | 只看该作者
功能看着真是强大呢。   

使用特权

评论回复
20
yujielun| | 2020-7-9 08:12 | 只看该作者
楼主可以做个滚动显示了。   

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

99

主题

846

帖子

11

粉丝