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

📄 lx11a.c

📁 一个热水器程序!三星9454单片机
💻 C
📖 第 1 页 / 共 2 页
字号:
        { On_ONOFFKey;}
           

           break;}
      case INCKey:
           {if(ONOFFKey)
           {ArchDATA++;
           if(ArchDATA>9)ArchDATA=9;}
           break;}
      default:
          break;
          }
        
Key_back:
        //ei;
        return;
        } 
        

/* */ 
void Error_check(void)
{ if(Test_Biao_Zi)
      {Error_Bi_zi;
          if(Test_Chao_wen_Bi_zi)
            {Set_Chao_wen_Bi_zi;
             Error_LED_DATA=Error_LED_Chao_wen;
            TemperDATA1=Error_SMG_Chao_wen;
          SMGDATA2=0xe;} //第二位显E 
          else
          {Clr_Chao_wen_Bi_zi;}
          
          if(Test_LO_diang_Bi_zi)
            {Set_LO_diang_Bi_zi;
            Error_LED_DATA=Error_LED_LO_diang; 
            TemperDATA1=Error_SMG_LO_diang; 
          SMGDATA2=0xe;} //第二位显E 
          else
          {Clr_LO_diang_Bi_zi;}
       }
            
      else
      {Ok_Bi_zi;
     SMGDATA2=SMGDATATS_Error_E; } //没有故障第二位显示数据 

   }
   
 
 

   
 uchar E2ZJ(uchar Time2)
   {ZJBZ=1;//自检标志
   ZJSD=~ZJSD;//自检闪灯标志
    Clr_P00;
    
    Clr_P25;
    Delay(Time2); 
    Set_P25;//自检高电平时间 短了 自检不到  长了 自检30R电阻发热
    Delay(Time2); 
    Clr_P25;
    Delay(Time2); 
    Set_P25;//自检高电平时间 短了 自检不到  长了 自检30R电阻发热
    Delay(Time2);     
    Clr_P25;
    Delay(Time2); 
    Set_P25;//自检高电平时间 短了 自检不到  长了 自检30R电阻发热
    Delay(Time2); 

    
    Delay(100);
    

    
    
    if(INT0BZ)
      {E2BJ=0;
       INT0BZ=0;}//有中断清中断标志
      
    else
      {E2BJ=1;}
      
       Set_P00;
       Delay(10);//Delay(5);//3
       Clr_P00;//芯片复位每次有中断后都要复位一次  短了 自检不到  长了 影响漏电检测
       
      
      return(E2BJ);
    }
    
   
 /*    
    
uchar E2ZJ(uchar Time2)
   {ZJBZ=1;//自检标志

    if(INT0BZ)
      {E2BJ=0;}
    else
      {E2BJ=1;}
      
       Set_P00;
       Delay(5);//3
       Clr_P00;//芯片复位每次有中断后都要复位一次  短了 自检不到  长了 影响漏电检测
       
       INT0BZ=0;
      return(E2BJ);
    }
    
   */ 
    
 /* 
void FMQ(uchar NC)
   { 
    while(NC)
       {Set_P23;
        XNDlay2=0;
        while(XNDlay2==0);//蜂鸣器响!!120ms
        {Clr_P23;
        XNDlay3=0;
        while(XNDlay3==0);//蜂鸣器NO响!!6s
        XNDlay3=0;
        XNDlay2=0;} 
        NC--;}
    
      }
   */    
    
/*
*******************************************************************************************
** 函数名称 :iic_DelayNS()
** 函数功能 :长软件延时
** 入口参数 :dly   延时参数,值越大,延时越久
** 出口参数 :无
*******************************************************************************************
*/

void iic_DelayNS (  int dly)
{  int i;
 //di;
    for ( ; dly>0; dly--)
      for (i=0; i<5000; i++);
      //ei;//一定要去掉因为相当于打开中断!!!
        }



/*
*******************************************************************************************
** 函数名称 :iic_DelayNS()
** 函数功能 :长软件延时
** 入口参数 :dly	延时参数,值越大,延时越久
** 出口参数 :无
*******************************************************************************************
*/

void iic_DelayNS2 (  int dly2)
{  int n;
   //di;
    for ( ; dly2>0; dly2--)
      for (n=400; n>0; n--)nop;
      //ei;
        }
        

//*************************************************************************
//***延时子过程***//
//***以MS为单位,fosc=3.2MHZ,nop_cycle=1.25us
void  Delay(uint time)
{
   uchar a; ////temp_sym;
    
    /////////////
    ////temp_sym = SYM;
    ////ei;
    while(time>0)
    {
      a = 123;
      Clr_WatchDog;
      while(a>0)
      {
        nop;
        nop;
        nop;
        nop;
        a--;
      }
      time--;
    }
    ////SYM = temp_sym;
}



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

//******************************************************************
//****启动时IO初始化子过程******
void  chip_init()
{   /**********看门狗值放在T0CNT内可读不可写  如果设了看门狗使能  则中断必须清看门狗值   否则系统将反复复位 ***********/
    BTCON =0xa3; // 0x03;         //Watch-dog disable//最高位为1010即A时则禁止看门狗
    CLKCON  =0x18; //     //selet non-divided CPU clock
    P0PND   =0xf8;//Int0 enable 0x08;//0x0;        int1 enable//P0/INT disable
    P0CONH  =0xaf;//P0.7 is fmq ouput  0x2f;//P0.4andP0.5 is AD convert 0x2b;//0x1b;//0xEB;// 0xdf;       //P0.7input;P0.6is PWM ouput;P0.4 is A/D input//P0.4 P0.7is as A/D convert port
                          //P0.6 is PWM output
                          //P0.5 is as A/D convert port  
                          //P0.4 is as A/D convert port
    P0CONL  = 0xa2;//不能0xa6;带上拉电阻下降沿不行//P00 is Interrupt LOdiang (INT0)! 0xa6;//0xae;//P00 P02 P03 is output;P01 is int1//0xBA;//0xAA;// 0xfa;       //P0.3 is as A/D convert port 
    
    //P0 = 0xff;
    //P2CONL  = 0xaa;         //P20 P21 P22 is Push-pull output;           //P0.2 is as A/D convert port  
                          //P0.0,P0.1 is as push-pull output port 
    //P0 = 0x0;                                 		
    P1CON = 0x0a;//~(P1CON&0xf3);//0xa;          //P1.0 is as push-pull output port  
                          //P1.1 is as push-pull output port 
    P1 = 0xff;
   
    P2CONH =0x3a;//  P2.6 is AD //0x4a P25 is LOdiang zi jian  P2.6 is fmq  0x2a;// 0x7a;//      //P2.0-P2.5 is as push-pull output
    P2CONL = 0xaa;//P20 is LOdiang fu wei  P21 is LED deng  //(0xaa|0x30);        //P2.6 is as A/D input
    P2 =0xff;    
    
    PWMDATA = 0x0; 
    PWMCON = 0x00;//0x5c;        //PWM input clock is fosc/8,enable PWM output
                          //reload from 6 bit coun
    T0DATA =0x40;//0x32;// 0x32;   (1/(3.2MHZ/8))*64=160US
    T0CON =0x8a;//0x4a;//f=fosc/8 TMR0 interrupt /160us!  0x4a;//0xca;//          //TMR0 start count,f=fosc/256
                          //enable TMR0 interrupt/4ms   
}

        
        

/*
void KeyAD(void)
{ uchar AD=0x00; 
 AD=ADcon();
 if(AD==1)
{ iic_DelayNS2(1);    //delay two AD

 AD=ADcon();
 if(AD==1)
  {  if  ((DATAAJ>38)&&(DATAAJ <45)) 
             {if(ONOFF==1)
             LEDcount--;}
           
             
     if  ((DATAAJ>80)&&(DATAAJ <105))
            ONOFF=!ONOFF;
           
             
     if  ((DATAAJ>156)&&(DATAAJ <170))
             {if(ONOFF==1)
             LEDcount++;}
                       
     AD=0x00; 
     DATAAJ=0x00;        
        }}}     
        
*/        
        


        
//*************************************************************************
//**中断向量及服务程序定义********
#pragma vector=0x00
__interrupt void int_9454()//中断只用了T0.且只用来显示刷新!!!
{
 
  /*
  INT1sing=P0PND;
  if((INT1sing&0x04)==0x04)    //(INT1sing&0x04)一定要打括号!!
  {P0PND=0X80;//会改变其他值  有问题!
  INT1AJ=1;//0x01;
  return;}
  */
  
  if(P0PND&0x04)
    {P0PND=P0PND&0xfb;//(P0PND&(~0x01));//清INT0中断标志
     INT0BZ=1;
     Error_LED_DATA=Error_LED_LO_diang;
     if(ZJBZ!=1)//如果没有自检标志 而产生的中断表示有漏电
     {LO=1;}//置漏电标志
     ZJBZ=0;}//清自检标志
     
     
 if(T0CON&0x01)//是否有定时中断
   {T0CON = T0CON & 0xfe;     //必须清T0中断标志
    Clr_WatchDog;
  /*

         if(Test_P26)
         {Clr_P26;}
       else
         {Set_P26;}
           
  */
  

 
     LOOP2_160us=~LOOP2_160us;//蜂鸣器3KHZ左右  T=160US
     
       if(LOOP2_160us==0)
         {Clr_P06;}
       else
         {Set_P06;}
/*********************************自检*******************************************/         
  /*  if(ZJBZ==1) 
       {if(LOOP2_160us==0)
         {Clr_P25;}//自检高电平时间 短了 自检不到  长了 自检30R电阻发热
       else
         {Set_P25;} 
       }
 */   
  
/*****虚拟时间****/
  
    
  T0count++;
  if(T0count<25)return;
  T0count=0x00;
  XNDlay1=1; // T=4ms!!!
  
  
  if(ONOFFKey) 
  {     
   /*****************************注意!! 4MS LED扫描刷新!!刷新时间长了 会闪烁 短了 显示数据不会改变*****************************/
    LOOP1=SMGScan(LOOP1,SMGDATA1,SMGDATA2,SMGDATA3,Error_LED_DATA);//Scan164(DigitCode[SMGDATA1])///LED扫描刷新!!刷新时间长了 会闪烁 短了 显示数据不会改变
/*******************************入口参数多将影响定时时间 奇怪!!!!!且只有把函数放在外部才能编译通过!!!!****************************************/
    if(LOOP1==0x00) LOOP1=0x04;

 }

  
    T0count2++;
  if(T0count2<32)return;//32
  T0count2=0x00;
  XNDlay2=1;
 

     LOOP3_120ms=~LOOP3_120ms;//T=128ms!!!
     
     Clr_P23;
 /*  
  if(E2!=0)
  {Clr_P26;}       
 */
   
   if(E2!=0)
  {Set_P23;
   E2=0;} 
 /**/  
   
 
    
    T0count3++;
  if(T0count3<8)return;
  T0count3=0x00;
  XNDlay3=1;
  
  LOOP4_1s=~LOOP4_1s;////T=1.024s=1s!!!
  
    
Error_LED_DATA=Ok_LED_Ja_re;
    
    
    T0count4++;
  if(T0count4<3)return;
  T0count4=0x00;
  XNDlay4=1;
  
  LOOP5_3s=~LOOP5_3s;////T=3s!!!
  
  
   
   
 //  E2=E2ZJ(8);
 
    //E2=1;//E2ZJ(10);
 
  
    T0count5++;
  if(T0count5<2)return;
  T0count5=0x00;
  XNDlay5=1;
  
  LOOP6_6s=~LOOP6_6s;////T=6s!!!
  

   
 } }
 
 
 


⌨️ 快捷键说明

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