I2C存储器读写计数器并能断电存储.docx

上传人:b****6 文档编号:12739664 上传时间:2023-06-07 格式:DOCX 页数:28 大小:24.09KB
下载 相关 举报
I2C存储器读写计数器并能断电存储.docx_第1页
第1页 / 共28页
I2C存储器读写计数器并能断电存储.docx_第2页
第2页 / 共28页
I2C存储器读写计数器并能断电存储.docx_第3页
第3页 / 共28页
I2C存储器读写计数器并能断电存储.docx_第4页
第4页 / 共28页
I2C存储器读写计数器并能断电存储.docx_第5页
第5页 / 共28页
I2C存储器读写计数器并能断电存储.docx_第6页
第6页 / 共28页
I2C存储器读写计数器并能断电存储.docx_第7页
第7页 / 共28页
I2C存储器读写计数器并能断电存储.docx_第8页
第8页 / 共28页
I2C存储器读写计数器并能断电存储.docx_第9页
第9页 / 共28页
I2C存储器读写计数器并能断电存储.docx_第10页
第10页 / 共28页
I2C存储器读写计数器并能断电存储.docx_第11页
第11页 / 共28页
I2C存储器读写计数器并能断电存储.docx_第12页
第12页 / 共28页
I2C存储器读写计数器并能断电存储.docx_第13页
第13页 / 共28页
I2C存储器读写计数器并能断电存储.docx_第14页
第14页 / 共28页
I2C存储器读写计数器并能断电存储.docx_第15页
第15页 / 共28页
I2C存储器读写计数器并能断电存储.docx_第16页
第16页 / 共28页
I2C存储器读写计数器并能断电存储.docx_第17页
第17页 / 共28页
I2C存储器读写计数器并能断电存储.docx_第18页
第18页 / 共28页
I2C存储器读写计数器并能断电存储.docx_第19页
第19页 / 共28页
I2C存储器读写计数器并能断电存储.docx_第20页
第20页 / 共28页
亲,该文档总共28页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

I2C存储器读写计数器并能断电存储.docx

《I2C存储器读写计数器并能断电存储.docx》由会员分享,可在线阅读,更多相关《I2C存储器读写计数器并能断电存储.docx(28页珍藏版)》请在冰点文库上搜索。

I2C存储器读写计数器并能断电存储.docx

I2C存储器读写计数器并能断电存储

任务二:

I2C存储器读写(计数器,并能断电存储)之杨若古兰创作

实验道理

1)I2C总线概述

I2C总线是PHLIPS公司推出的一种串行总线,是具备多主机零碎所需

的包含总线判决和高低速器件同步功能的高功能串行总线.

2)I2C旌旗灯号线

I2C总线只要两根双向旌旗灯号线.一根是数据线SDA,另一根是时钟线SCL.I2C总线通过上拉电阻接正电源.当总线空闲时,两根线均为高电平.连到总线上的任一器件输出的低电平,都将使总线的旌旗灯号变低,即各器件的SDA及SCL都是线“与”关系.

图3I2C总线框图

3)I2C总线的数据传送

a)数据位的无效性规定

I2C总线进行数据传送时,时钟旌旗灯号为高电平期间,数据线上的数据必须坚持波动,只要在时钟线上的旌旗灯号为低电平期间,数据线上的高电平或低电平形态才答应变更.

图4SDA与SCL的工作时序图

b)起始和终止旌旗灯号

SCL线为高电平期间,SDA线由高电平向低电平的变更暗示起始旌旗灯号

SCL线为高电平期间,SDA线由低电平向高电平的变更暗示终止旌旗灯号.起始和终止旌旗灯号都是由主机发出的,在起始旌旗灯号发生后,总线就处于被占用的形态;在终止旌旗灯号发生后,总线就处于空闲形态.

c)I2C总线的数据传送速率

I2C总线的通信速率受主机控制,能快能慢,最高速率限制为100Kb/s

d)I2C总线的数据传送格式

主机向从机发送数据

从机向主机发送数据

图5I2C总线的数据传送格式

S:

起始位SA:

从机地址,7位

W/:

写标记位,1位R:

读标记位,1位

