⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 my01.c

📁 OLED的应用程序
💻 C
字号:
#include <REG2051.H>


#define DAT P1

sbit RD=P3^2;
sbit DC=P3^3;
sbit RES=P3^4;
sbit CS=P3^5;
sbit WR=P3^7;
sbit UP=P3^1;
sbit DOWN=P3^0;
unsigned char cc;
void WriteCommand(unsigned com);
void WriteData(unsigned dat);
void esbusini(void);
void ini_oled(void);            
void ini_dis(void);
void delay(unsigned char);

/*unsigned char code d[256]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//",",8//

0x01,0xF0,0x01,0x0C,0x00,0x30,0x01,0xC0,0x00,0x30,0x01,0x0C,0x01,0xF0,0x01,0x00,//"w",0//
0x01,0xF0,0x01,0x0C,0x00,0x30,0x01,0xC0,0x00,0x30,0x01,0x0C,0x01,0xF0,0x01,0x00,//"w",1//
0x01,0xF0,0x01,0x0C,0x00,0x30,0x01,0xC0,0x00,0x30,0x01,0x0C,0x01,0xF0,0x01,0x00,//"w",2//
0x00,0x00,0x00,0x0C,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//".",3//
0x10,0x04,0x1F,0xFC,0x00,0x84,0x01,0x00,0x01,0x00,0x01,0x04,0x00,0xFC,0x00,0x04,//"h",4//
0x10,0x04,0x1F,0xFC,0x00,0x84,0x01,0x00,0x01,0x00,0x01,0x04,0x00,0xFC,0x00,0x04,//"h",5//
0x00,0x00,0x00,0x70,0x00,0x88,0x01,0x04,0x01,0x04,0x11,0x08,0x1F,0xFC,0x00,0x04,//"d",6//
0x00,0x00,0x01,0x84,0x01,0x0C,0x01,0x34,0x01,0x44,0x01,0x84,0x01,0x0C,0x00,0x00,//"z",7//
0x01,0xF0,0x01,0x0C,0x00,0x30,0x01,0xC0,0x00,0x30,0x01,0x0C,0x01,0xF0,0x01,0x00,//"w",8//
0x00,0x00,0x00,0x0C,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//".",9//
0x00,0x00,0x00,0x70,0x00,0x88,0x01,0x04,0x01,0x04,0x01,0x04,0x00,0x88,0x00,0x00,//"c",10//
0x00,0x00,0x00,0xF8,0x01,0x04,0x01,0x04,0x01,0x04,0x01,0x04,0x00,0xF8,0x00,0x00,//"o",11//
0x01,0x04,0x01,0xFC,0x01,0x04,0x01,0x00,0x01,0xFC,0x01,0x04,0x01,0x00,0x00,0xFC,//"m",12//
};*/
unsigned char code d[]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//" ",0//

0x1F,0xC0,0x10,0x3C,0x00,0xE0,0x1F,0x00,0x00,0xE0,0x10,0x3C,0x1F,0xC0,0x00,0x00,//"W",1//

0x1F,0xC0,0x10,0x3C,0x00,0xE0,0x1F,0x00,0x00,0xE0,0x10,0x3C,0x1F,0xC0,0x00,0x00,//"W",2//

0x1F,0xC0,0x10,0x3C,0x00,0xE0,0x1F,0x00,0x00,0xE0,0x10,0x3C,0x1F,0xC0,0x00,0x00,//"W",3//

0x00,0x00,0x00,0x0C,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//".",4//

0x01,0x04,0x01,0xFC,0x01,0x04,0x01,0x00,0x01,0xFC,0x01,0x04,0x01,0x00,0x00,0xFC,//"m",5//

0x01,0x01,0x01,0x81,0x01,0x71,0x00,0x0E,0x00,0x18,0x01,0x60,0x01,0x80,0x01,0x00,//"y",6//

0x00,0x00,0x00,0x70,0x00,0x88,0x01,0x04,0x01,0x04,0x01,0x04,0x00,0x88,0x00,0x00,//"c",7//

0x00,0x00,0x10,0x04,0x10,0x04,0x1F,0xFC,0x00,0x04,0x00,0x04,0x00,0x00,0x00,0x00,//"l",8//

0x01,0x00,0x01,0xF8,0x00,0x04,0x00,0x04,0x00,0x04,0x01,0x08,0x01,0xFC,0x00,0x04,//"u",9//

