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

📄 flash.c

📁 采用C8051F410 的模数转换
💻 C
字号:
#include <c8051f020.h>
#include <flash.h>
#include <delay.h>


void write_protect_enable(bool flag)
{	
	unsigned char xdata *ad;
	if(flag==0)
	{
		P4&=0xf5;
		P4|=0x05;
		ad=0xd555;
		*ad=0xaa;

		P4&=0xf2;
		P4|=0x02;
		ad=0xeaaa;
		*ad=0x55;

		P4&=0xf5;
		P4|=0x05;
		ad=0xd555;
		*ad=0x80;

		P4&=0xf5;
		P4|=0x05;
		ad=0xd555;
		*ad=0xaa;

		P4&=0xf2;
		P4|=0x02;
		ad=0xeaaa;
		*ad=0x55;

		P4&=0xf5;
		P4|=0x05;
		ad=0xd555;
		*ad=0x20;

		Delay_ms(10);
	}
	else
	{
		P4&=0xf5;
		P4|=0x05;
		ad=0xd555;
		*ad=0xaa;

		P4&=0xf2;
		P4|=0x02;
		ad=0xeaaa;
		*ad=0x55;

		P4&=0xf5;
		P4|=0x05;
		ad=0xd555;
		*ad=0xa0;
	}
}

void chip_erase(void)
{
	unsigned char xdata *ad;

	P4&=0xf5;
	P4|=0x05;
	ad=0xd555;
	*ad=0xaa;

	P4&=0xf2;
	P4|=0x02;
	ad=0xeaaa;
	*ad=0x55;

	P4&=0xf5;
	P4|=0x05;
	ad=0xd555;
	*ad=0x80;

	P4&=0xf5;
	P4|=0x05;
	ad=0xd555;
	*ad=0xaa;

	P4&=0xf2;
	P4|=0x02;
	ad=0xeaaa;
	*ad=0x55;

	P4&=0xf5;
	P4|=0x05;
	ad=0xd555;
	*ad=0x10;

	Delay_ms(50);
}
void bootblocklockout_enable(bool flag)
{	
	unsigned char xdata *ad;
	if(flag==0)
	{
		P4&=0xf5;
		P4|=0x05;
		ad=0xd555;
		*ad=0xaa;

		P4&=0xf2;
		P4|=0x02;
		ad=0xeaaa;
		*ad=0x55;

		P4&=0xf5;
		P4|=0x05;
		ad=0xd555;
		*ad=0x80;

		P4&=0xf5;
		P4|=0x05;
		ad=0xd555;
		*ad=0xaa;

		P4&=0xf2;
		P4|=0x02;
		ad=0xeaaa;
		*ad=0x55;

		P4&=0xf5;
		P4|=0x05;
		ad=0xd555;
		*ad=0x40;

		P4&=0xf0;
		ad=0xc000;//
		*ad=0x00;

		Delay_ms(10);
	}
	else
	{		
		P4&=0xf5;
		P4|=0x05;
		ad=0xd555;
		*ad=0xaa;

		P4&=0xf2;
		P4|=0x02;
		ad=0xeaaa;
		*ad=0x55;

		P4&=0xf5;
		P4|=0x05;
		ad=0xd555;
		*ad=0x80;

		P4&=0xf5;
		P4|=0x05;
		ad=0xd555;
		*ad=0xaa;

		P4&=0xf2;
		P4|=0x02;
		ad=0xeaaa;
		*ad=0x55;

		P4&=0xf5;
		P4|=0x05;
		ad=0xd555;
		*ad=0x40;

		P4&=0xf3;
		ad=0xffff;//
		*ad=0xff;
		Delay_ms(10);
	}
}

void write_byte(unsigned char section,unsigned int addr, unsigned char dat)
{
	unsigned char xdata *x;
/*
	if(section>0x0f)
		return ;
	if(addr<0xc000)
		return ;
*/
	P4=section;

	x=addr;
	*x=dat;
}

void write_string(unsigned char section,unsigned int addr, unsigned char *dat_sta, unsigned char *dat_end)
{
//	unsigned char i;
//	i=0;
//	while(i<6)
	while(dat_sta<=dat_end)
	{
		write_byte(section,addr++,*dat_sta++);
		if(addr==0x0000)
		{
			section++;
			addr=0xc000;
			if(section>15)
				return;
		}
//		i++;
	}
}

void write_page(unsigned char section,unsigned int addr, unsigned char *dat)
{
//	unsigned char xdata *x;
	unsigned char i;
/*
	if(section>0x0f)
		return ;
	if(addr<0xc000)
		return ;
//	P4=section;
*/
	i=0;
	while(i<128)
	{
/*
		x=addr;
		*x=*dat;
		addr++;
		dat++;
*/
		write_byte(section,addr++,*dat++);
		if(addr==0x0000)
		{
			section++;
			addr=0xc000;
			if(section>15)
				return;
		}
		i++;
	}
}

unsigned char read_byte(unsigned char section,unsigned int addr)
{
	unsigned char xdata *x;

	if(section>16)
		return 0xff;

	P4=section;
	x=addr;

	return *x;
}
void LCD_Disp_Flash_Word(unsigned char x,y,unsigned char xdata *p,unsigned char line,length)
{
	R_BYTE i,j;

	y+=(4<<line);	
	if (y>64)
		y=64;
	y=64-y;
		
	for (i=0; i<line; i++)
	for (j=0; j<length; j++)
		LCD_Draw_byte(x+j,y+i*8, *p++);	
}

void Disp_Flash_Word(unsigned char page,unsigned char local,unsigned char x,unsigned char y)
{
	unsigned char i;
	unsigned char section;
	unsigned int addr;
	unsigned long k;
	unsigned long addrtemp;
	unsigned char xdata diptemp[32];
	k=1;
	addrtemp=k*((page-16)*94+local-1)*32;
	section=addrtemp/16384;
	addr=addrtemp;
	addr|=0xc000;

	for(i=0;i<32;i++)
	{
		diptemp[i]=read_byte(section,addr++);
	}
	if(addr==0x0000)
	{
		section++;
		addr=0xc000;
		if(section>15)
			return;
	}
	LCD_Disp_Flash_Word(x,y,diptemp,2,16);
}

void Disp_Flash_Word_n(unsigned char x,unsigned char y,unsigned char *pt)
{
	unsigned char page;
	unsigned char local;
	while(*pt)
	{
		page=*pt-0xa0;
		local=*(pt+1)-0xa0;
		Disp_Flash_Word(page,local,x,y);
		pt+=2;
		x+=16;
		if(x>127)
		{
			x=0;
			y=y-16;
			if(y<0)
				return;
		}
	}
}

⌨️ 快捷键说明

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