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

📄 w29c040c.c

📁 并口flash
💻 C
字号:
#include<REG51.H>
#include<INTRINS.H>
#include<ABSACC.H>
#include<MATH.H>
#include<stdio.h>
#include"lcd.h"
//#include <AT89X55.H> 

#define uchar unsigned char
#define uint  unsigned int
#define ulong unsigned long
#define CS1_6264 0000H   //T0=1;
uchar  ReadData1[5]={0x30,0x13,0x23,0x06,0x03};
uchar code Rest_m_code[8]={0x06,0x08,0x00,0x03,0x02,0x01,0x01,0x05};


sbit ChipSelect=P3^4;   //FLASH EN_CHIP P1^4
sbit A16=P3^3;    //A16
sbit A17=P3^2;    //A17
//sbit A18=P3^5;    //A18
//sbit WriteEn=P3^6;      //WR
sbit BELL  =P1^6;		  //蜂鸣器控制
//sbit Led=P1^2;
bit  ErrorFlag=0;
uint M_addr,F_addr,DP;
uchar M_data;
void delay(uint t)//1ms
{
	unsigned int i;
	unsigned char j;
	for(i=0;i<t;i++)	
	{
//		WDT=~WDT;
		for(j=0;j<=152;j++);
	//	for(j=0;j<=60;j++);
	}
}


/*入口参数:Address为欲读地址,0<=Address<=0xffff,既0-256k
  出口参数:所读数据,0-0xff 
如:data=ReadByte(0x2ffffL);注意:一定要在地址后加L
*/
uchar ReadByte ( uint Address )
{
//	 uchar temp;
	 ChipSelect=0;
	 _nop_();
	 ACC=XBYTE[Address];
	  _nop_();
	 ChipSelect=1;
	 return ACC;
}


/*入口参数:Address为欲写数据的起始地址,该地址应为128的整数倍,
包括0L,注意:一定要在地址后加L
			WriteData为待写数据,0<=WriteData<=0xff
如:for(i=0;i<=127;i++)
   WriteByte ( 0x30000L,i );
则可以把0-127写到0x30000L-0x3127fL	
如果要写0xbb到芯片的0x30001L,则需写成:
   WriteByte ( 0x30000L,ReadByte(0x30000L) );
   WriteByte ( 0x30001L,0xbb );
   for ( i=0;i<126;i++ )
	WriteByte ( 0x30002L+i,ReadByte(0x30002L+i) );
这样才可以保证其他地址内容不变
*/
void WriteByte ( uint Address,uchar WriteData)
{
 ChipSelect=0;
 _nop_();
 XBYTE[Address]=WriteData;
  _nop_();
 ChipSelect=1;
}

void Write_start ( void )//禁止软件写保护
{
/* WriteByte ( 0x5555,0xaa );
 WriteByte ( 0x2aaa,0x55 );
 WriteByte ( 0x5555,0xa0 );*/
 WriteByte ( 0x5555,0xaa );
 WriteByte ( 0x2aaa,0x55 );
 WriteByte ( 0x5555,0x80 );
 WriteByte ( 0x5555,0xaa );
 WriteByte ( 0x2aaa,0x55 );
 WriteByte ( 0x5555,0x20 );
 delay(30);
}