0x10,0x00,0x1F,0xFC,0x00,0x88,0x01,0x04,0x01,0x04,0x00,0x88,0x00,0x70,0x00,0x00,//"b",10//

0x00,0x00,0x0E,0x0C,0x10,0x14,0x10,0x24,0x10,0x44,0x11,0x84,0x0E,0x0C,0x00,0x00,//"2",11//

0x00,0x00,0x00,0x0C,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//".",12//

0x00,0x00,0x00,0x70,0x00,0x88,0x01,0x04,0x01,0x04,0x01,0x04,0x00,0x88,0x00,0x00,//"c",13//

0x00,0x00,0x00,0xF8,0x01,0x04,0x01,0x04,0x01,0x04,0x01,0x04,0x00,0xF8,0x00,0x00,//"o",14//

0x01,0x04,0x01,0xFC,0x01,0x04,0x01,0x00,0x01,0xFC,0x01,0x04,0x01,0x00,0x00,0xFC,//"m",15//
};

unsigned char code d1[256]={
0x28,0x04,0x24,0x08,0x22,0x32,0x21,0xC2,0x26,0xC2,0x38,0x34,0x04,0x04,0x18,0x08,
0xF0,0x30,0x17,0xC0,0x10,0x60,0x10,0x18,0x14,0x0C,0x18,0x06,0x10,0x04,0x00,0x00,/*"欢",0*/

0x02,0x02,0x82,0x04,0x73,0xF8,0x20,0x04,0x00,0x02,0x3F,0xE2,0x20,0x42,0x40,0x82,
0x40,0x02,0x3F,0xFA,0x20,0x02,0x20,0x42,0x20,0x22,0x3F,0xC2,0x00,0x02,0x00,0x00,/*"迎",1*/

0x01,0x00,0x02,0x00,0x0F,0xFE,0x34,0x00,0xC2,0x08,0x04,0x30,0x19,0xC0,0xF0,0x84,
0x50,0x02,0x17,0xFC,0x10,0x00,0x11,0x00,0x14,0xC0,0x38,0x38,0x10,0x10,0x00,0x00,/*"你",2*/

0x02,0x00,0x04,0x00,0x0F,0xFE,0x38,0x00,0xE0,0x02,0x4F,0x82,0x29,0x44,0x29,0x28,
0x29,0x30,0xFF,0xC8,0x29,0x08,0x29,0x0C,0x29,0x04,0x2F,0x86,0x20,0x04,0x00,0x00,/*"使",3*/

0x00,0x01,0x00,0x02,0x00,0x0C,0x7F,0xF0,0x44,0x40,0x44,0x40,0x44,0x40,0x44,0x40,
0x7F,0xFF,0x44,0x40,0x44,0x40,0x44,0x42,0x44,0x41,0x7F,0xFE,0x00,0x00,0x00,0x00,/*"用",4*/

0x04,0x44,0x0C,0x66,0x34,0xC4,0xC5,0x48,0x06,0x48,0x18,0x4A,0x00,0x02,0x10,0x02,
0x10,0x02,0x10,0x02,0x1F,0xFE,0x10,0x02,0x10,0x02,0x30,0x06,0x10,0x02,0x00,0x00,/*"红",5*/

0x20,0x40,0x20,0x80,0x23,0x00,0x3F,0xFF,0x28,0x00,0xF4,0x00,0x25,0xF8,0x25,0x10,
0x25,0x10,0x25,0xF8,0xF4,0x02,0x24,0x01,0x27,0xFE,0x24,0x00,0x24,0x00,0x00,0x00,/*"荷",6*/

0x00,0x00,0x00,0x00,0x1F,0xF0,0x12,0x20,0x12,0x20,0x12,0x20,0x12,0x20,0xFF,0xFC,
0x12,0x22,0x12,0x22,0x12,0x22,0x12,0x22,0x1F,0xF2,0x00,0x02,0x00,0x0E,0x00,0x00,/*"电",7*/

};

