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

📄 at2402.c

📁 24c02存储小时钟程序
💻 C
📖 第 1 页 / 共 2 页
字号:

/*********************************************************
AT2402

按键K1为位选数码管
按键K2为加。。。。+
按键K3为加。。。。-
按键K4为保存。。。Save
*********************************************************/
#include <reg51.h>
#include <intrins.h>

#define	OP_READ	0xa1		// 器件地址以及读取操作
#define	OP_WRITE 0xa0		// 器件地址以及写入操作
#define	MAX_ADDR 0x7f		// AT24C02最大地址

//********************************************************************************
unsigned char data disp_code[11]={0xc0,0xf9,0xa4,0xb0,	// 0, 1, 2, 3
				0x99,0x92,0x82,0xf8,0x80,0x90, 0xff};// 4, 5, 6, 7, 8, 9, off
//********************************************************************************
sbit SDA = P3^5;
sbit SCL = P3^6;

sbit k1=P1^0;//按键K1为位选数码管
sbit k2=P1^1;//按键K2为加。。。。+
sbit k3=P1^2;//按键K3为加。。。。-
sbit k4=P1^3;//按键K4为保存。。。Save

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 stop();
unsigned char shin();
unsigned char key_scan();
bit shout(unsigned char write_data);
unsigned char read_random(unsigned char random_addr);
void write_byte( unsigned char addr, unsigned char write_data);

void delay_1ms(unsigned char ms);
//********************************************************************************
bit flash_bit,flash_cpl;
unsigned char eeprom_data[8],key_s,key_v,flash_number_bit,flash_500ms,disp_bit;
main(void)
{
	unsigned char i,key_number;
	TMOD&=0xf0;
	TMOD|=0x01;
	TH0=0xec;
	TL0=0x78;
	ET0=1;
	EA=1;
	flash_500ms=0x00;
	flash_cpl=1;
	flash_bit=1;
	key_number=0x00;
	disp_bit=0x00;
	SDA = 1;
	SCL = 1;
    TR0=1;	
	for(i = 0 ; i < 8; i++)		//读出显示代码到AT24Cxx
	  eeprom_data[i]=read_random(i);
	  
	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;
				  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]==0x0a)
							       eeprom_data[0]=0x00;
							  }
						  else if((key_s&0x02)==0x00)
						      {
							   if(--eeprom_data[0]==0xff)
							        eeprom_data[0]=0x00;
							  }
                           else if((key_s&0x01)==0x00)
                                {
								 for(i=0;i<8;i++)
                                 write_byte(i, eeprom_data[i]);
								 flash_bit=1;
								 key_number=0x00;
                                } 
						 }
					  }
				   }while(key_number==0x01);
                   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;
							 }
						   else if((key_s&0x04)==0x00)
						      {
							   if(++eeprom_data[1]==0x0a)
							      eeprom_data[1]=0x00;
							  }
						   else if((key_s&0x02)==0x00)
						        {
								 if(--eeprom_data[1]==0xff)
								    eeprom_data[1]=0x00;
								}
						   else if((key_s&0x01)==0x00)
						        { for(i=0;i<8;i++)
								  write_byte(i, eeprom_data[i]);
								  flash_bit=1;
								  key_number=0x00;
								}
						  }
					   }
					}while(key_number==0x02);
                    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;
							  flash_number_bit=0x04;
							 }
						   else if((key_s&0x04)==0x00)
						      {
							   if(++eeprom_data[2]==0x0a)
							      eeprom_data[2]=0x00;
							  }
						   else if((key_s&0x02)==0x00)
						        {
								 if(--eeprom_data[2]==0xff)
								    eeprom_data[2]=0x00;
								}
						   else if((key_s&0x01)==0x00)
						        { 
								  for(i=0;i<8;i++)
								  write_byte(i,eeprom_data[i]);
								  flash_bit=1;
								  key_number=0x00;
								}
						  }
					   }
					}while(key_number==0x03);
					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;
							  flash_number_bit=0x05;
							 }
						   else if((key_s&0x04)==0x00)
						      {
							   if(++eeprom_data[3]==0x0a)
							      eeprom_data[3]=0x00;
							  }
						   else if((key_s&0x02)==0x00)
						        {
								 if(--eeprom_data[3]==0xff)
								    eeprom_data[3]=0x00;
								}
						   else if((key_s&0x01)==0x00)
						        { 
								  for(i=0;i<8;i++)
								  write_byte(i,eeprom_data[i]);
								  flash_bit=1;
								  key_number=0x00;
								}
						  }
					   }
					}while(key_number==0x04);
					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;
							  flash_number_bit=0x06;
							 }
						   else if((key_s&0x04)==0x00)
						      {
							   if(++eeprom_data[4]==0x0a)
							      eeprom_data[4]=0x00;
							  }
						   else if((key_s&0x02)==0x00)
						        {
								 if(--eeprom_data[4]==0xff)
								    eeprom_data[4]=0x00;
								}
						   else if((key_s&0x01)==0x00)
						        { 
								  for(i=0;i<8;i++)
								  write_byte(i, eeprom_data[i]);
								  flash_bit=1;
								  key_number=0x00;
								}
						  }
					   }
					}while(key_number==0x05);
					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;
							  flash_number_bit=0x07;
							 }
						   else if((key_s&0x04)==0x00)
						      {
							   if(++eeprom_data[5]==0x0a)
							      eeprom_data[5]=0x00;
							  }
						   else if((key_s&0x02)==0x00)
						        {
								 if(--eeprom_data[5]==0xff)
								    eeprom_data[5]=0x00;
								}
						   else if((key_s&0x01)==0x00)
						        { 
								  for(i=0;i<8;i++)
								  write_byte(i, eeprom_data[i]);
								  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=0x07;
							  flash_number_bit=0x07;
							 }
						   else if((key_s&0x04)==0x00)
						      {
							   if(++eeprom_data[5]==0x0a)
							      eeprom_data[5]=0x00;
							  }
						   else if((key_s&0x02)==0x00)
						        {
								 if(--eeprom_data[5]==0xff)
								    eeprom_data[5]=0x00;
								}
						   else if((key_s&0x01)==0x00)
						        { 
								  for(i=0;i<8;i++)
								  write_byte(i, eeprom_data[i]);
								  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=0x07;
							  flash_number_bit=0x07;
							 }
						   else if((key_s&0x04)==0x00)
						      {
							   if(++eeprom_data[6]==0x0a)
							      eeprom_data[6]=0x00;
							  }
						   else if((key_s&0x02)==0x00)
						        {
								 if(--eeprom_data[6]==0xff)
								    eeprom_data[6]=0x00;
								}
						   else if((key_s&0x01)==0x00)
						        { 
								  for(i=0;i<8;i++)
								  write_byte(i, eeprom_data[i]);
								  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;
							  flash_number_bit=0x08;
							 }
						   else if((key_s&0x04)==0x00)
						      {
							   if(++eeprom_data[6]==0x0a)
							      eeprom_data[6]=0x00;
							  }
						   else if((key_s&0x02)==0x00)
						        {
								 if(--eeprom_data[6]==0xff)
								    eeprom_data[6]=0x00;
								}
						   else if((key_s&0x01)==0x00)
						        { 
								  for(i=0;i<8;i++)
								  write_byte(i, eeprom_data[i]);
								  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;
							  flash_number_bit=0x00;
							 }
						   else if((key_s&0x04)==0x00)
						      {
							   if(++eeprom_data[7]==0x0a)
							      eeprom_data[7]=0x00;
							  }
						   else if((key_s&0x02)==0x00)
						        {
								 if(--eeprom_data[7]==0xff)
								    eeprom_data[7]=0x00;
								}
						   else if((key_s&0x01)==0x00)
						        {
								  for(i=0;i<8;i++)
								  write_byte(i,eeprom_data[i]);
								  flash_bit=1;
								  key_number=0x00;
								}
						  }
					   }
					}while(key_number==0x08);
					flash_bit=1;
				 }
			}
		}
	}
}

void start()
// 开始位
{
	SDA = 1;
	SCL = 1;
	_nop_();
	_nop_();
	_nop_();
	_nop_();
	SDA = 0;
	_nop_();
	_nop_();
	_nop_();
	_nop_();
	SCL = 0;
}

void stop()
// 停止位
{
	SDA = 0;
	_nop_();
	_nop_();
	SCL = 1;
	_nop_();
	_nop_();
	_nop_();
	_nop_();
	SDA = 1;
}

unsigned char shin()
// 从AT24Cxx移入数据到MCU
{
	unsigned char i,read_data;
	for(i = 0; i < 8; i++)
	{
		SCL = 1;
		read_data <<= 1;
		read_data |= (unsigned char)SDA;
		SCL = 0;
	}
	return(read_data);
}
bit shout(unsigned char write_data)
// 从MCU移出数据到AT24Cxx
{
	unsigned char i;
	bit ack_bit;
	for(i = 0; i < 8; i++)		// 循环移入8个位
	{
		SDA = (bit)(write_data & 0x80);
		_nop_();
		_nop_();
		SCL = 1;

⌨️ 快捷键说明

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