N76E003 IIC OLED

发布者:Chunjie2022最新更新时间:2022-06-28 来源: eefocus关键字:N76E003  IIC  OLED 手机看文章 扫描二维码
随时随地手机看文章

在这里插入图片描述

#include "N76E003.h"

#include "Common.h"

#include "Delay.h"

#include "SFR_Macro.h"

#include "Function_define.h"

#include  "math.h"

#include "oledfont.h"



#define u8 unsigned char 

#define u32 unsigned int 


/*SCL    P1.3

SDA      P1.4*/

#define OLED_SCLK_Clr() SCL=0

#define OLED_SCLK_Set() SCL=1

#define OLED_SDIN_Clr() SDA=0

#define OLED_SDIN_Set() SDA=1



#define SYS_CLK_EN              0

#define SYS_SEL                 2

#define SYS_DIV_EN              0                   //0: Fsys=Fosc, 1: Fsys = Fosc/(2*CKDIV)

#define SYS_DIV                 1

#define I2C_CLOCK               2

#define TEST_OK                 0x00

bit I2C_Reset_Flag;


#define OLED_CMD  0 //写命令

#define OLED_DATA 1 //写数据

#define OLED_MODE 0

#define SIZE 16

#define XLevelL 0x02

#define XLevelH 0x10

#define Max_Column 128

#define Max_Row 64

#define Brightness 0xFF 

#define X_WIDTH 128

#define Y_WIDTH 64



/**********************************************

//IIC GPIO Init

(必须配置为开漏模式,并加上拉电阻)

**********************************************/

void Init_I2C(void)

{

P13_OpenDrain_Mode; // Modify SCL pin to Open drain mode. don't forget the pull high resister in circuit

P14_OpenDrain_Mode; // Modify SDA pin to Open drain mode. don't forget the pull high resister in circuit

    /* Set I2C clock rate */

    I2CLK = I2C_CLOCK; 


    /* Enable I2C */

    set_I2CEN;                                   

}



/**********************************************

//IIC Start

**********************************************/

void IIC_Start()

{


OLED_SCLK_Set() ;

OLED_SDIN_Set();

OLED_SDIN_Clr();

OLED_SCLK_Clr();

}


/**********************************************

//IIC Stop

**********************************************/

void IIC_Stop()

{

OLED_SCLK_Set() ;

OLED_SDIN_Clr();

OLED_SDIN_Set();

}


/**********************************************

//IIC Ack

**********************************************/

void IIC_Wait_Ack()

{

while(1)

{

if(!SDA) //判断是否接收到应答信号

{

break;

}

}

OLED_SCLK_Set() ;

OLED_SCLK_Clr();

}

/**********************************************

// IIC Write byte

**********************************************/


void Write_IIC_Byte(unsigned char IIC_Byte)

{

unsigned char i;

unsigned char m,da;

da=IIC_Byte;

OLED_SCLK_Clr();

for(i=0;i<8;i++)

{

m=da;

m=m&0x80;

if(m==0x80)

{OLED_SDIN_Set();}

else OLED_SDIN_Clr();

da=da<<1;

OLED_SCLK_Set();

OLED_SCLK_Clr();

}

}

/**********************************************

// IIC Write Command

**********************************************/

void Write_IIC_Command(unsigned char IIC_Command)

{

   IIC_Start();

   Write_IIC_Byte(0x78);            //Slave address,SA0=0

IIC_Wait_Ack();

   Write_IIC_Byte(0x00); //write command

IIC_Wait_Ack();

   Write_IIC_Byte(IIC_Command); 

IIC_Wait_Ack();

   IIC_Stop();

}

/**********************************************

// IIC Write Data

**********************************************/

void Write_IIC_Data(unsigned char IIC_Data)

{

   IIC_Start();

   Write_IIC_Byte(0x78); //D/C#=0; R/W#=0

IIC_Wait_Ack();

   Write_IIC_Byte(0x40); //write data

IIC_Wait_Ack();

   Write_IIC_Byte(IIC_Data);

IIC_Wait_Ack();

   IIC_Stop();

}

/**********************************************

// IIC WriteReadCmd

**********************************************/

void OLED_WR_Byte(unsigned dat,unsigned cmd)

{

if(cmd)

{


   Write_IIC_Data(dat);

   

}

else {

   Write_IIC_Command(dat);

}

}

/********************************************

// fill_Picture

********************************************/

void fill_picture(unsigned char fill_Data)

{

unsigned char m,n;

for(m=0;m<8;m++)

{

OLED_WR_Byte(0xb0+m,0); //page0-page1

OLED_WR_Byte(0x00,0); //low column start address

OLED_WR_Byte(0x10,0); //high column start address

for(n=0;n<128;n++)

{

OLED_WR_Byte(fill_Data,1);

}

}

}

//坐标设置


void OLED_Set_Pos(unsigned char x, unsigned char y) 

{ OLED_WR_Byte(0xb0+y,OLED_CMD);

OLED_WR_Byte(((x&0xf0)>>4)|0x10,OLED_CMD);

OLED_WR_Byte((x&0x0f),OLED_CMD); 

}      

//开启OLED显示    

void OLED_Display_On(void)

{

OLED_WR_Byte(0X8D,OLED_CMD);  //SET DCDC命令

OLED_WR_Byte(0X14,OLED_CMD);  //DCDC ON

OLED_WR_Byte(0XAF,OLED_CMD);  //DISPLAY ON

}

//关闭OLED显示     

void OLED_Display_Off(void)

{

OLED_WR_Byte(0X8D,OLED_CMD);  //SET DCDC命令

OLED_WR_Byte(0X10,OLED_CMD);  //DCDC OFF

OLED_WR_Byte(0XAE,OLED_CMD);  //DISPLAY OFF

}



/********************************************

// OLED Clear Display

********************************************/

void OLED_Clear(void)  

{  

u8 i,n;     

for(i=0;i<8;i++)  

{  

OLED_WR_Byte (0xb0+i,OLED_CMD);    //设置页地址(0~7)

OLED_WR_Byte (0x00,OLED_CMD);      //设置显示位置—列低地址

OLED_WR_Byte (0x10,OLED_CMD);      //设置显示位置—列高地址   

for(n=0;n<128;n++)OLED_WR_Byte(0,OLED_DATA); 

} //更新显示

}


/********************************************

// OLED Update

********************************************/

void OLED_Update(void)  

{  

u8 i,n;     

for(i=0;i<8;i++)  

{  

OLED_WR_Byte (0xb0+i,OLED_CMD);    //设置页地址(0~7)

OLED_WR_Byte (0x00,OLED_CMD);      //设置显示位置—列低地址

OLED_WR_Byte (0x10,OLED_CMD);      //设置显示位置—列高地址   

for(n=0;n<128;n++)OLED_WR_Byte(1,OLED_DATA); 

}


/********************************************

//OLED Display Char

//x:0~127

//y:0~63  

//size:16/12 

********************************************/

void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 Char_Size)

{     

unsigned char c=0,i=0;

c=chr-' ';//得到偏移后的值

if(x>Max_Column-1){x=0;y=y+2;}

if(Char_Size ==16)

{

OLED_Set_Pos(x,y);

for(i=0;i<8;i++)

OLED_WR_Byte(F8X16[c*16+i],OLED_DATA);

OLED_Set_Pos(x,y+1);

for(i=0;i<8;i++)

OLED_WR_Byte(F8X16[c*16+i+8],OLED_DATA);

}

else {

OLED_Set_Pos(x,y);

for(i=0;i<6;i++)

OLED_WR_Byte(F6x8[c][i],OLED_DATA);

}

}

/********************************************

//OLED Pow

********************************************/

u32 oled_pow(u8 m,u8 n)

{

u32 result=1;  

while(n--)result*=m;    

return result;

}   


/********************************************

//OLED Display Number

//x:0~127

//y:0~63

//num

//len

//size:16/12 

********************************************/

void OLED_ShowNum(u8 x,u8 y,u32 num,u8 len,u8 Num_size)

{         

u8 t,temp;

u8 enshow=0;    

for(t=0;t {

temp=(num/oled_pow(10,len-t-1))%10;

if(enshow==0&&t<(len-1))

{

if(temp==0)

{

OLED_ShowChar(x+(Num_size/2)*t,y,' ',Num_size);

continue;

}else enshow=1; 

 

}

OLED_ShowChar(x+(Num_size/2)*t,y,temp+'0',Num_size); 

}


/********************************************

//Show a String

********************************************/

void OLED_ShowString(u8 x,u8 y,u8 *chr,u8 Char_Size)

{

unsigned char j=0;

while (chr[j]!='')

{ OLED_ShowChar(x,y,chr[j],Char_Size);

x+=8;

if(x>120){x=0;y+=2;}

j++;

}

}


/********************************************

//Show  汉字

********************************************/

void OLED_ShowCHinese(u8 x,u8 y,u8 no)

{          

u8 t,adder=0;

OLED_Set_Pos(x,y);

    for(t=0;t<16;t++)

{

OLED_WR_Byte(Hzk[2*no][t],OLED_DATA);

adder+=1;

     }

OLED_Set_Pos(x,y+1);

    for(t=0;t<16;t++)

{

OLED_WR_Byte(Hzk[2*no+1][t],OLED_DATA);

adder+=1;

      }

}



/********************************************

//Show Img

********************************************/

void OLED_DrawBMP(unsigned char x0, unsigned char y0,unsigned char x1, unsigned char y1,unsigned char BMP[])

{

 unsigned int j=0;

 unsigned char x,y;

  

  if(y1%8==0) y=y1/8;      

  else y=y1/8+1;

for(y=y0;y {

OLED_Set_Pos(x0,y);

    for(x=x0;x     {      

    OLED_WR_Byte(BMP[j++],OLED_DATA);    

    }

}


/********************************************

//Init OLED

********************************************/     

void OLED_Init(void)

{

Init_I2C();

OLED_WR_Byte(0xAE,OLED_CMD);//--display off

OLED_WR_Byte(0x00,OLED_CMD);//---set low column address

OLED_WR_Byte(0x10,OLED_CMD);//---set high column address

OLED_WR_Byte(0x40,OLED_CMD);//--set start line address  

OLED_WR_Byte(0xB0,OLED_CMD);//--set page address

OLED_WR_Byte(0x81,OLED_CMD); // contract control

OLED_WR_Byte(0xFF,OLED_CMD);//--128   

OLED_WR_Byte(0xA1,OLED_CMD);//set segment remap 

OLED_WR_Byte(0xA6,OLED_CMD);//--normal / reverse

OLED_WR_Byte(0xA8,OLED_CMD);//--set multiplex ratio(1 to 64)

OLED_WR_Byte(0x3F,OLED_CMD);//--1/32 duty

OLED_WR_Byte(0xC8,OLED_CMD);//Com scan direction

OLED_WR_Byte(0xD3,OLED_CMD);//-set display offset

OLED_WR_Byte(0x00,OLED_CMD);//

OLED_WR_Byte(0xD5,OLED_CMD);//set osc division

OLED_WR_Byte(0x80,OLED_CMD);//

OLED_WR_Byte(0xD8,OLED_CMD);//set area color mode off

OLED_WR_Byte(0x05,OLED_CMD);//

OLED_WR_Byte(0xD9,OLED_CMD);//Set Pre-Charge Period

OLED_WR_Byte(0xF1,OLED_CMD);//

OLED_WR_Byte(0xDA,OLED_CMD);//set com pin configuartion

OLED_WR_Byte(0x12,OLED_CMD);//

OLED_WR_Byte(0xDB,OLED_CMD);//set Vcomh

OLED_WR_Byte(0x30,OLED_CMD);//

[1] [2]
关键字:N76E003  IIC  OLED 引用地址:N76E003 IIC OLED

上一篇:N76E003之模拟EEPROM
下一篇:N76E003 之 RS485 通讯

推荐阅读最新更新时间:2024-11-11 01:37

苹果iPhone 8手机有OLED和LCD两个版本 价格有区别
传闻中苹果iPhone 8手机是第一台配备了OLED屏幕的苹果手机,并且三星已经拿到了苹果7000万片屏幕的订单,不过新消息显示,情况似乎没有那么乐观。下面就随电源管理小编一起来了解一下相关内容吧。   苹果iPhone 8手机有OLED和LCD两个版本 价格有区别 微博用户@i冰宇宙表示,三星为iPhone 8所定制的屏幕生产线是最严格最高端的,具体亮点体现在屏幕寿命、紫外光UV耐久性、颜色控制、亮度、待机功耗五个方面,不过由于严格程度甚至超过三星自家S8屏幕的水平,所以良率不会太高,意味着屏幕供货很是问题。   苹果iPhone 8手机有OLED和LCD两个版本 价格有区别 另外业内分析人士王阳表示,iPhone 8
[电源管理]
全球OLED材料大厂出光兴产将在成都设厂
全球OLED材料大厂出光兴产(Idemitsu Kosan Co.) 12日发布新闻稿宣布,因近年来智能手机、大尺寸电视等为数众多的产品陆续采用OLED面板,加上中国政府力推面板产业振兴政策、中国大型面板厂纷纷加快对OLED面板的投资,因此为了预备今后中国OLED面板材料需求将扩大、 加强中国市场的供应体制和技术支持,将在2018年6月底前于中国四川省设立当地法人「出光电子材料(中国)有限公司」。 出光兴产指出,上述当地法人设立后,也将着手兴建OLED材料工厂,该座工厂预计于2019年度内(2020年3月底前)完工、开始进行商业生产。 上述新厂的产能及投资额将待后续确定。 出光兴产上述新厂所将生产的产品为生产OLED面板所不可或缺
[手机便携]
单片机 N76E003 实现 QC2.0 QC3.0 USB Type-C协议
/*************笔记**************** 1、本QC方案采用PWM调节电压。 2、 3、 4、 5、 ***********************************/ /* -----------------------------------------宏定义-----------------------------------------*/ #define Voltage_06_PWM 18 //0.6V的占空比 /* -----------------------------------------头文件-----------------------------------------*/
[单片机]
单片机 <font color='red'>N76E003</font> 实现 QC2.0 QC3.0 USB Type-C协议
OLED板块大涨4.03% 券商集体推荐8只龙头股
    昨日,OLED板块异动明显,整体上涨4.03%。板块内佛塑科技(行情7.34 +10.04%,买入)、GQY视讯(行情8.91 +10.00%,买入)和万润股份(行情15.73 +10.00%,买入)等3只个股涨停,另外,强力新材(行情29.35 +8.30%,买入)、京东方A(行情4.18 +7.73%,买入)、蓝思科技(行情35.93 +7.57%,买入)、濮阳惠成(行情32.59 +7.20%,买入)、创维数字(行情11.94 +6.80%,买入)、精测电子(行情99.15 +6.67%,买入)、新纶科技(行情17.08 +5.63%,买入)、润欣科技(行情14.30 +5.46%,买入)、智云股份(行情54.84
[手机便携]
苹果购买三星7000万块OLED屏幕:国产手机最受伤
OLED 技术最早由美籍华裔教授邓青云在1983年于实验室中发现,由于OLED屏幕拥有自发光、广视角、极高的对比度、低耗电和高反应速度的优点而被作为新一代的显示面板技术。不过也由于屏幕的工艺要求高、造价较贵、寿命较短等原因,市面上大多手机、平板等显示设备仍旧以LCD(液晶显示) 面板为主。   不过随着工艺技术的不断改进和各家厂商的应用,OLED屏幕成为主流的时代似乎也快要到来了。   根据《日经新闻》的独家报道,苹果已经向三星电子下单了7000万块OLED屏幕的生产合同。这宗大订单基本就证实了今年苹果的新iPhone产品将会使用OLED显示屏幕的传言,目前订单的具体细节还没有被披露。但好歹是苹果十周年产品,如果只是使用普通的OL
[手机便携]
市场需求快速累积 OLED成电视产业升级助推器
  近年来,由于科技的不断发展进步、产品的不断更新迭代,彩电业竞争异常激烈,价格战成家常便饭,以至于中国彩电市场连续几年出现增量不增收的现象。事实上,随着消费需求的升级,人们对 电视 、电脑、手机屏幕的色彩、像素、清晰度的要求越来越高,而 OLED 技术的出现,能够大大提高显示屏的色域、亮度、对比度等显示效果,对于彩电行业发展有着非常重大的意义,它将促使彩电行业从传统的价格战、促销战向高端化、精品化方向发展。下面就随嵌入式小编一起来了解一下相关内容吧。     OLED 是很好的试验田   与液晶显示屏(LCD)相比, OLED 具有耗电少、轻薄、高清晰度等优势,逐渐成为显示屏产业发展火热的领域。   OLED也称有机发光
[嵌入式]
打破三星高分辨率OLED面板独家垄断!DNP将向京东方提供WQHD OLED FMM
  中国面板厂BOE将生产WQHD分辨率的 OLED ,打破三星高分辨率 OLED 面板的独家垄断市场格局,更多中国手机品牌将有机会推出WQHD智能手机。下面就随手机便携小编一起来了解一下相关内容吧。   CINNO Research CEO陈丽雅认为,WQHD高分辨率 OLED 屏幕可实现国产化,意味着高阶柔性OLED与AR/VR显示屏国产化的前景更加明朗,有助于加速国内OLED面板企业的市场化进程。 BOE 5.5英寸WQHD柔性OLED显示幕   据韩国ETNews 6月20日报道,三星Display和日本 DNP (大日本印刷公司,Dai Nippon Printing)在中小型OLED面板生产用金属掩膜版(FMM
[手机便携]
能实现眼睛交互的透视式OLED显示器
  基于有机发光二极管(OLED)的微显示器已经达到了很高的光学性能,不仅具有优异的对比度和大的动态范围,而且具有很低的功耗。它们采用直接发光机制,无需额外背光灯,因此外形尺寸可以做得很小,重量很轻,非常适合移动式近眼(NTE)应用,比如电子取景器或头盔式显示器(HMD)。   在许多先进的应用中,微显示器一般用作纯单向型输出设备。在集成额外的图像传感器后,微显示器的功能可以扩展为双向光学输入/输出设备。主要目标是在透视式头盔显示器应用中实现眼睛跟踪功能,从而提供基于凝视的人-显示器交互效果。   虽然今天的移动信息系统(如智能手机和平板电脑)通常都是触摸控制的,但具有一流像素数量而且几何尺寸显著缩小的微显示器在消费电子产品中已经
[电源管理]
能实现眼睛交互的透视式<font color='red'>OLED</font>显示器
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved