您好,欢迎来到华佗健康网。
搜索
您的当前位置:首页单片机I2C总线实验

单片机I2C总线实验

来源:华佗健康网


单片机实验报告

实验名称:

姓 名: 学 号: 班 级: 时 间:

IC总线实验

2

高知明 110404320 通信3班 2014.6

南京理工大学紫金学院电光系

一、 实验目的

1、 了解I2C总线的控制原理;

2、 学习运用I2C总线主控软件包;

3、 学习实时时钟、ZLG7290键盘LED控制的各种功能。

二、 实验原理

I2C总线是一种双向二线制同步串行总线,由数据总线SDA和时钟SCL构成,数据线上信号完全与时钟同步。数据传送采用主从方式,即主器件(主控制器)寻址从器件(被控器),启动启动总线,产生时钟,传送数据及结束数据的传送。I2C总线上的数据传送严格按照一定时序完成,同步时钟允许通过总线以不同的波特率进行通信,也是停止和重新启动串行发送握手信号。

三、 实验内容

1、 开始实验前应该做好准备工作

2、 了解本次实验涉及的各功能模块电路结构,其中D5区既有键盘LED控制电路

通过此次A/D转换实验,我学会了判断A/D转换启动、结束标志,对A/D转换有了更深入的理解与体会。

也有I2C总线控制的实时时钟电路和I2C总线控制的片外ROM电路,如图所示:

3、程序设计

认真阅读参考程序,理解其基本功能实现的原理,通过修改关键语句,实现实时时间的显示与更新。 #include \"reg52.h\"

#include \"VIiC_C51.H\" //包含VI2C软件包 #include \"zlg7290.h\" #define PCF8563 0xA2

#define WRADDR 0x00 //定义写单元首地址 #define RDADDR 0x02

sbit KEY_INT=P3^2; sbit RST=P1^0;

unsigned char disp_buf[8]={0,0,0,0,0,0,0,0}; unsigned char KEY; swich_date=0;

unsigned char display_time(unsigned char *sd) { sd[0]=sd[0]&0x7f;//秒屏蔽保留位 sd[1]=sd[1]&0x7f;//分屏蔽保留位 sd[2]=sd[2]&0x3f;//

disp_buf[0]=(sd[0]%16); disp_buf[1]=(sd[0]/16); isp_buf[2]= 31;

disp_buf[3]=(sd[1]%16); disp_buf[4]=(sd[1]/16);

disp_buf[5]= 31;

disp_buf[6]=(sd[2]%16); disp_buf[7]=(sd[2]/16); ZLG7290_SendBuf(disp_buf,8); return 0; }

unsigned char display_date(unsigned char *sd) {

sd[0]=sd[0]&0x3f;//日屏蔽保留位 sd[2]=sd[2]&0x1f;//月屏蔽保留位 disp_buf[0] =(sd[0]%16); disp_buf[1] =(sd[0]/16);

disp_buf[2] =(sd[2]%16)+0x80;//后面加小数点 disp_buf[3] =(sd[2]/16);

disp_buf[4]=(sd[3]%16)+0x8; disp_buf[5] =(sd[3]/16); disp_buf[6] =0; disp_buf[7] =2;

ZLG7290_SendBuf(disp_buf,8); return 0; }

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 code td[9]={0x00,0x12,0x00,0x28,0x09,0x27,0x04,0x12,0x12}; //定义初始化字

unsigned char rd[7]; //定义接收缓冲区 RST=0;

DelayNS(1); RST=1;

ISendStr(PCF8563,WRADDR,td,0x5); //初始化PCF8563,如果需要的话可以不去掉

DelayNS(1);

ISendStr(PCF8563,WRADDR+5,&td[5],0x4);//初始化PCF8563,如果需要的话可以不去掉 while(1) {

DelayNS(1);

IRcvStr(PCF8563,RDADDR,rd,0x7); //读现在的时、分、秒

DelayNS(1);

if(swich_date)

display_date(rd+3); //调显示日期子程序

else display_time(rd); //调显示时间子程序 if(KEY_INT==0)

{ KEY=ZLG7290_GetKey(); if(KEY==1)

swich_date=~swich_date; } } }

四、小结与体会

本次实验,我了解了I2C总线的控制原理,也学会了运用I2C主控器软件包。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo0.com 版权所有

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务