本帖最后由 芯圣电子官方QQ 于 2023-7-20 09:31 编辑
由于我是用的事先写好的OLED库,该OLED为SSD1306驱动芯片,具备128*32分辨率。
I2C接口顺序为:GND、VCC、SCL、SDA
刚好我们的开发板上下面的接口有满足顺序的:GND、VCC、P22、P24
因此我们将对针脚做以下映射:
P22——SCL
P24——SDA
根据手册中对IO模式的说明,来操作端口功能选择寄存器,如下图所示:
- P2M1 = P2M1 & 0xF0 | 0x08; //P22设置为推挽输出
- P2M2 = P2M2 & 0xF0 | 0x08; //P24设置为推挽输出
这样我们就可以在OLED的头文件中映射这两个端口使用了
- #define OLED_SCL P2_2 //SCL
- #define OLED_SDA P2_4 //SDA
接下来,就是编写相关的显示代码了。
- /**
- * ************************************************************************************
- * 上海芯圣电子股份有限公司
- * www.holychip.cn
- * ************************************************************************************
- * @Examle Version V1.0.0.5
- * [url=home.php?mod=space&uid=212281]@date[/url] 2023.04.07
- * ************************************************************************************
- * 客户服务
- * 感谢您使用我们的单片机,若发现错误或对函数的使用存在疑问。请添加上海芯圣电子官方QQ群
- * ************** **************技术支持群:201030494***********************************
- * ************************************************************************************
- **/
- #define ALLOCATE_EXTERN
- #include "HC89S105AC8.h"
- #include "oled.h"
- void Delay_ms(unsigned int fui_i); //延时函数
- /***************************************************************************************
- * @实现效果 对P00口进行高、低电平转换
- * @操作方法 示波器接P00口,查看输出波形
- ***************************************************************************************/
- void main()
- {
- unsigned char i;
-
- /********************************系统初始化*******************************************/
- WDTCCR = 0x00; //关闭看门狗
- //本例程为方便测试关闭看门狗,实际使用中,建议客户打开看门狗,详见WDT复位例程
- CLKCON = 0x02; //选择内部高频RC为系统时钟,Fosc=32MHz
- CLKDIV = 0x02; //Fosc 2分频得到Fcpu,Fcpu=16MHz
- /**********************************IO配置初始化***************************************/
-
- P2M1 = P2M1 & 0xF0 | 0x08; //P22设置为推挽输出
- P2M2 = P2M2 & 0xF0 | 0x08; //P24设置为推挽输出
-
- OLED_Init();
- OLED_ColorTurn(0);
- OLED_DisplayTurn(0);
- OLED_Display_Off();
- OLED_Display_On();
-
- for(i=0;i<8;i++)
- NumberShow(i, 16*i, 0, 0) ;Delay_ms(200);
- OLED_Clear_Left_To_Right();
- for(i=0;i<8;i++)
- NumberShow(i, 16*i, 0, 1) ;Delay_ms(200);
- OLED_Clear_Left_To_Right();
-
- while (1)
- {
- for(i=0;i<8;i++)
- NumberShow(i, 16*i, 0, 0) ;
- for(i=0;i<8;i++)
- NumberShow(i, 16*i, 2, 1) ;
- Delay_ms(200);
- OLED_Clear_Left_To_Right();
- }
- }
- /*************************************************************************************
- * @说明 延时函数
- * @参数 fui_i : 延时时间
- * @返回值 无
- * @注 Fcpu = 16MHz,fui_i = 1时,延时时间约为1ms
- *************************************************************************************/
- void Delay_ms(unsigned int fui_i)
- {
- unsigned int fui_j;
- for (; fui_i > 0; fui_i--)
- for (fui_j = 1596; fui_j > 0; fui_j--);
- }
这里提供工程给大家测试使用,确保我是没有骗人的。
1-OLED.rar
(12.06 KB, 下载次数: 5)
|