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

📄 93c46.c

📁 93c46读写程序
💻 C
📖 第 1 页 / 共 2 页
字号:
/********************************************************************
 k1 = 位选数码管
 k2 = 加
 k3 = 擦除
 k4 = 保存
********************************************************************/




#include <reg51.h>
#include <intrins.h>


//define OP code
#define OP_EWEN_H		0x00	// 00					write enable
#define OP_EWEN_L		0x60	// 11X XXXX				write enable
#define OP_EWDS_H		0x00	// 00					disable
#define OP_EWDS_L		0x00	// 00X XXXX				disable

#define OP_WRITE_H		0x40	// 01 A6-A0				write data
#define OP_READ_H		0x80	// 10 A6-A0				read data

#define OP_ERASE_H		0xc0	// 11 A6-A0				erase a word

#define OP_ERAL_H		0x00	// 00					erase all
#define OP_ERAL_L		0x40	// 10X XXXX				erase all
#define OP_WRAL_H		0x00	// 00  					write all	
#define OP_WRAL_L		0x20	// 01X XXXX		 		write all	


//define pin
sbit CS = P1^6;
sbit SK = P1^4;
sbit DI	= P1^5;
sbit DO = P1^7;
sbit k1=P1^0;
sbit k2=P1^1;
sbit k3=P1^2;
sbit k4=P1^3;
sbit disp_bit0=P2^0;
sbit disp_bit1=P2^1;
sbit disp_bit2=P2^2;
sbit disp_bit3=P2^3;
sbit disp_bit4=P2^4;
sbit disp_bit5=P2^5;
sbit disp_bit6=P2^6;
sbit disp_bit7=P2^7;

void start();
void ewen();// 使能写入操作
void ewds();// 禁止写入操作	
void erase();// 擦除全部内容
void write(unsigned char addr, unsigned char indata);
unsigned char read(unsigned char addr);
void inop(unsigned char op_h, unsigned char op_l);
void shin(unsigned char indata);
unsigned char shout();
unsigned char key_scan();
void delay_1ms(unsigned char ms);
bit flash_bit,flash_cpl;
unsigned char eeprom_data[8],flash_number_bit,flash_500ms,disp_bit;
unsigned char disp_code[17]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82, //0,1,2,3,4,5,6
  0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xBF};//7,8,9,A,B,C,D,E,F,-


main()
{
	unsigned char i,key_s,key_v,key_number;
	TMOD&=0xf0;
	TMOD|=0x01;
	TH0=0xec;
	TL0=0x78;
	ET0=1;
	flash_bit=1;
	flash_cpl=1;
	flash_500ms=0x00;
	disp_bit=0x00;
	EA=1;
	TR0=1;
	CS = 0;				//初始化端口
	SK = 0;
	DI = 1;
	DO = 1;
	for(i=0;i<8;i++)
	 eeprom_data[i]=read(i);
	for(i=0;i<8;i++)
	 {
	  if(eeprom_data[i]==0xff)
	  eeprom_data[i]=0x0f;
	 }
	for(;;)
	{
      key_s=key_scan();
	   if(key_s^key_v)
	    {
		  delay_1ms(10);
		  key_s=key_scan();
		  if(key_s^key_v)
		    {
			  key_v=key_s;
			  if((key_s&0x08)==0x00)
			     {
				  flash_bit=0;
				  key_number=0x01;
				  flash_number_bit=0x01;
                  ewen();
				  //处理第1位数码管
				  do
				   {
				    key_s=key_scan();
					if(key_s^key_v)
					  {
					   delay_1ms(10);
                       key_s=key_scan();
					   if(key_s^key_v)
					     {
						  key_v=key_s;
						  if((key_s&0x08)==0x00)
						     {
							  key_number=0x02;
							  flash_number_bit=0x02;
							 }
						  else if((key_s&0x04)==0x00)
						      {
							   if(++eeprom_data[0]==0x10)
							       eeprom_data[0]=0x00;
							   while(k2==0)
							     {
								  delay_1ms(200);
								  if(k2==0)
								   {
								    delay_1ms(100);
								    if(++eeprom_data[0]==0x10)
							         eeprom_data[0]=0x00;
								   }
								 }
							  }
						  else if((key_s&0x02)==0x00)
						      {
							   erase();
							   for(i=0;i<10;i++)
                               eeprom_data[i]=0x0f;
							  }
                           else if((key_s&0x01)==0x00)
                                {
								 erase();
								 for(i=0;i<8;i++)
                                 write(i, eeprom_data[i]);
                                 ewds();
								 flash_bit=1;
								 key_number=0x00;
                                } 
						 }
					  }
				   }while(key_number==0x01);
				   //处理第2位数码管
                   do
  				    {
					 key_s=key_scan();
					 if(key_s^key_v)
					   {
					    delay_1ms(10);
						key_s=key_scan();
						 if(key_s^key_v)
						  {
						   key_v=key_s;
						   if((key_s&0x08)==0x00)
						     {
							  key_number=0x03;
							  flash_number_bit=0x03;
							  ewen();
							 }
						   else if((key_s&0x04)==0x00)
						      {
							   if(++eeprom_data[1]==0x10)
							      eeprom_data[1]=0x00;
							   while(k2==0)
							     {
								  delay_1ms(200);
								  if(k2==0)
								   {
								    delay_1ms(100);
								    if(++eeprom_data[1]==0x10)
							         eeprom_data[1]=0x00;
								   }
								 }
							  }
						   else if((key_s&0x02)==0x00)
						        {
								 erase();
								 for(i=0;i<10;i++)
                                 eeprom_data[i]=0x0f;
								}
						   else if((key_s&0x01)==0x00)
						        { for(i=0;i<8;i++)
								  write(i, eeprom_data[i]);
								  ewds();
								  flash_bit=1;
								  key_number=0x00;
								}
						  }
					   }
					}while(key_number==0x02);
					//处理第3位数码管
                    do
  				    {
					 key_s=key_scan();
					 if(key_s^key_v)
					   {
					    delay_1ms(10);
						key_s=key_scan();
						 if(key_s^key_v)
						  {
						   key_v=key_s;
						   if((key_s&0x08)==0x00)
						     {
							  key_number=0x04;
							  ewen();
							  flash_number_bit=0x04;
							 }
						   else if((key_s&0x04)==0x00)
						      {
							   if(++eeprom_data[2]==0x10)
							      eeprom_data[2]=0x00;
							   while(k2==0)
							     {
								  delay_1ms(200);
								  if(k2==0)
								   {
								    delay_1ms(100);
								    if(++eeprom_data[2]==0x10)
							         eeprom_data[2]=0x00;
								   }
								 }	
							  }
						   else if((key_s&0x02)==0x00)
						        {
								  erase();
								  for(i=0;i<10;i++)
                                  eeprom_data[i]=0x0f;
								}
						   else if((key_s&0x01)==0x00)
						        { 
								  for(i=0;i<8;i++)
								  write(i, eeprom_data[i]);
								  ewds();
								  flash_bit=1;
								  key_number=0x00;
								}
						  }
					   }
					}while(key_number==0x03);
					//处理第4位数码管
					do
  				    {
					 key_s=key_scan();
					 if(key_s^key_v)
					   {
					    delay_1ms(10);
						key_s=key_scan();
						 if(key_s^key_v)
						  {
						   key_v=key_s;
						   if((key_s&0x08)==0x00)
						     {
							  key_number=0x05;
							  ewen();
							  flash_number_bit=0x05;
							 }
						   else if((key_s&0x04)==0x00)
						      {
							   if(++eeprom_data[3]==0x10)
							      eeprom_data[3]=0x00;
							   while(k2==0)
							     {
								  delay_1ms(200);
								  if(k2==0)
								   {
								    delay_1ms(100);
								    if(++eeprom_data[3]==0x10)
							         eeprom_data[3]=0x00;
								   }
								 }
							  }
						   else if((key_s&0x02)==0x00)
						        {
								 erase();
								  for(i=0;i<10;i++)
                                  eeprom_data[i]=0x0f;
								}
						   else if((key_s&0x01)==0x00)
						        { 
								  for(i=0;i<8;i++)
								  write(i, eeprom_data[i]);
								  ewds();
								  flash_bit=1;
								  key_number=0x00;
								}
						  }
					   }
					}while(key_number==0x04);
					//处理第5位数码管
					do
  				    {
					 key_s=key_scan();
					 if(key_s^key_v)
					   {
					    delay_1ms(10);
						key_s=key_scan();
						 if(key_s^key_v)
						  {
						   key_v=key_s;
						   if((key_s&0x08)==0x00)
						     {
							  key_number=0x06;
							  ewen();
							  flash_number_bit=0x06;
							 }
						   else if((key_s&0x04)==0x00)
						      {
							   if(++eeprom_data[4]==0x10)
							      eeprom_data[4]=0x00;
							   while(k2==0)
							     {
								  delay_1ms(200);
								  if(k2==0)
								   {
								    delay_1ms(100);
								    if(++eeprom_data[4]==0x10)
							         eeprom_data[4]=0x00;
								   }
								 }
							  }
						   else if((key_s&0x02)==0x00)
						        {
								 erase();
								  for(i=0;i<10;i++)
                                  eeprom_data[i]=0x0f;
								}
						   else if((key_s&0x01)==0x00)
						        { 
								  
								  for(i=0;i<8;i++)
								  write(i, eeprom_data[i]);
								  ewds();
								  flash_bit=1;
								  key_number=0x00;
								}
						  }
					   }
					}while(key_number==0x05);
					//处理第6位数码管
					do
  				    {
					 key_s=key_scan();
					 if(key_s^key_v)
					   {
					    delay_1ms(10);
						key_s=key_scan();
						 if(key_s^key_v)
						  {
						   key_v=key_s;
						   if((key_s&0x08)==0x00)
						     {
							  key_number=0x07;
							  ewen();
							  flash_number_bit=0x07;
							 }
						   else if((key_s&0x04)==0x00)
						      {
							   if(++eeprom_data[5]==0x10)
							      eeprom_data[5]=0x00;
							   while(k2==0)
							     {
								  delay_1ms(200);
								  if(k2==0)
								   {
								    delay_1ms(100);
								    if(++eeprom_data[5]==0x10)
							         eeprom_data[5]=0x00;
								   }
								 }
							  }
						   else if((key_s&0x02)==0x00)
						        {
								 erase();
								  for(i=0;i<10;i++)
                                  eeprom_data[i]=0x0f;
								}
						   else if((key_s&0x01)==0x00)
						        { 
								  for(i=0;i<8;i++)
								  write(i, eeprom_data[i]);
								  ewds();
								  flash_bit=1;
								  key_number=0x00;
								}
						  }
					   }
					}while(key_number==0x06);
					
					do
  				    {
					 key_s=key_scan();
					 if(key_s^key_v)
					   {
					    delay_1ms(10);
						key_s=key_scan();
						 if(key_s^key_v)
						  {
						   key_v=key_s;
						   if((key_s&0x08)==0x00)
						     {
							  key_number=0x08;
							  ewen();
							  flash_number_bit=0x08;
							 }
						   else if((key_s&0x04)==0x00)
						      {
							   if(++eeprom_data[6]==0x10)
							      eeprom_data[6]=0x00;
							   while(k2==0)
							     {
								  delay_1ms(200);
								  if(k2==0)
								   {
								    delay_1ms(100);
								    if(++eeprom_data[6]==0x10)
							         eeprom_data[6]=0x00;
								   }
								 }
							  }
						   else if((key_s&0x02)==0x00)
						        {
								  erase();
								  for(i=0;i<10;i++)
                                  eeprom_data[i]=0x0f;
								}
						   else if((key_s&0x01)==0x00)
						        { 
								  for(i=0;i<8;i++)
								  write(i, eeprom_data[i]);
								  ewds();
								  flash_bit=1;
								  key_number=0x00;
								}
						  }
					   }
					}while(key_number==0x07);
					//
					do
  				    {
					 key_s=key_scan();
					 if(key_s^key_v)
					   {
					    delay_1ms(10);
						key_s=key_scan();
						 if(key_s^key_v)
						  {
						   key_v=key_s;
						   if((key_s&0x08)==0x00)
						     {
							  key_number=0x00;
							  ewen();
							  flash_number_bit=0x00;
							 }
						   else if((key_s&0x04)==0x00)
						      {
							   if(++eeprom_data[7]==0x10)
							      eeprom_data[7]=0x00;
							   while(k2==0)
							     {
								  delay_1ms(200);
								  if(k2==0)
								   {
								    delay_1ms(100);
								    if(++eeprom_data[7]==0x10)
							         eeprom_data[7]=0x00;
								   }
								 }
							  }
						   else if((key_s&0x02)==0x00)
						        {
								  erase();
								  for(i=0;i<10;i++)
                                  eeprom_data[i]=0x0f;
								}
						   else if((key_s&0x01)==0x00)
						        {
								  for(i=0;i<8;i++)
								  write(i, eeprom_data[i]);
								  ewds();
								  flash_bit=1;
								  key_number=0x00;
								}
						  }
					   }
					}while(key_number==0x08);
					flash_bit=1;
				 }
			}
		}
	}
}


void write(unsigned char addr, unsigned char indata)
// 写入数据indata到addr
{
	inop(OP_WRITE_H, addr);	// 写入指令和地址
	shin(indata);
	CS = 0;
	delay_1ms(10);			// Twp
}

unsigned char read(unsigned char addr)
// 读取addr处的数据
{
	unsigned char out_data;
	inop(OP_READ_H, addr);	// 写入指令和地址
	out_data = shout();
	CS = 0;	
	return out_data;

⌨️ 快捷键说明

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