您好,欢迎光临本网站![请登录][注册会员]  
文件名称: IIC应用--24c02(C语言)
  所属分类: C
  开发工具:
  文件大小: 23kb
  下载次数: 0
  上传时间: 2012-02-05
  提 供 者: into****
 详细说明: /*********************************************************** 实验名称:24C02储存开机次数实验 程序说明:该试验功能是单片机复位一次,自动从24C02中读取数据 然后加1,最终数码管中的数据就是开机的次数,具有一定的实用意义 烧写后用手按复位键可以看到数码管每按一下加一,也可以断电再开机 **********************************************************/ #include "STC89C51RC_RD_PLUS.H" #include #define uchar unsigned char #define uint unsigned int code unsigned char seg7code[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92, 0x82,0xf8,0x80,0x90,0xff}; //共阳数码管段码 sbit SDA=P1^5; //定义数据线 sbit SCL=P1^4; //定义时钟线 bit flag; uint idata ucSendBuffer[1]=0; uint idata ucReceData; void delay(void); void delay_10ms(void); void ACK(); void NoACK(); /******************************************/ /* 延时子程序 */ /******************************************/ void delay(void) { uint i; for(i=100;i>0;i--) _nop_(); } void delay1ms() { uchar i; for(i=124;i>0;i--); //延时124*8+10=1002us } /********************************************************* **名称:I2C_Start **功能:启动I2C **输入:无 **返回:无 *********************************************************/ void I2C_Start() { SDA=1; delay(); SCL=1; delay(); SDA=0; delay(); SCL=0; //钳位I2C总线,准备发送数据 } /********************************************************** **名称:I2C_Stop **功能:停止I2C **输入:无 **返回:无 **********************************************************/ void I2C_Stop() { SDA=0; delay(); SCL=1; delay(); SDA=1; delay(); } /********************************************************** **名称:Ack **功能:应答信号 **输入:无 **返回:无 **********************************************************/ void Ack() { SDA=0; delay(); SCL=1; delay(); SCL=0; delay(); SDA=1; delay(); } /******************************************************** **名称:NoAck **功能:发送非应答信号 **输入:无 **返回:无 ********************************************************/ void NoAck() { SDA=1; delay(); SCL=1; delay(); SCL=0; delay(); SDA=0; delay(); } /******************************************************** **名称:Test_Ack() **功能:检测应答位 **输入:无 **返回:flag,有应答时flag为0,无应答时flag为1 *********************************************************/ bit Test_Ack() { SCL=0; SDA=1;//读入数据 _nop_();_nop_();_nop_();_nop_(); SCL=1; _nop_();_nop_();_nop_();_nop_(); if(SDA==0) flag=1; else flag=0; SCL=0; return(flag); } /******************************************************** **名称:SendData() **功能:发送一字节数据 **输入:buffer **返回: *******************************************************/ void SendData(uint buffer) { uint BitCnt=8;//一字节8位 uint temp=0; do { temp=buffer; SCL=0; delay(); if((temp&0x80;)==0) //判断最高位是0还是1 SDA=0; else SDA=1; delay(); SCL=1; temp=_crol_(buffer,1);//将buffer中的数据左移一位 buffer=temp; BitCnt--; } while(BitCnt); SCL=0; } /************************************************************** **名称:uint ReceiveData() **功能:接收一字节数据 **输入: **返回:ucReceData **说明:将接收的数据存放在ucReceData中 **************************************************************/ uint ReceiveData() { uint BitCnt=8; uint temp=0; SDA=1;//读入数据 do { SCL=0; delay(); SCL=1; delay(); if(SDA==1) ucReceData=ucReceData|0x01; //低位置1 else ucReceData=ucReceData&0x0fe; //低位清0 if(BitCnt-1) { temp=_crol_(ucReceData,1); //数据左移一位 ucReceData=temp; } BitCnt--; } while(BitCnt); SCL=0; return(ucReceData); } /************************************************************* **名称:bit WriteNByte() **功能:主机向24C02中写入多字节数据 **输入: **返回: **说明:sla-器件地址 suba-数据地址,*s-写入的数据,n-写入的字节数(n<=8) **************************************************************/ bit WriteNByte(uint sla,uint suba,uint *s,uint n) { uint i; I2C_Start();//启动I2C SendData(sla);//发送器件地址 Test_Ack(); // if(flag==0) return(0); SendData(suba); Test_Ack(); //if(flag==0) return(0); for(i=0;i
(系统自动生成,下载前可以参看下载内容)

下载文件列表

相关说明

  • 本站资源为会员上传分享交流与学习,如有侵犯您的权益,请联系我们删除.
  • 本站是交换下载平台,提供交流渠道,下载内容来自于网络,除下载问题外,其它问题请自行百度
  • 本站已设置防盗链,请勿用迅雷、QQ旋风等多线程下载软件下载资源,下载后用WinRAR最新版进行解压.
  • 如果您发现内容无法下载,请稍后再次尝试;或者到消费记录里找到下载记录反馈给我们.
  • 下载后发现下载的内容跟说明不相乎,请到消费记录里找到下载记录反馈给我们,经确认后退回积分.
  • 如下载前有疑问,可以通过点击"提供者"的名字,查看对方的联系方式,联系对方咨询.
 输入关键字,在本站1000多万海量源码库中尽情搜索: