找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 3564|回復(fù): 0
收起左側(cè)

SSD1309 2.42寸OLED驅(qū)動(dòng)程序

[復(fù)制鏈接]
ID:904570 發(fā)表于 2021-5-8 12:54 | 顯示全部樓層 |閱讀模式
SSD1309 2.42寸OLED驅(qū)動(dòng)程序
可顯示變化,框架式編程。
有需要用的著拿去。不謝!!
全部工程在附件里就不貼出來了。有字庫頭文件的。
#include "all.h"

u8 xdata OLED_Write_Buffer[8][8][16];//漢字?jǐn)?shù)組
sbit reset=P2^6;
//sbit scl=P2^4;
//sbit sda=P2^5;


void OLED_Write_com(u8 com)//寫指令
{
        IIC_start();
        IIC_Write_Byte(0x78);         //DC=0; RW=0  選擇SLAVE ADDRESS
        IIC_Read_Ack();
        IIC_Write_Byte(0x00);
        IIC_Read_Ack();
        IIC_Write_Byte(com);
        IIC_Read_Ack();
  delay(1);
        IIC_stop();
}
//寫數(shù)據(jù)到OLED顯示模塊
void transfer_data(u8 dat)
{
        IIC_start();
        IIC_Write_Byte(0x78);        //DC=0; RW=0   選擇SLAVE ADDRESS
        IIC_Read_Ack();
        IIC_Write_Byte(0x40);
        IIC_Read_Ack();
        IIC_Write_Byte(dat);
        IIC_Read_Ack();
        IIC_stop();
}
void lcd_address(u8 page,u8 column)
{
        column=column-1; //我們平常所說的第1列,在LCD驅(qū)動(dòng)IC里是第0列。所以在這里減去1.
        page=page-1;
        OLED_Write_com(0xb0+page); //設(shè)置頁地址。每頁是8 行。一個(gè)畫面的64 行被分成8 個(gè)頁。我們平常所說的第1 頁,在LCD 驅(qū)動(dòng)IC 里是第0 頁,所以在這里減去1
        OLED_Write_com(((column>>4)&0x0f)+0x10); //設(shè)置列地址的高4 位
        OLED_Write_com(column&0x0f); //設(shè)置列地址的低4 位
}

//=========================================================

//全屏清屏
void clear_screen()
{
        unsigned char i,j;
        for(j=0;j<8;j++)
                {
                lcd_address(1+j,1);
                for(i=0;i<128;i++)   //1305:132     1309:128
                        {
                        transfer_data(0x00);
                        }
                }
}


void display_string_8x16(u8 page,u8 column,u8 dat)
{
        u8 k,val,pag1,pag2;
        pag1=(page*2)-1;
        pag2=page*2;
        val=dat-' ';
                               
                                        lcd_address(pag1,column*8);
                                        for(k=0;k<8;k++)
                                                {
                                                       
                                                transfer_data(F8X16[val*16+k]); //寫數(shù)據(jù)到LCD,每寫完1 字節(jié)的數(shù)據(jù)后列地址自動(dòng)加1
                                                       
                                          }
                                                lcd_address(pag2,column*8);
                                                for(k=0;k<8;k++)
                                                {
                                                       
                                                transfer_data(F8X16[val*16+8+k]); //寫數(shù)據(jù)到LCD,每寫完1 字節(jié)的數(shù)據(jù)后列地址自動(dòng)加1
                                                       
                                          }
                                       
               
                       
}
void OLED_Display_buffer(u8 page,u8 seg,u16 buffer)//顯示一個(gè)5位數(shù)的變量
{
   display_string_8x16(page,seg,(buffer/10000)+'0');
         display_string_8x16(page,seg+1,(buffer%10000)/1000+'0');
         display_string_8x16(page,seg+2,(buffer%1000)/100+'0');
         display_string_8x16(page,seg+3,(buffer%100)/10+'0');
         display_string_8x16(page,seg+4,(buffer%10)+'0');
}

void display_string_16x16(u8 page,u8 column,u8 data1 )  //顯示16x16 點(diǎn)陣圖像、漢字、生僻字或16x16 點(diǎn)陣的其他圖標(biāo)
{
        u8 i,pag1,pag2;
        pag1=(page*2)-1;
        pag2=page*2;
       
                lcd_address(pag1,(column*16)+1);
                for (i=0;i<16;i++)
                        {
                        transfer_data(Hzk[data1][i]); //寫數(shù)據(jù)到LCD,每寫完一個(gè)8 位的數(shù)據(jù)后列地址自動(dòng)加1
                       
                        }
                        lcd_address(pag2,(column*16)+1);
                for (i=0;i<16;i++)
                        {
                        transfer_data(Hzk[data1+1][i]); //寫數(shù)據(jù)到LCD,每寫完一個(gè)8 位的數(shù)據(jù)后列地址自動(dòng)加1
                       
                        }
               
}
void OLED_Write_fixed_Buffer()//寫固定漢字16X16
{
                        display_string_16x16(2,0,0);                       
            display_string_16x16(2,1,2);                               
            display_string_16x16(2,2,4);               
      display_string_16x16(2,3,6);       
                  
                       
}

void OLED_Init()
{

        reset=0;
        delay(1);
  reset=1;
        delay(3);
       
        OLED_Write_com(0xfd);
        OLED_Write_com(0x12);
       
        OLED_Write_com(0xAE);        // Set Display Off

        OLED_Write_com(0xD5);         //Set Display Clock Divide Ratio/Oscillator Frequency
        OLED_Write_com(0x90);        //         1305:0x60~0x90(324~396KHz)           1309: 0x70~0xd0(360~540KHz)

        OLED_Write_com(0xA8);        //Set Multiplex Ratio
        OLED_Write_com(0x3F);        //

        OLED_Write_com(0xD3);        //Set Display Offset
        OLED_Write_com(0x00);        //

        OLED_Write_com(0x40);        // Set Display Start Line

  OLED_Write_com(0xA1);        // Set SEG/Column Mapping (0xA0/0xA1)
        OLED_Write_com(0xC8);        // Set COM/Row Scan Direction (0xC0/0xC8)

        OLED_Write_com(0xDA);        //Set COM Pins Hardware Configuration
        OLED_Write_com(0x12);        // Set Alternative Configuration (0x02/0x12)
       
        OLED_Write_com(0x81);        //Set Current Control
  OLED_Write_com(0xDF);  //
       
        OLED_Write_com(0xD9);        //Set Pre-Charge Period
        OLED_Write_com(0x82);        //

        OLED_Write_com(0xDB);        //Set VCOMH Deselect Level
        OLED_Write_com(0x34);        //

//        OLED_Write_com(0x20);
//        OLED_Write_com(0x02);        // Set Page Addressing Mode (0x00/0x01/0x02)

        OLED_Write_com(0xA4);        // Set Entire Display On/Off (0xA4/0xA5)
        OLED_Write_com(0xA6);        // Set Normal/Inverse Display (0xA6/0xA7)
        clear_screen(); //清屏
        delay(10);
       
        OLED_Write_com(0xAF); //開顯示
       
       
        delay(30);
         //OLED_Write_fixed_Buffer();
}


ssd1309_2.42OLED顯示驅(qū)動(dòng).rar

84.81 KB, 下載次數(shù): 65, 下載積分: 黑幣 -5

回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表