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

📄 flash.c

📁 监控行业车辆检测器源代码
💻 C
字号:
#include "STC12C5410AD.h"
#include "app.h"
#include <string.h>
#include <stdio.h>
#include <INTRINS.H>

unsigned char  flash_byte_read(unsigned int address);
void  sector_erase(unsigned int address);
void  flash_MuxByteWrite(unsigned int  address,unsigned char *pData,unsigned char len);
void flash_byte_Write(unsigned int address,unsigned char buffer);

extern unsigned int GetSetInitCount(unsigned int  Speed);

extern  unsigned int   Current_Montor_Count;
extern  unsigned int  CurrentSpeed;

extern struct  _LED
{
   unsigned char  status ;   // LED状态
   unsigned char  temp  ;   // 温度值
}LED;

unsigned char  flash_byte_read(unsigned int address)
{
   ISP_CONTR = ENABLE_ISP;
   ISP_CMD   = IAP_BYTE_READ;
   ISP_ADDRH = address>>8;
   ISP_ADDRL = address&0x00ff;
   ISP_TRIG  = 0x46;
   ISP_TRIG  = 0xb9;
   return(ISP_DATA);
} 


void flash_byte_Write(unsigned int address,unsigned char buffer)
{
   ISP_CONTR = ENABLE_ISP;
   ISP_CMD   = IAP_BYTE_WRITE;
   ISP_ADDRH = (address>>8);
   ISP_ADDRL = address&0x00ff;
   ISP_DATA  = buffer ;
   ISP_TRIG  = 0x46;
   ISP_TRIG  = 0xb9;
}
void  flash_MuxByteWrite(unsigned int  address,unsigned char *pData,unsigned char len)
{
   unsigned char i;

   for(i=0;i<len;i++)
      {
		 flash_byte_Write(address++,*pData++);
		 
  	  }

}

void  sector_erase(unsigned int address)
{
   ISP_CONTR = ENABLE_ISP;
   ISP_CMD   = IAP_SECTOR_ERASE;
   ISP_ADDRH = (unsigned char)(address>>8);
   ISP_ADDRL = (unsigned char)(address&0x00ff);
   ISP_TRIG  = 0x46;
   ISP_TRIG  = 0xb9;
} 

extern unsigned char PS2_temp[13];

 ScanTableIndexDef   ScanTableindex;
 IndexPamDef         IndexPam;

void CreateScanTable(void)
{
   ScanTableindex.sum =2;
   ScanTableindex.current = 1;
   ScanTableindex.systemstatus = 1;
   sector_erase(SaveTableAddressSum);
   flash_MuxByteWrite(SaveTableAddressSum,(unsigned char*)&ScanTableindex,sizeof(ScanTableindex));
   
   sector_erase(SaveTableIndexAddress);
   
   PS2_temp[0] = 9;
   PS2_temp[1] = 7;
   PS2_temp[2] = 8;
   PS2_temp[3] = 7;
   PS2_temp[4] = 1;
   PS2_temp[5] = 2;
   PS2_temp[6] = 1;
   PS2_temp[7] = 0;
   PS2_temp[8] = 2;
   PS2_temp[9] = 4;
   PS2_temp[10] = 9;
   PS2_temp[11] = 4;
   PS2_temp[12] = 8;

   flash_MuxByteWrite(SaveTableIndexAddress,PS2_temp,13);

   IndexPam.maxspeed = 2700;
   IndexPam.minspeed = 800;
   IndexPam.maxtemp  = 80;
   IndexPam.mintemp  = 10;
   IndexPam.fengjiworktime =  1;
   IndexPam.fireworktime   =  1;
   IndexPam.bigsongliaoworktime =  2;
   IndexPam.bigsongliaostoptime	=  25;
   IndexPam.smallsongliaoworktime =2;
   IndexPam.smallsongliaostoptime =65;
   IndexPam.stopfengjiworktime    = 1;
   IndexPam.setbigholdtime		  = 1;
   IndexPam.setsmallholdtime	  = 1;

   flash_MuxByteWrite(SaveTableIndexAddress+13,
                                  (unsigned char*)&IndexPam,sizeof(IndexPam));
   PS2_temp[0] = 9;
   PS2_temp[1] = 7;
   PS2_temp[2] = 8;
   PS2_temp[3] = 7;
   PS2_temp[4] = 5;
   PS2_temp[5] = 0;
   PS2_temp[6] = 5;
   PS2_temp[7] = 3;
   PS2_temp[8] = 8;
   PS2_temp[9] = 1;
   PS2_temp[10] = 5;
   PS2_temp[11] = 3;
   PS2_temp[12] = 7;

   flash_MuxByteWrite(SaveTableIndexAddress+13+sizeof(IndexPam),PS2_temp,13);

   IndexPam.maxspeed = 800;
   IndexPam.minspeed = 800;
   IndexPam.maxtemp  = 60;
   IndexPam.mintemp  = 20;
   IndexPam.fengjiworktime =  1;
   IndexPam.fireworktime   =  1;
   IndexPam.bigsongliaoworktime =  2;
   IndexPam.bigsongliaostoptime	=  5;
   IndexPam.smallsongliaoworktime =2;
   IndexPam.smallsongliaostoptime =15;
   IndexPam.stopfengjiworktime    = 1;
   IndexPam.setbigholdtime		  = 1;
   IndexPam.setsmallholdtime	  = 1;

   flash_MuxByteWrite(SaveTableIndexAddress+13+sizeof(IndexPam)+13,
                                  (unsigned char*)&IndexPam,sizeof(IndexPam));

}

void ReadScanTable(void)
{
	unsigned char i;
	unsigned int addr;
	unsigned char *p;
 EA = 0;
	addr =	SaveTableAddressSum;
	ScanTableindex.sum = flash_byte_read(addr++);
	ScanTableindex.current = flash_byte_read(addr++);

	p = (unsigned char *)&IndexPam;

	addr = SaveTableIndexAddress  + (13 + sizeof(IndexPam))*ScanTableindex.current+13;

    for(i=0;i<sizeof(IndexPam);i++)
	{
	  *p++  =  flash_byte_read(addr++);
	}
	
   EA = 1;  
}
void UpdateCurrentPam(void)
{
    unsigned char i,j;
	unsigned int addr;
	unsigned char *p;
 EA = 0;
	addr =	SaveTableAddressSum;

	ScanTableindex.sum = flash_byte_read(addr++);
	ScanTableindex.current = flash_byte_read(addr++);


   for(i=0;i<ScanTableindex.sum;i++)
      {
	    addr = SaveTableIndexAddress + (13 + sizeof(IndexPam))*i;

		if( (PS2_temp[0] == flash_byte_read(addr++) )   &&
			(PS2_temp[1] == flash_byte_read(addr++) )	&&
			(PS2_temp[2] == flash_byte_read(addr++) )	&&
			(PS2_temp[3] == flash_byte_read(addr++) )	&&
			(PS2_temp[4] == flash_byte_read(addr++) )	&&
			(PS2_temp[5] == flash_byte_read(addr++) )	&&
			(PS2_temp[6] == flash_byte_read(addr++) )	&&
			(PS2_temp[7] == flash_byte_read(addr++) )	&&
			(PS2_temp[8] == flash_byte_read(addr++) )	&&
			(PS2_temp[9] == flash_byte_read(addr++) )	&&
			(PS2_temp[10] == flash_byte_read(addr++) )	&&
			(PS2_temp[11] == flash_byte_read(addr++) )	&&
			(PS2_temp[12] == flash_byte_read(addr++) )	)
		 {
		      p = (unsigned char *)&IndexPam;

			  for(j=0;j<sizeof(IndexPam);j++)
			   {
			     *p++  =  flash_byte_read(addr++);
			   }
		
			break;
		 }
	  	
	  }
 
	if(ScanTableindex.current != i)  // 更新当前索引
	  {
		 ScanTableindex.current = i;
		 sector_erase(SaveTableAddressSum);
         flash_MuxByteWrite(SaveTableAddressSum,(unsigned char*)&ScanTableindex,sizeof(ScanTableindex));
	  }
  EA = 1;
}

 
void savesystemstatus(unsigned char status)
{
  	ScanTableindex.systemstatus = status;  //  
	sector_erase(SaveTableAddressSum);
    flash_MuxByteWrite(SaveTableAddressSum,(unsigned char*)&ScanTableindex,sizeof(ScanTableindex));

}  

⌨️ 快捷键说明

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