当前位置:文档之家› 24C02原理图及应用程序

24C02原理图及应用程序

程序:

#include

#include

#define uchar unsigned char

sbit SCL=P3^6; //I2C 时钟

sbit SDA=P3^7; //I2C 数据

sbit anjian_1=P3^5;

uchar code LED[]=

{0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71}; void delay_us()

{

_nop_(); /*起始条件建立时间大于4.7us,延时*/

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

}

delay_ms()

{

unsigned int i;

for(i=0;i<20000;i++);

}

void delayms(unsigned int k)

{

unsigned int j,i;

for(j=k;j>0;j--)

for(i=110;i>0;i--);

}

void Start_I2c()

{

SDA=1; /*发送起始条件的数据信号*/ delay_us();

SCL=1;

delay_us();

SDA=0; /*发送起始信号*/

delay_us();

}

void Stop_I2c()

{

SDA=0; /*发送结束条件的数据信号*/ delay_us();

SCL=1;

delay_us();

SDA=1; /*发送I2C总线结束信号*/ delay_us();

}

void Ack_I2c() //应答函数

{

uchar i=0;

SCL=1;

delay_us();

while(SDA==1&&i<200)

i++;

SCL=0;

delay_us();

}

void No_ack() //非应答函数

{

SDA=1;

delay_us();

SCL=1;

delay_us();

SCL=0;

delay_us();

}

void init()

{

SDA=1;

SCL=1;

}

void wr_byte(uchar date) //写一个字节,该函数将数据写入24C02

{

uchar i;

SCL=0; //IC总线在写数据时,在时钟低电平的时候改变数据,高电平的

时候传送数据

delay_us();

for(i=0;i<8;i++) /*要传送的数据长度为8位*/

{

if((date<

SDA=1; /*判断发送位*/

else

SDA=0;

delay_us();

SCL=1; /*置时钟线为高,通知被控器开始接收数据位*/

//IC总线在写数据时,在时钟低电平的时候改变数据,高电平的时候传送数据delay_us();

SCL=0;

delay_us();

}

SDA=1; /*8位发送完后释放数据线,准备接收应答位*/

delay_us();

}

uchar re_byte() //读一个字节,该函数将数据读出24C02

{

uchar i,temp=0;

SCL=0;

delay_us();

SDA=1;

delay_us();

for(i=0;i<8;i++)

temp<<=1;

if(SDA)

{

temp|=0x01;

}

SCL=1;

delay_us();

SCL=0;

}

return temp;

}

void write(uchar add,uchar dat)

{

init();

Start_I2c();

wr_byte(0xa0);

Ack_I2c();

wr_byte(add);

Ack_I2c();

wr_byte(dat);

Ack_I2c();

Stop_I2c();

}

uchar read(uchar add)

{

uchar value;

init();

Start_I2c();

wr_byte(0xa0); //写器件地址,前面四位是芯片24C02本身确定的,它不变,之后三

位是引脚地址,因为我们都接地了,所以这三位都为0,最后一位

位读写位,写的话为0,读为1

Ack_I2c();

wr_byte(add); //希望写到哪个地址

Ack_I2c();

Start_I2c();

wr_byte(0xa1); //写数据

Ack_I2c();

value=re_byte();

No_ack();

Stop_I2c();

return value;

}

void main()

uchar k;

delay_ms();

k=read(5); //上电后马上读取断电前的数据(必须的语句)

// P2=LED[k%10]; //k%10表示只显示个位

// k++;

while(1)

{

if(anjian_1==0)

{

delayms(100);

if(anjian_1==0)

k++;

P2=LED[k];

if(k>9)

k=0;

}

write(5,k); //k为断电前需要保存的数据,5为地址,需要保存的数据用这条语句保存(必须的语句)

P2=LED[k];

}

}

串行EEPROM(24C02)接口方法

串行EEPROM(24C02)接口方法 在新一代单片机中,无论总线型还是非总线型单片机,为了简化系统结构,提高系统的可靠性,都推出了芯片间的串行数据传输技术,设置了芯片间的串行传输接口或串行总线。串行总线扩展接线灵活,极易形成用户的模块化结构,同时将大大简化其系统结构。串行器件不仅占用很少的资源和I/O 线,而且体积大大缩小,同时还具有工作电压宽,抗干扰能力强,功耗低,数据不宜丢失和支持在线编程等特点。目前,各式各样的串行接口器件层出不穷,如:串行EEPROM,串行 ADC/DAC,串行时钟芯片,串行数字电位器,串行微处理器监控芯片,串行温度传感器等等。 串行EEPROM 是在各种串行器件应用中使用较频繁的器件,和并行EEPROM 相比,串行EEPROM 的数据传送的速度较低,但是其体积较小,容量小,所含的引脚也较少。所以,它特别适合于需要存放非挥发数据,要求速度不高,引脚少的单片机的应用。这里绍 串行EEPROM 芯片,以及它们和单片机的接口技术。 1、串行EEPROM 及其工作原理 串行EEPROM 中,较为典型的有ATMEL 公司的AT24CXX 系列以及该公司生产的AT93CXX 系列,较为著名的半导体厂家,包括Microchip,国家半导体厂家等,都有AT93CXX系列EEPROM 产品。 AT24CXX 系列EEPROM AT24CXX 系列的串行电可改写及可编程只读存储器EEPROM 有10 种型号,其中典型 的型号有AT24C01A/02/04/08/16 等5 种,它们的存储容量分别是 1024/2048/4096/8192/16384位,也就是128/256/512/1 024/2048 字节。这个系列一般用于低电压,低功耗的工业和商业用途,并且可以组成优化的系统。这个系统还有多种电压级别,包括 5V(4.5~5.5V),2.7V(2.7~5.5V),2.5V(2.5~5.5V),1.8V(1.8~5.5V)等4 种电压级

24C02原理图及应用程序

程序: #include #include #define uchar unsigned char sbit SCL=P3^6; //I2C 时钟 sbit SDA=P3^7; //I2C 数据 sbit anjian_1=P3^5; uchar code LED[]= {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71}; void delay_us() { _nop_(); /*起始条件建立时间大于4.7us,延时*/ _nop_(); _nop_(); _nop_(); _nop_(); _nop_();

_nop_(); _nop_(); } delay_ms() { unsigned int i; for(i=0;i<20000;i++); } void delayms(unsigned int k) { unsigned int j,i; for(j=k;j>0;j--) for(i=110;i>0;i--); } void Start_I2c() { SDA=1; /*发送起始条件的数据信号*/ delay_us(); SCL=1; delay_us(); SDA=0; /*发送起始信号*/ delay_us(); } void Stop_I2c() { SDA=0; /*发送结束条件的数据信号*/ delay_us(); SCL=1; delay_us(); SDA=1; /*发送I2C总线结束信号*/ delay_us(); } void Ack_I2c() //应答函数 { uchar i=0; SCL=1; delay_us(); while(SDA==1&&i<200) i++; SCL=0; delay_us(); }

24c02

24C02 百科名片 原理图 串行E2PROM是基于I2C-BUS 的存储器件,遵循二线制协议,由于其具有接口方便,体积小,数据掉电不丢失等特点,在仪器仪表及工业自动化控制中得到大量的应用。随着世界上各公司对该器件的开发,市场上推出了许多牌号的24C02器件,甚至还有一些冒牌的24C02器件,这样就使批量生产的单片机控制系统的质量出现时好时坏的问题。笔者经过大量的设计实践和试验摸索找出了24C02在应用中之所以出现数据被冲掉的原因,并总结了一套保护24C02数据安全的软硬件设计方法。 1. 不同牌号24C02的性能区别24C02与单片机的接口非常简单,如下图所示。 E0,E1,E2为器件地址线,WP为写保护引脚,SCL,SDA为二线串行接口,符合I2C总线协议。在一般单片机系统中,24C02 数据受到干扰的情况是很少的,但是随着单片机抗干扰性能的变差,以及恶劣工业环境中单片机系统的应用,一些智能单片机控制系统相继出现24C02数据被冲掉的问题,而且随着单片机的牌号以及24C02的牌号不同而出现不同程度的干扰现象。以前通过简单的器件之间替换比较,发现不同牌号的24C02其抗干扰性能是不一样的,于是就认定24C02器件存在"质量"好坏的问题。后来在一次偶然的机会里,发现有些24C02的WP引脚并不起到保护作用,也就是说将WP引脚与CPU输出引脚断开并保持高电平的情况下,CPU仍然能够对24C02中的数据进行修改写入!在惊讶之余,笔者收集了许多不同牌号的24C02 进

行试验,除了基本的读写功能外,还对地址功能以及WP引脚保护功能进行了全面的检测,发现一种ATMEL(激光印字)以及XICOR牌号的24C02具有全面的符合I2C 总线协议的功能,而有些牌号24C02要么没有WP引脚保护功能,要么没有器件地址功能(即2 片24C02不能共用一个I2C总线),有些甚至两种功能均无。所以说一些同样功能型号的电子器件在兼容性上往往会带来意想不到的问题,值得引起注意。 2. 24C02器件的选用无论是智能仪器仪表还是单片机工业控制系统都要求其数据能够安全可靠而不受干扰,特别是一些重要的设定参数(如温度控制设定值)受到干扰后变成一个很大的数字,那么就有可能发生烧箱毁物的破坏性后果,给生产和经济带来损失,因此必须选用可靠的24C02器件作为数据储存单元。对于只用一片24C02器件的系统,因为不需要分辨不同的地址,只要WP保护功能正常就可以了,这只要断开WP与CPU连线且保持高电平,再试一下系统数据读写功能是否正常就可以了。而这一点对软件抗干扰技术也是至关重要的。一般来说,同种牌号的24C02器件性能是一样的,可以采用抽样试验决定取舍;对于有2片24C02以上的系统,必须严格检查其器件寻址功能,这可以轮流拨下其中一片24C02器件,检查相应的数据存取功能,若没有交叉出错现象则可以选用。 3. 提高24C02数据安全的软件措施(1)建议数据以十进制BCD码方式存入24C02,这样可以提高有效数据的冗余度,即24C02中的存储单元其有效数据为0-9,大于9则为无效数据。这样,在数据写入24C02之前就可以插入校验子程序,对预备写入的数据进行检查,若该RAM 数据已经受到干扰,其值大多数应落在大于9的范围内(可能性百分比系数为246/256),故此当数据大于9时就禁止执行写入24C02的子程序,以免错误数据写入24C02,而对正常需要修改的参数无影响。(2)24C02中数据保持冗余度后,还可以对读出数据进行检查,若为大于9的非正常数据,说明24C02中数据已经受到干扰,此干扰值是绝对不能用的,对于特定的系统可以采取不同的方法,比如带温度控制的培养箱等系统,如其温控范围为0~50℃,则数据出错后,读入值可能变成200℃或更高值,这是非常危险的,针对这种情况可以将设定值硬性规定为某一个安全值比如25℃,因为不知道原先设置的参数值,这也是无可奈何的事情。(3)对写入24C02子程序设置软件口令,口令符合可以执行写入,否则拒绝写入。具体做法是:设置写口令寄存器EPSW,按正常CPU执行程序的脉络,找出所有的数据写入24C02前的必经之路,比如,一般下在功能键按下后经过一些数据处理,最终将要保存的参数写入24C02,这时可以在键扫描子程序里,当有键输入时,对写口令寄存器EPSW 置数5AH,然后在写24C02子程序中紧跟指令CLR WP后插入检查口令语句,判断EPSW值若为5AH,则允许继续执行,否则立即返回,不许执行写入数据。当正确执行完写入24C02子程序后需对EPSW 清0,并且在主程序适当的地方加上EPSW清0指令,反复冗余执行。这样程序受到干扰时,EPSW多数为0,即使EPSW数受到干扰时,也很少有机会刚好等于5AH,使错误数据非正常写入24C02的机会大大减少。数据写入24C02子程序插入口令形式:WRIT:CLR WP MOV R1, #EPSW MOV A, @R1 CJNE A, #5AH,WERR ……;数据写入24C02操作部分: WERR:SETB WP MOV R1, #EPSW MOV @R1, #0 RET

好的24C02储存开机次数实验读写程序

24C02储存开机次数实验 24C02是2K字节的串行EEPROM, 内部含有256个8位字节,该器件通过总线操作,并有专门的写保护功能。 串行EEPROM简称I2C总线式串行器件。串行器件不仅占用很少的资源和I/O线,而且体积大大缩小,同时具有工作电源宽、抗干扰能力强、功耗低、数据不易丢失和支持在线编程等特点。 I2C总线是一种用于IC器件之间连接的二线制总线。它通过SDA(串行数据线)及SCL(串行时钟线)两根线在连到总线上的器件之间传送信息,并根据地址识别每个器件:不管是单片机、存储器、LCD驱动器还是键盘接口。 我们通过一个实验来了解24C02的读写操作过程: 该实验功能是单片机复位一次,自动从24C02中读取数据,然后加1,最终数码管中的数据就是开机的次数,具有一定的实用意义。 相关原理: 程序运行的照片:

接线方法: 1、接8位数码管的数据线。将数码管部份的数据口 JP5接到CPU部份的P0口JP51. 2、接8位数码管的显示位线。将数码管部份的显示位口 JP8接到CPU部份的P2口JP52. 3、用一根2PIN数据线一端插入CPU部份JP53(P3口)的P3.6,P3.7另外一端插入24C02部份的控制端JP38。 烧写后用手按复位键可以看到数码管每按一下加一。 程序流程图:

汇编语言参考程序:SDA24 EQU P3.7 SCLK24 EQU P3.6 ORG 0000H AJMP MAIN ORG 0080H MAIN:

