?? c8051f021.c
字號:
if (menu==0)
{
switch (fcount)
{
case 0:
{
fun1=1;
clrp_disp();
clrram();
f1disp();
break;
}
case 1:
{
clrp_disp();
clrram();
chn_disp (tab1);
con_disp (0xff,0xff,0x80,0x80,8,16); //顯示光條
break;
}
case 2:
{
clrp_disp();
clrram();
chn_disp (tab4);
con_disp (0xff,0xff,0x80,0x80,8,16); //顯示光條
break;
}
case 3:
{
fun4=1;
clrp_disp();
clrram();
f4disp();
break;
}
case 4:
{
clrp_disp();
clrram();
chns_disp (tab8);
flashwr();
break;
}
}
}
else if (meda==0&&mepw==0)
{
switch(fcount)
{
case 1:
{
meda=1;
fun2=1;
clrp_disp();
clrram();
f2disp();
break;
}
case 2:
{
mepw=1;
fun3=1;
clrp_disp();
clrram();
f3disp();
break;
}
}
}
menu=1;
}
/*----------------KEY2加鍵響應子程序-----------------------*/
void key2(void)
{
if (menu==0)
{
clrp_disp();
fcount-=1;
if (fcount==255) //uchar 型的數據由0減1后為255
{
fcount=4;
}
switch(fcount)
{
case 0:con_disp (0xff,0xff,0x80,0x80,8,16);break; //第一行顯示光條
case 1:con_disp (0xff,0xff,0x90,0x90,8,16);break; //第二行顯示光條
case 2:con_disp (0xff,0xff,0x88,0x80,8,16);break; //第三行顯示光條
case 3:chn_disp (tabme);con_disp (0xff,0xff,0x98,0x90,8,16);break; //第四行顯示光條
case 4: //菜單換頁,第四行顯示光條
{
chn_disp (tabmes);
con_disp (0xff,0xff,0x98,0x90,8,16);
break;
}
}
}
else if (meda==0&&mepw==0)
{
switch (fcount)
{
case 1:
{
clrp_disp();
f2count-=1;
if (f2count==255)
{
f2count=1;
}
switch(f2count)
{
case 0:con_disp (0xff,0xff,0x80,0x80,8,16);break; //第一行顯示光條
case 1:con_disp (0xff,0xff,0x90,0x90,8,16);break; //第二行顯示光條
}
break;
}
case 2:
{
clrp_disp();
f3count-=1;
if (f3count==255)
{
f3count=1;
}
switch(f3count)
{
case 0:con_disp (0xff,0xff,0x80,0x80,8,16);break; //第一行顯示光條
case 1:con_disp (0xff,0xff,0x90,0x90,8,16);break; //第二行顯示光條
}
break;
}
}
}
else
{
switch(fcount)
{
case 1:
{
if (topsi==0)
{
k2count++;
if (k2count==0x40)
{
instd=5;
incount=5;
}
else if (k2count==0x80)
{
instd=1;
incount=1;
topsi=1;
}
}
switch (f2count)
{
case 0:
{
if (incount==instd)
{
incount=0;
bcda4(danum0,0,0,0,1);
}
if (danum0[0]==1&&danum0[3]==1) //過10.00則清為00.00
{
danum0[0]=0x00;
danum0[1]=0;
danum0[2]=0;
danum0[3]=0;
}
break;
}
case 1:
{
if (incount==instd)
{
incount=0;
bcda4(danum1,0,0,0,1);
}
if (danum1[0]==1&&danum1[3]==1) //過10.00則清為00.00
{
danum1[0]=0;
danum1[1]=0;
danum1[2]=0;
danum1[3]=0;
}
break;
}
}
incount++;
break;
}
case 2:
{
if (topsi==0)
{
k2count++;
if (k2count==0x40)
{
instd=5;
incount=5;
}
else if (k2count==0x80)
{
instd=1;
incount=1;
topsi=1;
}
}
switch (f3count)
{
case 0:
{
if (incount==instd)
{
incount=0;
bcda4(pwnum0,0,0,0,1);
}
if (pwnum0[0]==1&&pwnum0[3]==1) //過10.00則清為00.00
{
pwnum0[0]=0;
pwnum0[1]=0;
pwnum0[2]=0;
pwnum0[3]=0;
}
break;
}
case 1:
{
if (incount==instd)
{
incount=0;
bcda4(pwnum1,0,0,0,1);
}
if (pwnum1[0]==1&&pwnum1[3]==1) //過10.00則清為00.00
{
pwnum1[0]=0;
pwnum1[1]=0;
pwnum1[2]=0;
pwnum1[3]=0;
}
break;
}
}
incount++;
break;
}
}
}
}
/*----------------KEY4減鍵響應子程序-----------------------*/
void key4(void)
{
switch(fcount)
{
case 1:
{
if (topsd==0)
{
k4count++;
if (k4count==0x40)
{
destd=5;
decount=5;
}
else if (k4count==0x80)
{
destd=1;
decount=1;
topsd=1;
}
}
switch (f2count)
{
case 0:
{
if (decount==destd)
{
decount=0;
bcds4(danum0,0,0,0,1);
}
if (danum0[0]==9&&danum0[1]==9&&danum0[2]==9&&danum0[3]==9) //小于00.00則為10.00
{
danum0[0]=1;
danum0[1]=0;
danum0[2]=0;
danum0[3]=0;
}
break;
}
case 1:
{
if (decount==destd)
{
decount=0;
bcds4(danum1,0,0,0,1);
}
if (danum1[0]==9&&danum1[1]==9&&danum1[2]==9&&danum1[3]==9) //小于00.00則為10.00
{
danum1[0]=1;
danum1[1]=0;
danum1[2]=0;
danum1[3]=0;
}
break;
}
}
decount++;
break;
}
case 2:
{
if (topsd==0)
{
k4count++;
if (k4count==0x40)
{
destd=5;
decount=5;
}
else if (k4count==0x80)
{
destd=1;
decount=1;
topsd=1;
}
}
switch (f3count)
{
case 0:
{
if (decount==destd)
{
decount=0;
bcds4(pwnum0,0,0,0,1);
}
if (pwnum0[0]==9&&pwnum0[1]==9&&pwnum0[2]==9&&pwnum0[3]==9) //小于00.00則為10.00
{
pwnum0[0]=1;
pwnum0[1]=0;
pwnum0[2]=0;
pwnum0[3]=0;
}
break;
}
case 1:
{
if (decount==destd)
{
decount=0;
bcds4(pwnum1,0,0,0,1);
}
if (pwnum1[0]==9&&pwnum1[1]==9&&pwnum1[2]==9&&pwnum1[3]==9) //小于00.00則為10.00
{
pwnum1[0]=1;
pwnum1[1]=0;
pwnum1[2]=0;
pwnum1[3]=0;
}
break;
}
}
decount++;
break;
}
}
}
/*----------------按鍵響應-----------------------*/
void keyans(void)
{
if (k1==1)
{
ring();
key1();
k1t=0;
k1=0;
}
if (k2==1)
{
if (key2r==0)
{
key2r=1;
ring();
}
key2();
k2=0;
}
if (k3==1)
{
ring();
key3();
k3t=0;
k3=0;
}
if (k4==1)
{
if (key4r==0)
{
key4r=1;
ring();
}
key4();
k4=0;
}
}
/*---------------蜂鳴子程序------------------------*/
void ring()
{
p15=0;
delay1(5000);
p15=1;
}
/*---------------功能一AD子程序------------------------*/
void adfun()
{ //在AIN0.0和AIN0.1之間交替轉換
uint ad0ui=0;
unsigned long int ad0n=0;
if (adsel==0) //一路
{
AMX0SL=0x00;
AMX0CF=0x00;
}
else if (adsel==3) //二路
{
AMX0SL=0x01;
AMX0CF=0x00;
}
adsel++;
if (adsel==6)
{
adsel=0;
}
AD0INT=0;
AD0BUSY=1;
while (!AD0INT);
AD0INT=0;
if (adsel==2) //一路
{
ad0ui=ADC0H*256+ADC0L;
adres0=filter(adf0,10,ad0ui,adres0);
ad0n=adres0;
ad0n*=12258;
adnum0[0]=ad0n/10000000;
adnum0[1]=ad0n/1000000-adnum0[0]*10;
adnum0[2]=ad0n/100000-adnum0[1]*10-adnum0[0]*100;
}
else if (adsel==5)
{
ad0ui=ADC0H*256+ADC0L;
adres1=filter(adf1,10,ad0ui,adres1);
ad0n=adres1;
ad0n*=12258;
adnum1[0]=ad0n/10000000;
adnum1[1]=ad0n/1000000-adnum1[0]*10;
adnum1[2]=ad0n/100000-adnum1[1]*10-adnum1[0]*100;
}
}
/*---------------濾波子程序------------------------*/
uint filter(uint *a,uchar x,uint m,uint last) //濾波,先遞推,再求去掉最大最小值后的平均值,然后把平均值和上次的結果再平均
{ //濾波結果作為返回值.a為存儲數組(uint),x為數組元素個數,m為新的數據
unsigned long int avr=0;
uint max,min;
max=0;
min=0;
ditui(a,x,m);
avr=sumarr(a,x);
mami(a,x,&max,&min);
avr-=max;
avr-=min;
avr/=(x-2);
avr+=last;
avr/=2;
return avr;
}
void ditui(uint *b,uchar i,uint n) //遞推子程序.b為存儲數組(uint),i為數組元素個數,n為新的數據
{
uchar j;
for (j=1;j<i;j++)
{
b[j-1]=b[j];
}
b[i-1]=n;
}
unsigned long int sumarr(uint *b,uchar i) //uint數組求和,i為元素個數,和作為返回值
{
uchar j=0;
unsigned long int sum=0;
for (j=0;j<i;j++)
{
sum+=b[j];
}
return sum;
}
void mami(uint *b,uchar i,uint *ma,uint *mi) //求最大最小值子程序.b為數組,i為元素個數,ma為指向最大值的指針,mi同理
{
uchar j=0;
*ma=b[0];
*mi=b[0];
for (j=1;j<i;j++)
{
if (b[j]>(*ma))
{
*ma=b[j];
}
if (b[j]<(*mi))
{
*mi=b[j];
}
}
}
/*---------------功能二DA子程序------------------------*/
void dafun()
{
unsigned long int da0re,da1re;
da0re=0;
da1re=0;
da0re=bcdhb(danum0,4);
da1re=bcdhb(danum1,4);
da0re*=4095;
da0re/=1000;
da1re*=4095;
da1re/=1000;
da0re=(uint)da0re;
da1re=(uint)da1re;
DAC0L=da0re&0x00ff;
DAC0H=da0re>>8;
DAC1L=da1re&0x00ff;
DAC1H=da1re>>8;
}
/*---------------功能三PWM子程序------------------------*/
void pwm0fun() //CEX0功能子程序
{
/*if (pwnum0[0]==1)
{
pwpr0[0]=9;
pwpr0[1]=9;
pwpr0[2]=9;
pwpr0[3]=9;
}
else
{
pwpr0[0]=pwnum0[1];
pwpr0[1]=pwnum0[2];
pwpr0[2]=pwnum0[3];
pwpr0[3]=0;
}*/
unsigned long int pw0re;
pw0re=bcdhb(pwnum0,4);
pw0re=1000-pw0re;
pw0re*=65536;
pw0re/=1000;
pwcp0l=pw0re&0x00ff;
pwcp0h=pw0re>>8;
}
void pwm1fun() //CEX1功能子程序
{
unsigned long int pw1re;
/*if (pwnum1[0]==1)
{
pwpr1[0]=9;
pwpr1[1]=9;
pwpr1[2]=9;
pwpr1[3]=9;
}
else
{
pwpr1[0]=pwnum1[1];
pwpr1[1]=pwnum1[2];
pwpr1[2]=pwnum1[3];
pwpr1[3]=0;
}*/
pw1re=bcdhb(pwnum1,4);
pw1re=1000-pw1re;
pw1re*=65536;
pw1re/=1000;
pwcp1l=pw1re&0x00ff;
pwcp1h=pw1re>>8;
}
/*---------------功能五參數存儲子程序(存儲在FLASH中128B的數據存儲器中)------------------------*/
void flashre(void) //參數讀子程序
{
uchar code *pread=0x0000;
uchar i=0;
EA=0;
PSCTL|=0x04;
for(i=0;i<4;i++) //讀入danum0
{
danum0[i]=*pread;
pread++;
}
for(i=0;i<4;i++) //讀入danum1
{
danum1[i]=*pread;
pread++;
}
for(i=0;i<4;i++) //讀入pwnum0
{
pwnum0[i]=*pread;
pread++;
}
for(i=0;i<4;i++) //讀入pwnum1
{
pwnum1[i]=*pread;
pread++;
}
PSCTL&=0xfb;
EA=1;
}
void flashwr(void) //參數寫子程序
{
uchar xdata *pwrite=0x0000;
uchar i=0;
EA=0;
FLSCL|=0x01; //置位FLWE
PSCTL|=0x07; //將SFLE,PSEE,PSWE置1
*pwrite=0; //擦除
PSCTL&=0xfd; //將PSEE清0,禁止擦除
for(i=0;i<4;i++) //寫入danum0
{
*pwrite=danum0[i];
pwrite++;
}
for(i=0;i<4;i++) //寫入danum1
{
*pwrite=danum1[i];
pwrite++;
}
for(i=0;i<4;i++) //寫入pwnum0
{
*pwrite=pwnum0[i];
pwrite++;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -