📄 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 + -