?? lx11a.c
字號:
{ 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 + -