CLR P3.7 ;打开写保护 MOV DPTR,#TAB MOV A,#00H ;读地址 LCALL RD24 CJNE A,#10,TT TT: JNC TT1 AJMP TT2 TT1: MOV A,#00 TT2: MOV 30H,A MOVC A,@A+DPTR CLR P2.6 ;开数码管 MOV P0,A ;送显示 MOV A,30H INC A MOV B,A MOV A,#00H LCALL WT24 AJMP $ TAB: DB 28H,7EH,0A2H,62H,74H,61H,21H,7AH,20H,60H RD24: PUSH ACC ;读24C02子程序。 SETB SDA24 CLR SCLK24 CALL START24 ;启动 MOV A,#0A0H CALL SHIFT8 ;移位 CALL ACK ;响应 POP ACC CALL SHIFT8 CALL ACK CALL START24 MOV A,#0A1H CALL SHIFT8 CALL ACK SETB SDA24 MOV R7,#8 CLR A SETB SDA24

24c02读写程序

E2PROM芯片24C02的读写程序 一、实验目的: 给24C02的内部RAM写入一组数据,数据从24C02内部RAM的01h开始存放。然后再把这组数据读出来,检验写入和读出是否正确。 在这里我们给24C02中写入0、1、2的段码,然后把它读出来,送到数码管显示。 二、理论知识准备: 上面两个实验主要学习的是利用单片机的串口进行通讯,本实验要介绍的是基于I2C总线的串行通讯方法,下面我们先介绍一下I2C总线的相关理论知识。 (一)、I2C总线概念 I2C总线是一种双向二线制总线,它的结构简单,可靠性和抗干扰性能好。目前很多公司都推出了基于I2C总线的外围器件,例如我们学习板上的24C02芯片,就是一个带有I2C总线接口的E2PROM存储器,具有掉电记忆的功能,方便进行数据的长期保存。 (二)、I2C总线结构 I2C总线结构很简单,只有两条线,包括一条数据线(SDA)和一条串行时钟线(SCL)。具有I2C接口的器件可以通过这两根线接到总线上,进行相互之间的信息传递。连接到总线的器件具有不同的地址,CPU根据不同的地址进行识别,从而实现对硬件系统简单灵活的控制。 一个典型的I2C总线应用系统的组成结构如下图所示(假设图中的微控制器、LCD驱动、E2PROM、ADC各器件都是具有I2C总线接口的器件): 我们知道单片机串行通讯的发送和接收一般都各用一条线TXD和RXD,而I2C总线的数据线既可以发送也可以接受,工作方式可以通过软件设置。所以,I2C总线结构的硬件结构非常简洁。 当某器件向总线上发送信息时,它就是发送器,而当其从总线上接收信息时,又成为接收器。

(三)、I2C总线上的数据传送 下面我们看看I2C总线是如何进行数据传送的。我们知道,在一根数据线上传送数据时必须一位一位的进行,所以我们首先研究位传送。 1、位传输 I2C总线每传送一位数据必须有一个时钟脉冲。被传送的数据在时钟SCL的高电平期间保持稳定,只有在SCL低电平期间才能够改变,示意图如下图所示,在标准模式下,高低电平宽度必须不小于4.7us。 那么是不是所有I2C总线中的信号都必须符合上述的有效性呢?只有两个例外,就是开始和停止信号。 开始信号:当SCL为高电平时,SDA发生从高到低的跳变,就定义为开始信号。 停止信号:当SCL为高电平时,SDA发生从低到高的跳变,就定义为结束信号。 开始和结束信号的时序图如下图所示: 2、数据传输的字节格式

I2C总线介绍与24C02芯片

什么是I2C总线?I2C(Inter-Integrated Circuit)总线是一种由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备。也可以简单地理解为I2C是微控制器与外围芯片的一种通讯协议。在不同的书籍中,可能会称为I2C,IIC,或者I平方C,但是概念也是一样的,只是叫法不同。 一﹑I2C总线特点 1、只要求两条总线线路:一条串行数据线SDA,一条串行时钟线SCL; 2、每个连接到总线的器件都可以通过唯一的地址和一直存在的简单的主机/从机关系软件设定地址,主机可以作为主机发送器或主机接收器; 3、它是一个真正的多主机总线,如果两个或更多主机同时初始化,数据传输可以通过冲突检测和仲裁防止数据被破坏; 4、串行的8 位双向数据传输位速率在标准模式下可达100kbit/s,快速模式下可达 400kbit/s,高速模式下可达3.4Mbit/s; 5、连接到相同总线的IC 数量只受到总线的最大电容400pF 限制。 I2C总线的优点非常多,其中最主要体现在1:硬件结构上具有相同的接口界面;2:电路接口的简单性;3:软件操作的一致性。I2C总线占用芯片的引脚非常的少,只需要两组信号作为通信的协议,一条为数据线(SDA),另一条为时钟线(SCL)。因此减少了电路板的空间和芯片管脚的数量,所以降低了互联成本。总线的长度可高达25英尺,并且能够以 10Kbps的最大传输速率支持40个组件。I2C总线还具备了另一个优点,就是任何能够进行发送和接收数据的设备都可以成为主控机。当然,在任何时间点上只能允许有一个主控机。 图5-20(总线连接图) 二﹑I2C总线工作原理 图5-20为I2C总线的连接图。I2C总线是由数据线SDA和时钟线SCL构成的串行总线,可发送和接收数据。在单片机与被控IC之间,最高传送速率 100kbps。

