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

📄 main.c

📁 一种通过USB将显示数据送入NAND FLASH中
💻 C
📖 第 1 页 / 共 2 页
字号:
       		read_status();
       		point = 0x00;                 //set lower column address
       		read_status();
       		point = 0x10;                 //set higher column address
      		for( m=0; m<128;m++)           //set segment 0-127as 0x00
        	{
        		read_status(); 
            		DC_oled = 1;
            		point = visionox[((int)page<<7)+m];
            }
        }
}

//================================================================
//图形显示函数
void oled_display(unsigned int Picture_index)
{
	uchar j,i;
    uchar page_change=0;
	CS_oled=1;
	EA=0;
    Nf_ReadPage(start_page_point+(Picture_index<<1),0,512);
//    SerialTrans(512);
	CS_oled=0;
	EA=1;
	for(page=0;page<8;page++)
	{
        page_change=page&0x03;
		DC_oled=0;
		read_status();
		point=176+page; //set page address
		read_status();
		point=0x00;    //set low address
		read_status();
		point=0x10;    //set higher address
		read_status();
		for(i=0;i<128;i++)
		  {
			OLED_DataBuff[i]=DataBuff[128*page_change+i];
		  }
		for(j=0;j<128;j++)
		  {	     
      		ucImageTemp = OLED_DataBuff[j];
			read_status();
			DC_oled = 1;
			point=ucImageTemp;
          }	   
	   if(page==3)
	    { 
			CS_oled=1;
			EA=0;
            Nf_ReadPage(start_page_point+1+(Picture_index<<1),0,512);
//SerialTrans(512);
			CS_oled=0;
			EA=1;
		}

	}
}

//***********************oled延时
void  oled_display_delay(unsigned int d_t)
{
    unsigned int i;
  if(!ms_delay_flag)
   {
	while(d_t--)
	 {

	      for(i=0;i<28500;i++)                      //i=28500,刚好0.5秒
		   {
			if(!Usb_flag)
	           {
			     ;
		       }	      
	        else
	        return ;
		   }
     }
   }

   else
   {
	while(d_t--)
	 {

	      for(i=0;i<100;i++)                      //ms
		   {
			if(!Usb_flag)
	           {
			     ;
		       }	      
	        else
	        return ;
		   }
     }
   }
   
}
//================================================================
//初始化函数
void init_programe()
{
    unsigned char i=0;
	CS_oled=0;
	RES_oled=0;
    i++;
	i++;
	i++;
	i=0;
	RES_oled=1;
	DC_oled=0;
	read_status();
	point=0xaf;    //10101111:  set display on
	read_status();
	point=0xa4;    //10100100:  set Entire Display on/off: normal display(POR)
	read_status();
	point=0xa6;    //10100110:  set nomal display(POR)
	read_status();
	point=0x81;    /*10000001:  set contrast control register */
	read_status();
	point=0x80;    //10000000:  contrast set(select from 1 to 256)

	read_status();
	point=0xa0;    //10100000:  set segment remap:column address 0 is mapped to SEG0(POR)
	read_status();
	point=0xc8;    //11000000:  set com output scan direction:Scan from COM0 to COM(N-1)

	read_status();
	point=0xd8;    /*  11011000:  set area color mode on/off  */
	read_status();
	point=0x00;    //  00110000:  mono mode

	read_status();
	point=0xda;    /*  11011010:  set COM pins hardware configuration  */
	read_status();
	point=0x12;    //  00010010:  alternative COM pin configuration(COM62,60,58,...2,0,SEG0~96,COM1,3,5...61,63)

//   read_status();
//   point=0xad;
//	 read_status();
//   point=0x8a;
}

//读状态函数
void read_status()
{
	DC_oled=0;
	state=1;
	temp=1;
	do
	{
		state=point;
		temp=state & 0x80;

	}while(temp != 0);
}

//****************************************************************************************************

//***********************NAND FLASH部分
//nf init
void Nf_Init(void)
{
	P1_5=1;
	STG_ALE=0;
	STG_CLE=0;
	NF_CE=0;
	NF_WP=1;
	NF_SE=1;
	Nf_wait_busy();
}

//read nf ID
void ReadNfID(void)
{
    EA=0;
	Nf_send_command(READ_ID_CMD);
	Nf_send_address(0x00);

//	delay(2);
	chip_i=Nf_rd_byte();
	chip_d=Nf_rd_byte();
	EA=1;
}
/*
//write three address to nand flash 
void WriteThreeAdd(unsigned char Add1,unsigned char Add2,unsigned char Add3) //reentrant
{
	Nf_send_address(Add1);
	
	Nf_send_address(Add2);
	
	Nf_send_address(Add3);
}
*/

//read a status
unsigned char ReadStatus(unsigned char Command)
{
	unsigned char Statu;
	Nf_send_command(Command);

	Statu=Nf_rd_byte();
	return Statu;
}

//Nf Block Erase
unsigned char Nf_Block_Erase(unsigned int PageAdd)
{
	unsigned char Add1,Add2;
	unsigned char Status;
	unsigned int temp;
//    EA=0;
	temp=PageAdd;
	Add1=temp;
	Add2=temp>>8;
	EA=0;
	Nf_send_command(BLOCK_ERASE_CMD);

	Nf_send_address(Add1);
	Nf_send_address(Add2);
	Nf_send_command(BLOCK_ERASE_CONFIRM_CMD);
	Nf_wait_busy();

	Status=ReadStatus(READ_STATUS_CMD);

    EA=1;
    
	return Status;
}


