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

📄 28f040.h

📁 这是52单片机串口调试程序
💻 H
字号:
void Set_28F040_Page(BYTE page)
{
	EA=0;
	D373_1&=0xF0;  D373_1|=page;
	P0=D373_1;
	B_373_1=1;  B_373_1=0;
	EA=1;
}// Pass

void Unprotect_28F040(void)
{
	BYTE i;
	Set_28F040_Page(0);
	i=Flash[0x1823];
	i=Flash[0x1820];
	i=Flash[0x1822];
	i=Flash[0x0418];
	i=Flash[0x041B];
	i=Flash[0x0419];
	i=Flash[0x041A];
}// Pass

void Protect_28F040(void)
{
	BYTE i;
	Set_28F040_Page(0);
	i=Flash[0x1823];
	i=Flash[0x1820];
	i=Flash[0x1822];
	i=Flash[0x0418];
	i=Flash[0x041B];
	i=Flash[0x0419];
	i=Flash[0x040A];
}// Pass

void Write_28F040(WORD p, BYTE c)
{
	BYTE i;
	Flash[p]=0x10;  Flash[p]=c;
	for(i=20; i>0; i--){}
}// Pass

void Erase_28F040(BYTE c)		// Must set Flash_p first
{
	BYTE i, j;
	Set_28F040_Page(c);
	Flash[Flash_p]=0x20;  Flash[Flash_p]=0xd0;
	for(i=10; i>0; i--)			// Delay 2ms
		for(j=100; j>0; j--){}
}// Pass

bit Find_User(void)
{
	BYTE i;
	WORD w;
	if(Total_User==0)
		return 0;
	Set_28F040_Page(8);
	w=Total_User*17;
	for(Flash_p=0; Flash_p<w; Flash_p+=17){
		for(i=0; i<7; i++){
			if(ID_Card_no[i]!=Flash[Flash_p+i])
				goto Not_Found;
		}
		return 1;
		Not_Found:{}
	}
	return 0;
}

bit Find_User_id(BYTE low, BYTE high)
{
	WORD w;
	if(Total_User==0)
		return 0;
	Set_28F040_Page(8);
	w=Total_User*17;
	for(Flash_p=0; Flash_p<w; Flash_p+=17){
		if((Flash[Flash_p+15]==low)&&(Flash[Flash_p+16]==high))
			return 1;
	}
	return 0;
}

void Flash_adduser(BYTE low, BYTE high)
{
	BYTE i,j;
	Set_28F040_Page(8);
	Flash_p=Total_User*17;
	for(i=0; i<7; i++){
		Flash[Flash_p+i]=0x10;  Flash[Flash_p+i]=ID_Card_no[i];
		for(j=20; j>0; j--){}
	}
	Flash[Flash_p+15]=0x10;  Flash[Flash_p+15]=low;
	for(j=20; j>0; j--){}
	Flash[Flash_p+16]=0x10;  Flash[Flash_p+16]=high;
	for(j=20; j>0; j--){}
	Total_User++;
}

void Flash_deluser(void)
{
	BYTE i,j;
	Set_28F040_Page(8);
	for(i=0; i<17; i++){
		Flash[Flash_p+i]=0x10;  Flash[Flash_p+i]=0;
		for(j=20; j>0; j--){}
	}
}

void Write_Record(void)
{
	extern void mystrcpy(BYTE *str);
	extern void LCD_writeline(BYTE line);
	BYTE i,j,fail;
	while(Total_Record<38000){
		Set_28F040_Page(9+Total_Record/5461);
		Flash_p=(Total_Record%5461)*6;
		fail=0;
		for(i=0; i<6; i++){		// 检查FLASH是否为空
			if(Flash[Flash_p+i]!=0xFF){
				fail=1;
				break;
			}
		}
		if(fail==1){				// 若FLASH非空则直接跳往下一条记录
			Total_Record++;
			continue;
		}
		for(i=0; i<6; i++){		// 写入考勤记录
			Flash[Flash_p+i]=0x10;  Flash[Flash_p+i]=Send_buf[12+i];
			for(j=20; j>0; j--){}
   	}
		Total_Record++;
		fail=0;
		for(i=0; i<6; i++){		// 检查FLASH是否写入正确
			if(Flash[Flash_p+i]!=Send_buf[12+i]){
				fail=1;
				break;
			}
		}
		if(fail==0){				// 若FLASH写入正确则返回
			return;
		}else{						// 否则将它全部置0
			for(i=0; i<6; i++){
				Flash[Flash_p+i]=0x10;  Flash[Flash_p+i]=0;
				for(j=20; j>0; j--){}
	   	}
			Total_Record++;
		}
	}
#ifdef	CHINESE
	mystrcpy("  考勤记录已满  ");
#else
	mystrcpy(" Record is Full ");
#endif
	LCD_writeline(4);
	BELL_ON
	EA=0;
	while(1){}	// 死机
}

void Calc_Total_User(void)
{
	BYTE i;
	WORD p;
	Set_28F040_Page(8);
	Total_User=0;
	for(p=0; p<32759; p+=17){		// 32742-32758为最后一个用户
		for(i=0; i<7; i++){
			if(Flash[p+i]!=0xFF)
				goto Calc_User_1;
		}
		return;
	Calc_User_1:
		Total_User++;
	}
}// Pass

void Calc_Total_Record(void)
{
	BYTE i;
	WORD p;
	Total_Record=0;
	for(i=9; i<16; i++){
		Set_28F040_Page(i);
		for(p=0; p<32763; p+=6){	// 32760-32765为最后一条记录
			if((Flash[p]==0xFF)&&(Flash[p+1]==0xFF))
				return;
			Total_Record++;
		}
	}
}// Pass

void newVOC_Play(BYTE i)
{
	Set_28F040_Page(1);
	VOC_buf[0]=Flash[0x2310+i];
	VOC_buf[1]=Flash[0x2311+i];
	if(VOC_buf[0]!=0xFF){
		EA=0;
		if((VOC_delay_counter==0)&&(D373_3&VOC_PLAY_MASK)){	// not playing voice
			VOC_play();						// auto set EA=1
		}else{								// playing voice now
			P0=0;  B_373_2=1;  B_373_2=0;  VOC_counter=0;
			VOC_delay_counter=3;			// Delay 40-60 ms
			D373_3|=VOC_PLAY_MASK;		// VOC_PLAY=1(stop playing)
			OUT_373_3
			EA=1;
		}
	}
}

⌨️ 快捷键说明

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