A:

应对位,1位A/:

非应对位,1位

D:

数据,8位P:

停止位

暗影:

主机发生的旌旗灯号无暗影:

从机发生的旌旗灯号

4)总线的寻址

I2C总线和谈有明确的规定:

采取7位的寻址字节(寻址字节是起始旌旗灯号后的第一个字节).

寻址字节的位定义

D7~D1位构成从机的地址.D0位是数据传送方向位,为“0”时暗示主机

向从机写数据,为“1”时暗示主机由从机读数据.

主机发送地址时,总线上的每个从机都将这7位地址码与本人的地址进行比较,如果不异,则认为本人正被主机寻址,根据R/位将本人确定为发送器或接收器.

从机的地址由固定部分和可编程部分构成.在一个零碎中可能但愿接入多

个不异的从机,从机地址中可编程部分决定了可接入总线该类器件的最大数目.如一个从机的7位寻址位有4位是固定位,3位是可编程位,这时候仅能寻址8个同样的器件,即可以有8个同样的器件接入到该I2C总线零碎中.

任务三:

请求:

设计一个简单零碎,每10S进行温度收集(结合电路与程序,分析目标),在液晶屏上显示当前温度和前一形态的温度,并将结果存入存储器,具备可将温度的存储结果与PC机通讯和数据发送功能,可以使用键盘设定温度高低限制值,达到限制值时报警.

一、实验设计思路

二、实验内容

1、蜂鸣器工作道理

蜂鸣器发声道理是电流通过电磁线圈,使电磁线圈发生磁场来驱动振动膜发声的,是以须要必定的电流才干驱动它,单片机IO引脚输出的电流较小,单片机输出的TTL电平基本上驱动不了蜂鸣器,是以须要添加一个电流放大的电路.道理图见图:

如图所示,蜂鸣器的负极经电阻R3接地,蜂鸣器的正极接到三极管的集电极C,三极管的基级B经过限流电阻R2后由单片机的P1.3引脚控制,当P1.3输出高电平时,三极管Q1截止,没有电流流过线圈,蜂鸣器不发声;当P1.3输出低电平时,三极管导通,如许蜂鸣器的电流构成回路,发出声音.是以,我们可以通过程序控制P1.3脚的电平来使蜂鸣器发出声音和关闭.程序中改变单片机P1.3引脚输出波形的频率,就可以调整控制蜂鸣器腔调,发生各种分歧音色、腔调的声音.另外,改变P1.3输出电平的高低电平占空比,则可以控制蜂鸣器的声音大小.

2、SP2键盘控制

数据格式

1个起始位

老是逻辑0

8个数据位

(LSB)低位在前

1个奇偶校验位

奇校验

1个停止位

老是逻辑1

1个应对位

仅用在主机对设备的通讯中

数据发送时序

一个键盘发送值的例子:

     通码和断码是以什么样的序列发送到你的计算机从而使得字符G出此刻你的字处理软件里的呢?

由于这是一个大写字母,须要发生如许的事件次序:

按下Shift键-按下G键-释放G键-释放Shift键.与这些时间相干的扫描码如下:

Shift键的通码12h,G键的通码34h,G键的断码F0h34h,Shift键的断码F0h12h.是以发送到你的计算机的数据应当是:

12h34hF0h34hF0h12h

3、DS18B20温度传感器

DS18B20工作道理及利用:

DS18B20的温度检测与数字数据输出全集成于一个芯片之上,从而抗干扰力更强.其一个工作周期可分为两个部分,即温度检测和数据处理.在讲解其工作流程之前我们有须要了解18B20的内部存储器资本.18B20共有三种形状的存储器资本,它们分别是:

ROM只读存储器,用于存放DS18B20ID编码,其前8位是单线系列编码(DS18B20的编码是19H),后面48位是芯片独一的序列号,最初8位是以上56的位的CRC码(冗余校验).数据在出产时设置不由用户更改.DS18B20共64位ROM.

RAM数据暂存器,用于内部计算和数据存取,数据在掉电后丢失,DS18B20共9个字节RAM,每个字节为8位.第1、2个字节是温度转换后的数据值信息,第3、4个字节是用户EEPROM(经常使用于温度报警值储存)的镜像.在上电复位时其值将被刷新.第5个字节则是用户第3个EEPROM的镜像.第6、7、8个字节为计数寄存器,是为了让用户得到更高的温度分辨率而设计的,同样也是内部温度转换、计算的暂存单元.第9个字节为前8个字节的CRC码.EEPROM非易失性记忆体,用于存放持久须要保管的数据,上上限温度报警值和校验数据,DS18B20共3位EEPROM,并在RAM都存在镜像,以方便用户操纵.

4、LCD1602液晶显示

读写操纵时序如图所示

图三:

读操纵时序

图四:

写操纵时序

附录一:

(任务二程序)

#include

#include

#defineuintunsignedint

#defineucharunsignedchar

 

voiddisp(ucharnum1,ucharnum2,ucharnum3);

voiddelay(uintz);

voiddisp_init(void);//液晶屏初始化

voidwrite_com(ucharcom);//对液晶屏写指令

voidwrite_data(uchardat);//写数据

voidmain(void)

{

unsignedintlednum=0,x,tt=0;//lednum显示的数据,x24c02读到的数据,tt时间累加

unsignedinta1=0,a2=0,a3=0;//显示位数个十百

disp_init();//1602的初始化    

OpenI2C(MASTER,SLEW_ON);//I2C的初始化

SSPADD=9;//频率为400KHZ

T0CONbits.TMR0ON=0;//关闭TIMER0

T0CONbits.T08BIT=0;//配置为16位计数模式

T0CONbits.T0CS=0;//选择内部时钟源即定时模式

TMR0H=(65536-10000)/256;//定时5us

TMR0L=(65536-10000)%256;

INTCONbits.TMR0IF=0;//清TIMER0溢出间断标记位

T0CONbits.TMR0ON=1;//使能TIMER0

while

(1)

{

x=EERandomRead(0xA0,0x03);//读数据,0XA0为器件地址0X03为存储地址

if(INTCONbits.TMR0IF==1)//TIMER0溢出间断标记位为1

{

INTCONbits.TMR0IF=0;//清TIMER0溢出间断标记位

TMR0H=(65536-10000)/256;//5us*10000=50ms

TMR0L=(65536-10000)%256;

tt++;

if(tt==20)//1s

{

tt=0;

x++;

if(x==256)

{

x=0;

}

EEByteWrite(0xA0,0x03,x);//写数据

EEAckPolling(0xA0);//应对

}

}

lednum=EERandomRead(0xA0,0x03);//防止断电遗失

a1=lednum/100;//百位上的数字

a2=lednum%100/10;//十位上的数字

a3=lednum%10;//个位上的数字

disp(a1,a2,a3);//显示

}

}

voidwrite_com(ucharcom)//LED1602控制字输入

{

TRISB=0b000000000;//TRISB=0b00010000;

TRISD=0;

e=0;

rw=0;

rs=0;//写指令:

RS=L,RW=L,D0~D7=指令码,E=高脉冲

PORTD=com;//写指令到液晶

delay(5);

e=1;

delay(5);

e=0;

}

voidwrite_data(uchardat)//LCD1602数据输入

{

TRISD=0;

e=0;

rw=0;

rs=1;//写数据:

RS=H,RW=L,D0~D7=指令码,E=高脉冲

PORTD=dat;//写数据到液晶

delay(5);

e=1;

delay(5);

e=0;

}

voiddisp_init()

{

TRISD=0;//选择D端口为液晶屏数据的输入口

write_com(0x38);//液晶开显示

write_com(0x0c);//显示光标,光标闪烁

write_com(0x06);//读或写一个字符后地址指针加一,光标加一

write_com(0x01);//显示清屏:

1、数据指针清零;2、所有显示清零

write_com(0x80);//第一行首位

}

voiddisp(ucharnum1,ucharnum2,ucharnum3)

{

write_com(0x80+0x40);

write_data(num1+0x30);//液晶第二行第一名数

delay

(1);

write_com(0x80+0x41);

write_data(num2+0x30);//液晶第二行第二位数

delay

(1);

write_com(0x80+0x42);

write_data(num3+0x30);//液晶第二行第三位数

delay

(1);

}