51单片机读写24c02多组数据

51单片机读写24c02多组数据 一、原理图仿真(实物已测试) 二、24C02仿真波形图 三、程序 #include //头文件的包含 #include #define _Nop() _nop_() //定义空指令 unsigned char code dofly_DuanMa[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f, 0x77,0x7c,0x39,0x5e,0x79,0x71};// 显示段码值0~F unsigned char code dofly_WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//分别对应相应的数码管点亮,即位码 int c,num,h,i,j;

sbit DU=P2^2; sbit WE=P2^3; sbit SDA=P2^1; //模拟I2C数据传送位 sbit SCL=P2^0; //模拟I2C时钟控制位 sbit key_0=P1^0; sbit key_1=P1^2; sbit key_2=P1^3; sbit P11=P1^1; bit ack;//应答标志位 void DelayUs2x(unsigned char t);//函数声明 void DelayMs(unsigned char t); /*------------------------------------------------ uS延时函数,含有输入参数unsigned char t,无返回值unsigned char 是定义无符号字符变量,其值的范围是 0~255 这里使用晶振12M,精确延时请使用汇编,大致延时长度如下T=tx2+5 uS ------------------------------------------------*/ void DelayUs2x(unsigned char t) { while(--t); } /*------------------------------------------------ mS延时函数,含有输入参数unsigned char t,无返回值unsigned char 是定义无符号字符变量,其值的范围是 0~255 这里使用晶振12M,精确延时请使用汇编 ------------------------------------------------*/ void DelayMs(unsigned char t) { while(t--) { //大致延时1mS DelayUs2x(245); DelayUs2x(245); } } /*------------------------------------------------ 启动总线 ------------------------------------------------*/ void Start_I2c() { SDA=1; //发送起始条件的数据信号 _Nop(); SCL=1; _Nop(); //起始条件建立时间大于4.7us,延时

电气化自动技术 实验8-- 24C02读写-实验指导书

实验八 24C02读写实验 一、实验概述 使用I2C对24C02进行读写,记录开机的次数。 二、实验目的 1、掌握单片机IO模拟I2C总线的方法。 2、了解EEPROM保存数据的特性。 三、实验预习要求 1、AT24C02是一个2K位串行CMOS E2PROM,内部含有256个8位字节,CATALYST公 司的先进CMOS技术实质上减少了器件的功耗。AT24C02有一个16字节页写缓冲器。该器件通过IIC总线接口进行操作,有一个专门的写保护功能。 2、器件寻址: 前八位是地址地址信号,从最高位(MSB)开始,其中前四位是固定值1010,后三位有管脚A0、A1、A2的基地情况确定。最后一位是读写控制信号,0表示写,1表示读。若与SDA线发送过来的地址比较一致,则器件输出应答0,否则将返回等待状态。器件内部地址寻址是在器件寻址之后,对256个字节进行寻址,直接传送8位地址信 号(00-FF)对应于器件内部的地址。 四、实验原理 在实际的应用中,保存在单片机 RAM 中的数据,掉电后就丢失了,保存在单片机的FLASH 中的数据,又不能随意改变,也就是不能用它来记录变化的数值。但是在某些场合,我们又确实需要记录下某些数据,而它们还时常需要改变或更新,掉电之后 数据还不能丢失,比如我们的家用电表度数,电视机里边的频道记忆,一般都是使用EEPROM 来保存数据,特点就是掉电后不丢失。本实验使用的这个器件是 24C02,是 一个容量大小是 2Kbits,也就是 256 个字节的 EEPROM。一般情况下,EEPROM 拥有30 万到 100 万次的寿命,也就是它可以反复写入 30-100 万次,而读取次数是无限的。 24C02 是一个基于 I2C 通信协议的器件,因此,使用24C02还需要了解I2C通信协议。I2C 多用于板内通信,比如单片机和EEPROM 之间的通信。

I2C总线24C02电路

