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

📄 24c04.c

📁 单片机项目19-电子日历(1602显示)
💻 C
字号:
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
sbit sck = P1^4;
sbit sda = P1^7;
/****************************I2C总线开始*************************/
void start_24c04(void) 
{
	sda = 1;
	_nop_();sck = 1;_nop_();
	sda = 0;_nop_();
	sck = 0;
}
/****************************I2C总线停止*************************/
void stop_24c04(void) 
{
	sda = 0;
	_nop_();sck = 1;_nop_();
	sda = 1;
	_nop_();
}
/*****************************应答程序**************************/
void ack_24c04(void)  
{
	uchar i = 255;
	sck = 1;_nop_();
	while(sda && i--);
	sck = 0;
}
//***************************I2C总线初始化************************/
void init_24c04(void)
{
	sda = 1;_nop_();//常态
	sck = 0;_nop_();//常态
}
/***************************读取一个字节*************************/
uchar read_onebyte_24c04(void) 
{
	uchar i,dat;
	sda = 1; // 释放总线
	for(i = 0;i < 8;i++)
	{
		sck = 1;
		dat = dat << 1;
		if(sda)dat = dat | 0x01;
		sck = 0;
	}
	sda = 1;sck = 0;
	return(dat);
}
/*****************************写入一个字节**********************/
void write_onebyte_24c04(uchar dat) 
{	
	uchar i;
	for(i = 0;i < 8;i++)
	{
		sda = (bit)(dat & 0x80);
		dat = dat << 1;
		sck = 1;
		sck = 0;
	}
	sck = 0;sda = 1;
}

/*********************对某个地址写一个字节的数据***********************/
void write_add_dat_24c04(uchar add,uchar dat)
{
	start_24c04();
	write_onebyte_24c04(0xa0);
	ack_24c04();
	write_onebyte_24c04(add);
	ack_24c04();
	write_onebyte_24c04(dat);
	ack_24c04();
	stop_24c04();
}
/********************读取某个地址一个字节的数据*******************/
uchar read_add_dat_24c04(uchar add)
{
	uchar dat;
	start_24c04();
	write_onebyte_24c04(0xa0);
	ack_24c04();
	write_onebyte_24c04(add);
	ack_24c04();
	start_24c04();
	write_onebyte_24c04(0xa1);
	ack_24c04();
	dat = read_onebyte_24c04();
	stop_24c04();
	return(dat);
}

⌨️ 快捷键说明

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