void Write_page(void) 
{
	uint t;
	uchar temp1;
	EA=0;
	Write_start();
	ChipSelect=1;
	for(t=0;t<256;t++)
	{
		temp1=XBYTE[M_addr+t];
		WriteByte(F_addr+t,temp1);
	//	M_addr++;
	//	F_addr++;
	}
	delay(50);
	EA=1;
}
//void Read_page (uint M_addr,F_addr  )
void Read_page(void)
{
	uint t;
	uchar temp;
	EA=0;
	for(t=0;t<256;t++)
	{
		temp=ReadByte(F_addr+t);
		XBYTE[M_addr+t]=temp;
	//	F_addr++;
	//	M_addr++;
	}
	EA=1;	
}
/*void EarseChip ( void )    //整片擦除为0xff,一般不调用
{
 WriteByte ( 0x5555,0xaa );
 WriteByte ( 0x2aaa,0x55 );
 WriteByte ( 0x5555,0x80 );
 WriteByte ( 0x5555,0xaa );
 WriteByte ( 0x2aaa,0x55 );
 WriteByte ( 0x5555,0x10 );
 DelayMS ( 50 );
}*/
uchar HEX_BCD(uchar hex_data)
{
	uchar temp;
	temp=((hex_data/10)<<4)|hex_data%10;
	return (temp);
}
uint BCD_HEX(uint bcd_data)
{	

	uchar temp;
	temp=((bcd_data>>8)*100)|((bcd_data>>4)*10)|(bcd_data&0x0f);
	return (temp);
}
void delay_main(uint t)
{
	unsigned int i;
	unsigned char j;
	for(i=0;i<t;i++)	
	{
//		WDT=~WDT;
		for(j=0;j<=152;j++);
	//	for(j=0;j<=60;j++);
	}
}
void lcd_write_byte(uchar Dat_byte)
{
	uchar temp,temp1;
	temp=Dat_byte&0xf0;
	temp=temp>>4;
	lcd_write_data(temp+0x30);
	temp1=Dat_byte&0x0f;	
	lcd_write_data(temp1+0x30);	
}
void main ( void )
{
	uchar j;
	uint i;
	for(i=0;i<8;i++)
	{
		XBYTE[i]=Rest_m_code[i];
	}
//	A16=1;
//	A17=0;
//	A18=0;	
//	T0=1;
	for(i=1;i<96;i++)
		{
			if(i==0x0a){i=0x10;}
			else if(i==0x1a){i=0x20;}
			else if(i==0x2a){i=0x30;}
			else if(i==0x3a){i=0x40;}
			else if(i==0x4a){i=0x50;}
			else if(i==0x5a){i=0x60;}
			else if(i==0x6a){i=0x70;}
			else if(i==0x7a){i=0x72;}
			DP=i;
		}
	XBYTE[0x00]++;
	DPH=0;
	ACC=0;
	M_data=0x00;
	for(i=0;i<8;i++)
	{
		ErrorFlag=1;
		if(ErrorFlag==1)ACC=ErrorFlag;
		M_data=M_data<<1;
		M_data=M_data|ACC;
		ACC=0;
	//	ErrorFlag=1;
	//	if(ErrorFlag==1)M_addr=0x01;
		//ACC=ErrorFlag;
	//	M_data=M_data<<1;
	//	M_data=M_data|M_addr;
		M_addr=0;
	 }
    BELL=0;
	delay_main(100);
	BELL=1;
	delay_main(100);
	BELL=0;
	delay_main(100);
	BELL=1;
	delay_main(100);
	BELL=0;
	delay_main(100);
	init_lcd();
//	T0=0;

EF:	//lcd_clear();
    lcd_write_com(0x01);
	delay_main(100);
	lcd_write_com(0x82);
	disphanzizhu("畅想科技");
    lcd_write_com(0x94);
	disphanzizhu("垄断世界");
	delay_main(200);	
	lcd_write_com(0x88);
	disphanzizhu("中国人打日本人");	
	delay_main(100);
//	lcd_write_com(0x01);
	lcd_write_com(0x98);
	disphanzizhu("中华人民共和国!");
	delay_main(100);
	lcd_write_com(0x01);
//	lcd_write_com(0x36);	//30H----基本指令集动作,34H----扩展指令集动作
//	lcd_write_com(0x30);
    delay_main(100);
    lcd_write_com(0x82);
	disphanzizhu("请输入号码!");
	delay_main(100);
    lcd_write_com(0x90);
	disphanzizhu("号码:C001");
	delay_main(100);
	lcd_write_com(0x88);
//	disphanzizhu("密码");
	delay_main(100);
//	lcd_write_com(0x34);
//	lcd_write_com(0x06);		//反白显示
//	lcd_write_com(0x30);
	//ReadData1=0x01;
	for(i=0;i<5;i++)
	{
	ReadData1[i]=ReadData1[i]^0x68;
	ReadData1[i]=ReadData1[i]^0x68;
	lcd_write_byte(ReadData1[i]);
	delay_main(100);
	lcd_write_data(0x2d);
	delay_main(100);
	}
	lcd_write_data(0x00);	
	delay_main(100);
	lcd_write_com(0x34);
	lcd_write_com(0x04);		//反白显示
	lcd_write_com(0x30);
    lcd_write_com(0x9B);
	disphanzizhu("请按确认!");
	lcd_write_com(0x01);
	delay_main(100);
    delay_main(200);
	lcd_write_data(0x33);
	lcd_write_data(0x31);
//	lcd_write_com(0x04);
//	delay_main(100);
//	lcd_write_com(0x04);
//	delay_main(100);
//	lcd_write_com(0x06);
//	delay_main(100);
//	lcd_write_com(0x06);
//	delay_main(100);
//	F_addr=0x0000;
//	M_addr=0x0000;
//    Write_page();
//	delay(10);
//	F_addr=0x0000;
//	DPL=0x33;
//	DPH=0x03;
	DPH=0x48;
	DPH=BCD_HEX(DPH);
	DPL=HEX_BCD(DPL);
	i=1;
	DP=1;
	DP=DP<<i-1;
//	DP=DP+DPL;
//	F_addr=DP;
//	M_addr=0x0300;
//	Read_page();
    DP=0x59;
	if(DP<=0x60)
	{
		DP=0x90;

	}

	 else if(DP<=0x70)
	{
		DP=0x60;
	}
	DP=DP^0x90;
	DP=DP^0x90;
	switch (DP)
	{
		case 0x50:
			F_addr=0x0500;
			M_addr=0x0500;
		break;
		case 0x60:
			F_addr=0x0600;
			M_addr=0x0600;
		break;
		case 0x70:
			F_addr=0x0700;
			M_addr=0x0700;
		break;
		default:			
			F_addr=0x1000;
			M_addr=0x1000;
		break;
	
	}
	A16=0;
	A17=0;
//	A18=0;
	F_addr=0x0100;
	M_addr=0x0000;
	//XBYTE[M_addr]=0x77;
/*	M_addr=0x0001;
	for(i=0;i<256;i++)
	{
		XBYTE[M_addr+i]=0x78;
	}
	F_addr=0x0100;
	for(i=0;i<2;i++)
	{
		M_addr=0x0000;
	    Write_page();
		delay(100);
		F_addr=F_addr+0x100;
	}*/
	M_addr=0x0000;
	F_addr=0x0100;
	for(j=0;j<15;j++)
	{
		for(i=0;i<256;i++)
		{
			XBYTE[M_addr+i]=0;
		}			
	//	M_addr=0x0000;
		Read_page();
	//	M_addr=0x0000;
		F_addr=F_addr+0x100;
		lcd_write_com(0x01);
		delay_main(200);
		lcd_write_com(0x80);
		T0=1;
		for (i=0;i<40;i++)
		{
			lcd_write_byte(XBYTE[M_addr+i]);
			delay(10);
		}
	}
	goto EF;
while(1);
}

⌨️ 快捷键说明

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