打印
[通用8051核FLASH系列]

【芯圣电子HC89S105A测评报告】+驱动OLED

[复制链接]
401|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 芯圣电子官方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)

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:西安公路研究院南京院
简介:主要工作从事监控网络与通信网络设计,以及从事基于嵌入式的通信与控制设备研发。擅长单片机嵌入式系统物联网设备开发,音频功放电路开发。

1896

主题

15631

帖子

198

粉丝