模拟IIC控制oled屏实验

[复制链接]
1079|10
 楼主| 4c1l 发表于 2023-4-30 21:27 | 显示全部楼层 |阅读模式
1、用GD32模拟IIC时序,第一步是端口的定义和配置可以很方便的移植IIC程序,核心代码如下:
  1. #define IIC_SCL_PIN                         GPIO_PIN_6
  2. #define IIC_SCL_GPIO_PORT                   GPIOB
  3. #define IIC_SCL_GPIO_CLK                    RCU_GPIOB

  4. #define IIC_SDA_PIN                         GPIO_PIN_7
  5. #define IIC_SDA_GPIO_PORT                   GPIOB
  6. #define IIC_SDA_GPIO_CLK                    RCU_GPIOB

  7. #define OLED_SCLK_Clr() gpio_bit_reset(IIC_SCL_GPIO_PORT,IIC_SCL_PIN)
  8. #define OLED_SCLK_Set() gpio_bit_set(IIC_SCL_GPIO_PORT,IIC_SCL_PIN)

  9. #define OLED_SDIN_Clr() gpio_bit_reset(IIC_SDA_GPIO_PORT,IIC_SDA_PIN)
  10. #define OLED_SDIN_Set() gpio_bit_set(IIC_SDA_GPIO_PORT,IIC_SDA_PIN)
  11. int iic_init(void)
  12. {
  13.     rcu_periph_clock_enable(IIC_SCL_GPIO_CLK);
  14.     rcu_periph_clock_enable(IIC_SDA_GPIO_CLK);
  15.    
  16.         /* configure led GPIO port */
  17.     gpio_mode_set(IIC_SCL_GPIO_PORT, GPIO_MODE_OUTPUT, GPIO_PUPD_PULLUP,IIC_SCL_PIN);
  18.     gpio_output_options_set(IIC_SCL_GPIO_PORT, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,IIC_SCL_PIN);
  19.         
  20.         gpio_mode_set(IIC_SDA_GPIO_PORT, GPIO_MODE_OUTPUT, GPIO_PUPD_PULLUP,IIC_SDA_PIN);
  21.     gpio_output_options_set(IIC_SDA_GPIO_PORT, GPIO_OTYPE_OD, GPIO_OSPEED_50MHZ,IIC_SDA_PIN);

  22.     return 0;
  23. }


 楼主| 4c1l 发表于 2023-4-30 21:27 | 显示全部楼层
2.IIC时序模拟
  1. /**********************************************
  2. //IIC Start
  3. **********************************************/
  4. void IIC_Start()
  5. {

  6.     OLED_SCLK_Set() ;
  7.     OLED_SDIN_Set();
  8.     OLED_SDIN_Clr();
  9.     OLED_SCLK_Clr();
  10. }

  11. /**********************************************
  12. //IIC Stop
  13. **********************************************/
  14. void IIC_Stop()
  15. {
  16. OLED_SCLK_Set() ;
  17. //    OLED_SCLK_Clr();
  18.     OLED_SDIN_Clr();
  19.     OLED_SDIN_Set();
  20.    
  21. }

  22. void IIC_Wait_Ack()
  23. {

  24.    
  25.     OLED_SCLK_Set() ;
  26.     OLED_SCLK_Clr();
  27. }
  28. /**********************************************
  29. // IIC Write byte
  30. **********************************************/

  31. void Write_IIC_Byte(unsigned char IIC_Byte)
  32. {
  33.     unsigned char i;
  34.     unsigned char m,da;
  35.     da=IIC_Byte;
  36.     OLED_SCLK_Clr();
  37.     for(i=0;i<8;i++)        
  38.     {
  39.             m=da;
  40.         //    OLED_SCLK_Clr();
  41.         m=m&0x80;
  42.         if(m==0x80)
  43.         {OLED_SDIN_Set();}
  44.         else OLED_SDIN_Clr();
  45.             da=da<<1;
  46.         OLED_SCLK_Set();
  47.         OLED_SCLK_Clr();
  48.         }
  49. }
  50. /**********************************************
  51. // IIC Write Command
  52. **********************************************/
  53. void Write_IIC_Command(unsigned char IIC_Command)
  54. {
  55.    IIC_Start();
  56.    Write_IIC_Byte(0x78);            //Slave address,SA0=0
  57.     IIC_Wait_Ack();   
  58.    Write_IIC_Byte(0x00);            //write command
  59.     IIC_Wait_Ack();   
  60.    Write_IIC_Byte(IIC_Command);
  61.     IIC_Wait_Ack();   
  62.    IIC_Stop();
  63. }
  64. /**********************************************
  65. // IIC Write Data
  66. **********************************************/
  67. void Write_IIC_Data(unsigned char IIC_Data)
  68. {
  69.    IIC_Start();
  70.    Write_IIC_Byte(0x78);            //D/C#=0; R/W#=0
  71.     IIC_Wait_Ack();   
  72.    Write_IIC_Byte(0x40);            //write data
  73.     IIC_Wait_Ack();   
  74.    Write_IIC_Byte(IIC_Data);
  75.     IIC_Wait_Ack();   
  76.    IIC_Stop();
  77. }
 楼主| 4c1l 发表于 2023-4-30 21:27 | 显示全部楼层
