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

📄 solar.txt

📁 本程序实现两路数据采集
💻 TXT
字号:
#include<pic.h>
unsigned int rt,time=4;
unsigned char i,j,y,pt;
unsigned char a[5],b[5],c[5],d[5],x[5];
unsigned char ad0,ad1,ad2,ad3;
void delay()
{
unsigned char l;//延时100us
for(l=100;l>0;l--);
}
void dly()
{
unsigned int l;//延时50ms
for(l=1000;l>0;l--);
}

char aver(char x[5])
{
char m;
char aver;
int sum=x[0];
for(m=1;m<5;m++)
sum=sum+x[m];
aver=sum/5;
return(aver);
}

void adchang1()
{
for(i=0;i<5;i++)
{
ADCON0=0b01000001;delay();
ADGO=1;
wait0:
if(ADIF==0)goto wait0;
a[i]=ADRESH;ADIF=0;
ADCON0=0b01001001;delay();
ADGO=1;
wait1:
if(ADIF==0)goto wait1;
b[i]=ADRESH;ADIF=0;
}
ad0=aver(a);
ad1=aver(b);
}

void adchang2()
{
for(j=0;j<5;j++)
{
ADCON0=0b01010001;delay();
ADGO=1;
wait2:
if(ADIF==0)goto wait2;
c[j]=ADRESH;ADIF=0;
ADCON0=0b01011001;delay();
ADGO=1;
wait3:
if(ADIF==0)goto wait3;
d[j]=ADRESH;ADIF=0;
}
ad2=aver(c);
ad3=aver(d);
}

void dianji1(int rt1)
{
int n1;
for(n1=0;n1<rt1;n1++)
{
if(pt==1)
{
PORTB=0x30;//PORTC=0xf0;
dly();
PORTB=0x60;//PORTC=0x70;
dly();
PORTB=0xc0;//PORTC=0x30;
dly();
PORTB=0x90;//PORTC=0x10;
dly();
}
else
{
PORTB=0x90;//PORTC=0x10;
dly();
PORTB=0xc0;//PORTC=0x30;
dly();
PORTB=0x60;//PORTC=0x70;
dly();
PORTB=0x30;//PORTC=0xf0;
dly();
}
}
PORTB=0;
}
void dianji2(int rt2)
{
int n2;
for(n2=0;n2<rt2;n2++)
{
if(pt==1)
{
PORTC=0x30;//PORTC=0xf0;
dly();
PORTC=0x60;//PORTC=0x70;
dly();
PORTC=0xc0;//PORTC=0x30;
dly();
PORTC=0x90;//PORTC=0x10;
dly();
}
else
{
PORTC=0x90;//PORTC=0x10;
dly();
PORTC=0xc0;//PORTC=0x30;
dly();
PORTC=0x60;//PORTC=0x70;
dly();
PORTC=0x30;//PORTC=0xf0;
dly();
}
}
PORTB=0;
}

void dongxi(char adv0,char adv1)
{
//if((adv1-0x03)<adv0<(adv1+0x03))goto loop2;
if(adv0>adv1)
{
loop1:
pt=1;
dianji1(300);
adchang1();
if((ad1-0x03)<=ad0<=(ad1+0x03))goto loop2;
else
if(ad0>ad1)goto loop1;
else 
{pt=0;dianji1(200);
}
adchang1();
if(ad0>ad1+0x03) 
{pt=1;dianji1(100);}
else
goto loop2;
}

if(adv0<adv1)
{
loop3:
pt=0;
dianji1(300);
adchang1();
if((ad1-0x03)<=ad0<=(ad1+0x03))goto loop2;
else
if(ad0<ad1)goto loop3;
else 
{pt=1;dianji1(200);
}
adchang1();
if(ad1>ad0+0x03) 
{pt=0;dianji1(100);}
}
loop2:
return;
}

void nanbei(char adv2,char adv3)
{
if((adv3-0x03)<adv2<(adv3+0x03))goto lop2;
if(adv2>adv3)
{
lop1:
pt=1;
dianji2(300);
adchang2();
if((ad3-0x03)<=ad2<=(ad3+0x03))goto lop2;
else
if(ad2>ad3)goto lop1;
else 
{pt=0;dianji2(200);
}
adchang2();
if(ad2>ad3+0x03) 
{pt=1;dianji2(100);}
else
goto lop2;
}

if(adv2<adv3)
{
lop3:
pt=0;
dianji2(300);
adchang2();
if((ad3-0x03)<=ad2<=(ad3+0x03))goto lop2;
else
if(adv2<adv3)goto lop3;
else 
{pt=1;dianji2(200);
}
adchang2();
if(ad3>ad2+0x03) 
{pt=0;dianji2(100);}
}
lop2:
return;
}


void out()
{
PORTC=0x30;
if(ad0<0x33&&ad1<0x33&&ad2<0x33&&ad3<0x33)PORTB=0;
else
{
dongxi(ad0,ad1);
//nanbei(ad2,ad3);
}
}
void interrupt tmr1()
{
if(y<time)y++;
else
{
y=0;
adchang1();
adchang2();
out();
}
TMR1H=0x80;TMR1L=0;
TMR1IF=0;
}

void initial()
{
TRISA=0xFF;ADCON1=0;
TRISB=0;PORTB=0xff;//输出口
TRISC=0;PORTC=0xf0;//输出口
TMR1ON=0;
TMR1H=0x80;TMR1L=0;
T1CON=0B00001110;
INTCON=0;PIR1=0;PIR2=0;PIE1=0;PIE2=0;
TMR1IE=1;TMR1IF=0;PEIE=1;GIE=1;
}

main()
{
initial();
TMR1ON=1;
loop:
asm("sleep");
asm("nop");
goto loop;
}

⌨️ 快捷键说明

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