- 1、本文档共10页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
单片机原理及应用A实验五
西南科技大学实验报告课程名称:单片机原理及应用A 实验名称:I2C总线及驱动程序设计 姓 名:张德蓉学 号: 5120141524班 级:生医1402指导教师:雷华军西南科技大学信息工程学院制实验题目:I2C总线向AT24C02C送数据0-99,到99了从寄存器中读取数据,如发生错误,LED灯闪烁。实验目的实验原理数码管显示数码管动态显示驱动:数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划a,b,c,d,e,f,g,dp的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示,这就是动态驱动。I2CI2C总线是由数据线SDA和时钟SCL构成的串行总线,可发送和接收数据。在CPU与被控IC之间、IC与IC之间进行双向传送,最高传送速率100kbps。各种被控制电路均并联在这条总线上,但就像电话机一样只有拨通各自的号码才能工作,所以每个电路和模块都有唯一的地址,在信息的传输过程中,I2C总线上并接的每一模块电路既是主控器(或被控器),又是发送器(或接收器),这取决于它所要完成的功能。CPU发出的控制信号分为地址码和控制量两部分,地址码用来选址,即接通需要控制的电路,确定控制的种类;控制量决定该调整的类别(如对比度、亮度等)及需要调整的量。这样,各控制电路虽然挂在同一条总线上,却彼此独立,互不相关。I2C总线在传送数据过程中共有三种类型信号,它们分别是:开始信号、结束信号和应答信号。开始信号:SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据。结束信号:SCL为高电平时,SDA由低电平向高电平跳变,结束传送数据。应答信号:接收数据的IC在接收到8bit数据后,向发送数据的IC发出特定的低电平脉冲,表示已收到数据。CPU向受控单元发出一个信号后,等待受控单元发出一个应答信号,CPU接收到应答信号后,根据实际情况作出是否继续传递信号的判断。若未收到应答信号,由判断为受控单元出现故障图1 I2C时序AT24C02CA0,A1,A2——地址输入引脚,走位硬件寻址的依据,同种芯片可同时连接8片(2^3);Vcc,Gnd——电源,接地引脚,1.8-5.5vWp——写保护,当Wp接地时,允许对器件的正常读写操作;当Wp接高电平时,写保护,只能进行读操作。SDA——串行地址/数据输入/输出端口,双向传输,漏极开路,需外接上拉电阻到Vcc(典型阻值为10k)。SCL——串行时钟输入,高低电平不同状态与SDA配合,执行不同的命令图2 AT24C02C引脚图实验步骤在编程软件(Keil5)中编写源程序,并编译,改错,形成.hex文件;在仿真软件(Ptoteus)中画出实验所需的外设电路;将生成的.hex文件下载到仿真电路中进行测试;分析结果。实验结果及分析实验源程序#includereg52.hunsigned char cnt = 0,sec = 0,secRec;unsigned char ful=1;unsigned char code dis[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};bitwriteflag = 0;bit readflag = 0;bit direc = 1;sbit wei1 = P3^3;sbit wei2 = P3^0;sbit LED1 = P1^0;sbit LED2 = P1^5;extern unsigned char IICWrite(unsigned char ucAddr,unsigned char uiRegAddr,unsigned char ucRegAddrLen,unsigned char *RDate,unsigned char ucDateLen);extern unsigned char IICRead(unsigned char ucAddr,unsigned char uiRegAddr,unsigned char ucRegAddrLen,unsigned char *RDate,unsigned char ucDateLen);void delay(int t){ //延时函数int j;for(j = 0;j t;j ++);}void timer0(void) interrupt 1 //定时器
文档评论(0)