//read spcified byte in one page from nand flash
unsigned char Nf_ReadByte(unsigned long PageAdd, unsigned int ByteAdd)
{
	unsigned char Add1,Add2,Add3;
	unsigned char AddCommand;
	unsigned char SData;
	temp_long=PageAdd;

	Add2=temp_char[3];	
	Add3=temp_char[2];				//看一看这里对吗

	if(ByteAdd<256)
	{
		Add1=ByteAdd;
		AddCommand=READ_A_AREA_CMD;	
	}
	else
	{
		if(ByteAdd<512)	
		{
			Add1=ByteAdd-256;
			AddCommand=READ_B_AREA_CMD;
		}
		else
		{
			Add1=ByteAdd-512;
			AddCommand=READ_C_AREA_CMD;
		}
	}
    EA=0;
	Nf_send_command(AddCommand);
	Nf_send_address(Add1);
	
	Nf_send_address(Add2);
	
	Nf_send_address(Add3);

	Nf_wait_busy();

	SData=Nf_rd_byte();//consider sending the datas
	EA=1;
	return SData;

}

//Read One Whole Page from nf
unsigned int Nf_ReadPage(unsigned long PageAdd, unsigned int StartAdd,unsigned int DataNum)
{
	unsigned char Add1,Add2,Add3;
	unsigned char AddCommand;
	unsigned int i;
	temp_long=PageAdd;

	Add2=temp_char[3];
	Add3=temp_char[2];

	if(StartAdd<256)
	{
		Add1=StartAdd;
		AddCommand=READ_A_AREA_CMD;	
	}
	else
	{
		if(StartAdd<512)	
		{
			Add1=StartAdd-256;
			AddCommand=READ_B_AREA_CMD;
		}
		else
		{
			Add1=StartAdd-512;
			AddCommand=READ_C_AREA_CMD;
		}
	}
//    EA=0;
	Nf_send_command(AddCommand);
	Nf_send_address(Add1);
	
	Nf_send_address(Add2);
	
	Nf_send_address(Add3);
	Nf_wait_busy();

	for(i=0;i<DataNum;i++)
       {
    	  DataBuff[i]=Nf_rd_byte();
	   }
//    EA=1;
//	SerialTrans(512);
	return (DataNum-1);

}

//Nf Write one page
unsigned char Nf_Write_Page(unsigned long PageAdd,unsigned int DataNum)
{
	unsigned char Add1,Add2;
	unsigned char Status;
	unsigned int i;
	temp_long=PageAdd;
	Add1=temp_char[3];
	Add2=temp_char[2];
	F_led=!F_led;
//	EA=0;
	Nf_send_command(READ_A_AREA_CMD);

	Nf_send_command(SEQUENTIAL_DATA_INPUT_CMD);

	Nf_send_address(0x00);

	Nf_send_address(Add1);

	Nf_send_address(Add2);

	for(i=0;i<DataNum;i++)
//		Nf_wr_byte(i+5);
	{	Nf_wr_byte(DataBuff[i]);}
	Nf_send_command(PAGE_PROGRAM_CMD);

	Nf_wait_busy();

	Nf_send_command(READ_STATUS_CMD);

	Status=Nf_rd_byte();
//    EA=1;

//    SerialTran(0xBB);
//    delay(2);
	return Status;
}



//Nf write a byte
unsigned char Nf_Write_Byte(unsigned long PageAdd,unsigned int ByteAdd,unsigned char Data)
{
	unsigned char Add1,Add2,Add3;
	unsigned char SData;
	unsigned char AddCommand;
    unsigned int temp;

	temp=PageAdd;
	Add2=temp;
	Add3=temp>>8;

	if(ByteAdd<256)
	{		
		Add1=ByteAdd;
		AddCommand=READ_A_AREA_CMD;
	}
	else
	{
		Add1=ByteAdd-256;
		AddCommand=READ_B_AREA_CMD;
	}
	if(ByteAdd>=512)
	{
		Add1=ByteAdd-512;
		AddCommand=READ_C_AREA_CMD;
	}
    EA=0;
	Nf_send_command(AddCommand);

	Nf_send_command(SEQUENTIAL_DATA_INPUT_CMD);
	Nf_send_address(Add1);
	Nf_send_address(Add2);
	Nf_send_address(Add3);

	Nf_wr_byte(Data);

	Nf_send_command(PAGE_PROGRAM_CMD);

	Nf_wait_busy();

	Nf_send_command(READ_STATUS_CMD);
	SData=Nf_rd_byte();
    EA=1;
	return SData;
}

//Read_valid_Block_Information
unsigned int Read_valid_Block_Info(unsigned int BlockAdd)
{
	unsigned int i;
	unsigned char BLOCK_GOOD=0;
	i=0;

    EA=0;

	while(i<512&&BlockAdd<Nf_Block_Size)
	{
		BLOCK_GOOD=Nf_ReadByte(BlockAdd<<5,517);
	
		if(BLOCK_GOOD==0xff)
		{
			BLOCK_GOOD=Nf_ReadByte((BlockAdd<<5)+1,517);				//?<<4

			if(BLOCK_GOOD==0xff)
			{
				temp_int=BlockAdd;
				DataBuff[i]=temp_char[4];
				i++;
				DataBuff[i]=temp_char[5];
				i++;


			}
		}
		BlockAdd++;
	}
	EA=1;
	return BlockAdd;
}

//Create_valid_Block_Table and save to 1st block
void Create_Invalid_Block_Table()
{
	unsigned int BlockAdd;
	unsigned int TablePage;
	unsigned int i=0;

	BlockAdd=0x00;
	TablePage=0x00;
    EA=0;
	while(BlockAdd<Nf_Block_Size)
	{
		BlockAdd=Read_valid_Block_Info(BlockAdd);

		Nf_Write_Page(TablePage,512);

		TablePage++;
	}
	EA=1;

}

⌨️ 快捷键说明

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