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

📄 k9f1g08.h

📁 点菜系统 内置很多功能
💻 H
字号:
#include "config.h"
/////////////////////////////////////////
//////////////////端口定义
//////////////////////////////////////////////
#define DATA  (uint32)0x0ff<<8
#define Flash_WE 20////
#define Flash_RE 25/////
#define Flash_CE 2///
#define Flash_CLE 3///
#define Flash_ALE 26/////
#define Flash_RB 24
/////////////////////////////////////////////
/////////////delay
///////////////////////////////////////////
void delay(uint8 time)
{
  uint8 i,j;
  for(i=0;i<time;i++)
   for(j=0;j<0x01;j++);
           
 }            

/////////////////////////////////////////////////////////////////
/////////存储器初始化
//////////////////////////////////////////////////////////////
void init_flash()
  {IODIR |=((1 << Flash_WE)|(1 << Flash_RE)|(1 << Flash_CE)|(1 << Flash_CLE)|(1 << 
    Flash_ALE))|DATA ;           //全部输出
  IODIR&=(~ (1 << Flash_RB));
  IOSET= (1 << Flash_WE)|(1 << Flash_RE)|(1 << Flash_CE);
  IOCLR= ((1 << Flash_CLE)|(1 << Flash_ALE));
  }
////////////////////////////////////////////////////////////
//////////////写命令
///////////////////////////////////////////////////////////////////
 void flash_write_cmd(uint8 cmd)
{  
  init_flash();
   IOSET= (1 << Flash_CLE);       //写命令允许 
   while(!(IO0PIN& (1 << Flash_RB)))
     delay(1);
   IO0PIN=(IO0PIN& (~(DATA)))|(cmd<<8);                 //写命令
  IOCLR=1 << Flash_CE;
   delay(1) ;
   IOCLR=( 1 << Flash_WE);  //写允许下降沿       
   delay(1) ;
   IOSET=( 1 << Flash_WE); 
   delay(1) ;
   if(cmd!=0x10)
   IOCLR=(1 << Flash_CLE); 
 }
//////////////////////////////////////////////////////////////////////
//////////////写地址num是写地址的次数
//////////////////////////////////////////////////////////////////////
void flash_write_addr(uint32 addr,uint8 num)
{ 
   uint8 Addr1[4];  
   uint8 i;
    Addr1[0]=addr&0xff;
    Addr1[1]=(addr>>8)&0xff;
    Addr1[2]=(addr>>12)&0xff;
    Addr1[3]=(addr>>20)&0xff;
   IOSET=( 1 << Flash_ALE);
   while(!(IO0PIN& (1 << Flash_RB)))
     delay(1);
  for(i=0;i<num;i++)
   { IO0PIN=(IO0PIN& (~(DATA)))|(uint32)(Addr1[i]<<8); 
     delay(1); 
     IOCLR=(1 << Flash_WE); 
     delay(1);
     IOSET=( 1 << Flash_WE); 
     delay(1); 
   }
  IOCLR= (1 << Flash_ALE);
}
//////////////////////////////////////////////////////////////////////
////////////////////////读数据WWRR=0读  wwwrr=1写
/////////////////////////////////////////////////////////////////
void flash_read_w(uint8 *string,uint32 rwnumber,uint8 wwrr)
{   uint32 G_s_Number;
    if(wwrr==0)
      IODIR&=~(DATA|(1 << Flash_RB));
    while(!((IO0PIN) &(1 << Flash_RB)))
      delay(1);
    for(G_s_Number = 0 ; G_s_Number <rwnumber ; G_s_Number++) 
     { if(wwrr==0)
        {delay(1); 
         IOCLR= (1 << Flash_RE); 
         delay(1); 
         *string++ = ((DATA & IO0PIN)>>8);
         IOSET=( 1 << Flash_RE);
        }
       else
        {IO0PIN=(IO0PIN& (~(DATA)))|(*string++<<8);
         delay(1); 
         IOCLR=(1 << Flash_WE); 
         delay(1); 
         IOSET= (1 << Flash_WE); 
         delay(1); 
        }        
     } 
} 
////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////读状态
/////////////////////////////////////////////////////////////////////////////////////////////
void Flash_Read_STATUS(uint8 *String)  
   {init_flash();
    IOCLR=(1 << Flash_CE);
    flash_write_cmd(0x90);
   flash_write_addr(0x00,1);
    flash_read_w(String,4,0);
    IOSET=(1 << Flash_CE);
   }
//////////////////////////////////////////////////////////////////////////////////////////
///////////////////////这个读的
//////////////////////////////////////////////////////////////////////////////////////



void Flash_Read(uint32 addr,uint8 *String,uint32 ReadNumber) 
{ 
   init_flash();
   IOCLR=(1 << Flash_CE);
   while(!(IO0PIN& (1 << Flash_RB)))
     delay(1);
   flash_write_cmd(0x00);
   flash_write_addr(addr,4);
   flash_write_cmd(0x30);
   flash_read_w(String,ReadNumber,0);
    IOSET=(1 << Flash_CE);
}
  
////////////////////////////////////////////////////////
////////////////////////program
///////////////////////////////////////////////////////////

uint8 Flash_Program(uint32 Addr,uint8 *String, uint32 Bytes) 
{  
   uint8 re[5];
   init_flash();
   IOCLR=(1 << Flash_CE);
   while(!(IO0PIN& (1 << Flash_RB)))
     delay(1);
   flash_write_cmd(0x80);
   flash_write_addr(Addr,4);
   flash_read_w(String,Bytes,1);
   flash_write_cmd(0x10);
   while(!(( IO0PIN) & (1 << Flash_RB))) 
    delay(1);
   flash_write_cmd(0x70);
   flash_read_w(re,1,0);
   if(re[0]==0)
    {IOSET=(1 << Flash_CE);
     return 0;
    }
   else
    {IOSET=(1 << Flash_CE);
     return 1;
    }
} 
//////////////////////////////////////////////////////////////
///////////擦除
/////////////////////////////////////////////////////////////
uint8 Flash_Erase(uint8 Block_High,uint8 Block_Low) 
{  uint32 addr;
   uint8 re[5];
   init_flash();
   IOCLR=(1 << Flash_CE);
   while(!(IO0PIN& (1 << Flash_RB)))
     delay(1);
   flash_write_cmd(0x60);
   addr=(Block_High<<8|Block_Low); 
   flash_write_addr(addr,2);
   flash_write_cmd(0xd0);
   while(!(IO0PIN & (1 << Flash_RB))) 
    delay(1);
   flash_write_cmd(0x70);
   flash_read_w(re,1,0);
   if(re[0]==0)
    {IOCLR=(1 << Flash_CE);
     return 0;
    }
   else
     {IOCLR=(1 << Flash_CE);
      return 1;
     }
 
} 


⌨️ 快捷键说明

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