unsigned char code d2[]={
0x00,0x80,0x00,0x80,0x40,0x80,0x40,0x80,0x40,0x80,0x40,0x82,0x40,0x81,0x47,0xFE,
0x48,0x80,0x50,0x80,0x60,0x80,0x40,0x80,0x00,0x80,0x01,0x80,0x00,0x80,0x00,0x00,/*"子",0*/

0x00,0x02,0x20,0x0C,0x27,0xF0,0x22,0x00,0x32,0x00,0x2E,0x00,0x2A,0x00,0xA2,0x00,
0x62,0x00,0x26,0x00,0x2A,0x00,0x32,0x00,0x22,0x00,0x26,0x00,0x22,0x00,0x00,0x00,/*"产",1*/

0x00,0x00,0x00,0xFE,0x00,0x84,0x00,0x84,0x7E,0x84,0x44,0x84,0x44,0xFE,0x44,0x00,
0x44,0xFE,0x44,0x84,0x44,0x84,0x7E,0x84,0x00,0x84,0x00,0xFE,0x00,0x00,0x00,0x00,/*"品",2*/

0x00,0x01,0x00,0x0D,0x00,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*",",3*/

0x08,0x00,0x8F,0x01,0x68,0x01,0x11,0xFA,0x09,0x02,0x13,0x04,0x23,0x08,0xE5,0x70,
0x25,0x08,0x39,0x08,0x25,0x04,0x33,0xF6,0x32,0x03,0x21,0x02,0x01,0x00,0x00,0x00,/*"资",4*/

0x04,0x10,0x24,0x60,0x15,0x80,0x0E,0x00,0xFF,0xFF,0x16,0x00,0x25,0x80,0x04,0x40,
0x42,0x40,0x31,0xC0,0x00,0x40,0x00,0x40,0xFF,0xFF,0x00,0x80,0x00,0x80,0x00,0x00,/*"料",5*/

0x00,0x00,0x20,0x80,0x20,0x82,0x20,0x84,0x21,0x18,0x31,0xE0,0xAA,0x00,0x64,0x00,
0x24,0x00,0x2A,0x00,0x31,0xFF,0x21,0x00,0x20,0x80,0x20,0xC0,0x20,0x80,0x00,0x00,/*"齐",6*/

0x00,0x00,0x01,0x02,0x02,0x02,0x06,0x22,0x0A,0x22,0x12,0x22,0x22,0x22,0xC3,0xFE,
0x22,0x22,0x12,0x22,0x0A,0x22,0x0E,0x62,0x06,0x22,0x04,0x06,0x00,0x02,0x00,0x00,/*"全",7*/

0x00,0x01,0x00,0x0D,0x00,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*",",8*/

};

unsigned char code d3[]=
{
0x02,0x00,0x42,0x00,0x32,0x00,0x23,0xFE,0x00,0x04,0x44,0x08,0x55,0xFF,0x55,0x50,
0x55,0x50,0xFD,0x50,0x55,0x52,0x55,0x51,0x55,0xFE,0x44,0x00,0x04,0x00,0x00,0x00,/*"请",0*/

0x02,0x00,0x82,0x00,0x72,0x00,0x23,0xFC,0x00,0x08,0x10,0x12,0x10,0x04,0x10,0x18,
0x90,0xE0,0x7F,0x00,0x52,0x04,0x12,0x06,0x12,0x04,0x13,0xF8,0x10,0x00,0x00,0x00,/*"访",1*/

0x00,0x00,0x00,0x00,0x1F,0xFF,0x80,0x00,0x60,0x00,0x07,0xC0,0x44,0x40,0x44,0x40,
0x44,0x40,0x44,0x40,0x47,0xC0,0x40,0x02,0x40,0x01,0x7F,0xFE,0x00,0x00,0x00,0x00,/*"问",2*/

0x04,0x44,0x0C,0x66,0x34,0xC4,0xC5,0x48,0x06,0x48,0x18,0x4A,0x00,0x02,0x10,0x02,
0x10,0x02,0x10,0x02,0x1F,0xFE,0x10,0x02,0x10,0x02,0x30,0x06,0x10,0x02,0x00,0x00,/*"红",3*/

0x20,0x40,0x20,0x80,0x23,0x00,0x3F,0xFF,0x28,0x00,0xF4,0x00,0x25,0xF8,0x25,0x10,
0x25,0x10,0x25,0xF8,0xF4,0x02,0x24,0x01,0x27,0xFE,0x24,0x00,0x24,0x00,0x00,0x00,/*"荷",4*/

0x00,0x00,0x00,0x00,0x1F,0xF0,0x12,0x20,0x12,0x20,0x12,0x20,0x12,0x20,0xFF,0xFC,
0x12,0x22,0x12,0x22,0x12,0x22,0x12,0x22,0x1F,0xF2,0x00,0x02,0x00,0x0E,0x00,0x00,/*"电",5*/

0x00,0x80,0x00,0x80,0x40,0x80,0x40,0x80,0x40,0x80,0x40,0x82,0x40,0x81,0x47,0xFE,
0x48,0x80,0x50,0x80,0x60,0x80,0x40,0x80,0x00,0x80,0x01,0x80,0x00,0x80,0x00,0x00,/*"子",6*/

0x00,0x00,0x7F,0xFE,0x40,0x10,0x48,0x20,0x44,0xC0,0x43,0x00,0x44,0xC0,0x58,0x30,
0x44,0x20,0x42,0x40,0x41,0x80,0x4E,0x64,0x44,0x06,0x7F,0xFC,0x00,0x00,0x00,0x00,/*"网",0*/

};
void timer0(void) interrupt 1 using 1
{ TH0=(65535-50000)/256; //50ms定时
  TL0=(65535-50000)%256;
  cc++;
  if(cc>200)
   {
    cc=0;WriteCommand(0xAE);
	} 
 }

void main()
{
	unsigned int j;
	unsigned char b=0x20;
//	unsigned char cc;
	ini_oled();
	
	WriteCommand(0xaf);

	WriteCommand(0xAD); /* Set DC-DC */
	WriteCommand(0x8B); /* 8B=ON, 8A=Off */
	WriteCommand(0xaf);

	WriteCommand (0xb6);      //设置显示位置—行
	WriteCommand (0x00);      //设置显示位置—列低地址
	WriteCommand (0x10);      //设置显示位置—列高地址
		for(j=1;j<=255;j+=2)
			WriteData(d[j]);      //屏幕显示,全亮
	WriteCommand (0xb7);      //设置显示位置—行
	WriteCommand (0x00);      //设置显示位置—列低地址
	WriteCommand (0x10);      //设置显示位置—列高地址
		for(j=0;j<=255;j+=2)
			WriteData(d[j]);      //屏幕显示,全亮

//-----------------------------------------------------------------------
	WriteCommand (0x40);
	WriteCommand (0xb4);    //设置显示位置—行
	WriteCommand (0x00);      //设置显示位置—列低地址
	WriteCommand (0x10);      //设置显示位置—列高地址
		for(j=1;j<=255;j+=2)
			WriteData(d1[j]);       //屏幕显示,全亮

	WriteCommand (0xb5);    //设置显示位置—行
	WriteCommand (0x00);      //设置显示位置—列低地址
	WriteCommand (0x10);      //设置显示位置—列高地址
		for(j=0;j<255;j+=2)
			WriteData(d1[j]);        //屏幕显示,全亮
//-----------------------------------------------------------------------
	WriteCommand (0x40);
	WriteCommand (0xb2);    //设置显示位置—行
	WriteCommand (0x00);      //设置显示位置—列低地址
	WriteCommand (0x10);      //设置显示位置—列高地址
		for(j=1;j<=255;j+=2)
			WriteData(d2[j]);       //屏幕显示,全亮

	WriteCommand (0xb3);    //设置显示位置—行
	WriteCommand (0x00);      //设置显示位置—列低地址
	WriteCommand (0x10);      //设置显示位置—列高地址
		for(j=0;j<255;j+=2)
			WriteData(d2[j]);        //屏幕显示,全亮
//-----------------------------------------------------------------------
	WriteCommand (0x40);
	WriteCommand (0xb0);    //设置显示位置—行
	WriteCommand (0x00);      //设置显示位置—列低地址
	WriteCommand (0x10);      //设置显示位置—列高地址
		for(j=1;j<=255;j+=2)
			WriteData(d3[j]);       //屏幕显示,全亮

	WriteCommand (0xb1);    //设置显示位置—行
	WriteCommand (0x00);      //设置显示位置—列低地址
	WriteCommand (0x10);      //设置显示位置—列高地址
		for(j=0;j<255;j+=2)
			WriteData(d3[j]);        //屏幕显示,全亮
	TMOD=0X11;
    TH0=(65535-50000)/256;
    TL0=(65535-50000)%256;
    TR0=1;//启动计时器
    ET0=1;
	EA=1;
	while(1)
	{
		if(!DOWN)
		{	delay(10);
			if(!DOWN)
				{
					cc=0;
					WriteCommand(0xAf); // AF=ON , AE=OFF
					b-=5;
					if(b<0) b=255;
					WriteCommand(0x81);
					WriteCommand(b);	
				}		
		}
		if(!UP)
		{	delay(10);
			if(!UP)
				{
					cc=0;
					WriteCommand(0xAF); // AF=ON , AE=OFF
					b+=5;
					if(b>255) b=0;
					WriteCommand(0x81);
					WriteCommand(b);
				}
		}	//	key panduan			
	}
}
/**************************实现函数********************************************
*函数原型:		unsigned char ReadCommand(void);
*功  能:		从oled上读当前命令到控制器。
*******************************************************************************/
void WriteCommand(unsigned com)
{
	CS=1;
	DC=0;
	WR=0;	
	RD=1;
	CS=0;
	DAT=com;	
	CS=1;	
}
/**************************实现函数********************************************
*函数原型:		void WriteData(unsigned dat);
*功  能:		写数据到oled显示屏。
*******************************************************************************/
void WriteData(unsigned dat)
{
	CS=1;
	DC=1;	
	WR=0;
	RD=1;
	CS=0;
	DAT=dat;
	CS=1;
}
/**************************实现函数********************************************
*函数原型:		void esbusini(void);
*功  能:		总线初始化。
*******************************************************************************/
void esbusini(void)
{
	RES=0;
	RES=1;
}
/**************************实现函数********************************************
*函数原型:		void ini_dis(void);
*功  能:		显示初始化。
*******************************************************************************/
void ini_dis(void)
{
	unsigned char i,j;
	for(i=0;i<8;i++)
	{
		WriteCommand (0xb0+i);    //设置显示位置—行
		WriteCommand (0x00);      //设置显示位置—列低地址
		WriteCommand (0x10);      //设置显示位置—列高地址
		for(j=0;j<128;j++)
			WriteData(0x00);        //屏幕显示,全亮
	}
}
/**************************实现函数********************************************
*函数原型:		void ini_oled(void);
*功  能:		oled显示的准备工作。
*******************************************************************************/
void ini_oled(void)
{
	esbusini();
	/*************************************************
	// SSD1303 Initialization Command
	*************************************************/
	// Lower Column Address
	WriteCommand(0x00); /* Set Lower Column Address */
	// High Column Address
	WriteCommand(0x10); /* Set Higher Column Address*/
	// Display Start Line
	WriteCommand(0x40); /* Set Display Start Line */
	// Contrast Control Register
	WriteCommand(0x81); /* Set Contrast Control */
	WriteCommand(0x20); /* 0 ~ 255 */
	// Re-map
	WriteCommand(0xA0); /* [A0]:column address 0 is map 
	to SEG0 , [A1]: columnaddress 131 is map to SEG0*/ 
	// Entire Display ON/OFF
	WriteCommand(0xA4); /* A4=ON */
	// Normal or Inverse Display
	WriteCommand(0XA6); /* Normal Display*/
	// Multiplex Ratio
	WriteCommand(0xA8); /* Set Multiplex Ratio */
	WriteCommand(0x3f); /* Set to 36 Mux*/
	// Set DC-DC
	WriteCommand(0xAD); /* Set DC-DC */
	WriteCommand(0x8A); /* 8B=ON, 8A=Off */
	// Display ON/OFF
	WriteCommand(0xAE); /* AF=ON , AE=OFF*/
	// Display Offset
	WriteCommand(0xD3); /* Set Display Offset */
	WriteCommand(0x00); /* No offset */
	// Display Clock Divide
	WriteCommand(0xD5); /* Set Clock Divide */
	WriteCommand(0x20); /* Set to 80Hz */
	// Area Color Mode
	WriteCommand(0xD8); /* Set Area Color On or Off*/
	WriteCommand(0x00); /* Mono Mode */
	// COM Pins Hardware Configuration
	WriteCommand(0xDA); /* Set Pins HardwareConfiguration */
	WriteCommand(0x12);
	// VCOMH
	WriteCommand(0xDB); /* Set VCOMH */
	WriteCommand(0x00);
	// VP
	WriteCommand(0xD9); /* Set VP */
	WriteCommand(0x22); /* P1=2 , P2=2 */
	WriteCommand(0xc0);//配置成标准应用
	ini_dis();
}
void delay(unsigned char m)
{
	unsigned char i,j;
	while(--m)
		{
			for(i=0;i<50;i++)
				for(j=0;j<80;j++);
		}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -