【GD32L233C-START】11、硬件I2C驱动0.96吋OLED


0、前言

关于oled的详细驱动,可查看一文彻底了解ssd1306驱动0.96寸oled,本文使用gd32l233硬件i2c驱动。

1、关于GD32L233CCT6的I2C接口
【GD32L233C-START】11、硬件I2C驱动0.96吋OLED

可以看出有两路I2C,分别是I2C0,I2C1。

2、开发板上I2C的引脚
【GD32L233C-START】11、硬件I2C驱动0.96吋OLED

可以看出,I2C1的引脚为PB10和PB11。

3、通用引脚复用为I2C
【GD32L233C-START】11、硬件I2C驱动0.96吋OLED

可以看出,是复用功能4。

4、代码实现

(1)初始化i2c

刺鸟创客 刺鸟创客

一款专业高效稳定的AI内容创作平台

刺鸟创客 110 查看详情 刺鸟创客 代码语言:j*ascript代码运行次数:0运行复制
void I2cInit(void){    rcu_periph_clock_enable(RCU_I2C1);    rcu_periph_clock_enable(RCU_GPIOB);    gpio_af_set(GPIOB, GPIO_AF_4, GPIO_PIN_10);    gpio_af_set(GPIOB, GPIO_AF_4, GPIO_PIN_11);    gpio_mode_set(GPIOB, GPIO_MODE_AF, GPIO_PUPD_PULLUP, GPIO_PIN_10);    gpio_output_options_set(GPIOB, GPIO_OTYPE_OD, GPIO_OSPEED_50MHZ, GPIO_PIN_10);    gpio_mode_set(GPIOB, GPIO_MODE_AF, GPIO_PUPD_PULLUP, GPIO_PIN_11);    gpio_output_options_set(GPIOB, GPIO_OTYPE_OD, GPIO_OSPEED_50MHZ, GPIO_PIN_11);    /* configure I2C timing */    i2c_timing_config(I2C1, 0, 0x3, 0);    i2c_master_clock_config(I2C1, 0x13, 0x36);    /* configure I2C address */    i2c_address_config(I2C1, I2C_OWN_ADDRESS7, I2C_ADDFORMAT_7BITS);    /* configure sl*e address */    i2c_master_addressing(I2C1, I2C_SL*E_ADDRESS7, I2C_MASTER_TRANSMIT);    /* configure number of bytes to be transferred */    i2c_transfer_byte_number_config(I2C1, 2);    /* enable I2C1 */    i2c_enable(I2C1);}

(2)写OLED下面分写命令和数据.

代码语言:j*ascript代码运行次数:0运行复制
void SSD1306_WriteCmd(uint8_t var){    /* wait until I2C bus is idle */    while(i2c_flag_get(I2C1, I2C_FLAG_I2CBSY));    /* send a start condition to I2C bus */    i2c_start_on_bus(I2C1);    /* wait until the transmit data buffer is empty */    I2C_STAT(I2C1) |= I2C_STAT_TBE;    while(!i2c_flag_get(I2C1, I2C_FLAG_TBE));    /* data transmission */    i2c_data_transmit(I2C1, 0x00);    /* wait until the TI bit is set */    while(!i2c_flag_get(I2C1, I2C_FLAG_TBE));    i2c_data_transmit(I2C1, var);    /* wait until the TI bit is set */    while(!i2c_flag_get(I2C1, I2C_FLAG_TBE));    /* wait for transfer complete flag */    while(!i2c_flag_get(I2C1, I2C_FLAG_TC));    /* send a stop condition to I2C bus */    i2c_stop_on_bus(I2C1);    /* wait until stop condition generate */    while(!i2c_flag_get(I2C1, I2C_FLAG_STPDET));    /* clear the STPDET bit */    i2c_flag_clear(I2C1, I2C_FLAG_STPDET);}void SSD1306_WriteData(uint8_t var){    /* wait until I2C bus is idle */    while(i2c_flag_get(I2C1, I2C_FLAG_I2CBSY));    /* send a start condition to I2C bus */    i2c_start_on_bus(I2C1);    /* wait until the transmit data buffer is empty */    I2C_STAT(I2C1) |= I2C_STAT_TBE;    while(!i2c_flag_get(I2C1, I2C_FLAG_TBE));    /* data transmission */    i2c_data_transmit(I2C1, 0x40);    /* wait until the TI bit is set */    while(!i2c_flag_get(I2C1, I2C_FLAG_TBE));    i2c_data_transmit(I2C1, var);    /* wait until the TI bit is set */    while(!i2c_flag_get(I2C1, I2C_FLAG_TBE));    /* wait for transfer complete flag */    while(!i2c_flag_get(I2C1, I2C_FLAG_TC));    /* send a stop condition to I2C bus */    i2c_stop_on_bus(I2C1);    /* wait until stop condition generate */    while(!i2c_flag_get(I2C1, I2C_FLAG_STPDET));    /* clear the STPDET bit */    i2c_flag_clear(I2C1, I2C_FLAG_STPDET);}

(3)OLED相关驱动

代码语言:j*ascript代码运行次数:0运行复制
//坐标设置:也就是在哪里显示void OledSetPos(uint8_t x, uint8_t y) {   //以下3个寄存器只在页寻址的模式下有效  SSD1306_WriteCmd(0xb0+y);             //页地址设置     0xb0~0xb7  SSD1306_WriteCmd(((x&0xf0)>>4)|0x10); //列高位地址设置  SSD1306_WriteCmd((x&0x0f));           //列低位地址设置}  //开启Oled显示void OledDisplayOn(void){  SSD1306_WriteCmd(0X8D);  //SET DCDC命令  SSD1306_WriteCmd(0X14);  //DCDC ON  SSD1306_WriteCmd(0XAF);  //DISPLAY ON} //关闭Oled显示   void OledDisplayOff(void){  SSD1306_WriteCmd(0X8D);  //SET DCDC命令  SSD1306_WriteCmd(0X10);  //DCDC OFF  SSD1306_WriteCmd(0XAE);  //DISPLAY OFF} //清屏函数,清完屏,整个屏幕是黑色的!和没点亮一样  void OledClear(void)  {    uint8_t i,n;    for(i=0;i<8;i++)    {      SSD1306_WriteCmd (0xb0+i);    //设置页地址(0~7)    SSD1306_WriteCmd (0x00);      //设置显示位置—列低地址    SSD1306_WriteCmd (0x10);      //设置显示位置—列高地址       for(n=0;n<128;n++)      SSD1306_WriteData(0);   } //更新显示} //在指定位置显示一个字符,包括部分字符//x:0~127,y:0~7//Char_Size:选择字体 16/12 void OledShowChar(uint8_t x,uint8_t y,uint8_t chr,uint8_t Char_Size){        uint8_t c=0,i=0;    c=chr-' ';//得到偏移后的值  if(x>MAX_COLUMN-1)  {    x=0;    y=y+2;  }  if(Char_Size ==16)  {    OledSetPos(x,y);    for(i=0;i<8;i++)    {      SSD1306_WriteData(F8X16[c*16+i]);//先写上半部分    }        OledSetPos(x,y+1);    for(i=0;i<8;i++)    {      SSD1306_WriteData(F8X16[c*16+i+8]);//后写下半部分    }  }  else  {    OledSetPos(x,y);    for(i=0;i<6;i++)    {      SSD1306_WriteData(F6x8[c][i]);    }  }} //显示一个字符串void OledShowString(uint8_t x,uint8_t y,char *str,uint8_t Char_Size){  unsigned char j=0;    while (str[j]!='\0')  {    OledShowChar(x,y,str[j],Char_Size);    x+=8;    if(x>120)    {      x=0;      y+=2;    }    j++;//移动一次就是一个page,取值0-7  }} //显示汉字//由于汉字是16*16大小的,所以最多显示4行汉字//index:在汉字取模中的索引void OledShowCN(uint8_t x,uint8_t y,uint8_t index){            uint8_t t;  OledSetPos(x,y);  for(t=0;t<16;t++)  {    SSD1306_WriteData(Hzk[index][t]);  }    OledSetPos(x,y+1);  for(t=0;t<16;t++)  {    SSD1306_WriteData(Hzk[index][t+16]);  }}

(4)OLED初始化

