⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 temp_e2prom1.c

📁 一个单片机实现DA转换程序,程序实现了一个温度控制的数摸转换,并添加了去抖动处理!!
💻 C
字号:
unsigned char DeviceCode_EEP;
unsigned int  addr; 
unsigned char read_error;

extern unsigned char DeviceCode_EEP;
extern unsigned int  addr; 
extern unsigned char read_error;

extern void I2cPageWrite(void);
extern void clr_ram(void);
extern void I2cPageRead(void);
extern void check_ram(void);


//////////////////写一页
void I2cPageWrite(void)
{
    unsigned int i;
    I2cStart();                                 //启动总线

    if(addr>=256)
      {
        I2cSentByte(DeviceCode_EEP+2);          //发送器件码
      }
    else
      {
        I2cSentByte(DeviceCode_EEP);            //发送器件码
      }
    I2cSentByte(addr%256);    	                //发送地址

    for(i=0;i<16;i++)                           //发送写入的数据
      {
      	if(addr>=256)
          I2cSentByte(240-addr%256);
        else
          I2cSentByte(addr);
      }
    I2cStop();                                  //总线停止
    for( i=0;i<6400;i++);                       //延时,等待写入
}



void clr_ram(void)
{
  unsigned char pages;
  addr=0x00;
  for(pages=0;pages<32;pages++)           //共有32页,每页16个数据
   {
     I2cPageWrite();                      //清除页内的内容
	   addr=addr+16;                        //地址指向下一页
   }
}



/****** 读出 一页数据  ********/
void I2cPageRead(void)
{
    unsigned char i,readdata;

    I2cStart();                                 //启动总线
    if(addr>=256)
        I2cSentByte(DeviceCode_EEP+2);          //发送器件码
    else
        I2cSentByte(DeviceCode_EEP);
    I2cSentByte(addr%256);                      //发送地址

    I2cStart();                                 //启动总线
    if(addr>=256)
        I2cSentByte(DeviceCode_EEP+3);          //发送器件码---读
    else
        I2cSentByte(DeviceCode_EEP+1);

    for(i=0;i<15;i++)                           //读取15 个数据
        {
          readdata=I2cReceiveByte();
          if(addr>=256)
            {
            	if(readdata!=(240-addr%256))
            	  read_error=1;
            }
          else
            {
            	if(readdata!=addr)
            	  read_error=1;
            }
          SendAck(0);                           //发送 确认信号 0
        }

    readdata=I2cReceiveByte();                  //读取最后1个数据
    if(addr>=256)
      {
      	if(readdata!=(240-addr%256))
      	  read_error=1;
      }
    else
      {
      	if(readdata!=addr)
      	  read_error=1;
      }

    SendAck(1);                                 //发送确认信号 1
    I2cStop();                                  //总线停止
}


///////////////校验内存////////////////////////////
void check_ram(void)
{
  unsigned char pages;
  addr=0x00;
  for(pages=0;pages<32;pages++)           //共有32页,每页16个数据
   {
     I2cPageRead();                       //清除页内的内容
       addr=addr+16;                      //地址指向下一页
   }
}


   DeviceCode_EEP=0xAC;
   read_error=0;
   write_error=0;
   clr_ram();
   check_ram();

   if((read_error!=0)||(write_error!=0))
     {
        disbuf[0]=BCDSEG_TAB[14];       //e
        disbuf[1]=BCDSEG_TAB[27];       //r 
        disbuf[2]=BCDSEG_TAB[27];       //r 
        disbuf[3]=BCDSEG_TAB[0];        //o 
        disbuf[4]=BCDSEG_TAB[27];       //r   
        disbuf[5]=0xff;
     }
   else
     {
        disbuf[0]=0xff;             //  /            
        disbuf[1]=BCDSEG_TAB[9];    //  g
        disbuf[2]=BCDSEG_TAB[0];    //  O
        disbuf[3]=BCDSEG_TAB[0];    //  O
        disbuf[4]=BCDSEG_TAB[13];   //  d      	     	
        disbuf[5]=0xff;   	
     } 
   disbcd(disbuf);    

   
   DeviceCode_EEP=0xA4;
   read_error=0;
   write_error=0;   
   clr_ram();
   check_ram();   
   if((read_error!=0)||(write_error!=0))
     {
        disbuf[0]=BCDSEG_TAB[14];       //e
        disbuf[1]=BCDSEG_TAB[27];       //r 
        disbuf[2]=BCDSEG_TAB[27];       //r 
        disbuf[3]=BCDSEG_TAB[0];        //o 
        disbuf[4]=BCDSEG_TAB[27];       //r   
        disbuf[5]=0xff;
     }
   else
     {
        disbuf[0]=0xff;             //  /            
        disbuf[1]=BCDSEG_TAB[9];    //  g
        disbuf[2]=BCDSEG_TAB[0];    //  O
        disbuf[3]=BCDSEG_TAB[0];    //  O
        disbuf[4]=BCDSEG_TAB[13];   //  d      	     	
        disbuf[5]=0xff;   	
     } 
   disbcd(disbuf);    
      
   
   
   

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -