- 主要就是看到很多人说调用原子的代码 用模拟的SPI不显示问题,我也是,最后把问题找到了贴出来大家看下,程序当中我已经把MODE 定义为0
- //使用4线SPI 串口模式
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 ;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//普通输出模式
- GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz
- GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉
- GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化
-
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7;
- GPIO_Init(GPIOC, &GPIO_InitStructure);//初始化
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
- GPIO_Init(GPIOD, &GPIO_InitStructure);//初始化
-
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;
- GPIO_Init(GPIOG, &GPIO_InitStructure);//初始化
-
- OLED_SDIN=1;
- OLED_SCLK=1;
- #endif
- OLED_CS=1;
- OLED_RS=1;
-
- OLED_RST=0;
- delay_ms(100);
- OLED_RST=1;
-
- OLED_WR_Byte(0xAE,OLED_CMD); //关闭显示
- OLED_WR_Byte(0xD5,OLED_CMD); //设置时钟分频因子,震荡频率
- OLED_WR_Byte(80,OLED_CMD); //[3:0],分频因子;[7:4],震荡频率
- OLED_WR_Byte(0xA8,OLED_CMD); //设置驱动路数
- OLED_WR_Byte(0X3F,OLED_CMD); //默认0X3F(1/64)
- OLED_WR_Byte(0xD3,OLED_CMD); //设置显示偏移
- OLED_WR_Byte(0X00,OLED_CMD); //默认为0
- OLED_WR_Byte(0x40,OLED_CMD); //设置显示开始行 [5:0],行数.
-
- OLED_WR_Byte(0x8D,OLED_CMD); //电荷泵设置
- OLED_WR_Byte(0x14,OLED_CMD); //bit2,开启/关闭
- OLED_WR_Byte(0x20,OLED_CMD); //设置内存地址模式
- OLED_WR_Byte(0x02,OLED_CMD); //[1:0],00,列地址模式;01,行地址模式;10,页地址模式;默认10;
- OLED_WR_Byte(0xA1,OLED_CMD); //段重定义设置,bit0:0,0->0;1,0->127;
- OLED_WR_Byte(0xC0,OLED_CMD); //设置COM扫描方向;bit3:0,普通模式;1,重定义模式 COM[N-1]->COM0;N:驱动路数
- OLED_WR_Byte(0xDA,OLED_CMD); //设置COM硬件引脚配置
- OLED_WR_Byte(0x12,OLED_CMD); //[5:4]配置
-
- OLED_WR_Byte(0x81,OLED_CMD); //对比度设置
- OLED_WR_Byte(0xEF,OLED_CMD); //1~255;默认0X7F (亮度设置,越大越亮)
- OLED_WR_Byte(0xD9,OLED_CMD); //设置预充电周期
- OLED_WR_Byte(0xf1,OLED_CMD); //[3:0],PHASE 1;[7:4],PHASE 2;
- OLED_WR_Byte(0xDB,OLED_CMD); //设置VCOMH 电压倍率
- OLED_WR_Byte(0x30,OLED_CMD); //[6:4] 000,0.65*vcc;001,0.77*vcc;011,0.83*vcc;
- OLED_WR_Byte(0xA4,OLED_CMD); //全局显示开启;bit0:1,开启;0,关闭;(白屏/黑屏)
- OLED_WR_Byte(0xA6,OLED_CMD); //设置显示方式;bit0:1,反相显示;0,正常显示
- //OLED_WR_Byte(0xAF,OLED_CMD); //开启显示
- OLED_WR_Byte(0X8D,OLED_CMD); //SET DCDC命令
- OLED_WR_Byte(0X14,OLED_CMD); //DCDC ON
- OLED_WR_Byte(0XAF,OLED_CMD); //DISPLAY ON
- OLED_Clear();
- 现在原子的程序是没有58-60行的,我写入探索者F4中后SPI模式的OLED不显示(多次确认,折腾两天了,还以为屏坏了);
- 最后把代码从头看了一遍在MAIN主函数OLED_Init(); //初始化OLED 后面加了行代码调用了OLED_Display_On(void);代码如下:
- OLED_Init(); //初始化OLED
- OLED_Display_On();
- 再次烧写屏突然显示了,太高兴了折腾了两天终于显示了
- //开启OLED显示
- void OLED_Display_On(void)
- {
- OLED_WR_Byte(0X8D,OLED_CMD); //SET DCDC命令
- OLED_WR_Byte(0X14,OLED_CMD); //DCDC ON
- OLED_WR_Byte(0XAF,OLED_CMD); //DISPLAY ON
- }
- 但是看了代码中的内容我就郁闷啊,39,40,57行原子的代码不就是DISPLAY_ON中的相关命令嘛!可为什么必须要在主函数里面再次调用才能显示了。
- 后来我把主函数中DISPLAY_ON()去除后把70-72行的代码补到了58-60后也是可以正常显示的,原子的原代码不加就是不显示。还请原子哥分析下。
- 我确认100%用的原子探索者里面标准例程中的实验12验证后才发帖出来。不是来索取而是来探讨。
再就是为什么我的显示是反着的字体,不明白。如图!!!!
一周热门 更多>