📄 w29c040c.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 + -