代码语言:j*ascript代码运行次数:0运行复制
void OledInit(void){  DelayMs(300);  DelayMs(300);  //SSD1306复位之后,默认的是页寻址方式    SSD1306_WriteCmd(0xAE);//--display off    SSD1306_WriteCmd(0x00);//--set low column address  SSD1306_WriteCmd(0x10);//--set high column address  SSD1306_WriteCmd(0x40);//--set start line address      SSD1306_WriteCmd(0xB0);//--set page address    SSD1306_WriteCmd(0x81);// contract control  SSD1306_WriteCmd(0xFF);//--128     SSD1306_WriteCmd(0xA1);//set segment re-map  0 to 127   SSD1306_WriteCmd(0xA6);//set normal  display    SSD1306_WriteCmd(0xA8);//set multiplex ratio(1 to 64)  SSD1306_WriteCmd(0x3F);//--1/32 duty    SSD1306_WriteCmd(0xC8);//Com scan direction  SSD1306_WriteCmd(0xD3);//set display offset  SSD1306_WriteCmd(0x00);//no offset  SSD1306_WriteCmd(0xD5);//set display clock divide ratio/oscillator frequency    SSD1306_WriteCmd(0x80);//  SSD1306_WriteCmd(0xD8);//set area color mode off  SSD1306_WriteCmd(0x05);//  SSD1306_WriteCmd(0xD9);//Set Pre-Charge Period  SSD1306_WriteCmd(0xF1);//  SSD1306_WriteCmd(0xDA);//set com pin  hardware configuartion  SSD1306_WriteCmd(0x12);//  SSD1306_WriteCmd(0xDB);//set Vcomh  SSD1306_WriteCmd(0x30);//0x20,0.77xVcc  SSD1306_WriteCmd(0x8D);//set charge pump enable  SSD1306_WriteCmd(0x14);//  SSD1306_WriteCmd(0xAF);//--turn on Oled panel}

(5)显示测试

代码语言:j*ascript代码运行次数:0运行复制
void OledDisplayTest(void){I2cInit();OledInit();OledClear(); OledShowString(28,0,(char *)("EEWORLD"),16);OledShowString(40,2,(char *)("GD32"),16);OledShowString(40,4,(char *)("2025"),16);OledShowCN(24,6,0);OledShowCN(40,6,1);OledShowCN(56,6,2);OledShowCN(72,6,3);}
5、现象
【GD32L233C-START】11、硬件I2C驱动0.96吋OLED

以上就是【GD32L233C-START】11、硬件I2C驱动0.96吋OLED的详细内容,更多请关注其它相关文章!


# ai  # 浏阳广告营销推广招聘  # 网站口碑营销优化策略  # 的是  # 复用  # 实时监控  # 免费送  # 中国  # 引脚  # 买了  # 才是  # 未来  # 可以看出  # red  # i2c  # 网站在哪里做推广  # 贵州免费关键词排名  # 个人网站不能推广产品吗  # 景区网站建设  # 湛江网站建设路小吃  # 培训网站推广电话多少号  # 推广营销模式有哪些类型  # 玩法变了 淘宝seo 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: 如何用Transformer BEV克服自动驾驶的极端情况?  AI连线 | 专访风平智能CEO林洪祥:让AI数字人拥有漂亮的外表和有趣的灵魂,安全问题是重要考量  ​日媒:AI高效解析纳斯卡地画  人工智能自己玩自己  揭秘AI数字人语录:抖音AI小和尚、老者语录能赚钱吗?  长宁这家企业在世界人工智能大会上荣获“蓝鼎奖”  Xreal AR 眼镜用投屏盒子 Beam 发布:分体式设计,到手 699 元  探索AI前沿理念 2025全球人工智能技术大会在杭州开幕  人工智能即将进入Windows:企业准备好安全策略设置了吗?  QQ音乐业内率先推出「AI一起听」功能,领取你的AI听歌助手  AIGC 风潮刮到游戏产业,巨人网络与阿里云达成“游戏 +AI ”合作  世界人工智能大会高合发表演讲,HiPhi Y即将全球上市  山东机器人编程:Scratch编程基础,认识舞台!~济南机器人编程  斑马推出全新升级版思维机:以人工智能为核心的交互式学习体验  华为云发布华为云盘古模型3.0和升腾AI云服务,亮点亮相2025华为开发者大会  云深处与昇腾CANN携手合作:开设ROS四足机器狗开发训练营  标贝科技亮相国际顶会ICASSP2025 加速布局海外AI数据市场  广州团建公司方案 | 绝密飞行 → X-PLANE无人机团建主题团建  2025“春晖杯”人工智能专场对接活动举办  智能机器人正在彻底改变客户服务  杭州举办第19届亚运会,主题为「亚运元宇宙」的发布仪式举行  MIT开发“PhotoGuard”技术保护图像免遭恶意AI编辑  昇腾AI & 讯飞星火:深度联手,共话国产大模型“大未来”  传Meta 2025年推出首款AR眼镜,采用军用级别材料,计划生产1000台  RoboNeo操作教程  昇腾AI大模型训推一体化解决方案将在WAIC发布  编程已死,AI 当立?教授公开“唱反调”:AI 还帮不了程序员  西班牙小鲜肉*视频在网上疯传,本人发文澄清:是AI换脸的假视频!  英伟达推出 L40S GPU,AI 推理性能超过 A100 约 1.2 倍  中国AI公有云市场2025年逆势蓬勃增长,增速高达80.6%  中国移动主导创立元宇宙产业联盟,包括科大讯飞、芒果TV等在内,共24家成员  Valve Index VR 头显销量下滑,上市四年的长青树渐失光彩  宇宙探索下一阶段,机器代替人类,AI会在太空探索中取代人类吗?  图灵奖得主Hinton:我已经老了,如何控制比人类更聪明的AI交给你们了  微软Xbox称VR和AR还需要时间 先玩大的  马斯克回应“人工智能让一切变得更好”:我们已经是半机器人了  全新升级的广州麦当劳:面积最大餐厅正式引入智慧机器人  刊·见 | 捕捉人工智能领域最新动态?收藏Applied Artificial Intelligence  郭帆谈ChatGPT:电影行业需要创新,否则人工智能将让电影变得平庸  世界人工智能大会(WAIC 2025)点燃魔都,博尔捷数字科技携前沿技术产品亮相  特斯拉首发人形机器人“擎天柱”亮相世界人工智能大会  外科医生的智能助手,“机器人手术”得到补充商业医保覆盖  加强高质量数据供应能力,促进通用人工智能大模型领域的创新  华为AI大模型将融入HarmonyOS 4  微软向美国政府提供GPT的大模型,安全性如何保证?  AI行业盛会大咖云集!Sam Altam、“AI教父”......一文看懂最新观点  首个算网生态体!中国移动元宇宙产业联盟正式成立  中科院自研新一代 AI 大模型“紫东太初 2.0”问世  读创正式上线“读创AI聊”功能  全新“AI助手”!讯飞星火助手中心人机协作共创新生态 

 2025-04-25

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.