访问手机版页面
你的位置:老古开发网 > 其他 > 正文  
I2C总线实验(实时时钟、EEPROM和ZLG7290的实验
内容导读:
I2C 总线实验(实时时钟、EEPROM 和ZLG7290 的实验) 一. 实验目的加深用户对I2C 总线的理解,熟悉I2C 器件的使用

I2C 总线实验(实时时钟、EEPROM 和ZLG7290 的实验)

一. 实验目的
加深用户对I2C 总线的理解,熟悉I2C 器件的使用,提供用户实际开发的能力。
二. 实验设备及器件
IBM PC 机 一台
DP-51PROC 单片机综合仿真实验仪 一台
三. 实验内容
进行I2C 总线控制的实时时钟、EEPROM、ZLG7290 键盘LED 控制器实验。
四. 实验要求
熟练掌握I2C 总线的控制,灵活运用I2C 主控器软件包,深刻理解实时时钟、
EEPROM、ZLG7290 键盘LED 控制的各种功能。
五. 实验步骤
1. 使用导线连接D5 区的SCL、SDA 到A2 区的P16、P17(SCL~P16、SDA~P17),
连接D5 区的RST_L、INT_KEY 到A2 区的P10、INT0(RST_L~P10、
INT_KEY~INT0),短接D5 区的JP1 跳线。
2. 把模拟I2C 软件包“VIIC_C51.C”文件加入到Keil C51 的项目中,程序源文件
的开头包含“VIIC_C51.H”头文件。修改VIIC_C51.C 文件中的sbit SDA=P1^7;
和 sbit SCL=P1^6;。

图3.21 RTC原理图
3. 使用函数ISendStr(uchar sla,uchar suba,uchar *s,uchar no)对PCF8563T
实时时钟进行设置初始时间,再使用IRcvStr(uchar sla,uchar suba,uchar
*s,uchar no)对PCF8563T 实时时钟的时间进行读取。

EEPROM 原理图

4. 使用函数ISendStr(uchar sla,uchar suba,uchar *s,uchar no);对24WC02EEPROM 进行写入,再使用IRcvStr(uchar sla,uchar suba,uchar *s,uchar
no);对24WC02 EEPROM 进行读取。

ZLG7290 原理图

5. 对ZLG7290 键盘LED 控制器的操作也同理,只是在程序开始的地方增加复位操
作和程序中间增加查询是否有键按下。另外还要增加ZLG7290 软件包
“ZLG7290.C”文件加入到Keil C51 的项目中,程序源文件的开头包含
“ZLG7290.H”头文件。
六. 实验预习要求
认真阅读PCF8563T、24WC02、ZLG7290 的数据手册和模拟I2C 软件包使用
手册,理解硬件结构,还可以先把程序编好,然后在Keil C51 环境下进行软件仿真。
(如果没有在C 语言环境下进行过调试仿真,可以阅读本书的2.5 节关于C 语言环境
进行仿真的设置)
七. 实验参考程序
实时时钟程序:
#include "reg52.h"
#include "VIIC_C51.H" //包含VI2C 软件包
#define PCF8563 0xA2 //定义器件地址
#define WRADDR 0x00 //定义写单元首地址
#define RDADDR 0x02 //定义读单元首地址
unsigned char DelayNS(unsigned char no)
{
unsigned char i,j; //延时参数

for(; no>0; no--)
{
for(i=0; i<100; i++)
for(j=0; j<100; j++);
}
return 0;
}
void main()
{
unsigned char td[5]={0x00,0x12,0x00,0x30,0x12};//定义初始化字
unsigned char rd[5]; //定义接收缓冲区
//初始化PCF8563,如果需要的话可以去掉
ISendStr(PCF8563,WRADDR,td,0x5);
DelayNS(10);
while(1)
{
IRcvStr(PCF8563,RDADDR,rd,0x3); //读现在的时、分、秒
DelayNS(10);
}
}
EEPROM 程序:
#include "REG52.h"
#include "VIIC_C51.h"
#define CSI24WC02 0XA0
#define uint8 unsigned char
unsigned char delay(unsigned char j)
{
unsigned char k,l; //延时参数
for(l=0;l<=j;l++)
for(k=0;k<=250;k++);
return 0;
}
void main()
{
/*定义发送缓冲区*/
uint8 td[5]={0x00,0x12,0x55,0x30,0x12};
uint8 rd[5]; /*定义接收缓冲区*/
ISendStr(CSI24WC02,0,td,0x5); /*发送数据*/
delay(100);
while(1)

{
IRcvStr(CSI24WC02,0,rd,0x5); /*读取数据*/
delay(100);
while(1);
}
}
ZLG7290 程序:
#include "reg52.h"
#include "VIIC_C51.H" //包含VI2C 软件包
#include "zlg7290.h"
sbit RST=P1^0;
sbit KEY_INT=P3^2;
unsigned char DelayNS(unsigned char no)
{
unsigned char i,j; //延时参数
for(; no>0; no--)
{
for(i=0; i<100; i++)
for(j=0; j<10; j++);
}
return 0;
}
void main()
{
unsigned char i,KEY;
RST=0; //zlg7290复位
DelayNS(1);
RST=1;
DelayNS(10);
while(1)
{
if(KEY_INT==0)
{
KEY=ZLG7290_GetKey(); //读键
DelayNS(10);
for(i=0;i<8;i++)
{
ZLG7290_SendCmd(0x60+i,KEY);//显示键值
DelayNS(1);
}

}
}
}
八. 实验思考题
(1)请用户再思考一下,I2C 的从设备控制程序应该如何编写。

标签:EEPROM,总线
来源:www.elecfans.co 作者:本站 时间:2008/9/22 16:58:00
相关阅读
推荐阅读
阅读排行
最近更新
商品推荐