zhange 发表于 2024-5-25 07:33:26

Ai32驱动12864显示网络天气学习记录

本帖最后由 DebugLab 于 2024-11-27 13:36 编辑

都说站在巨人的肩上看得远,我们也来个移植。
就用下面这个版主的IIC驱动OLED12864代码

版主用的是硬件iic切记不是模拟的



zhange 发表于 2024-5-25 07:39:15

1.接屏幕


用的是官方送的9.62试验箱屏幕是iic通信的







看试验箱图纸选择 2.42.5 管脚做iic时钟信号线 实验箱上都标注这哪   没有的   直接接2.4到2.5 管脚就可以了





zhange 发表于 2024-5-25 07:43:31




没用实验箱这边的 I2C/SPI 接口




2.接线,下载程序
一次就亮,版主代码真给力。。。




下面开始解读代码。。。。

zhange 发表于 2024-5-25 07:46:38

3.main解读


#defineDELAY_TIME   2000      



delay_ms(DELAY_TIME);                                                   //延时


上边这是一对   控制延时时间相加延时改动 2000 即可



zhange 发表于 2024-5-25 08:01:02

4.main解读


标注的比较清楚我们只用到了字符和汉字显示其他的全部删除

////-----------------------------------------显示字符-----------------------------------------   
//    OLED_BuffClear();                                                       //清除全部缓存
//    OLED_BuffShowString(0,0,"HEELO ,WELCOME TO USE STC32&OLED12864!",0);      //显示数据
//    OLED_BuffShow();                                                      //将缓存写入显示屏显示
//    delay_ms(DELAY_TIME);                                                   //延时       
   
////-----------------------------------------显示汉字-----------------------------------------   
//    OLED_BuffClear();                                                       //清除全部缓存
//    OLED_BuffShowString(0,0,"你好,欢迎使用STC 驱\xfd动OLED12864的历程",0);      //显示数据
//    OLED_BuffShow();                                                      //将缓存写入显示屏显示
//    delay_ms(DELAY_TIME);                                                   //延时       

zhange 发表于 2024-5-25 08:03:41

5.main解读


主要显示函数如下 回到定义处查看
    OLED_BuffShowString();                                    //显示数据
    OLED_BuffShowChar32();                                          //显示数字1




zhange 发表于 2024-5-25 08:07:57

6.main函数解读


先来看这个

void OLED_BuffShowString(unsigned char x,unsigned char y,char *s,u8 mode)
{
    char s_num;
        while(*s != '\0')       //字符串不为空,循环
        {
      if ((unsigned char)*s < 0x80)   //根据输入数据的大小判断是字符还是汉字,
      {
            OLED_BuffShowChar(x,y,*s,mode);
            x+=8;
            s++;
      }
      else
      {
            s_num = *s ;
            s_num = *(s+1) ;
            OLED_BuffShowGBK(x,y,s_num,mode);
            x+=16;
            s+=2;
      }
                if(x>127)
      {
            x=0;
            y+=2;
      }
        }      
}void OLED_BuffShowString(unsigned char x,unsigned char y,char *s,u8 mode)主要看这里



unsigned char x:x轴的坐标



unsigned char y :y轴的坐标



char *s :传入的显示字符指针一般都是字符串名字


u8 mode :模式   没用到盲猜正反显

zhange 发表于 2024-5-25 08:11:17

7.main函数解读


再来看这个控制单个数字显示或字母

void OLED_BuffShowChar32(unsigned charx,unsigned chary,u8 num, u8 mode)   
{
    unsigned char j,k;
    for( j=0;j<4;j++ )
    {
      for( k=0;k<16;k++ )
      {
            if( mode==0 )
                ShowBUFF=lib_num1632;
            else
                ShowBUFF=~lib_num1632;
      }
    }            
}

unsigned char x:同上


unsigned char y:同上


u8 num:8位的值


u8 mode:模式同上

zhange 发表于 2024-5-25 08:15:10

本帖最后由 zhange 于 2024-5-25 08:19 编辑

8.改动代码测试


已经知道了这两个现实函数,我们改动下

先定义个字符串


unsigned char hanzi[]=      
{
    "欢迎使用"
};


引用测试看了下数字的引用直接改成自己喜欢的数字即可备注是原来的我没改其实显示的是08:09

//-----------------------------------------显示32大字-----------------------------------------   
    OLED_BuffClear();                                                       //清除全部缓存
    OLED_BuffShowString(40,0,hanzi,0);                                    //显示数据
    OLED_BuffShowChar32(24,3,0,0);                                          //显示数字1
    OLED_BuffShowChar32(40,3,8,0);                                          //显示数字0
    OLED_BuffShowChar32(56,3,10,0);                                       //显示:
    OLED_BuffShowChar32(72,3,0,0);                                          //显示数字5
    OLED_BuffShowChar32(88,3,9,0);                                          //显示数字5
    OLED_BuffShow();                                                      //将缓存写入显示屏显示      
    delay_ms(DELAY_TIME);                                                   //延时         
测试成功



zhange 发表于 2024-5-25 08:21:58

9. 补充下12864知识


这个貌似是最多一行显示8个汉字   128/8= 16   一个汉字占16个点
一列最多4个汉字   64/4 = 16   


下面开始添加字库。上面的欢迎使用能显示是版主添加好的
页: [1] 2 3 4 5
查看完整版本: Ai32驱动12864显示网络天气学习记录