3.写调用IIC函数控制oled屏函数:
  1. #define OLED_CMD  0    //写命令
  2. #define OLED_DATA 1    //写数据
  3. #define OLED_MODE 0
  4. void OLED_WR_Byte(unsigned dat,unsigned cmd)
  5. {
  6.     if(cmd)
  7.     {
  8.             Write_IIC_Data(dat);
  9.     }
  10.     else
  11.         {
  12.             Write_IIC_Command(dat);   
  13.         }
  14. }
  15. void OLED_Set_Pos(unsigned char x, unsigned char y)
  16. {     OLED_WR_Byte(0xb0+y,OLED_CMD);
  17.     OLED_WR_Byte(((x&0xf0)>>4)|0x10,OLED_CMD);
  18.     OLED_WR_Byte((x&0x0f),OLED_CMD);
  19. }         
  20. //开启OLED显示   
  21. void OLED_Display_On(void)
  22. {
  23.     OLED_WR_Byte(0X8D,OLED_CMD);  //SET DCDC命令
  24.     OLED_WR_Byte(0X14,OLED_CMD);  //DCDC ON
  25.     OLED_WR_Byte(0XAF,OLED_CMD);  //DISPLAY ON
  26. }
  27. //关闭OLED显示     
  28. void OLED_Display_Off(void)
  29. {
  30.     OLED_WR_Byte(0X8D,OLED_CMD);  //SET DCDC命令
  31.     OLED_WR_Byte(0X10,OLED_CMD);  //DCDC OFF
  32.     OLED_WR_Byte(0XAE,OLED_CMD);  //DISPLAY OFF
  33. }                        
  34. //清屏函数,清完屏,整个屏幕是黑色的!和没点亮一样!!!      
  35. void OLED_Clear(void)  
  36. {  
  37.     u8 i,n;            
  38.     for(i=0;i<8;i++)  
  39.     {  
  40.         OLED_WR_Byte (0xb0+i,OLED_CMD);    //设置页地址(0~7)
  41.         OLED_WR_Byte (0x00,OLED_CMD);      //设置显示位置—列低地址
  42.         OLED_WR_Byte (0x10,OLED_CMD);      //设置显示位置—列高地址   
  43.         for(n=0;n<128;n++)OLED_WR_Byte(0,OLED_DATA);
  44.     } //更新显示
  45. }
  46. void OLED_On(void)  
  47. {  
  48.     u8 i,n;            
  49.     for(i=0;i<8;i++)  
  50.     {  
  51.         OLED_WR_Byte (0xb0+i,OLED_CMD);    //设置页地址(0~7)
  52.         OLED_WR_Byte (0x00,OLED_CMD);      //设置显示位置—列低地址
  53.         OLED_WR_Byte (0x10,OLED_CMD);      //设置显示位置—列高地址   
  54.         for(n=0;n<128;n++)OLED_WR_Byte(1,OLED_DATA);
  55.     } //更新显示
  56. }
  57. //在指定位置显示一个字符,包括部分字符
  58. //x:0~127
  59. //y:0~63
  60. //mode:0,反白显示;1,正常显示                 
  61. //size:选择字体 16/12
  62. void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 Char_Size)
  63. {         
  64.     unsigned char c=0,i=0;   
  65.         c=chr-' ';//得到偏移后的值            
  66.         if(x>Max_Column-1){x=0;y=y+2;}
  67.         if(Char_Size ==16)
  68.             {
  69.             OLED_Set_Pos(x,y);   
  70.             for(i=0;i<8;i++)
  71.             OLED_WR_Byte(F8X16[c*16+i],OLED_DATA);
  72.             OLED_Set_Pos(x,y+1);
  73.             for(i=0;i<8;i++)
  74.             OLED_WR_Byte(F8X16[c*16+i+8],OLED_DATA);
  75.             }
  76.             else {   
  77.                 OLED_Set_Pos(x,y);
  78.                 for(i=0;i<6;i++)
  79.                 OLED_WR_Byte(F6x8[c][i],OLED_DATA);
  80.                
  81.             }
  82. }
  83. //m^n函数
  84. u32 oled_pow(u8 m,u8 n)
  85. {
  86.     u32 result=1;     
  87.     while(n--)result*=m;   
  88.     return result;
  89. }                  
  90. //显示2个数字
  91. //x,y :起点坐标     
  92. //len :数字的位数
  93. //size:字体大小
  94. //mode:模式    0,填充模式;1,叠加模式
  95. //num:数值(0~4294967295);               
  96. void OLED_ShowNum(u8 x,u8 y,u32 num,u8 len,u8 size2)
  97. {            
  98.     u8 t,temp;
  99.     u8 enshow=0;                           
  100.     for(t=0;t<len;t++)
  101.     {
  102.         temp=(num/oled_pow(10,len-t-1))%10;
  103.         if(enshow==0&&t<(len-1))
  104.         {
  105.             if(temp==0)
  106.             {
  107.                 OLED_ShowChar(x+(size2/2)*t,y,' ',size2);
  108.                 continue;
  109.             }else enshow=1;
  110.               
  111.         }
  112.          OLED_ShowChar(x+(size2/2)*t,y,temp+'0',size2);
  113.     }
  114. }
  115. //显示一个字符号串
  116. void OLED_ShowString(u8 x,u8 y,u8 *chr,u8 Char_Size)
  117. {
  118.     unsigned char j=0;
  119.     while (chr[j]!='\0')
  120.     {        OLED_ShowChar(x,y,chr[j],Char_Size);
  121.             x+=8;
  122.         if(x>120){x=0;y+=2;}
  123.             j++;
  124.     }
  125. }
  126. //显示汉字
  127. void OLED_ShowCHinese(u8 x,u8 y,u8 no)
  128. {                     
  129.     u8 t,adder=0;
  130.     OLED_Set_Pos(x,y);   
  131.     for(t=0;t<16;t++)
  132.         {
  133.                 OLED_WR_Byte(Hzk[2*no][t],OLED_DATA);
  134.                 adder+=1;
  135.      }   
  136.         OLED_Set_Pos(x,y+1);   
  137.     for(t=0;t<16;t++)
  138.             {   
  139.                 OLED_WR_Byte(Hzk[2*no+1][t],OLED_DATA);
  140.                 adder+=1;
  141.       }                    
  142. }
  143. //初始化SSD1306                        
  144. void OLED_Init(void)
  145. {     

  146.     OLED_WR_Byte(0xAE,OLED_CMD);//--display off
  147.     OLED_WR_Byte(0x00,OLED_CMD);//---set low column address
  148.     OLED_WR_Byte(0x10,OLED_CMD);//---set high column address
  149.     OLED_WR_Byte(0x40,OLED_CMD);//--set start line address  
  150.     OLED_WR_Byte(0xB0,OLED_CMD);//--set page address
  151.     OLED_WR_Byte(0x81,OLED_CMD); // contract control
  152.     OLED_WR_Byte(0xFF,OLED_CMD);//--128   
  153.     OLED_WR_Byte(0xA1,OLED_CMD);//set segment remap
  154.     OLED_WR_Byte(0xA6,OLED_CMD);//--normal / reverse
  155.     OLED_WR_Byte(0xA8,OLED_CMD);//--set multiplex ratio(1 to 64)
  156.     OLED_WR_Byte(0x3F,OLED_CMD);//--1/32 duty
  157.     OLED_WR_Byte(0xC8,OLED_CMD);//Com scan direction
  158.     OLED_WR_Byte(0xD3,OLED_CMD);//-set display offset
  159.     OLED_WR_Byte(0x00,OLED_CMD);//
  160.    
  161.     OLED_WR_Byte(0xD5,OLED_CMD);//set osc division
  162.     OLED_WR_Byte(0x80,OLED_CMD);//
  163.    
  164.     OLED_WR_Byte(0xD8,OLED_CMD);//set area color mode off
  165.     OLED_WR_Byte(0x05,OLED_CMD);//
  166.    
  167.     OLED_WR_Byte(0xD9,OLED_CMD);//Set Pre-Charge Period
  168.     OLED_WR_Byte(0xF1,OLED_CMD);//
  169.    
  170.     OLED_WR_Byte(0xDA,OLED_CMD);//set com pin configuartion
  171.     OLED_WR_Byte(0x12,OLED_CMD);//
  172.    
  173.     OLED_WR_Byte(0xDB,OLED_CMD);//set Vcomh
  174.     OLED_WR_Byte(0x30,OLED_CMD);//
  175.    
  176.     OLED_WR_Byte(0x8D,OLED_CMD);//set charge pump enable
  177.     OLED_WR_Byte(0x14,OLED_CMD);//
  178.    
  179.     OLED_WR_Byte(0xAF,OLED_CMD);//--turn on oled panel
  180. }
 楼主| 4c1l 发表于 2023-4-30 21:28 | 显示全部楼层
4.字库的定义,定义了68字符,816字符,和部分汉字,汉字取字模方式为:列行式,逆向。

  1. #ifndef __OLEDFONT_H
  2. #define __OLEDFONT_H        
  3. //常用ASCII表
  4. //偏移量32
  5. //ASCII字符集
  6. //偏移量32
  7. //大小:12*6
  8. /************************************6*8的点阵************************************/
  9. unsigned char const  F6x8[][6] =        
  10. {
  11. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,// sp
  12. 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00,// !
  13. 0x00, 0x00, 0x07, 0x00, 0x07, 0x00,// "
  14. 0x00, 0x14, 0x7f, 0x14, 0x7f, 0x14,// #
  15. 0x00, 0x24, 0x2a, 0x7f, 0x2a, 0x12,// $
  16. 0x00, 0x62, 0x64, 0x08, 0x13, 0x23,// %
  17. 0x00, 0x36, 0x49, 0x55, 0x22, 0x50,// &
  18. 0x00, 0x00, 0x05, 0x03, 0x00, 0x00,// '
  19. 0x00, 0x00, 0x1c, 0x22, 0x41, 0x00,// (
  20. 0x00, 0x00, 0x41, 0x22, 0x1c, 0x00,// )
  21. 0x00, 0x14, 0x08, 0x3E, 0x08, 0x14,// *
  22. 0x00, 0x08, 0x08, 0x3E, 0x08, 0x08,// +
  23. 0x00, 0x00, 0x00, 0xA0, 0x60, 0x00,// ,
  24. 0x00, 0x08, 0x08, 0x08, 0x08, 0x08,// -
  25. 0x00, 0x00, 0x60, 0x60, 0x00, 0x00,// .
  26. 0x00, 0x20, 0x10, 0x08, 0x04, 0x02,// /
  27. 0x00, 0x3E, 0x51, 0x49, 0x45, 0x3E,// 0
  28. 0x00, 0x00, 0x42, 0x7F, 0x40, 0x00,// 1
  29. 0x00, 0x42, 0x61, 0x51, 0x49, 0x46,// 2
  30. 0x00, 0x21, 0x41, 0x45, 0x4B, 0x31,// 3
  31. 0x00, 0x18, 0x14, 0x12, 0x7F, 0x10,// 4
  32. 0x00, 0x27, 0x45, 0x45, 0x45, 0x39,// 5
  33. 0x00, 0x3C, 0x4A, 0x49, 0x49, 0x30,// 6
  34. 0x00, 0x01, 0x71, 0x09, 0x05, 0x03,// 7
  35. 0x00, 0x36, 0x49, 0x49, 0x49, 0x36,// 8
  36. 0x00, 0x06, 0x49, 0x49, 0x29, 0x1E,// 9
  37. 0x00, 0x00, 0x36, 0x36, 0x00, 0x00,// :
  38. 0x00, 0x00, 0x56, 0x36, 0x00, 0x00,// ;
  39. 0x00, 0x08, 0x14, 0x22, 0x41, 0x00,// <
  40. 0x00, 0x14, 0x14, 0x14, 0x14, 0x14,// =
  41. 0x00, 0x00, 0x41, 0x22, 0x14, 0x08,// >
  42. 0x00, 0x02, 0x01, 0x51, 0x09, 0x06,// ?
  43. 0x00, 0x32, 0x49, 0x59, 0x51, 0x3E,// @
  44. 0x00, 0x7C, 0x12, 0x11, 0x12, 0x7C,// A
  45. 0x00, 0x7F, 0x49, 0x49, 0x49, 0x36,// B
  46. 0x00, 0x3E, 0x41, 0x41, 0x41, 0x22,// C
  47. 0x00, 0x7F, 0x41, 0x41, 0x22, 0x1C,// D
  48. 0x00, 0x7F, 0x49, 0x49, 0x49, 0x41,// E
  49. 0x00, 0x7F, 0x09, 0x09, 0x09, 0x01,// F
  50. 0x00, 0x3E, 0x41, 0x49, 0x49, 0x7A,// G
  51. 0x00, 0x7F, 0x08, 0x08, 0x08, 0x7F,// H
  52. 0x00, 0x00, 0x41, 0x7F, 0x41, 0x00,// I
  53. 0x00, 0x20, 0x40, 0x41, 0x3F, 0x01,// J
  54. 0x00, 0x7F, 0x08, 0x14, 0x22, 0x41,// K
  55. 0x00, 0x7F, 0x40, 0x40, 0x40, 0x40,// L
  56. 0x00, 0x7F, 0x02, 0x0C, 0x02, 0x7F,// M
  57. 0x00, 0x7F, 0x04, 0x08, 0x10, 0x7F,// N
  58. 0x00, 0x3E, 0x41, 0x41, 0x41, 0x3E,// O
  59. 0x00, 0x7F, 0x09, 0x09, 0x09, 0x06,// P
  60. 0x00, 0x3E, 0x41, 0x51, 0x21, 0x5E,// Q
  61. 0x00, 0x7F, 0x09, 0x19, 0x29, 0x46,// R
  62. 0x00, 0x46, 0x49, 0x49, 0x49, 0x31,// S
  63. 0x00, 0x01, 0x01, 0x7F, 0x01, 0x01,// T
  64. 0x00, 0x3F, 0x40, 0x40, 0x40, 0x3F,// U
  65. 0x00, 0x1F, 0x20, 0x40, 0x20, 0x1F,// V
  66. 0x00, 0x3F, 0x40, 0x38, 0x40, 0x3F,// W
  67. 0x00, 0x63, 0x14, 0x08, 0x14, 0x63,// X
  68. 0x00, 0x07, 0x08, 0x70, 0x08, 0x07,// Y
  69. 0x00, 0x61, 0x51, 0x49, 0x45, 0x43,// Z
  70. 0x00, 0x00, 0x7F, 0x41, 0x41, 0x00,// [
  71. 0x00, 0x55, 0x2A, 0x55, 0x2A, 0x55,// 55
  72. 0x00, 0x00, 0x41, 0x41, 0x7F, 0x00,// ]
  73. 0x00, 0x04, 0x02, 0x01, 0x02, 0x04,// ^
  74. 0x00, 0x40, 0x40, 0x40, 0x40, 0x40,// _
  75. 0x00, 0x00, 0x01, 0x02, 0x04, 0x00,// '
  76. 0x00, 0x20, 0x54, 0x54, 0x54, 0x78,// a
  77. 0x00, 0x7F, 0x48, 0x44, 0x44, 0x38,// b
  78. 0x00, 0x38, 0x44, 0x44, 0x44, 0x20,// c
  79. 0x00, 0x38, 0x44, 0x44, 0x48, 0x7F,// d
  80. 0x00, 0x38, 0x54, 0x54, 0x54, 0x18,// e
  81. 0x00, 0x08, 0x7E, 0x09, 0x01, 0x02,// f
  82. 0x00, 0x18, 0xA4, 0xA4, 0xA4, 0x7C,// g
  83. 0x00, 0x7F, 0x08, 0x04, 0x04, 0x78,// h
  84. 0x00, 0x00, 0x44, 0x7D, 0x40, 0x00,// i
  85. 0x00, 0x40, 0x80, 0x84, 0x7D, 0x00,// j
  86. 0x00, 0x7F, 0x10, 0x28, 0x44, 0x00,// k
  87. 0x00, 0x00, 0x41, 0x7F, 0x40, 0x00,// l
  88. 0x00, 0x7C, 0x04, 0x18, 0x04, 0x78,// m
  89. 0x00, 0x7C, 0x08, 0x04, 0x04, 0x78,// n
  90. 0x00, 0x38, 0x44, 0x44, 0x44, 0x38,// o
  91. 0x00, 0xFC, 0x24, 0x24, 0x24, 0x18,// p
  92. 0x00, 0x18, 0x24, 0x24, 0x18, 0xFC,// q
  93. 0x00, 0x7C, 0x08, 0x04, 0x04, 0x08,// r
  94. 0x00, 0x48, 0x54, 0x54, 0x54, 0x20,// s
  95. 0x00, 0x04, 0x3F, 0x44, 0x40, 0x20,// t
  96. 0x00, 0x3C, 0x40, 0x40, 0x20, 0x7C,// u
  97. 0x00, 0x1C, 0x20, 0x40, 0x20, 0x1C,// v
  98. 0x00, 0x3C, 0x40, 0x30, 0x40, 0x3C,// w
  99. 0x00, 0x44, 0x28, 0x10, 0x28, 0x44,// x
  100. 0x00, 0x1C, 0xA0, 0xA0, 0xA0, 0x7C,// y
  101. 0x00, 0x44, 0x64, 0x54, 0x4C, 0x44,// z
  102. 0x14, 0x14, 0x14, 0x14, 0x14, 0x14,// horiz lines
  103. };
  104. /****************************************8*16的点阵************************************/
  105. const unsigned char  F8X16[]=      
  106. {
  107.   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,// 0
  108.   0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x30,0x00,0x00,0x00,//! 1
  109.   0x00,0x10,0x0C,0x06,0x10,0x0C,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//" 2
  110.   0x40,0xC0,0x78,0x40,0xC0,0x78,0x40,0x00,0x04,0x3F,0x04,0x04,0x3F,0x04,0x04,0x00,//# 3
  111.   0x00,0x70,0x88,0xFC,0x08,0x30,0x00,0x00,0x00,0x18,0x20,0xFF,0x21,0x1E,0x00,0x00,//$ 4
  112.   0xF0,0x08,0xF0,0x00,0xE0,0x18,0x00,0x00,0x00,0x21,0x1C,0x03,0x1E,0x21,0x1E,0x00,//% 5
  113.   0x00,0xF0,0x08,0x88,0x70,0x00,0x00,0x00,0x1E,0x21,0x23,0x24,0x19,0x27,0x21,0x10,//& 6
  114.   0x10,0x16,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//' 7
  115.   0x00,0x00,0x00,0xE0,0x18,0x04,0x02,0x00,0x00,0x00,0x00,0x07,0x18,0x20,0x40,0x00,//( 8
  116.   0x00,0x02,0x04,0x18,0xE0,0x00,0x00,0x00,0x00,0x40,0x20,0x18,0x07,0x00,0x00,0x00,//) 9
  117.   0x40,0x40,0x80,0xF0,0x80,0x40,0x40,0x00,0x02,0x02,0x01,0x0F,0x01,0x02,0x02,0x00,//* 10
  118.   0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x1F,0x01,0x01,0x01,0x00,//+ 11
  119.   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xB0,0x70,0x00,0x00,0x00,0x00,0x00,//, 12
  120.   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,//- 13
  121.   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00,//. 14
  122.   0x00,0x00,0x00,0x00,0x80,0x60,0x18,0x04,0x00,0x60,0x18,0x06,0x01,0x00,0x00,0x00,/// 15
  123.   0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,//0 16
  124.   0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//1 17
  125.   0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,//2 18
  126.   0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,//3 19
  127.   0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,//4 20
  128.   0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,//5 21
  129.   0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,//6 22
  130.   0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,//7 23
  131.   0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,//8 24
  132.   0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00,//9 25
  133.   0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,//: 26
  134.   0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x60,0x00,0x00,0x00,0x00,//; 27
  135.   0x00,0x00,0x80,0x40,0x20,0x10,0x08,0x00,0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x00,//< 28
  136.   0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,//= 29
  137.   0x00,0x08,0x10,0x20,0x40,0x80,0x00,0x00,0x00,0x20,0x10,0x08,0x04,0x02,0x01,0x00,//> 30
  138.   0x00,0x70,0x48,0x08,0x08,0x08,0xF0,0x00,0x00,0x00,0x00,0x30,0x36,0x01,0x00,0x00,//? 31
  139.   0xC0,0x30,0xC8,0x28,0xE8,0x10,0xE0,0x00,0x07,0x18,0x27,0x24,0x23,0x14,0x0B,0x00,//[url=home.php?mod=space&uid=72445]@[/url] 32
  140.   0x00,0x00,0xC0,0x38,0xE0,0x00,0x00,0x00,0x20,0x3C,0x23,0x02,0x02,0x27,0x38,0x20,//A 33
  141.   0x08,0xF8,0x88,0x88,0x88,0x70,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x11,0x0E,0x00,//B 34
  142.   0xC0,0x30,0x08,0x08,0x08,0x08,0x38,0x00,0x07,0x18,0x20,0x20,0x20,0x10,0x08,0x00,//C 35
  143.   0x08,0xF8,0x08,0x08,0x08,0x10,0xE0,0x00,0x20,0x3F,0x20,0x20,0x20,0x10,0x0F,0x00,//D 36
  144.   0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x20,0x23,0x20,0x18,0x00,//E 37
  145.   0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x00,0x03,0x00,0x00,0x00,//F 38
  146.   0xC0,0x30,0x08,0x08,0x08,0x38,0x00,0x00,0x07,0x18,0x20,0x20,0x22,0x1E,0x02,0x00,//G 39
  147.   0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x20,0x3F,0x21,0x01,0x01,0x21,0x3F,0x20,//H 40
  148.   0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//I 41
  149.   0x00,0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,0x00,//J 42
  150.   0x08,0xF8,0x88,0xC0,0x28,0x18,0x08,0x00,0x20,0x3F,0x20,0x01,0x26,0x38,0x20,0x00,//K 43
  151.   0x08,0xF8,0x08,0x00,0x00,0x00,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x20,0x30,0x00,//L 44
  152.   0x08,0xF8,0xF8,0x00,0xF8,0xF8,0x08,0x00,0x20,0x3F,0x00,0x3F,0x00,0x3F,0x20,0x00,//M 45
  153.   0x08,0xF8,0x30,0xC0,0x00,0x08,0xF8,0x08,0x20,0x3F,0x20,0x00,0x07,0x18,0x3F,0x00,//N 46
  154.   0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x10,0x20,0x20,0x20,0x10,0x0F,0x00,//O 47
  155.   0x08,0xF8,0x08,0x08,0x08,0x08,0xF0,0x00,0x20,0x3F,0x21,0x01,0x01,0x01,0x00,0x00,//P 48
  156.   0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x18,0x24,0x24,0x38,0x50,0x4F,0x00,//Q 49
  157.   0x08,0xF8,0x88,0x88,0x88,0x88,0x70,0x00,0x20,0x3F,0x20,0x00,0x03,0x0C,0x30,0x20,//R 50
  158.   0x00,0x70,0x88,0x08,0x08,0x08,0x38,0x00,0x00,0x38,0x20,0x21,0x21,0x22,0x1C,0x00,//S 51
  159.   0x18,0x08,0x08,0xF8,0x08,0x08,0x18,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,//T 52
  160.   0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,//U 53
  161.   0x08,0x78,0x88,0x00,0x00,0xC8,0x38,0x08,0x00,0x00,0x07,0x38,0x0E,0x01,0x00,0x00,//V 54
  162.   0xF8,0x08,0x00,0xF8,0x00,0x08,0xF8,0x00,0x03,0x3C,0x07,0x00,0x07,0x3C,0x03,0x00,//W 55
  163.   0x08,0x18,0x68,0x80,0x80,0x68,0x18,0x08,0x20,0x30,0x2C,0x03,0x03,0x2C,0x30,0x20,//X 56
  164.   0x08,0x38,0xC8,0x00,0xC8,0x38,0x08,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,//Y 57
  165.   0x10,0x08,0x08,0x08,0xC8,0x38,0x08,0x00,0x20,0x38,0x26,0x21,0x20,0x20,0x18,0x00,//Z 58
  166.   0x00,0x00,0x00,0xFE,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x7F,0x40,0x40,0x40,0x00,//[ 59
  167.   0x00,0x0C,0x30,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x06,0x38,0xC0,0x00,//\ 60
  168.   0x00,0x02,0x02,0x02,0xFE,0x00,0x00,0x00,0x00,0x40,0x40,0x40,0x7F,0x00,0x00,0x00,//] 61
  169.   0x00,0x00,0x04,0x02,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//^ 62
  170.   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,//_ 63
  171.   0x00,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//` 64
  172.   0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x19,0x24,0x22,0x22,0x22,0x3F,0x20,//a 65
  173.   0x08,0xF8,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x3F,0x11,0x20,0x20,0x11,0x0E,0x00,//b 66
  174.   0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x0E,0x11,0x20,0x20,0x20,0x11,0x00,//c 67
  175.   0x00,0x00,0x00,0x80,0x80,0x88,0xF8,0x00,0x00,0x0E,0x11,0x20,0x20,0x10,0x3F,0x20,//d 68
  176.   0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x22,0x22,0x22,0x22,0x13,0x00,//e 69
  177.   0x00,0x80,0x80,0xF0,0x88,0x88,0x88,0x18,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//f 70
  178.   0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x6B,0x94,0x94,0x94,0x93,0x60,0x00,//g 71
  179.   0x08,0xF8,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,//h 72
  180.   0x00,0x80,0x98,0x98,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//i 73
  181.   0x00,0x00,0x00,0x80,0x98,0x98,0x00,0x00,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,//j 74
  182.   0x08,0xF8,0x00,0x00,0x80,0x80,0x80,0x00,0x20,0x3F,0x24,0x02,0x2D,0x30,0x20,0x00,//k 75
  183.   0x00,0x08,0x08,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//l 76
  184.   0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x20,0x3F,0x20,0x00,0x3F,0x20,0x00,0x3F,//m 77
  185.   0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,//n 78
  186.   0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,//o 79
  187.   0x80,0x80,0x00,0x80,0x80,0x00,0x00,0x00,0x80,0xFF,0xA1,0x20,0x20,0x11,0x0E,0x00,//p 80
  188.   0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x0E,0x11,0x20,0x20,0xA0,0xFF,0x80,//q 81
  189.   0x80,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x20,0x20,0x3F,0x21,0x20,0x00,0x01,0x00,//r 82
  190.   0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x33,0x24,0x24,0x24,0x24,0x19,0x00,//s 83
  191.   0x00,0x80,0x80,0xE0,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x1F,0x20,0x20,0x00,0x00,//t 84
  192.   0x80,0x80,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x1F,0x20,0x20,0x20,0x10,0x3F,0x20,//u 85
  193.   0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x00,0x01,0x0E,0x30,0x08,0x06,0x01,0x00,//v 86
  194.   0x80,0x80,0x00,0x80,0x00,0x80,0x80,0x80,0x0F,0x30,0x0C,0x03,0x0C,0x30,0x0F,0x00,//w 87
  195.   0x00,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x31,0x2E,0x0E,0x31,0x20,0x00,//x 88
  196.   0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x80,0x81,0x8E,0x70,0x18,0x06,0x01,0x00,//y 89
  197.   0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x21,0x30,0x2C,0x22,0x21,0x30,0x00,//z 90
  198.   0x00,0x00,0x00,0x00,0x80,0x7C,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x3F,0x40,0x40,//{ 91
  199.   0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,//| 92
  200.   0x00,0x02,0x02,0x7C,0x80,0x00,0x00,0x00,0x00,0x40,0x40,0x3F,0x00,0x00,0x00,0x00,//} 93
  201.   0x00,0x06,0x01,0x01,0x02,0x02,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//~ 94
  202. };
  203. //汉字,列行式,逆向
  204. unsigned char  Hzk[][32]={
  205. // 兆(0) 易(1) 科(2) 技(3)

  206. {0x00,0x04,0x08,0x30,0x80,0xFF,0x00,0x00,0x00,0xFF,0x40,0x90,0x08,0x04,0x00,0x00},
  207. {0x00,0x84,0x42,0x21,0x18,0x07,0x00,0x00,0x00,0x3F,0x40,0x40,0x41,0x42,0x78,0x00},/*"兆",0*/
  208. {0x00,0x00,0x00,0x00,0x7F,0xC9,0x49,0x49,0x49,0x49,0x49,0x7F,0x00,0x00,0x00,0x00},
  209. {0x00,0x08,0x04,0x42,0x23,0x12,0x8E,0x42,0x32,0x0E,0x42,0x82,0x42,0x3E,0x00,0x00},/*"易",1*/
  210. {0x24,0x24,0xA4,0xFE,0xA3,0x22,0x00,0x22,0xCC,0x00,0x00,0xFF,0x00,0x00,0x00,0x00},
  211. {0x08,0x06,0x01,0xFF,0x00,0x01,0x04,0x04,0x04,0x04,0x04,0xFF,0x02,0x02,0x02,0x00},/*"科",2*/
  212. {0x10,0x10,0x10,0xFF,0x10,0x90,0x08,0x88,0x88,0x88,0xFF,0x88,0x88,0x88,0x08,0x00},
  213. {0x04,0x44,0x82,0x7F,0x01,0x80,0x80,0x40,0x43,0x2C,0x10,0x28,0x46,0x81,0x80,0x00},/*"技",3*/



  214. };

  215. #endif
 楼主| 4c1l 发表于 2023-4-30 21:28 | 显示全部楼层
5.主程序调用oled初始化,显示函数,实现显示:
  1. int main(void)
  2. {
  3. //    gd_led_config();
  4.         iic_init();
  5.     systick_config();

  6. //    unsigned int t=1;
  7.         OLED_Init();            //初始化OLED  
  8.         OLED_Clear();         //清屏函数
  9.                
  10.                 //这个函数显示中文
  11.                 OLED_ShowCHinese(18,0,0);//兆        //第一个形参是列,第二个是行,第三个是显示哪个中文,这里一个字占16宽
  12.                 OLED_ShowCHinese(36,0,1);//易
  13.                 OLED_ShowCHinese(54,0,2);//科
  14.                 OLED_ShowCHinese(72,0,3);//技
  15.                
  16.                 //这个函数显示字符
  17.                 OLED_ShowString(6,3,"GD32F310G-START",16);//第一个形参表示第六行,第二个形参表示排,第三个表示写入的字符,第四个表示字体大小

  18. while(1)
  19.         {            }      
  20. }
 楼主| 4c1l 发表于 2023-4-30 21:29 | 显示全部楼层
6.实验结果:
68228644e6d1f4808e.png
作者:峨眉峰
ccook11 发表于 2023-5-10 20:11 | 显示全部楼层
模拟的iic时序写入数据的时候错误
mnynt121 发表于 2023-5-10 20:41 | 显示全部楼层
驱动oled 不管是SPI还是IIC为啥都是模拟的
bartonalfred 发表于 2023-5-10 20:47 | 显示全部楼层
如何用GD32单片机最小系统点亮iic的oled显示屏
wwppd 发表于 2023-5-10 22:00 | 显示全部楼层
硬件iic和模拟iic有什么区别
uptown 发表于 2023-5-11 16:56 | 显示全部楼层
有硬件IIC,为什么很多应用,还要模拟IIC
您需要登录后才可以回帖 登录 | 注册

本版积分规则

65

主题

703

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部