stc8h8k64@30MHZ, ssd1306oled 暂时调整到的最高刷新率

stc8h8k64使用30MHZ, ssd1306oled 暂时调整到的最高刷新率.

#include "oled.h"

u8 xdata OLED_GRAM[8][128];


u8 code OLED_INIT_COMMAND[28]={
//	0xAE,
//	0x00,//---set low column address
//	0x10,//---set high column address
//	0x40,//--set start line address  
//	0xB0,//--set page address
//	0x81, // contract control
//	0xFF,//--128   
//	0xA1,//set segment remap 
//	0xA6,//--normal / reverse
//	0xA8,//--set multiplex ratio(1 to 64)
//	0x3F,//--1/32 duty
//	0xC8,//Com scan direction
//	0xD3,//-set display offset
//	0x00,//
//	
//	0xD5,//set osc division
//	0xF0,//
//	
//	0xD8,//set area color mode off
//	0x05,//
//	
//	0xD9,//Set Pre-Charge Period
//	0xF1,//
//	
//	0xDA,//set com pin configuartion
//	0x12,//
//	
//	0xDB,//set Vcomh
//	0x30,//
//	
//	0x8D,//set charge pump enable
//	0x14,//
//	
//	0xAF,//--turn on oled panel
	0xAE,//--turn off oled panel
	0x00,//---set low column address
	0x10,//---set high column address
	0x40,//--set start line address  Set Mapping RAM Display Start Line (0x00~0x3F)
	0x81,//--set contrast control register
	0xCF,// Set SEG Output Current Brightness
	0xA1,//--Set SEG/Column Mapping     0xa0×óóò·′?? 0xa1?y3£
	0xC8,//Set COM/Row Scan Direction   0xc0é???·′?? 0xc8?y3£
	0xA6,//--set normal display
	0xA8,//--set multiplex ratio(1 to 64)
	0x3f,//--1/64 duty
	0xD3,//-set display offset	Shift Mapping RAM Counter (0x00~0x3F)
	0x00,//-not offset
	0xd5,//--set display clock divide ratio/oscillator frequency
	0xf0,//--set divide ratio, Set Clock as 100 Frames/Sec
	0xD9,//--set pre-charge period
	0xF1,//Set Pre-Charge as 15 Clocks & Discharge as 1 Clock
	0xDA,//--set com pins hardware configuration
	0x12,
	0xDB,//--set vcomh
	0x40,//Set VCOM Deselect Level
	0x20,//-Set Page Addressing Mode (0x00/0x01/0x02)
	0x02,//
	0x8D,//--set Charge Pump enable/disable
	0x14,//--set(0x10) disable
	0xA4,// Disable Entire Display On (0xa4/0xa5)
	0xA6,// Disable Inverse Display On (0xa6/a7) 
	0xAF,


};

u8 bdata dat;
sbit d7=dat^7;
sbit d6=dat^6;
sbit d5=dat^5;
sbit d4=dat^4;
sbit d3=dat^3;
sbit d2=dat^2;
sbit d1=dat^1;
sbit d0=dat^0;

void OLED_Clear(){
	u8 i,n;
	for(i=0;i<8;i++){
		for(n=0;n<128;n++){
			OLED_GRAM[i][n]=0x00;
		}
	}
}

void OLED_On(){
	u8 i,n;
	for(i=0;i<8;i++){
		for(n=0;n<128;n++){
			OLED_GRAM[i][n]=0xff;
		}
	}
}

void OLED_DrawPoint(u8 x,u8 y)
{
	u8 i,m,n;
	i=y/8;
	m=y%8;
	n=1<<m;
	
	OLED_GRAM[i][x] |=n; 
}

void OLED_FillRect(int x,int y,unsigned char w,unsigned char h)
{
	u8 i,n;
	for(i=0;i<h/8;i++)
	{
		for(n=0;n<w;n++)
		{
			if(x+n>0 && x+n<128) OLED_DrawPoint(x+n,y+i*8);
		}
	}
}




void OLED_DrawBitmap(int x,int y,unsigned char *bitmap,unsigned char w,unsigned char h){
	u8 i,n,m,temp;
	
	for(i=0;i<h/8;i++){
		for(n=0;n<w;n++){
			if(x+n>0 && x+n<128){
			temp=bitmap[w*i+n];
			for(m=0;m<8;m++){
				if((temp>>m) & 0x01) OLED_DrawPoint(x+n,y+m+i*8);
			}
		  }
		}
	}
		
}

