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

📄 24c256.c

📁 12864显示驱动和24C02读写供大家参考,希望大家提出建议!
💻 C
字号:
#include<reg51f.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
//#define addwr 0xa0
//#define addrd 0xa1
sbit wp=P0^3;
sbit scl=P0^2;
sbit sda=P0^1;
uchar data column;
uchar data page;
sbit rs=P2^5;
sbit lcd_e=P2^4;
sbit cs1=P3^3;
sbit cs2=P3^4;
sbit rst=P3^5;
//sbit page_4=P1^4;
//sbit busy=P1^7;
/*char code hanzi[4][32]={0x40,0xb0,0x92,0x96,0x9a,0x92,0xf2,0x9e,0x92,0x91,0x99,0x95,0x91,0x50,0x30,0x00,
                        0x00,0x00,0x40,0x30,0x8c,0x83,0x46,0x2a,0x12,0x2a,0x26,0x42,0xc0,0x40,0x00,0x00,
						0x20,0x24,0x24,0x24,0xfe,0x23,0x22,0x20,0xff,0x20,0x22,0xac,0x20,0x30,0x20,0x00,
						0x00,0x08,0x48,0x84,0x7f,0x02,0x21,0x10,0x09,0x06,0x1a,0x61,0x80,0xe0,0x00,0x00,
						0x00,0xf8,0x08,0x08,0x08,0x08,0x08,0xff,0x08,0x08,0x08,0x08,0x08,0xfc,0x08,0x00,
						0x00,0x03,0x01,0x01,0x01,0x01,0x01,0xff,0x01,0x01,0x01,0x01,0x01,0x03,0x00,0x00,
						0x00,0x40,0x20,0x10,0xfc,0x03,0x40,0x20,0x10,0xff,0x08,0x04,0x06,0xc0,0x00,0x00,
						0x04,0x04,0x04,0x04,0x05,0x04,0x04,0xff,0x94,0x04,0x05,0x05,0x05,0x05,0x40,0x00
						};*/
//char code en_A[16]={0x00,0x00,0xE0,0x18,0x18,0xE0,0x00,0x00,0x30,0x0F,0x04,0x04,0x04,0x04,0x0F,0x30};
//char code en_W[16]={0xF8,0x00,0xC0,0x38,0xC0,0x00,0xF8,0x00,0x03,0x3C,0x03,0x00,0x03,0x3C,0x03,0x00};
//char code en_Y[16]={0x08,0x30,0xc0,0x00,0xc0,0x30,0x08,0x00,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x00};
//char code en_C[16]={0xe0,0x10,0x08,0x08,0x08,0x10,0x60,0x00,0x0f,0x10,0x20,0x20,0x20,0x10,0x0c,0x00};
//char code en_O[16]={0x00,0xe0,0x10,0x08,0x08,0x10,0xe0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00};
//char code en_M[16]={0xf8,0xe0,0x00,0x00,0x00,0xE0,0xf8,0x00,0x3f,0x00,0x0f,0x30,0x0f,0x00,0x3F,0x00};
//char code en_aa[16]={0xFC,0xFC,0x00,0x00,0x00,0xFC,0xFC,0x00,0x01,0x03,0x06,0x0C,0x06,0x03,0x01,0x00};
char code en_0[16]={0xF8,0xFC,0x04,0xC4,0x24,0xFC,0xF8,0x00,0x07,0x0F,0x09,0x08,0x08,0x0F,0x07,0x00};
char code en_1[16]={0x00,0x10,0x18,0xFC,0xFC,0x00,0x00,0x00,0x00,0x08,0x08,0x0F,0x0F,0x08,0x08,0x00};
char code en_2[16]={0x08,0x0C,0x84,0xC4,0x64,0x3C,0x18,0x00,0x0E,0x0F,0x09,0x08,0x08,0x0C,0x0C,0x00};
char code en_3[16]={0x08,0x0C,0x44,0x44,0x44,0xFC,0xB8,0x00,0x04,0x0C,0x08,0x08,0x08,0x0F,0x07,0x00};
char code en_4[16]={0xC0,0xE0,0xB0,0x98,0xFC,0xFC,0x80,0x00,0x00,0x00,0x00,0x08,0x0F,0x0F,0x08,0x00};
char code en_5[16]={0x7C,0x7C,0x44,0x44,0xC4,0xC4,0x84,0x00,0x04,0x0C,0x08,0x08,0x08,0x0F,0x07,0x00};
char code en_6[16]={0xF0,0xF8,0x4C,0x44,0x44,0xC0,0x80,0x00,0x07,0x0F,0x08,0x08,0x08,0x0F,0x07,0x00};
char code en_7[16]={0x0C,0x0C,0x04,0x84,0xC4,0x7C,0x3C,0x00,0x00,0x00,0x0F,0x0F,0x00,0x00,0x00,0x00};
char code en_8[16]={0xB8,0xFC,0x44,0x44,0x44,0xFC,0xB8,0x00,0x07,0x0F,0x08,0x08,0x08,0x0F,0x07,0x00};
char code en_9[16]={0x38,0x7C,0x44,0x44,0x44,0xFC,0xF8,0x00,0x00,0x08,0x08,0x08,0x0C,0x07,0x03,0x00};
char code en_v[16]={0xFC,0xFC,0x00,0x00,0x00,0xFC,0xFC,0x00,0x01,0x03,0x06,0x0C,0x06,0x03,0x01,0x00};
char code en_i[16]={0x00,0x00,0x04,0xFC,0xFC,0x04,0x00,0x00,0x00,0x00,0x08,0x0F,0x0F,0x08,0x00,0x00};
char code en_c[16]={0xF0,0xF8,0x0C,0x04,0x04,0x0C,0x18,0x00,0x03,0x07,0x0C,0x08,0x08,0x0C,0x06,0x00};
char code en_t[16]={0x00,0x1C,0x0C,0xFC,0xFC,0x0C,0x1C,0x00,0x00,0x00,0x08,0x0F,0x0F,0x08,0x00,0x00};
char code en_o[16]={0xF0,0xF8,0x0C,0x04,0x0C,0xF8,0xF0,0x00,0x03,0x07,0x0C,0x08,0x0C,0x07,0x03,0x00};
char code en_r[16]={0x04,0xFC,0xFC,0x44,0xC4,0xFC,0x38,0x00,0x08,0x0F,0x0F,0x00,0x00,0x0F,0x0F,0x00};
char code en_y[16]={0x00,0x3C,0x7C,0xC0,0xC0,0x7C,0x3C,0x00,0x00,0x00,0x08,0x0F,0x0F,0x08,0x00,0x00};
char code en_h[16]={0xFC,0xFC,0x40,0x40,0x40,0xFC,0xFC,0x00,0x0F,0x0F,0x00,0x00,0x00,0x0F,0x0F,0x00};
char code en_a[16]={0xE0,0xF0,0x98,0x8C,0x98,0xF0,0xE0,0x00,0x0F,0x0F,0x00,0x00,0x00,0x0F,0x0F,0x00};
char code en_s[16]={0x18,0x3C,0x64,0x44,0xC4,0x9C,0x18,0x00,0x06,0x0E,0x08,0x08,0x08,0x0F,0x07,0x00};
char code en_e[16]={0x04,0xFC,0xFC,0x44,0xE4,0x0C,0x1C,0x00,0x08,0x0F,0x0F,0x08,0x08,0x0C,0x0E,0x00};
char code en_f[16]={0x04,0xFC,0xFC,0x44,0xE4,0x0C,0x1C,0x00,0x08,0x0F,0x0F,0x08,0x00,0x00,0x00,0x00};
char code en_m[16]={0xFC,0xFC,0x38,0x70,0x38,0xFC,0xFC,0x00,0x0F,0x0F,0x00,0x00,0x00,0x0F,0x0F,0x00};
char code en_q[16]={0xF8,0xFC,0x04,0x04,0x04,0xFC,0xF8,0x00,0x07,0x0F,0x08,0x0E,0x3C,0x3F,0x27,0x00};
char code en_mao[16]={0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x06,0x00,0x00,0x00};
char code en_gang[16]={0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
char code en_z[16]={0x60,0x60,0x20,0xA0,0xE0,0x60,0x20,0x00,0x0C,0x0E,0x0B,0x09,0x08,0x0C,0x0C,0x00};
char code en_u[16]={0xFC,0xFC,0x00,0x00,0x00,0xFC,0xFC,0x00,0x07,0x0F,0x08,0x08,0x08,0x0F,0x07,0x00};
char code en_n[16]={0xFC,0xFC,0x38,0x70,0xE0,0xFC,0xFC,0x00,0x0F,0x0F,0x00,0x00,0x00,0x0F,0x0F,0x00};
char code en_d[16]={0x04,0xFC,0xFC,0x04,0x0C,0xF8,0xF0,0x00,0x08,0x0F,0x0F,0x08,0x0C,0x07,0x03,0x00};
char code en_b[16]={0x04,0xFC,0xFC,0x44,0x44,0xFC,0xB8,0x00,0x08,0x0F,0x0F,0x08,0x08,0x0F,0x07,0x00};
void delay();
void send_dat_l(uchar d);
void send_dat_r(uchar d);
void send_dat_disp_l(uchar d);
void send_dat_disp_r(uchar d);
void ini();
void cls_l();
void cls_r();
void disp_l(uchar row,uchar col,char *p);
void disp_r(uchar row,uchar col,char *p);
void hanzi_disp();


void delay()
{

	_nop_();_nop_();_nop_();
}
void send_dat_l(uchar d)
{
	rs=0;rs=0;
	cs1=1;cs1=1;delay();delay();//cs2=0;cs2=0;
	lcd_e=1;lcd_e=1;
    P1=d;P1=d;//delay();delay();
	lcd_e=0;lcd_e=0;
	cs1=0;cs1=0;
}
void send_dat_r(uchar d)
{
	rs=0;rs=0;
	cs2=1;cs2=1;delay();delay();//cs1=1;cs1=1;
	lcd_e=1;lcd_e=1;
	P1=d;P1=d;//delay();delay();
	lcd_e=0;lcd_e=0;
	cs2=0;cs2=0;
	
}
void send_dat_disp_l(uchar d)
{
	rs=1;rs=1;
	cs1=1;cs1=1;delay();delay();//cs2=1;cs2=1;
	lcd_e=1;lcd_e=1;
	P1=d;P1=d;//delay();delay();
	lcd_e=0;lcd_e=0;
	cs1=0;cs1=0;
}
void send_dat_disp_r(uchar d)
{
	rs=1;rs=1;
	cs2=1;cs2=1;delay();delay();//cs1=1;cs1=1;
	lcd_e=1;lcd_e=1;//delay();delay();
	P1=d;P1=d;//delay();delay();
	lcd_e=0;//lcd_e=0;
	cs2=0;cs2=0;
}
void ini()
{
	lcd_e=0; rs=0; cs1=cs2=0;//delay();
	send_dat_l(0x3e);//关显示命令
	//delay();
	send_dat_r(0x3e);//关显示命令
	//delay();
	send_dat_l(0x3f);//开显示命令
	//delay();
	send_dat_r(0x3f);//开显示命令
	//delay();
	send_dat_l(0xc0);//设置起始行
 	//delay();
	send_dat_r(0xc0);//设置起始行
 	//delay();
}
void cls_l()
{
	uchar data i,j,disp_page;
	for(i=0;i<8;i++)
	{
		disp_page=i;
		disp_page=disp_page|0xb8;//设置页地址
		send_dat_l(disp_page);
		send_dat_l(0x40);        //设置列地址
		for(j=0;j<64;j++)
		{
			//delay();
			send_dat_disp_l(0x00);
		}
	}
}
void cls_r()
{
    uchar data i,j,disp_page;
	for(i=0;i<8;i++)
	{
		disp_page=i;
		disp_page=disp_page|0xb8;//设置页地址
		send_dat_r(disp_page);
		send_dat_r(0x40);        //设置列地址
		for(j=0;j<64;j++)
		{
			//delay();
			send_dat_disp_r(0x00);
		}
	}

}
void disp_l(uchar row,uchar col,char *p)
{
	uchar hang,lie;
	uchar k;
	//char idata ch;
	//hang=lie=k=0;
	hang=row;
	lie=col;
	hang=hang|0xb8;
    lie=lie|0x40;
	send_dat_l(hang);
	send_dat_l(lie);     
	for(k=0;k<8;k++)
	{   //ch=*p;
		send_dat_disp_l(*p);
		p++;
	}
	hang+=1;
	send_dat_l(hang);
	send_dat_l(lie);  
	for(k=0;k<8;k++)
	{	//ch=*p;
		send_dat_disp_l(*p);
		p++;
	
	}

}
void disp_r(uchar row,uchar col,char *p)
{
	uchar hang,lie;
	uchar k;
	//char idata ch;
	//hang=lie=k=0;
	hang=row;
	lie=col;
	hang=hang|0xb8;
    lie=lie|0x40;
	send_dat_r(hang);
	delay();

	send_dat_r(lie); 
    delay();
	for(k=0;k<8;k++)
	{   //ch=*p;
		send_dat_disp_r(*p);
		p++;
		//delay();
		//delay();delay();
	}
	//delay();
	//delay();
	hang=hang+1;
	send_dat_r(hang);
	delay();
	send_dat_r(lie);  
	delay();
	for(k=0;k<8;k++)
	{	//ch=*p;
		send_dat_disp_r(*p);
		p++;
		//delay();//delay();delay();
	}


}

/*void hanzi_disp()
{
	uchar data i;
	cls_l();
	cls_r();
	disp_l(0,0,&hanzi[4][32]);


	
	for(i=0;i<4;i++)
	{
		
	}
	
	for(i=0;i<4;i++)
	{
		
	}
	
}
*/


void mdelay(uchar j)
{
  uchar i;
  for(;j>0;j--)
  {
  	for(i=0;i<125;i--)
	{;}
  }

}
void start(void)
{
 sda=1;
 scl=1; 
 _nop_();_nop_();_nop_();_nop_();
 sda=0;
_nop_();_nop_();_nop_();_nop_();
}
void stop(void)
{
 sda=0;
 scl=1;
 _nop_();_nop_();_nop_();_nop_();
 sda=1;
_nop_();_nop_();_nop_();_nop_();
}
void ack(void)
{
 sda=0;
 scl=1;
 _nop_();_nop_();_nop_();_nop_();
 scl=0;
_nop_();_nop_();_nop_();_nop_();
}
void noack(void)
{
 sda=1;
 scl=1;
 _nop_();_nop_();_nop_();_nop_();
 scl=0;
_nop_();_nop_();_nop_();_nop_();
}
void send(uchar a)
{
	uchar bitchar=8;
	//uchar temp;
	do
	{
		//temp=a;
		scl=0;
		_nop_();_nop_();_nop_();_nop_();
		if((a&0x80)==0x80)
		sda=1;
		else
		sda=0;
		scl=1;
		a=a<<1;
		//a=temp;
		bitchar--;
		mdelay(20);
		
	}while(bitchar);
	scl=0;
 }
uchar read(void)
{
	uchar temp=0;
	uchar temp1=0;
	uchar bitcounter=8;
	sda=1;
	do{
	   scl=0;
	   _nop_();_nop_();_nop_();_nop_();
	   scl=1;
		_nop_();_nop_();_nop_();_nop_();
		if(sda)
		temp=temp|0x01;
		else
		temp=temp&0xfe;
		if(bitcounter-1)
		{
			temp=temp<<1;
			//temp=temp1;
		 }
		 bitcounter--;
		 mdelay(20);
	   }while(bitcounter);
	   return(temp);
}

void wrtorom(uchar array[],uchar address,uchar num)
{
	uchar i;
	uchar *ppdata;
	ppdata=array;
	for(i=0;i<num;i++)
	{
		start();
		send(0xa0);

		ack();
		// _nop_();_nop_();_nop_();_nop_();
		send(address+i);
		ack();
		// _nop_();_nop_();_nop_();_nop_();
		send(*(ppdata+i));
		ack();
		 //_nop_();_nop_();_nop_();_nop_();
		stop();
		mdelay(20);
		mdelay(20);
		mdelay(20);
		//i+=2;
	 }
}
void rdfromrom(uchar array[],uchar address,uchar num)
{
	uchar i;
	uchar *ppdata;
	ppdata=array;
	for(i=0;i<num;i++)
	{
		start();
		send(0xa0);
		ack();
		// _nop_();_nop_();_nop_();_nop_();
		send(address+i);
		ack();
		 //_nop_();_nop_();_nop_();_nop_();
		start();
		send(0xa1);
		ack();
		// _nop_();_nop_();_nop_();_nop_();
		*(ppdata+i)=read();
		scl=0;
		noack();
		stop();
		//i+=2;
	 }
}
void displaynumqian(uchar a)//显示千位数
{
	switch(a)
	{
		case 0: disp_r(4,0,&en_0[0]); break;
		case 1: disp_r(4,0,&en_1[0]); break;
		case 2: disp_r(4,0,&en_2[0]); break;
		case 3: disp_r(4,0,&en_3[0]); break;
		case 4: disp_r(4,0,&en_4[0]); break;
		case 5: disp_r(4,0,&en_5[0]); break;
		case 6: disp_r(4,0,&en_6[0]); break;
		case 7: disp_r(4,0,&en_7[0]); break;
		case 8: disp_r(4,0,&en_8[0]); break;
		case 9: disp_r(4,0,&en_9[0]); break;
		default:                      break;
	}
}
void displaynumbai(uchar a)//显示百位数
{
	switch(a)
	{
		case 0: disp_r(4,10,&en_0[0]); break;
		case 1: disp_r(4,10,&en_1[0]); break;
		case 2: disp_r(4,10,&en_2[0]); break;
		case 3: disp_r(4,10,&en_3[0]); break;
		case 4: disp_r(4,10,&en_4[0]); break;
		case 5: disp_r(4,10,&en_5[0]); break;
		case 6: disp_r(4,10,&en_6[0]); break;
		case 7: disp_r(4,10,&en_7[0]); break;
		case 8: disp_r(4,10,&en_8[0]); break;
		case 9: disp_r(4,10,&en_9[0]); break;
		default:                      break;
	}
}
void displaynumshi(uchar a)//显示十位数
{
	switch(a)
	{
		case 0: disp_r(4,20,&en_0[0]); break;
		case 1: disp_r(4,20,&en_1[0]); break;
		case 2: disp_r(4,20,&en_2[0]); break;
		case 3: disp_r(4,20,&en_3[0]); break;
		case 4: disp_r(4,20,&en_4[0]); break;
		case 5: disp_r(4,20,&en_5[0]); break;
		case 6: disp_r(4,20,&en_6[0]); break;
		case 7: disp_r(4,20,&en_7[0]); break;
		case 8: disp_r(4,20,&en_8[0]); break;
		case 9: disp_r(4,20,&en_9[0]); break;
		default:                      break;
	}
}
void displaynumge(uchar a)//显示个位数
{
	switch(a)
	{
		case 0: disp_r(4,30,&en_0[0]); break;
		case 1: disp_r(4,30,&en_1[0]); break;
		case 2: disp_r(4,30,&en_2[0]); break;
		case 3: disp_r(4,30,&en_3[0]); break;
		case 4: disp_r(4,30,&en_4[0]); break;
		case 5: disp_r(4,30,&en_5[0]); break;
		case 6: disp_r(4,30,&en_6[0]); break;
		case 7: disp_r(4,30,&en_7[0]); break;
		case 8: disp_r(4,30,&en_8[0]); break;
		case 9: disp_r(4,30,&en_9[0]); break;
		default:                      break;
	}
}

main()
{   //uchar i;
	uchar number[4]={9,8,7,6};
	wp=0;
	wrtorom(number,90,4);
	mdelay(20);
//	number[0]=0;
//  number[1]=0;
//	number[2]=0;
//	number[3]=0;
	rdfromrom(number,90,4);
	//number[1]=0;
	//number[3]=0;
	cs1=cs2=0;
	//delay();delay();
	rst=1;
	delay();
	delay();
	ini();
	cls_l();
	cls_r();
	//while(1)
	//{
	disp_l(0,54,&en_o[0]);
	disp_l(0,44,&en_t[0]);
    disp_l(0,34,&en_c[0]);
	disp_l(0,24,&en_i[0]);
	disp_l(0,14,&en_v[0]);
	disp_l(2,0,&en_f[0]);

    disp_l(2,10,&en_r[0]);
    disp_l(2,20,&en_e[0]);
	disp_l(2,30,&en_q[0]);
	disp_l(2,40,&en_mao[0]);
	disp_r(2,0,&en_1[0]);
	disp_r(2,10,&en_h[0]);
	disp_r(2,20,&en_z[0]);
	disp_l(4,0,&en_c[0]);
	disp_l(4,10,&en_o[0]);
	disp_l(4,20,&en_u[0]);
	disp_l(4,30,&en_n[0]);
	disp_l(4,40,&en_t[0]);
	disp_l(4,50,&en_mao[0]);
	displaynumqian(number[0]);
	displaynumbai(number[1]);
	displaynumshi(number[2]);
	displaynumge(number[3]);

	 
	
	disp_l(6,4,&en_s[0]);
	disp_l(6,14,&en_t[0]);
	disp_l(6,24,&en_a[0]);
	disp_l(6,34,&en_n[0]);
	disp_l(6,44,&en_d[0]);
	disp_l(6,54,&en_b[0]);
	disp_r(6,1,&en_y[0]);


	 	disp_r(0,1,&en_r[0]);
	//	for(i=0;i<100;i++);
	 	disp_r(0,11,&en_y[0]);
	//	for(i=0;i<100;i++);
	 	disp_r(0,21,&en_gang[0]);
	//	for(i=0;i<100;i++);
	//	disp_l(2,30,&en_C[0]);
	 	disp_r(0,31,&en_4[0]);
	//	for(i=0;i<100;i++);
		
 	
	
	while(1)
	{
	}

}

⌨️ 快捷键说明

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