[应用方案] 入手--新唐NUC240与点亮OLED

[复制链接]
 楼主| 发货后已经wi 发表于 2021-5-25 14:03 | 显示全部楼层 |阅读模式
入手–新唐NUC240与点亮OLED
一、SDK与烧录
1.SDK
新唐官网
可以在官网下载你所需要的SDK与pack。

2.烧录
首先下载官网自带模拟IIC的SDK。
179860ac931c4ef3f.png

 楼主| 发货后已经wi 发表于 2021-5-25 14:10 | 显示全部楼层
打开代码,选择NUlink烧录。
1133160ac94e93ccc9.png
 楼主| 发货后已经wi 发表于 2021-5-25 14:13 | 显示全部楼层
二、代码修改
由于官网自带的是EEPRON的软件IIC,我们需要稍微修改一下。
6075560ac951ac99e4.png
 楼主| 发货后已经wi 发表于 2021-5-25 14:13 | 显示全部楼层
4415060ac957e51d6e.png

EEPRON写入时序为sta(1 byte)+address(2 byte)+data(1 byte)
IIC写入时序为address(1 byte)+control(1 byte)+data(1 byte)
 楼主| 发货后已经wi 发表于 2021-5-25 14:14 | 显示全部楼层
修改I2C_GPIO_Write_Byte()函数代码如下
  1. void I2C_GPIO_Write_Byte(uint16_t u16Cmd, uint8_t u8Data)
  2. {
  3.     uint8_t u8Addr, u8cmd;

  4.     u8Addr = u16Cmd >> 8;
  5.     u8cmd = (uint8_t)u16Cmd;

  6.     I2C_Start();
  7.        
  8.     I2C_Write(u8Addr);
  9.        
  10.         I2C_Write(u8cmd);
  11.        
  12.         I2C_Write(u8Data);
  13.        
  14.         I2C_Stop();
  15.        
  16. }
 楼主| 发货后已经wi 发表于 2021-5-25 14:15 | 显示全部楼层
本帖最后由 发货后已经wi 于 2021-5-25 14:18 编辑

三、点亮OLED
  1. //OLED初始化
  2. void OLED_Init(void)
  3. {               
  4.                 I2C_GPIO_Write_Byte(0x7800, 0xAE);
  5.                 I2C_GPIO_Write_Byte(0x7800, 0xD5);
  6.                 I2C_GPIO_Write_Byte(0x7800, 0x50);
  7.                 I2C_GPIO_Write_Byte(0x7800, 0xA8);
  8.                 I2C_GPIO_Write_Byte(0x7800, 0X3F);
  9.                 I2C_GPIO_Write_Byte(0x7800, 0xD3);
  10.                 I2C_GPIO_Write_Byte(0x7800, 0X00);
  11.                 I2C_GPIO_Write_Byte(0x7800, 0x40);
  12.                 I2C_GPIO_Write_Byte(0x7800, 0x8D);
  13.                 I2C_GPIO_Write_Byte(0x7800, 0x14);
  14.                 I2C_GPIO_Write_Byte(0x7800, 0x20);
  15.                 I2C_GPIO_Write_Byte(0x7800, 0x02);
  16.                 I2C_GPIO_Write_Byte(0x7800, 0xA0);
  17.                 I2C_GPIO_Write_Byte(0x7800, 0xC0);
  18.                 I2C_GPIO_Write_Byte(0x7800, 0xDA);
  19.                 I2C_GPIO_Write_Byte(0x7800, 0x12);
  20.                 I2C_GPIO_Write_Byte(0x7800, 0x81);
  21.                 I2C_GPIO_Write_Byte(0x7800, 0xEF);
  22.                 I2C_GPIO_Write_Byte(0x7800, 0xD9);
  23.                 I2C_GPIO_Write_Byte(0x7800, 0xf1);
  24.                 I2C_GPIO_Write_Byte(0x7800, 0xDB);
  25.                 I2C_GPIO_Write_Byte(0x7800, 0x30);
  26.                 I2C_GPIO_Write_Byte(0x7800, 0xA4);
  27.                 I2C_GPIO_Write_Byte(0x7800, 0xA6);
  28.                 I2C_GPIO_Write_Byte(0x7800, 0xAF);
  29.                
  30.                 CLK_SysTickDelay(10000);//延时10MS
  31.                
  32.             OLED_Clear();//清屏
  33. }
  1. //OLED Clear
  2. void OLED_Clear(void)
  3. {
  4.       u8 i,n;
  5.           for(i=0;i<8;i++)
  6.           {
  7.                           I2C_GPIO_Write_Byte(0x7800,0xb0+i);
  8.                           I2C_GPIO_Write_Byte(0x7800,0x00);
  9.                           I2C_GPIO_Write_Byte(0x7800,0x10);
  10.                           for(n=0;n<128;n++)
  11.                           {
  12.                                   I2C_GPIO_Write_Byte(0x7840,0x00);
  13.                           }
  14.           }
  15. }

  16. //OLED Set pos
  17. void OLED_Set_Pos(unsigned char x,unsigned char y)
  18. {
  19.       I2C_GPIO_Write_Byte(0x7800,0xb0+y);
  20.           I2C_GPIO_Write_Byte(0x7800,((x&0xf0)>>4)|0x10);
  21.           I2C_GPIO_Write_Byte(0x7800,(x&0x0f));
  22. }       

  23. //显示字符
  24. void OLED_ShowChar(u8 x,u8 y,u8 string,u8 size)
  25. {
  26.         unsigned char data=0,i=0;
  27.                 data = string - ' ';//得到偏移后的值
  28.                 if(x>128-1)
  29.                 {
  30.                                 x = 0;
  31.                                 y = y + 2;
  32.                 }
  33.                 if(size == 16)
  34.                 {
  35.                                 OLED_Set_Pos(x,y);
  36.                                 for(i=0; i<8; i++)
  37.                               I2C_GPIO_Write_Byte(0x7840,F8X16[data*16+i]);
  38.                                 OLED_Set_Pos(x,y+1);
  39.                                 for(i=0; i<8; i++)
  40.                               I2C_GPIO_Write_Byte(0x7840,F8X16[data*16+i+8]);
  41.                 }
  42.                 else
  43.                 {
  44.                                 OLED_Set_Pos(x,y);
  45.                                 for(i=0; i<6; i++)
  46.                               I2C_GPIO_Write_Byte(0x7840,F6x8[data][i]);
  47.                 }
  48. }

  49. //显示字符串
  50. void OLED_ShowString(u8 x,u8 y,u8* string,u8 size)
  51. {
  52.       unsigned char i=0;
  53.           while(string[i]!='\0')
  54.                 {
  55.                     OLED_ShowChar(x,y,string[i],size);
  56.                           x+=8;
  57.                           if(x > 120)//大于一行
  58.                                 {
  59.                                     x=0;
  60.                                         y+=2;
  61.                                 }
  62.                                 i++;
  63.                 }
  64. }       

  1. //main添加初始化
  2.     OLED_Init();
  3.        
  4.         OLED_ShowString(1,1,"Hello World",16);
将代码烧录到MCU
效果如下
9210560ac96a617383.png
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

163

帖子

0

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