I2C总线电路 协议 电子工程师,当然软件工程师也一样,在实际工作中不可避免的要遇到“协议”,那么,什么是协议呢?举个例子来说明一下: 两个人通过固定电话来通话: 甲:喂! 乙:喂! 甲:我是比尔盖茨,请问本拉登在吗? 乙:我就是啊….. 甲:¥%……—* 乙:#¥%……—* …………. 甲:再见! 乙:再见! 虽然是一次简单的通话,但我们可以将其看成一个信息的交互,此信息的交互是按以下规定来进行的: 前两句,被软件工程师称之为同步头,被硬件工程师称之为起始位。用于让双方处于一种准备状态。 第三第四句,一般被称之为命令字。 …………..这个一般被称之为数据段。 最后两句,软件工程师称之为结束符,硬件工程师称之为停止位,用于通知对方我要结束了。 不同的场所需要不同的规范来进行通话,在开发工作中尤其重要,我们称这种通话的规范叫协议。任意两个元器件之间,如果需要信息的交互,那么就一定会有信息交互的协议。只有这两个元器件都采用同一种协议,才能保证信息交互的正确。 I2C总线协议 I2C总线协议是一种常见的电子元器件通信协议,此协议的特点是利用很少的IO口进行信息的交互,除去片选和时钟同步外,实际的I2C总线协议仅仅通过两根线就完美解决了信息的交流。 I2C总线协议在我们提供的资料中可以找到,您可以阅读此资料来了解协议的内容和详细的规范。 虽然相较并口总线来说,I2C总线在速度上会慢一些,但它具有硬件电路简单,多个器件共享,操作简单等特点,所以被广泛的应用在很多种类的元器件中。24C02 24C02就是一个标准的I2C总线应用元器件,我们的学习板也是通过此元器件来让初学者学习和掌握I2C总线协议。 24C02是一个非易失性的存储器件,可以在断电的情况下长久保持内部的数据不被丢失。 关于24C02芯片的详细性能,初学者可以阅读随光盘提供的24C02芯片的中文手册。 以下是I2C总线电路的原理图:

Proteus仿真I2C存储器实验

2 Proteus 仿真I 2 C 存储器实验 、实验目的 1、了解I2C 总线的工作原理 2、掌握I2C 总线驱动程序的设计和调试方法 3、掌握I2C 总线存储器的读写方法 、实验说明 1、I2C 总线常识 I2C 总线上的每个器件均由一个存储于该器件中的唯一地址来识别,并可被用作一个发送器或接收器(视其功能而定)。 AT24C02 是一个2K 位串行EEPROM ,内部含有256 个8 位字节,AT24C02 有一个8 字节页写缓冲器,该器件通过I2C 总线接口进行操作。 引脚名称和功能如图1 所示 图1 24 系例I2C 存储器引脚说明 通过器件地址输入端A0 、A1 和A2 可以实现将最多8 个24C02 器件连接到总线上。 2、I2C 总线协议 (1)只有在总线空闲时才允许启动数据传送。 (2)在数据传送过程中,当时钟线为高电平时,数据线必须保持稳定状态,不允许有跳变。 时钟线为高电平时,数据线的任何电平变化将被看作总线的起始或停止 -可编辑修改- 信号。

(3)起始信号,时钟线保持高电平期间,数据线电平从高到低的跳变作为I2 C 总线的起始信号。 2 (4)停止信号,时钟线保持高电平期间,数据线电平从低到高的跳变作为I 2 C 总线的停止信号。 2 I2 C 总线时序: 3、页写操作的数据帧结构根据页缓冲区的大小,页写的字节数不能超过缓冲区大小。如果在发送停止信号之前主器件发送超过缓冲区大小,地址计数器将自动翻转,先前写入的数据被覆盖。如图2所示。 图2 页写操作数据帧结构 三、实验内容 2 先搭建一个“I 2 C 存储器实验”的仿真电路,该单片机系统功能是采用页写的方式,把器件地址为A0H 的24C02 器件的片内50H 地址开始的8 个存储单元分别写入数据“00 、11 、 22 、、、、、、77 ”。 四、.参考硬件电路 -可编辑修改-

AT24C02串行E2PROM的工作原理与读写

AT24C02串行E2PROM的工作原理与读写 串行EEPROM中,较为典型的有ATMEL公司的AT24CXX系列和AT93CXX等系列产品。简称I2C总线式串行器件。串行器件不仅占用很少的资源和I/O线,而且体积大大缩小,同时具有工作电源宽、抗干扰能力强、功耗低、数据不易丢失和支持在线编程等特点。 I2C总线是一种用于IC器件之间连接的二线制总线。它通过SDA(串行数据线)及SCL (串行时钟线)两根线在连到总线上的器件之间传送信息,并根据地址识别每个器件:不管是单片机、存储器、LCD驱动器还是键盘接口。 1.I2C总线的基本结构:采用I2C总线标准的单片机或IC器件,其内部不仅有I2C接口电路,而且将内部各单元电路按功能划分为若干相对独立的模块,通过软件寻址实现片选,减少了器件片选线的连接。CPU不仅能通过指令将某个功能单元电路挂靠或摘离总线,还可对该单元的工作状况进行检测,从而实现对硬件系统的既简单又灵活的扩展与控制。I2C总线接口电路结构如图1所示。 从图中可以看出:对于时钟及数据传送,串行数据I/O端SDA一般需要用外部上拉电阻将其电平拉高。 2.双向传输的接口特性:传统的单片机串行接口的发送和接收一般都分别用一条线,如MCS51系列的TXD和RXD,而I2C总线则根据器件的功能通过软件程序使其可工作于发送或接收方式。当某个器件向总线上发送信息时,它就是发送器(也叫主器件),而当其从总线上接收信息时,又成为接收器(也叫从器件)。主器件用于启动总线上传送数据并产生时钟以开放传送的器件,此时任何被寻址的器件均被认为是从器件。I2C总线的控制完全由挂接在总线上的主器件送出的地址和数据决定。 总线上主和从(即发送和接收)的关系不是一成不变的,而是取决于此时数据传送的方向。SDA

12864电子密码锁

《电子密码锁》制作人:张家文(09光信息)时间: 2011年 12月 2日

摘要 随着电子技术的发展,电子产品的智能化越来越受到推崇。其中密码锁也随着老式的机械式控制发展到今天的智能化控制。 本文主要阐述了该密码锁各模块电路的结构与工作原理,软件程序的设计与硬件电路的设计制作。并基于STC89C52单片机、24C02存储模块、12864液晶显示模块与开关锁模块等构成了电子密码锁,实现了液晶显示、密码存储与更改、系统自动报警等多种功能。 关键字:STC89C52 24C02 12864 继电器步进电机

系统整体设计 一设计要求 1、能够实现密码开关锁功能。 2、能更改原密码。 3、系统有报警功能。 4、24C02能存储密码。 5、采用12864液晶显示。 二系统硬件设计方案 设计的目的是开发一种功能多,电路简单,性能稳定可靠的电子密码锁,该密码锁系统通过STC89C52系列单片机对各个模块电路进行控制,并对输入信号进行分析、运算、处理,从而控制继电器开锁与12864准确的显示。 该系统主要分7大模块:微处理模块、存储模块、信号输入模块、电源模块、继电器模块、报警模块、显示模块,如图所示。信号输入模块:利用矩阵键盘按键电平的变化实现密码输入和密码更改。

系统结构框图 三微处理模块 1 主要元件介绍 STC89C52是一种低功耗、高性能CMOS8位微控制器,具有8K 在系统可编程Flash 存储器。使用宏晶公司公司高密度非易失性存储器技术制造,与工业80C51 产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。 STC89C52具有以下标准功能: 8k字节Flash,256字节RAM,32 位I/O 口线,看门狗定时器,2 个数据指针,三个16 位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。另外,STC89C52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被

单片机原理及应用课程设计

单片机原理及应用课程设计 智能仪器设计基础课程设计 目录 摘要----------------------------------------------------------------3 题目----------------------------------------------------------------3 整体设计及系统原理--------------------------------------------------3 主要硬件介绍--------------------------------------------------------4 STC89C51单片机特点-----------------------------------------------4 STC89C51引脚说明-------------------------------------------------4 硬件设计------------------------------------------------------------6 单片机最小系统--------------------------------------------------6 数码管显示电路--------------------------------------------------7 键盘电路--------------------------------------------------------8 AD转换电路-----------------------------------------------------9 信号调理电路----------------------------------------------------9 24C02电路------------------------------------------------------10 报警电路-------------------------------------------------------11 加热电路-------------------------------------------------------11 电源电路-------------------------------------------------------12 软件设计-----------------------------------------------------------12 数码管显示程序-------------------------------------------------12 24C02读写程序-------------------------------------------------14 AD转换程序----------------------------------------------------18 算数平均滤波程序----------------------------------------------18 热电阻非线性校正算法------------------------------------------19 按键子程序----------------------------------------------------20 报警子程序----------------------------------------------------23 PID子程序----------------------------------------------------23 主程序--------------------------------------------------------23 课程设计总结--------------------------------------------------27 参考文献------------------------------------------------------27 附录: 系统原理图 系统PCB图 摘要:

单片机设计

一、设计要求 在单片机的智能仪器表、数据采集以及实时控制系统中,被控对象往往是一些连续变化的模拟量,例如温度、压力、变形、位移、流量等。这些非电的模拟量必须通过传感器转换成电模拟量再装换成数字量后,才能输入到计算机加工处理。有时还要求处理结果能完成模拟量以实现对被控对象的控制,并要求通过键盘置数、显示、打印等。本系统设计能完成上述各方面的要求。通过修改和增加软件还可以扩展功能。故本系统是一个通用的,切可以进一步开发应用的8位A/D 、D/A 转换系统。 二、系统原理框图 图1-1 系统原理框图 三、硬件设计 显示键盘电路 显示键盘电路如下图所示。有显示电路和键盘电路两部分组成。其中显示电路有P0口、P2口低4位和4位共阳极LED 显示器,4只9015三极管构成。P0口送七段码字形,根据电路图中D0对应七段码中a 段,D6对应七段码中g 段及共阳极“0”点评点评点亮的 AT89C51 P1口 P0口 P1口 P2口 P3口 24C02 标准并行口 D/A 转换器 显示器 键 盘 DS18B20 A/转换器 标准串行口

原则,得符合本电路的公演七段码见下表 字形 七段码 字形 七段码 0 0C0H 9 90H 1 0F9H A 88H 2 0A4H B 83H 3 0B0H C 0C6H 4 99H D 0A1H 5 92H E 86H 6 82H F 8EH 7 0F8H P 8CH 8 80H 位选择P 0.2~P 3.2经9015后分别对应千位、百位、十位、个位,根据共阳极原理,位选信号经9015驱动后从V cc 送入显示阳极,因此得位选择码,千位对应位选码为0EH ,百位对应位选码为0DH ,十位对应位选码0BH ,个位对应位选择码为07H ,由千位到个位分别送出千位字形,千位位选0EH ,百位字形码,百位位码选0DH 个位字形,个位位选07H ,即由千位到个位逐位显示,由于人眼的惰性,我们观察到四位同时显示。 键盘电路 由P 2口低4位与P 1口高3位组成4×3矩阵结构形式的12个键组成,其中10个数字键,2个功能键。在键盘扫描电路中,3.22.21.20.2p p p p 、、、用作控制键盘扫描的行线,使输出口,7.16.15.1p p p 、、用作控制键的列线,是输入口。其扫描过程为,3.20.2~p p 四线中先送P 3.2为0,其余位送全1(07H ),读P 1口,若有键按下,则7.15.1~p p 中必有一线为0,再分别送0BH 、0DH 、0EH 和读1p 口值,达到扫描键盘的作用。闭合键的键值的确定是根据该键所在的行、列值决定。例如闭合1,键所在行为第4行(码07H ),列为P 5.1,即输入码为0DFH (P 5.1=0,其余为1)DF 取反码得20H ,与行号相加得27H 编码,再查表求得键值为1。

基于24c02的简易门禁系统设计与仿真报告书

基于24c02的简易门禁系统设计与仿真报告书该设计基于STC单片机设计,电路主要由51单片机最小系统和按键部分、蜂鸣器报警部分、LCD液晶显示部分等组成。该电路设计简单,单层板加上几根跳线即可完成,适合电子初学者DIY制作。 电子密码锁具体功能介绍: 1、该电子密码锁默认密码为1234567890,密码通过键盘输入,若密码正确,则将锁打开。 2、密码可以由用户自己修改设定(只支持6位密码),锁打开后才能修改密码。修改密码之前必须再次输入密码,在输入新密码时候需要二次确认,以防止误操作。 3、报警、锁定键盘功能。密码输入错误显示器会出现错误提示,若密码输入错误次数超过3次,蜂鸣器报警并且锁定键盘。 4、AT24C02保存密码,支持复位保存,掉电保存功能。 附件内容包括: 整个电子密码锁原理图和PCB源文件,用AD软件打开; Altium Designer画的原理图和PCB图如下:

单片机源程序如下:#include

#define uint unsigned int #define uchar unsigned char sbit l1=P1^0; //LED指示 sbit bump=P2^2; //蜂鸣器控制 sbit relay=P2^3;//继电器输出 sbit lcden=P2^7;//LCD1602液晶控制端 sbit lcdrs=P2^6; sbit sda=P2^0; //AT24C02数据端口sbit scl=P2^1; //时钟端口 /**********显示内容**************************/ uchar code xianshi0[]="input password:"; uchar code xianshi1[]="please come in!"; uchar code xianshi2[]="*"; uchar code xianshi3[]=" you are thief!"; uchar code xianshi4[]=" new password:"; uchar code xianshi5[]=" alter succeed!";

相关主题
文本预览
相关文档 最新文档