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

📄 基于jl3脉冲点器频率测试器程序.c

📁 脉冲点火器频率测试器 freescale芯片 带原理图
💻 C
📖 第 1 页 / 共 2 页
字号:
{       WP=0;
        SCL_DR=1;
        SDA_DR=1;
   		
        SDA=1;
        delay();
        SCL=1;
        delay();
        SDA=0;
        delay();
        SCL=0;                  //钳位I2C总线,准备发送数据
}
/**********************************************************
**名称:I2C_Stop
**功能:停止I2C
**输入:无
**返回:无
**********************************************************/
void I2C_Stop()
{
        SCL_DR=1;
        SDA_DR=1;
        SDA=0;
        delay();
        SCL=1;
        delay();
        SDA=1;
        delay();
}
/**********************************************************
**名称:Ack
**功能:应答信号
**输入:无
**返回:无
**********************************************************/
void Ack()
{
        SCL_DR=1;
        SDA_DR=1;
        SDA=0;
        delay();
        SCL=1;
        delay();
        SCL=0;
        delay();
        SDA=1;
        delay();
}
/********************************************************
**名称:NoAck
**功能:发送非应答信号
**输入:无
**返回:无
********************************************************/
void NoAck()
{
        SCL_DR=1;
        SDA_DR=1;
        SDA=1;
        delay();
        SCL=1;
        delay();
        SCL=0;
        delay();
        SDA=0;
        delay();
}
/********************************************************
**名称:Test_Ack()
**功能:检测应答位
*********************************************************/
uchar Test_Ack(void)
{ uchar Return_da;
        SCL_DR=1;
        SDA_DR=1;
        SCL=0;
        SDA=1;//读入数据
        ;;;;
        SCL=1;
        ;;;;
         SDA_DR=0;
       if(SDA==0)
         Return_da=1;         
        else 
         Return_da=0; 
        
         SCL=0;
         
        return(Return_da);
        
} 
//读EEP驱动=========================================================

void Sen_data_dir(uchar Sen_Da)

{     uchar temp,i;
      temp=Sen_Da;      
      SCL_DR=1;
      SDA_DR=1;
      for(i=0;i<8;i++)
      {
          SCL=0;
          if(temp&0x80)
               SDA=1;
          else
               SDA=0;
          delay();
          SCL=1;
          delay();
          temp=temp<<1;
      }
       

     SCL=0;
}


//==写EEP驱动=================================================
uchar  Read_DA_dir(void)

{ uchar temp,i;
  SCL_DR=1;
  SDA_DR=0;
  for(i=0;i<8;i++)
  
      { SCL=0;
        delay();
        SCL=1;
        if(SDA==1)
         temp=temp|0x01;
        else
         temp=temp&0xfe;
        if(i<7)
         temp=temp<<1;               
      
      }
  SCL=0;
  return (temp);

}
//=写EEP管理====================================================
uchar Write_data(uchar d_address,uchar address,uchar *data,uchar data_cont_set) 
{ uchar return_var,i;
  uchar *b;
  b= data;
  I2C_Start();
  Sen_data_dir(d_address);
  return_var=Test_Ack();
  if(return_var==OK) 
  {       Sen_data_dir(address);
          return_var=Test_Ack();
          if(return_var==OK)
          {  for(i=0;i<data_cont_set;i++) 
              {     b=b+i;
                    Sen_data_dir(*b);
                    return_var=Test_Ack();
                     if(return_var==OK) 
                       ;
                     else
                          return(0);
                           
                      
               }
                I2C_Stop();
                          return(1);
          }
          else
                  return(0);
   }
   
  else
          return(0);
  
 
  
 
}

//===读EEP管理==================================================

uchar Read_data(uchar d_address,uchar address,uchar data_set) 
{     uchar i;
      I2C_Start();
      Sen_data_dir(d_address);
      //return_var=Test_Ack();
      if(Test_Ack()==1) 
      {     Sen_data_dir(address);
            if(Test_Ack()==1) 
            {     I2C_Start();
                  Sen_data_dir(0xa1);
                  if(Test_Ack()==1) 
                  {     for (i=0;i<data_set-1;i++)
                       {
                             Read_Da_buff[i]=Read_DA_dir();
                             Ack();
                            
                        }
                        
                        Read_Da_buff[data_set-1]=Read_DA_dir();
                        NoAck();
                        I2C_Stop();
                         
                         return(1);
                       
                  } 
                  else 
                        return(0);
            }
            else 
                  return(0);
            
      }
  
      else 
            return(0);
      
}
//=========================================================
void key_cor(void) 
{     switch(key) 
      { case 0x60:key=0;
                   if(eep_changfige==0) 
                   {
                           sen_step++;
                           if(sen_step>1)
                           sen_step=0;
                          
                           dsp_fige=3;   //显示L,H 
                    }
                        break;
       
      
        case 0xc0:key=0;
                       if((eep_changfige==0)&&(dsp_fige==2)) 
                        {
          
                              dsp_fige=2;//显示设置值
                              eep_da_set[sen_step]++;
                              if(eep_da_set[sen_step]>99)
                              eep_da_set[sen_step]=0;
                            
                         }
                        
                        break;
        
        
        case 0xa0:key=0;    if(eep_changfige==0) 
                            {
                                               
                              if(dsp_fige==3)
                              
                                   dsp_fige=2;
                               
                              else
                                   dsp_fige=3; 
                            }
                       
                         
                         
                        break;
                        
        
       //以上为长按键--------------------------------------- 
        case 0x61:key=0;
                   
                   eep_changfige=eep_changfige^1;
                  
                  if(eep_changfige==1) 
                   {     dsp_fige=0;//显示时间
                         if(Write_data(0xa0,0,eep_da_set,2)==1)
                          ;
                         
                          else 
                          {
                           break;
                          }
                          
                    } 
                  else 
                          { dsp_fige=3;//显示L,H
                          
                          }
                       
                       
                  
                   break;
                   
        case 0xc1:    key=0;
                       if((eep_changfige==0)&&(dsp_fige==2)) 
                        {
          
                              dsp_fige=2;//显示设置值
                              eep_da_set[sen_step]++;
                              if(eep_da_set[sen_step]>99)
                              eep_da_set[sen_step]=0;
                              keydown_fige=keydown_fige&0xfd;
                              key_cont=220;  
                            
                         }
                        
                        break;
                
                   
        
      }
      
      


}
//主函数==========================================

void main(void) 
{asm{
      RSP
      }
 MCU_int();
 //W_data_dir();
  dsp_fige=1;
 
  
//主循环===================

  for(;;) 
  
      { dsp_dir();
        key_dir();
        Bell_dir();
        key_cor();
        dsp_cr(&dsp_fige);
       
       
        __RESET_WATCHDOG(); /* feeds the dog */
      } 
  
  
  
}

⌨️ 快捷键说明

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