void OLED_Refresh(void)
{
	u8 i,n;
	u8 PosCmd[3]={0x00,0x10};
	for(i=0;i<8;i++)
	{
	  
	    Soft_IIC_Write(DevAddr,OLED_CMD,0xb0+i);
	   
		Soft_IIC_Write(DevAddr,OLED_CMD,0x00);
		Soft_IIC_Write(DevAddr,OLED_CMD,0x01);
		Soft_IIC_Start();
	Soft_IIC_WriteByte(DevAddr);
	Soft_IIC_Ack();
	Soft_IIC_WriteByte(0X40);
		Soft_IIC_Ack();
	   for(n=0;n<128;n++)
		{	
			dat=OLED_GRAM[i][n];
			SCL=0;
			_nop_();_nop_();
			SDA=d7;
			_nop_();_nop_();_nop_();
			SCL=1;
			_nop_();_nop_();
			SCL=0;
			_nop_();_nop_();
			SDA=d6;
			_nop_();_nop_();_nop_();
			SCL=1;
			_nop_();_nop_();
			SCL=0;
			_nop_();_nop_();
			SDA=d5;
			_nop_();_nop_();_nop_();
			SCL=1;
			_nop_();_nop_();
			SCL=0;
			_nop_();_nop_();
			SDA=d4;
			_nop_();_nop_();_nop_();
			SCL=1;
			_nop_();_nop_();
			SCL=0;
			_nop_();_nop_();
			SDA=d3;
			_nop_();_nop_();_nop_();
			SCL=1;
			_nop_();_nop_();
			SCL=0;
			_nop_();_nop_();
			SDA=d2;
			_nop_();_nop_();_nop_();
			SCL=1;
			_nop_();_nop_();
			SCL=0;
			_nop_();_nop_();
			SDA=d1;
			_nop_();_nop_();_nop_();
			SCL=1;
			_nop_();_nop_();
			SCL=0;
			_nop_();_nop_();
			SDA=d0;
			_nop_();_nop_();_nop_();
			SCL=1;
			_nop_();_nop_();
			SCL=0;
			_nop_();_nop_();
			Soft_IIC_Ack();
//			Soft_IIC_Mem_Write(DevAddr,OLED_DATA,OLED_GRAM[i],128);
		}
		Soft_IIC_Stop();
  }

}
void OLED_Init(){
	Soft_IIC_Mem_Write(DevAddr,OLED_CMD,OLED_INIT_COMMAND,28);
}

#include "softi2c.h"




void Soft_IIC_Start(){
	SCL=1;
	SDA=1;
	_nop_();_nop_();
	SDA=0;
	_nop_();_nop_();
	SCL=0;
}

	
void Soft_IIC_Ack(){
	SDA=1;
	SCL=0;
	_nop_();_nop_();
	
	SCL=1;
	_nop_();_nop_();
	
	SCL=0;
}

void Soft_IIC_Stop(){
	SDA=0;
	SCL=1;
	_nop_();_nop_();
	
	SDA=1;
	_nop_();_nop_();
}


void Soft_IIC_WriteByte(u8 IIC_Data){
	unsigned char i;
	unsigned char m,da;
	da=IIC_Data;
	
	SCL=0;;
	for(i=0;i<8;i++)		
	{
			m=da;
		//	OLED_SCLK_Clr();
		m=m&0x80;
		if(m==0x80)
		{
			SDA=1;}
		else {
			SDA=0;
		}
		da=da<<1;
		SCL=1;
		_nop_();_nop_();
		SCL=0;
		
		}
	
	
}

void Soft_IIC_Mem_Write(u8 DevAddr,u8 Cmd,u8 *Pdata,u8 DataSize){
	int i;
	Soft_IIC_Start();
	Soft_IIC_WriteByte(DevAddr);
	Soft_IIC_Ack();
	Soft_IIC_WriteByte(Cmd);
	Soft_IIC_Ack();
	for(i=0;i<DataSize;i++){
		Soft_IIC_WriteByte(Pdata[i]);
		Soft_IIC_Ack();
	}
	Soft_IIC_Stop();
}

void Soft_IIC_Write(u8 DevAddr,u8 Cmd,u8 dat){
	Soft_IIC_Start();
	Soft_IIC_WriteByte(DevAddr);
	Soft_IIC_Ack();
	Soft_IIC_WriteByte(Cmd);
	Soft_IIC_Ack();
	
	Soft_IIC_WriteByte(dat);
	Soft_IIC_Ack();
	
	Soft_IIC_Stop();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值