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

📄 at24c02.txt

📁 读写AT24C02演示程序
💻 TXT
字号:
#include<REGX51.H>
/*LCD.h*/
#define     TwoLine_8bit     56
#define     CLEAR            1
#define     CURSOR_HOME      2
#define     CURSOR_LEFT      4
#define     CURSOR_RIGHT     6
#define     CURSOR_OFF       12
#define     CURSOR_ON        14
#define     CURSOR_BLINK     15
#define     GOTO_LINE_2      192
#define     GOTO_LINE_1      128

/*LED contorl  line*/
#define     ENABLE           1
#define     DISABLE          0
#define     READ             1
#define     WRITE            0
#define     COMMAND          0
#define     DATA             1
#define     rs               P2_5
#define     rw               P2_6
#define     enable           P2_7


void  delay100us(unsigned);
void  write_LCD_command(unsigned);
void  write_LCD_data(unsigned);
void  init_LCD(void);
void  clear_LCD(void);
void  display_LCD_string(char *);	
void  gotoxy(unsigned,unsigned);
void  display_LCD_number(char); 

void   delay100us(unsigned b)
{
 unsigned char a;
 unsigned char c;
 for(a=0;a<b;a++)
 for(c=0;c<10;c++);
 }

char  code  int2charLCD[]="0123456789";

void  write_LCD_command(unsigned  command)
{
    rw=WRITE;
	rs=COMMAND;
	enable=ENABLE;
	P0=command;
	delay100us(20);
	enable=DISABLE;
	rw=1;
}

void  write_LCD_data(unsigned LCDdata)
{
    rw=WRITE;
	rs=DATA;
	enable=ENABLE ;
	P0=LCDdata	;
	delay100us(20);
	enable=DISABLE;
	rw=1	   ;
}

void  init_LCD(void)
{								  
    write_LCD_command(TwoLine_8bit);
	write_LCD_command(CURSOR_OFF)  ;
	write_LCD_command(CURSOR_RIGHT);
}									

void  clear_LCD()
{
    write_LCD_command(CLEAR) ;
	write_LCD_command(CURSOR_HOME);
}

void  display_LCD_string(char *p)
{
    while(*p)
	{
	    write_LCD_data(*p);
		p++	;
	}
}

void  display_LCD_number(char number) 
{
    unsigned  char  x,y	;
	x=number/10	  ;
	y=number%10;
    write_LCD_data(x+0x30) ;
	write_LCD_data(y+0x30)	;
}

void  gotoxy(unsigned x,unsigned y)
{
    if(x==1)
	    write_LCD_command(GOTO_LINE_1 +y) ;
	else
	    write_LCD_command(GOTO_LINE_2 +y) ;
}
		
 void  main (void)
{
    init_LCD();
	clear_LCD();
	gotoxy(1,0);
//	display_LCD_string("abcdefgh")	;
display_LCD_number(12) ;
      gotoxy(1,5);
	   write_LCD_data(0x35);
	   gotoxy(1,4);
	   write_LCD_data(0x36);
//display_LCD_number(77) ;
//display_LCD_number(56) ;
//display_LCD_number(78) ;
	gotoxy(2,0);	
	display_LCD_string("12345678");
	while(1) ;
}




/*******************************************************************************
*  标题:  ME300系列单片机开发系统演示程序 - 读写AT24C02演示程序                *
*  硬件:  ME300A+                                                              *
*  文件:  wl007.C                                                              *
*  日期:  2004-1-5                                                             *
*  版本:  1.0                                                                  *
*  作者:  伟纳电子 - Freeman                                                   *
*  邮箱:  freeman@willar.com                                                   *
*  网站: http://www.willar.com                                                *
********************************************************************************
*  描述:                                                                       *
*         读写AT24C02演示程序                                                  *
*                                                                              *
********************************************************************************
*  跳线设置:                                                                  *
*         JP1 全部短接,JP2短接2-3端                                           *
*                                                                              *
********************************************************************************
* 【版权】 Copyright(C)伟纳电子 www.willar.com  All Rights Reserved            *
* 【声明】 此程序仅用于学习与参考,引用请注明版权和作者信息!                  *
*******************************************************************************/


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

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

//unsigned char code dis_code[] = {0x7e,0xbd,0xdb,0xe7,0xdb,0xbd,0x7e,0xff};
				// 写入到AT24C01的数据串

sbit SDA = P1^1;
sbit SCL = P1^0;


void start();
void stop();
unsigned char shin();
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 fill_byte(unsigned char fill_data);
void delayms(unsigned char ms);

main(void)
{
	unsigned char i;
	SDA = 1;
	SCL = 1;
 	fill_byte(0xff);		// 全部填充0xff 	在第一次开始就应该放入

/*	for(i = 0 ; i < 8; i++)		//写入显示代码到AT24Cxx
	{
		write_byte(i, dis_code[i]);
	}			 

	i = 0;
	while(1)
	{

		P0 = read_random(i);	// 循环读取24Cxx内容,并输出到P0口
		i++;
		i &= 0x07;		// 循环读取范围为0x00~0x07
		delayms(250);
	} */
	N_year = read_random(0x10)
	N_month = read_random(0x11)
	N_day = read_random(0x12)
	N_hour = read_random(0x13)
	N_minute = read_random(0x14)
	N_second = read_random(0x15)
	
}

void start()
// 开始位
{
	SDA = 1;
	SCL = 1;
	_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_();
		SCL = 1;
		_nop_();
		_nop_();
		SCL = 0;
		write_data <<= 1;
	}
	SDA = 1;			// 读取应答
	_nop_();
	_nop_();
	SCL = 1;
	_nop_();
	_nop_();
	_nop_();
	_nop_();
	ack_bit = SDA;
	SCL = 0;
	return ack_bit;			// 返回AT24Cxx应答位
}

void write_byte(unsigned char addr, unsigned char write_data)
// 在指定地址addr处写入数据write_data
{
	start();
	shout(OP_WRITE);
	shout(addr);
	shout(write_data);
	stop();
	delayms(10);		// 写入周期
}

void fill_byte(unsigned char fill_data)
// 填充数据fill_data到EEPROM内
{
	unsigned char i;
	for(i = 0; i < MAX_ADDR; i++)
	{
		write_byte(i, fill_data);
	}

}

unsigned char read_current()
// 在当前地址读取
{
	unsigned char read_data;
	start();
	shout(OP_READ);
	read_data = shin();
	stop();
	return read_data;
}

unsigned char read_random(unsigned char random_addr)
// 在指定地址读取
{
	start();
	shout(OP_WRITE);
	shout(random_addr);
	return(read_current());
}

void delayms(unsigned char ms)	
// 延时子程序
{
	unsigned char i;
	while(ms--)
	{
		for(i = 0; i < 120; i++);
	}
}

⌨️ 快捷键说明

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