悠景OLED (STM8S)I2C驅(qū)動.doc_第1頁
悠景OLED (STM8S)I2C驅(qū)動.doc_第2頁
悠景OLED (STM8S)I2C驅(qū)動.doc_第3頁
悠景OLED (STM8S)I2C驅(qū)動.doc_第4頁
悠景OLED (STM8S)I2C驅(qū)動.doc_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

/* * * 文件名 :oled.c * 描述 :SSD1306 OLED 驅(qū)動IC驅(qū)動代碼 * 驅(qū)動方式:I2C * i_ DB.Yan * 最后修改:2013-12-03 * *硬件連接圖 |-| | SCL-PB4 | | SDA-PB5 | | RST-PD7 |*/#include oled.h#include stdlib.h#include font.h /OLED的顯存/存放格式如下./Page00 1 2 3 . 127/Page10 1 2 3 . 127/Page20 1 2 3 . 127/Page30 1 2 3 . 127/Page40 1 2 3 . 127/Page50 1 2 3 . 127/Page60 1 2 3 . 127/Page70 1 2 3 . 127uint8_t OLED_GRAM1288;#define SCL PB_ODR_ODR4#define SDA PB_ODR_ODR5#define SDAM PB_IDR_IDR5#define RST PD_ODR_ODR7#define SET_SCL_OUT() PB_DDR_DDR4=1; PB_CR1_C14 = 1; PB_CR2_C24 = 0;#define SET_SDA_OUT() PB_DDR_DDR5=1; PB_CR1_C15 = 1; PB_CR2_C25 = 0;#define SET_SDA_IN() PB_DDR_DDR5=0; PB_CR1_C15 = 0; PB_CR2_C25 = 0;#define SET_RST_OUT() PD_DDR_DDR7=1;PD_CR1_C17 = 1;PD_CR2_C27 = 0;/-/ Prototype : void I2C_Init(void)/ Calls : / Description : I2C initial/-void I2C_Init(void) I2C_CR1 &= 0xFE; / PE=0, disable I2C module SET_SCL_OUT(); SET_SDA_OUT(); SET_RST_OUT();/-/ Prototype : void Delay_2us(void)/ Description : 大約延時2us/-void Delay_5us(void) asm(nop);/fcpu 16MHz 時 /-/ Prototype : void Delay_Nms(uint16_t t)/ Description : 大約延時Nms/-void Delay_Nms(uint16_t t) uint16_t i; while(t-) for (i=1000; i0; i-); /-/ Prototype : void I2C_Start(void)/ Calls : / Description : Start Singnal/-void I2C_Start(void) / SDA 1-0 while SCL High SDA = 1; Delay_5us(); SCL = 1; Delay_5us(); SDA = 0; Delay_5us(); SCL = 0; /-/ Prototype : void I2C_Stop(void)/ Calls : / Description : Stop Singnal/- void I2C_Stop(void) SDA = 0; SCL = 1; Delay_5us(); SDA = 1; Delay_5us(); /-/ Prototype : void I2C_SendACK(uchar ack);/ Calls : / Parameters : bit ack:1-noack, 0-ack/ Description : Master device send ACK to slave device./-void I2C_SendACK(uint8_t ack) if(ack = 0) SDA = 0; else SDA = 1; SCL = 1; Delay_5us(); SCL = 0; Delay_5us(); /-/ Prototype : uchar I2C_SendByte(uchar sendDAT)/ Calls : / Parameters : uchar sendDAT-data to be send/ Return Value : CY-slave ack (1-noack,0-ack)/ Description : Send one byte to I2C/-u8 I2C_SendByte(uint8_t sendDAT) uint8_t i,revack; for (i= 0 ; i 8; i+) SCL = 0; Delay_5us(); if (sendDAT & 0x80) / write data SDA = 1; else SDA = 0; sendDAT = 1; SCL = 1; Delay_5us(); SCL = 0; Delay_5us(); SET_SDA_IN(); SCL = 1; asm(nop); asm(nop); revack = (u8)SDAM; Delay_5us(); SCL = 0; SET_SDA_OUT(); Delay_5us(); return revack;/-/ Prototype : void I2C_SendGCMD(u8 Command)/ Calls : / Parameters : u8 Command-Command to be send/ Description : Send one Command byte to Oled/-void I2C_SendGCMD(u8 Command) I2C_Start(); I2C_SendByte(0x78);/Slave Address b7 b6 b5 b4 b3 b2 b1 b0 / 0 1 1 1 1 0 0 0(R/W#) I2C_SendByte(0x00);/Control byte CO D/C# 00000000 I2C_SendByte(Command); I2C_Stop();/-/ Prototype : void I2C_SendGData(u8 Data)/ Calls : / Parameters : u8 Data-Data to be send/ Description : Send one Data byte to Oled/-void I2C_SendGData(u8 Data) I2C_Start(); I2C_SendByte(0x78);/Slave Address b7 b6 b5 b4 b3 b2 b1 b0 / 0 1 1 1 1 0 0 0(R/W#) I2C_SendByte(0x40);/Control byte CO D/C# 01000000 I2C_SendByte(Data); I2C_Stop();/-/ Prototype : void OLED_Refresh_Gram(u8 line)/ Calls : / Parameters : line 更新顯示行號,14行/ Return Value : / Description : 更新顯存到OLED/-void OLED_Refresh_Gram()/u8 lineu8 i,n; I2C_Start(); I2C_SendGCMD(0xA1); / Remap for(i=0;i8;i+) I2C_SendGCMD (0xb0+i);/+(line-1)*2);/設(shè)置頁地址(07)I2C_SendGCMD (0x0); /設(shè)置顯示位置列低地址,偏移了2列I2C_SendGCMD (0x10); /設(shè)置顯示位置列高地址 for(n=0;n128;n+) I2C_SendGData(OLED_GRAMni); I2C_Stop();/-/ Prototype : void OLED_Display_On()/ Calls : / Parameters : / Description : 開啟OLED顯示/-void OLED_Display_On(void) I2C_SendGCMD(0X8D); /SET DCDC命令I(lǐng)2C_SendGCMD(0X14); /DCDC ONI2C_SendGCMD(0XAF); /DISPLAY ON /-/ Prototype : void OLED_Display_Off()/ Calls : / Parameters : / Description : 關(guān)閉OLED顯示 /-void OLED_Display_Off(void) I2C_SendGCMD(0X8D); /SET DCDC命令I(lǐng)2C_SendGCMD(0X10); /DCDC OFFI2C_SendGCMD(0XAE); /DISPLAY OFF /-/ Prototype : void OLED_Clear()/ Calls : / Parameters : / Description : 清屏函數(shù),清完屏,整個屏幕是黑色的!和沒點亮一樣!/-void OLED_Clear(void) u8 i,n; I2C_Start(); I2C_SendGCMD(0xA1); / Remap for(i=0;i8;i+) I2C_SendGCMD (0xb0+i);/設(shè)置頁地址(07)I2C_SendGCMD (0x0); /設(shè)置顯示位置列低地址,偏移了2列I2C_SendGCMD (0x10); /設(shè)置顯示位置列高地址 for(n=0;n127|y63)return;/超出范圍了.pos=y/8;/ 0/1bx=y%8;temp=1bx;if(t)OLED_GRAMxpos|=temp;else OLED_GRAMxpos&=temp; /-/ Prototype : void OLED_Fill(u8 x,u8 y,u8 t)/ Calls : / Parameters : x:0127,y:015,t:1 填充 0,清空/ Description : x1,y1,x2,y2 填充區(qū)域的對角坐標(biāo)/確保x1=x2;y1=y2 0=x1=127 0=y1=63/dot:0,清空;1,填充/-void OLED_Fill(u8 x1,u8 y1,u8 x2,u8 y2,u8 dot) u8 x,y; for(x=x1;x=x2;x+)for(y=y1;y=y2;y+)OLED_DrawPoint(x,y,dot); /-/ Prototype : void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 size,u8 mode)/ Calls : / Parameters : x:0127,y:015,mode:0,反白顯示;1,正常顯示/size:選擇字體 16/12 / Description : 在指定位置顯示一個字符,包括部分字符/-void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 size,u8 mode) u8 temp,t,t1;u8 y0=y;chr=chr- ;/得到偏移后的值 for(t=0;tsize;t+) /if(size=12)temp=asc2_1206chrt; /調(diào)用1206字體/else temp=asc2_1608chrt; /調(diào)用1608字體 for(t1=0;t18;t1+)if(temp&0x80)OLED_DrawPoint(x,y,mode);else OLED_DrawPoint(x,y,!mode);temp=1;y+;if(y-y0)=size)y=y0;x+;break; /-/ Prototype : void mypow(u8 m,u8 n)/ Calls : / Parameters : m,n/ Description : 計算數(shù)字位置/-u32 mypow(u8 m,u8 n)u32 result=1; while(n-)result*=m; return result;/-/ Prototype : void OLED_ShowNum(u8 x,u8 y,u32 num,u8 len,u8 size)/ Calls : / Parameters : x,y :起點坐標(biāo),len :數(shù)字的位數(shù),mode:模式0,填充模式;1,疊加模式/size:字體大小,num:數(shù)值(04294967295);/ Description : 顯示len個數(shù)字/-void OLED_ShowNum(u8 x,u8 y,u32 num,u8 len,u8 size) u8 t,temp;u8 enshow=0; for(t=0;tlen;t+)temp=(num/mypow(10,len-t-1)%10;if(enshow=0&tMAX_CHAR_POSX)x=0;y+=16; if(yMAX_CHAR_POSY)y=x=0;/sOLED_Clear(); OLED_ShowChar(x,y,*p,16,1); x+=8; p+; /-/ Prototype : void OLED_Init(void)/ Calls : / Parameters : / Description : 初始化SSD1306/-void OLED_Init(void) I2C_Init();RST=1; Delay_Nms(100);RST=0;Delay_Nms(100);RST=1;Delay_Nms(10); I2C_SendGCMD(0xAE); /關(guān)閉顯示 I2C_SendGCMD(0xD5); /設(shè)置時鐘分頻因子,震蕩頻率I2C_SendGCMD(0x80); /3:0,分頻因子;7:4,震蕩頻率 I2C_SendGCMD(0xA8); /設(shè)置驅(qū)動路數(shù)I2C_SendGCMD(0X3F); /默認0X3F(1/64) I2C_SendGCMD(0x40); /設(shè)置顯示開始行 5:0,行數(shù). I2C_SendGCMD(0xA1); / RemapI2C_SendGCMD(0xC8); / Scan direction I2C_SendGCMD(0xDA); /設(shè)置COM硬件引腳配置I2C_SendGCMD(0x12); /5:4配置 I2C_SendGCMD(0x81); /對比度設(shè)置I2C_SendGCMD(0xEF); / 1255;默認0X66(亮度設(shè)置,越大越亮) I2C_SendGCMD(0xD9); /設(shè)置預(yù)充電周期I2C_SendGCMD(0xF1); /3:0,PHASE 1;7:4,PHASE 2;I2C_SendGCMD(0xDB); /設(shè)置VCOMH 電壓倍率I2C_SendGCMD(0x30); /6:4 000,0.65*vcc;001,0.77*vcc;011,0.83*vcc;I2C_SendGCMD(0xB0);/ set page address I2C_SendGCMD(0xA4); /全局顯示開啟;bit0:1,開啟;0,關(guān)閉;(白屏/黑屏)I2C_SendGCMD(0xA6); /設(shè)置顯示方式;bit0:1,反相顯示;0,正常顯示 I2C_SendGCMD(0xD3); /設(shè)置顯示偏移I2C_SendGCMD(0X00); /默認為0 I2C_SendGCMD(0x00); /set lower column addresI2C_SendGCMD(0x10); /set higher column address I2C_SendGCMD(0x20); /設(shè)置內(nèi)存地址模式I2C_SendGCMD(0x02); /1:0,00,列地址模式;01,行地址模式;10,頁地址模式;默認10;I2C_SendGCMD(0xA1); /段重定義設(shè)置,bit0:0,0-0;1,0-127; I2C_SendGCMD(0x8d); /set charge pump enable I2C_SendGCMD(0x14); I2C_SendGCMD(0xAF); /開啟顯示 =Font.h=const unsigned char asc2_16089516= 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/* ,0*/0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xCC,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,/*!,1*/0x00,0x00,0x08,0x00,0x30,0x00,0x60,0x00,0x08,0x00,0x30,0x00,0x60,0x00,0x00,0x00,/*,2*/0x02,0x20,0x03,0xFC,0x1E,0x20,0x02,0x20,0x03,0xFC,0x1E,0x20,0x02,0x20,0x00,0x00,/*#,3*/0x00,0x00,0x0E,0x18,0x11,0x04,0x3F,0xFF,0x10,0x84,0x0C,0x78,0x00,0x00,0x00,0x00,/*$,4*/0x0F,0x00,0x10,0x84,0x0F,0x38,0x00,0xC0,0x07,0x78,0x18,0x84,0x00,0x78,0x00,0x00,/*%,5*/0x00,0x78,0x0F,0x84,0x10,0xC4,0x11,0x24,0x0E,0x98,0x00,0xE4,0x00,0x84,0x00,0x08,/*&,6*/0x08,0x00,0x68,0x00,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*,7*/0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xE0,0x18,0x18,0x20,0x04,0x40,0x02,0x00,0x00,/*(,8*/0x00,0x00,0x40,0x02,0x20,0x04,0x18,0x18,0x07,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,/*),9*/0x02,0x40,0x02,0x40,0x01,0x80,0x0F,0xF0,0x01,0x80,0x02,0x40,0x02,0x40,0x00,0x00,/*,10*/0x00,0x80,0x00,0x80,0x00,0x80,0x0F,0xF8,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x00,/*+,11*/0x00,0x01,0x00,0x0D,0x00,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*,12*/0x00,0x00,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,/*-,13*/0x00,0x00,0x00,0x0C,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*.,14*/0x00,0x00,0x00,0x06,0x00,0x18,0x00,0x60,0x01,0x80,0x06,0x00,0x18,0x00,0x20,0x00,/*/,15*/0x00,0x00,0x07,0xF0,0x08,0x08,0x10,0x04,0x10,0x04,0x08,0x08,0x07,0xF0,0x00,0x00,/*0,16*/0x00,0x00,0x08,0x04,0x08,0x04,0x1F,0xFC,0x00,0x04,0x00,0x04,0x00,0x00,0x00,0x00,/*1,17*/0x00,0x00,0x0E,0x0C,0x10,0x14,0x10,0x24,0x10,0x44,0x11,0x84,0x0E,0x0C,0x00,0x00,/*2,18*/0x00,0x00,0x0C,0x18,0x10,0x04,0x11,0x04,0x11,0x04,0x12,0x88,0x0C,0x70,0x00,0x00,/*3,19*/0x00,0x00,0x00,0xE0,0x03,0x20,0x04,0x24,0x08,0x24,0x1F,0xFC,0x00,0x24,0x00,0x00,/*4,20*/0x00,0x00,0x1F,0x98,0x10,0x84,0x11,0x04,0x11,0x04,0x10,0x88,0x10,0x70,0x00,0x00,/*5,21*/0x00,0x00,0x07,0xF0,0x08,0x88,0x11,0x04,0x11,0x04,0x18,0x88,0x00,0x70,0x00,0x00,/*6,22*/0x00,0x00,0x1C,0x00,0x10,0x00,0x10,0xFC,0x13,0x00,0x1C,0x00,0x10,0x00,0x00,0x00,/*7,23*/0x00,0x00,0x0E,0x38,0x11,0x44,0x10,0x84,0x10,0x84,0x11,0x44,0x0E,0x38,0x00,0x00,/*8,24*/0x00,0x00,0x07,0x00,0x08,0x8C,0x10,0x44,0x10,0x44,0x08,0x88,0x07,0xF0,0x00,0x00,/*9,25*/0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x0C,0x03,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,/*:,26*/0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*;,27*/0x00,0x00,0x00,0x80,0x01,0x40,0x02,0x20,0x04,0x10,0x08,0x08,0x10,0x04,0x00,0x00,/*,30*/0x00,0x00,0x0E,0x00,0x12,0x00,0x10,0x0C,0x10,0x6C,0x10,0x80,0x0F,0x00,0x00,0x00,/*?,31*/0x03,0xE0,0x0C,0x18,0x13,0xE4,0x14,0x24,0x17,0xC4,0x08,0x28,0x07,0xD0,0x00,0x00,/*,32*/0x00,0x04,0x00,0x3C,0x03,0xC4,0x1C,0x40,0x07,0x40,0x00,0xE4,0x00,0x1C,0x00,0x04,/*A,33*/0x10,0x04,0x1F,0xFC,0x11,0x04,0x11,0x04,0x11,0x04,0x0E,0x88,0x00,0x70,0x00,0x00,/*B,34*/0x03,0xE0,0x0C,0x18,0x10,0x04,0x10,0x04,0x10,0x04,0x10,0x08,0x1C,0x10,0x00,0x00,/*C,35*/0x10,0x04,0x1F,0xFC,0x10,0x04,0x10,0x04,0x10,0x04,0x08,0x08,0x07,0xF0,0x00,0x00,/*D,36*/0x10,0x04,0x1F,0xFC,0x11,0x04,0x11,0x04,0x17,0xC4,0x10,0x04,0x08,0x18,0x00,0x00,/*E,37*/0x10,0x04,0x1F,0xFC,0x11,0x04,0x11,0x00,0x17,0xC0,0x10,0x00,0x08,0x00,0x00,0x00,/*F,38*/0x03,0xE0,0x0C,0x18,0x10,0x04,0x10,0x04,0x10,0x44,0x1C,0x78,0x00,0x40,0x00,0x00,/*G,39*/0x10,0x04,0x1F,0xFC,0x10,0x84,0x00,0x80,0x00,0x80,0x10,0x84,0x1F,0xFC,0x10,0x04,/*H,40*/0x00,0x00,0x10,0x04,0x10,0x04,0x1F,0xFC,0x10,0x04,0x10,0x04,0x00,0x00,0x00,0x00,/*I,41*/0x00,0x03,0x00,0x01,0x10,0x01,0x10,0x01,0x1F,0xFE,0x10,0x00,0x10,0x00,0x00,0x00,/*J,42*/0x10,0x04,0x1F,0xFC,0x11,0x04,0x03,0x80,0x14,0x64,0x18,0x1C,0x10,0x04,0x00,0x00,/*K,43*/0x10,0x04,0x1F,0xFC,0x10,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x0C,0x00,0x00,/*L,44*/0x10,0x04,0x1F,0xFC,0x1F,0x00,0x00,0xFC,0x1F,0x00,0x1F,0xFC,0x10,0x04,0x00,0x00,/*M,45*/0x10,0x04,0x1F,0xFC,0x0C,0x04,0x03,0x00,0x00,0xE0,0x10,0x18,0x1F,0xFC,0x10,0x00,/*N,46*/0x07,0xF0,0x08,0x08,0x10,0x04,0x10,0x04,0x10,0x04,0x08,0x08,0x07,0xF0,0x00,0x00,/*O,47*/0x10,0x04,0x1F,0xFC,0x10,0x84,0x10,0x80,0x10,0x80,0x10,0x80,0x0F,0x00,0x00,0x00,/*P,48*/0x07,0xF0,0x08,0x18,0x10,0x24,0x10,0x24,0x10,0x1C,0x08,0x0A,0x07,0xF2,0x00,0x00,/*Q,49*/0x10,0x04,0x1F,0xFC,0x11,0x04,0x11,0x00,0x11,0xC0,0x11,0x30,0x0E,0x0C,0x00,0x04,/*R,50*/0x00,0x00,0x0E,0x1C,0x11,0x04,0x10,0x84,0x10,0x84,0x10,0x44,0x1C,0x38,0x00,0x00,/*S,51*/0x18,0x00,0x10,0x00,0x10,0x04,0x1F,0xFC,0x10,0x04,0x10,0x00,0x18,0x00,0x00,0x00,/*T,52*/0x10,0x00,0x1F,0xF8,0x10,0x04,0x00,0x04,0x00

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論