找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3523|回复: 6
收起左侧

OLED12864源代码分享 IIC协议

[复制链接]
ID:390416 发表于 2021-3-28 18:39 | 显示全部楼层 |阅读模式
以下代码的截图的OLED分区显示汉字因为字符的代码。请按照左边的编号自行誊写 main10.png IIC_Drive 01.png IIC_Drive 02.png IIC_Drive 03.png OLED12864_Ser 01.png OLED12864_Ser 02.png OLED12864_Ser 03.png OLED12864_Ser 04.png OLED12864_Ser 05.png WQX-15开发板01  高配全亮.jpg

回复

使用道具 举报

ID:60656 发表于 2021-4-9 22:51 | 显示全部楼层
请教楼主,OLED 显示数字 数列排版 字符旋转90度 有什么思路
回复

使用道具 举报

ID:390416 发表于 2021-4-13 09:23 | 显示全部楼层
zxq9781 发表于 2021-4-9 22:51
请教楼主,OLED 显示数字 数列排版 字符旋转90度 有什么思路

那就需要90度计算,比较麻烦
回复

使用道具 举报

ID:884042 发表于 2021-4-17 10:54 | 显示全部楼层
zxq9781 发表于 2021-4-9 22:51
请教楼主,OLED 显示数字 数列排版 字符旋转90度 有什么思路

你直接在字模软件里改变取模方式就行了,OLED的控制器有专用的90度显示指令,好好看芯片手册
回复

使用道具 举报

ID:60656 发表于 2021-4-18 19:50 | 显示全部楼层
xjx51 发表于 2021-4-17 10:54
你直接在字模软件里改变取模方式就行了,OLED的控制器有专用的90度显示指令,好好看芯片手册

ASIC 字符用的几个用汉字 取模 旋转一下搞定,90度旋转的指令没找到
回复

使用道具 举报

ID:903287 发表于 2021-5-5 10:01 | 显示全部楼层
#include "all.H"

u8 xdata OLED_Write_Buffer[8][8][16];
u8 xdata OLED_Modify_Allow=0;

void OLED_Write_Reg(u8 Reg)
{
        IIC_Start();
        IIC_Write_Byte(0x78);
        IIC_Read_Ack();
        IIC_Write_Byte(0x00);
        IIC_Read_Ack();
        IIC_Write_Byte(Reg);
        IIC_Read_Ack();
        IIC_Stop();
}

void OLED_Write_Data(u8 PAGE,u8 SEG16)
{
        u8 i;
        PAGE=0;
        SEG16=0;
       
        OLED_Write_Reg(0xb0+PAGE);
        OLED_Write_Reg(SEG16|0x10);
        OLED_Write_Reg(0);
       
        IIC_Start();
        IIC_Write_Byte(0x78);
        IIC_Read_Ack();
        IIC_Write_Byte(0x40);
        IIC_Read_Ack();
        for(i=0;i<16;i++)
        {
                IIC_Write_Byte(OLED_Write_Buffer[PAGE][SEG16][i]);
                IIC_Read_Ack();
        }
        IIC_Stop();       
}

void OLED_New_Display_Ser()
{
        static xdata u8 count;
        static xdata u8 PAGE=0;
        switch(count)
        {
                case 10:/*OLED_Modify_Allow=0;*/OLED_Write_Data(PAGE,0);break;
                case 20:OLED_Write_Data(PAGE,1);break;
                case 30:OLED_Write_Data(PAGE,2);break;
                case 40:OLED_Write_Data(PAGE,3);break;
                case 50:OLED_Write_Data(PAGE,4);break;
                case 60:OLED_Write_Data(PAGE,5);break;
                case 70:OLED_Write_Data(PAGE,6);break;
                case 80:OLED_Write_Data(PAGE,7);count=0;PAGE++;PAGE=PAGE%8;break;
               
                default:OLED_Modify_Allow=1;break;
        }
        count++;
}

void OLED_Display_Symbor_ser(u8 PAGE,u8 SEG16,u8 Dat1,u8 Dat2)
{
        u8 data i,Value1,Value2;
        Value1=Dat1-' ';
        Value2=Dat2-' ';
        for(i=0;i<8;i++)
        {
                OLED_Write_Buffer[PAGE][SEG16][i]=F8X16[Value1*16+i];
        }
        for(i=0;i<8;i++)
        {
                OLED_Write_Buffer[PAGE][SEG16][i+8]=F8X16[Value2*16+i];
        }
        for(i=0;i<8;i++)
        {
                OLED_Write_Buffer[PAGE+1][SEG16][i]=F8X16[Value1*16+8+i];
        }
        for(i=0;i<8;i++)
        {
                OLED_Write_Buffer[PAGE+1][SEG16][i+8]=F8X16[Value2*16+8+i];
        }
}

void OLED_Display_Chines_Ser(u8 PAGE,u8 SEG16,u8 Dat)        //ÖDÎÄÏÔê¾
{
        u8 xdata i=0;
        for(i=0;i<16;i++)
        {
                OLED_Write_Buffer[PAGE][SEG16][i]=Hzk[Dat][i];
        }
        for(i=0;i<16;i++)
        {
                OLED_Write_Buffer[PAGE+1][SEG16][i]=Hzk[Dat+1][i];
        }
}

void OLED_Write_fixed_Buffer()
{
        OLED_Display_Symbor_Ser(0,0,'*','*');
        OLED_Display_Symbor_Ser(0,1,'*',' ');
        OLED_Display_Chines_Ser(0,2,0);
        OLED_Display_Chines_Ser(0,3,2);
        OLED_Display_Chines_Ser(0,4,4);
        OLED_Display_Chines_Ser(0,5,6);
        OLED_Display_Symbor_Ser(0,6,'*','*');
        OLED_Display_Symbor_Ser(0,7,'*','*');
       
        OLED_Display_Symbor_Ser(2,0,'2','0');
        OLED_Display_Symbor_Ser(2,1,' ',' ');
        OLED_Display_Chines_Ser(2,2,8);
        OLED_Display_Symbor_Ser(2,3,' ',' ');
        OLED_Display_Chines_Ser(2,4,10);
        OLED_Display_Symbor_Ser(2,5,' ',' ');
        OLED_Display_Chines_Ser(2,6,32);
        OLED_Display_Symbor_Ser(2,7,' ',' ');
       
        OLED_Display_Chines_Ser(4,0,16);
        OLED_Display_Chines_Ser(4,1,18);
        OLED_Display_Symbor_Ser(4,2,' ',' ');
        OLED_Display_Symbor_Ser(4,3,' ',' ');
        OLED_Display_Chines_Ser(4,4,12);
        OLED_Display_Symbor_Ser(4,5,' ',' ');
        OLED_Display_Chines_Ser(4,6,14);
        OLED_Display_Symbor_Ser(4,7,' ',' ');
       
        OLED_Display_Symbor_Ser(6,0,'w','q');
        OLED_Display_Symbor_Ser(6,1,'x','d');
        OLED_Display_Symbor_Ser(6,2,'z','.');
        OLED_Display_Symbor_Ser(6,3,'t','a');
        OLED_Display_Symbor_Ser(6,4,'o','b');
        OLED_Display_Symbor_Ser(6,5,'a','o');
        OLED_Display_Symbor_Ser(6,6,'.','c');
        OLED_Display_Symbor_Ser(6,7,'o','m');
}
       
void OLED_Init()
{
        OLED_Write_Reg(0x40);
       
        OLED_Write_Reg(0x81);
        OLED_Write_Reg(0xff);
       
        OLED_Write_Reg(0xda);
        OLED_Write_Reg(0x12);
       
        OLED_Write_Reg(0xc8);
        OLED_Write_Reg(0xa1);
        OLED_Write_Reg(0xa6);
       
        OLED_Write_Reg(0xa8);
        OLED_Write_Reg(0x3f);
       
        OLED_Write_Reg(0x20);
        OLED_Write_Reg(0x00);
       
        OLED_Write_Reg(0x8d);
        OLED_Write_Reg(0x14);
       
        OLED_Write_Reg(0xa4);
        OLED_Write_Reg(0xaf);
       
        OLED_Write_Reg(0xd3);
        OLED_Write_Reg(0x00);
       
        OLED_Write_Reg(0xd5);
        OLED_Write_Reg(0x00);
       
        OLED_Write_Reg(0xd9);
        OLED_Write_Reg(0x22);
       
        OLED_Write_Reg(0xdb);
        OLED_Write_Reg(0x20);
       
        OLED_Write_Data(0,0);
       
        OLED_Write_fixed_Buffer();
}
回复

使用道具 举报

ID:903287 发表于 2021-5-5 10:01 | 显示全部楼层
#include "all.H"

void IIC_Delay()
{
        _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
}

void IIC_Init()
{
        P2M0&=0x3f;
        P2M1&=0x3f;
        SCL_GPIO=1;//ê±Öó
        _nop_();
        SDA_GPIO=1;//êy¾Y
        _nop_();
       
}

void IIC_Start()        //Æeê¼DÅoÅ
{
        SDA_GPIO=1;
        SCL_GPIO=1;

        IIC_Delay();
        SDA_GPIO=0;
        IIC_Delay();
        SCL_GPIO=0;
        IIC_Delay();
}

void IIC_Stop()        //í£Ö1DÅoÅ
{
       
        SDA_GPIO=0;
        SCL_GPIO=1;
        IIC_Delay();
        SDA_GPIO=1;
        IIC_Delay();
}

void IIC_Write_Byte(u8 IIC_Byte)//Ïò×üÏß·¢Ëíò»¸ö×Ö½ú
{
        u8 i;
        SCL_GPIO=0;
        SDA_GPIO=1;
        for(i=0;i<8;i++)
        {
                SDA_GPIO=(bit)(IIC_Byte&0x80);
                IIC_Byte<<=1;
                SCL_GPIO=1;
                IIC_Delay();
                SCL_GPIO=0;
                IIC_Delay();
        }
        SDA_GPIO=1;
}

u8 IIC_Read_Byte()//¶áè¡êy¾Y·μ»Ø
{
        u8 i,Value;
        SCL_GPIO=0;
        SDA_GPIO=1;
        for(i=0;i<8;i++)
        {
                Value=(Value<<1)|SDA_GPIO;
                SCL_GPIO=1;
                IIC_Delay();
                SCL_GPIO=0;
                IIC_Delay();
        }
        return Value;
}

u8 IIC_Read_Ack()//μ¥Ƭ»ú¼ì2aIIC′ó»ú·¢à′μÄó|′eDÅoÅ
{
        u8 ack=1,i=0;
        SCL_GPIO=1;
        IIC_Delay();
        while((ack)&&(i<5))//ÕaÑùD′2»»áËàÑ-»·
        {
                ack=SDA_GPIO;
                i++;
        }
        SCL_GPIO=0;
        return ack;
}

void IIC_Write_Ack(bit Ack)//μ¥Ƭ»ú·¢Ëíó|′e¸ø′ó»ú
{
        SDA_GPIO=Ack;
        IIC_Delay();
        SCL_GPIO=1;
        IIC_Delay();
        SCL_GPIO=0;
        IIC_Delay();
        SDA_GPIO=1;
        IIC_Delay();
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表