voiddelay(uintz)//z毫秒延时子程序

{

uintx,y;

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

for(y=z;y>0;y--);

}

附录二(任务三程序)

__CONFIG(1,XT);//晶振为内部4M

__CONFIG(2,WDTDIS);//看门狗关闭

__CONFIG(4,LVPDIS);//禁止低电压编程

#defineRSPINRB5//DataorInstrumentSelectLCD1602

#defineRWPINRB4//WriteorRead

#defineEPINRB3//6800modeEnablesingle

unsignedchartemp1=0,temp1_1=0;//收集到的温度高8位上一次的

unsignedchartemp2=0,temp2_2=0;//收集到的温度低8位

unsignedinta,b,c=0;

#definebeepRC2//定义蜂鸣器接口

/****************************************/

#definesdaRC4//AT24C02

#definesclRC3

biteepromdi;

biteepromdo;

unsignedcharaddressbuf;

unsignedcharbuf_24C02;

/****************************************/

bitclrbit;//USART

unsignedcharrecebuf;

/****************************************/

//转换后的温度值小数点部分查表

constunsignedchartablexiao[16]={0,0,1,2,2,3,4,4,5,6,6,7,8,8,9,9};

/****************************************************************************************/

#defineKey_DataRB1

#defineKey_CLKRB0

unsignedcharIntNum;//间断次数计数

unsignedcharKeyV;//键值

unsignedcharKey_UP=0,Shift=0;//Key_UP是键松开标识,Shift是Shift键按下标识

unsignedcharkeybuf;

unsignedchardisbuf;//84

unsignedcharshu1=0,shu2=0,tem1=0,tem2=0,tem3=0;//温度上限

bitbf;//标识是否有字符被收到

bitdisbit;

//0x66为backspace键

//0x5a为Enter键

constunsignedcharUnShifted[59][2]={

0x1C,'a',

0x32,'b',

0x21,'c',

0x23,'d',

0x24,'e',

0x2B,'f',

0x34,'g',

0x33,'h',

0x43,'i',

0x3B,'j',

0x42,'k',

0x4B,'l',

0x3A,'m',

0x31,'n',

0x44,'o',

0x4D,'p',

0x15,'q',

0x2D,'r',

0x1B,'s',

0x2C,'t',

0x3C,'u',

0x2A,'v',

0x1D,'w',

0x22,'x',

0x35,'y',

0x1A,'z',

0x45,'0',

0x16,'1',

0x1E,'2',

0x26,'3',

0x25,'4',

0x2E,'5',

0x36,'6',

0x3D,'7',

0x3E,'8',

0x46,'9',

0x0E,'`',

0x4E,'-',

0x55,'=',

0x5D,'\\',

0x29,'',

0x54,'[',

0x5B,']',

0x4C,';',

0x52,'\'',

0x41,',',

0x49,'.',

0x4A,'/',

0x71,'.',

0x70,'0',

0x69,'1',

0x72,'2',

0x7A,'3',

0x6B,'4',

0x73,'5',

0x74,'6',

0x6C,'7',

0x75,'8',

0x7D,'9',

};

constunsignedcharShifted[59][2]={

0x1C,'A',

0x32,'B',

0x21,'C',

0x23,'D',

0x24,'E',

0x2B,'F',

0x34,'G',

0x33,'H',

0x43,'I',

0x3B,'J',

0x42,'K',

0x4B,'L',

0x3A,'M',

0x31,'N',

0x44,'O',

0x4D,'P',

0x15,'Q',

0x2D,'R',

0x1B,'S',

0x2C,'T',

0x3C,'U',

0x2A,'V',

0x1D,'W',

0x22,'X',

0x35,'Y',

0x1A,'Z',

0x45,'0',

0x16,'1',

0x1E,'2',

0x26,'3',

0x25,'4',

0x2E,'5',

0x36,'6',

0x3D,'7',

0x3E,'8',

0x46,'9',

0x0E,'~',

0x4E,'_',

0x55,'+',

0x5D,'|',

0x29,'',

0x54,'{',

0x5B,'}',

0x4C,':

',

0x52,'"',

0x41,'<',

0x49,'>',

0x4A,'?

',

0x71,'.',

0x70,'0',

0x69,'1',

0x72,'2',

0x7A,'3',

0x6B,'4',

0x73,'5',

0x74,'6',

0x6C,'7',

0x75,'8',

0x7D,'9',

};

//******************************************************************/

//6x8.h文件:

/*-----------------------------------------------

6x8font

1pixelspaceatleftandbottom

index=ASCII-32

-----------------------------------------------*/

constunsignedcharfont6x8[][6]=

{

{0x00,0x00,0x00,0x00,0x00,0x00},//sp

{0x00,0x00,0x00,0x2f,0x00,0x00},//!

{0x00,0x00,0x07,0x00,0x07,0x00},//"

{0x00,0x14,0x7f,0x14,0x7f,0x14},//#

{0x00,0x24,0x2a,0x7f,0x2a,0x12},//$

{0x00,0x62,0x64,0x08,0x13,0x23},//%5

{0x00,0x36,0x49,0x55,0x22,0x50},//&

{0x00,0x00,0x05,0x03,0x00,0x00},//'

{0x00,0x00,0x1c,0x22,0x41,0x00},//(

{0x00,0x00,0x41,0x22,0x1c,0x00},//)

{0x00,0x14,0x08,0x3E,0x08,0x14},//*

{0x00,0x08,0x08,0x3E,0x08,0x08},//+

{0x00,0x00,0x00,0xA0,0x60,0x00},//,

{0x00,0x08,0x08,0x08,0x08,0x08},//-

{0x00,0x00,0x60,0x60,0x00,0x00},//.

{0x00,0x20,0x10,0x08,0x04,0x02},///

{0x00,0x3E,0x51,0x49,0x45,0x3E},//016

{0x00,0x00,0x42,0x7F,0x40,0x00},//1

{0x00,0x42,0x61,0x51,0x49,0x46},//2

{0x00,0x21,0x41,0x45,0x4B,0x31},//3

{0x00,0x18,0x14,0x12,0x7F,0x10},//4

{0x00,0x27,0x45,0x45,0x45,0x39},//5

{0x00,0x3C,0x4A,0x49,0x49,0x30},//6

{0x00,0x01,0x71,0x09,0x05,0x03},//7

{0x00,0x36,0x49,0x49,0x49,0x36},//8

{0x00,0x06,0x49,0x49,0x29,0x1E},//9

{0x00,0x00,0x36,0x36,0x00,0x00},//:

26

{0x00,0x00,0x56,0x36,0x00,0x00},//;

{0x00,0x08,0x14,0x22,0x41,0x00},//<

{0x00,0x14,0x14,0x14,0x14,0x14},//=

{0x00,0x00,0x41,0x22,0x14,0x08},//>

{0x00,0x02,0x01,0x51,0x09,0x06},//?

{0x00,0x32,0x49,0x59,0x51,0x3E},//@

{0x00,0x7C,0x12,0x11,0x12,0x7C},//A33

{0x00,0x7F,0x49,0x49,0x49,0x36},//B

{0x00,0x3E,0x41,0x41,0x41,0x22},//C

{0x00,0x7F,0x41,0x41,0x22,0x1C},//D

{0x00,0x7F,0x49,0x49,0x49,0x41},//E

{0x00,0x7F,0x09,0x09,0x09,0x01},//F

{0x00,0x3E,0x41,0x49,0x49,0x7A},//G

{0x00,0x7F,0x08,0x08,0x08,0x7F},//H

{0x00,0x00,0x41,0x7F,0x41,0x00},//I

{0x00,0x20,0x40,0x41,0x3F,0x01},//J

{0x00,0x7F,0x08,0x14,0x22,0x41},//K

{0x00,0x7F,0x40,0x40,0x40,0x40},//L

{0x00,0x7F,0x02,0x0C,0x02,0x7F},//M

{0x00,0x7F,0x04,0x08,0x10,0x7F},//N

{0x00,0x3E,0x41,0x41,0x41,0x3E},//O

{0x00,0x7F,0x09,0x09,0x09,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2