📄 p_drive.c
字号:
#include "dport.h"
#include <reg51.h>
uint8 ch_pwm[21]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
uint8 ch1_pwm_ctr[21];
uint8 t0_counter=31;
uint8 t1_counter=0;
uint8 l=0;
uint8 m=0;
uint8 n=0;
uint8 rpt2=0;
uint8 s[21]={1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1};
uint8 sig[21]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
void pwm_update(void);
void Tmr_Init(void)
{IP=0;
IPH=0;
TMOD=0x11;
TCON=0x50;
TH0=0xfc;
TL0=0x17;
TH1=0xF8;
TL1=0x2f;
EA=1;
ET1=1;
ET0=1;
}
void port_set(void)
{ uint8 k=0;
for(k=0;k<21;k++)
{
if(ch1_pwm_ctr[k]!=0)
{switch(k)
{case 0:
ch0=1;
break;
case 1:
ch1=1;
break;
case 2:
ch2=1;
break;
case 3:
ch3=1;
break;
case 4:
ch4=1;
break;
case 5:
ch5=1;
break;
case 6:
ch6=1;
break;
case 7:
ch7=1;
break;
case 8:
ch8=1;
break;
case 9:
ch9=1;
break;
case 10:
ch10=1;
break;
case 11:
ch11=1;
break;
case 12:
ch12=1;
break;
case 13:
ch13=1;
break;
case 14:
ch14=1;
break;
case 15:
ch15=1;
break;
case 16:
ch16=1;
break;
case 17:
ch17=1;
break;
case 18:
ch18=1;
break;
case 19:
ch19=1;
break;
case 20:
ch20=1;
}
}
}}
void port_clr(void)
{ uint8 k=0;
for(k=0;k<21;k++)
{
if(ch1_pwm_ctr[k]==0)
{switch(k)
{case 0:
ch0=0;
break;
case 1:
ch1=0;
break;
case 2:
ch2=0;
break;
case 3:
ch3=0;
break;
case 4:
ch4=0;
break;
case 5:
ch5=0;
break;
case 6:
ch6=0;
break;
case 7:
ch7=0;
break;
case 8:
ch8=0;
break;
case 9:
ch9=0;
break;
case 10:
ch10=0;
break;
case 11:
ch11=0;
break;
case 12:
ch12=0;
break;
case 13:
ch13=0;
break;
case 14:
ch14=0;
break;
case 15:
ch15=0;
break;
case 16:
ch16=0;
break;
case 17:
ch17=0;
break;
case 18:
ch18=0;
break;
case 19:
ch19=0;
break;
case 20:
ch20=0;
}
}
}}
void Timer0_Interrupt(void) interrupt 1
{ uint8 i=0;
TH0=0xfc;
TL0=0x17;
t0_counter++;
if(t0_counter==32)
{t0_counter=0;
for(i=0;i<21;i++)
{ch1_pwm_ctr[i]=ch_pwm[i];
}
P1=0;
P2=0;
P3=0;
port_set();
}
else
{for(i=0;i<21;i++)
{if(ch1_pwm_ctr[i]!=0)
ch1_pwm_ctr[i]--;
}
port_clr();
}
}
void Timer1_Interrupt(void) interrupt 4
{ uint8 j=0;
TH1=0xF8;
TL1=0x2f;
t1_counter++;
if(t1_counter==30)
{ t1_counter=0;
pwm_update();
/*for(j=0;j<21;j++)
{ch_pwm[j]--;
if(ch_pwm[j]==0)
ch_pwm[j]=6;
} */
}
}
void pwm_update(void)
{ uint8 rpt=0;
uint8 rpt1=0;
if(n>=0&s[0])
{sig[0]++;
if(sig[0]<=12)
{
ch_pwm[0]=31;
if(sig[0]==3)
n++;
}
else if(ch_pwm[0]!=0)
{ if(ch_pwm[0]>=17)
{for(rpt=0;rpt<5;rpt++)
ch_pwm[0]--;
}
else if(ch_pwm[0]<17)
{ch_pwm[0]--;
if(ch_pwm[0]==0)
{s[0]=0;sig[0]=0;}
}
}
}
if(n>=1&s[1])
{sig[1]++;
if(sig[1]<=12)
{
ch_pwm[1]=31;
if(sig[1]==3)
n++;
}
else if(ch_pwm[1]!=0)
{ if(ch_pwm[1]>=17)
{for(rpt=0;rpt<5;rpt++)
ch_pwm[1]--;
}
else if(ch_pwm[1]<17)
{ch_pwm[1]--;
if(ch_pwm[1]==0)
{s[1]=0;sig[1]=0;}
}
}
}
if(n>=2&s[2])
{sig[2]++;
if(sig[2]<=12)
{
ch_pwm[2]=31;
if(sig[2]==3)
n++;
}
else if(ch_pwm[2]!=0)
{ if(ch_pwm[2]>=17)
{for(rpt=0;rpt<5;rpt++)
ch_pwm[2]--;
}
else if(ch_pwm[2]<17)
{ch_pwm[2]--;
if(ch_pwm[2]==0)
{s[2]=0;sig[2]=0;}
}
}
}
if(n>=3&s[3])
{sig[3]++;
if(sig[3]<=12)
{
ch_pwm[3]=31;
if(sig[3]==3)
n++;
}
else if(ch_pwm[3]!=0)
{ if(ch_pwm[3]>=17)
{for(rpt=0;rpt<5;rpt++)
ch_pwm[3]--;
}
else if(ch_pwm[3]<17)
{ch_pwm[3]--;
if(ch_pwm[3]==0)
{s[3]=0;sig[3]=0;}
}
}
}
if(n>=4&s[4])
{sig[4]++;
if(sig[4]<=12)
{
ch_pwm[4]=31;
if(sig[4]==3)
n++;
}
else if(ch_pwm[4]!=0)
{ if(ch_pwm[4]>=17)
{for(rpt=0;rpt<5;rpt++)
ch_pwm[4]--;
}
else if(ch_pwm[4]<17)
{ch_pwm[4]--;
if(ch_pwm[4]==0)
{s[4]=0;sig[4]=0;}
}
}
}
if(n>=5&s[5])
{sig[5]++;
if(sig[5]<=12)
{
ch_pwm[5]=31;
if(sig[5]==3)
n++;
}
else if(ch_pwm[5]!=0)
{ if(ch_pwm[5]>=17)
{for(rpt=0;rpt<5;rpt++)
ch_pwm[5]--;
}
else if(ch_pwm[5]<17)
{ch_pwm[5]--;
if(ch_pwm[5]==0)
{s[5]=0;sig[5]=0;}
}
}
}
if(n>=6&s[6])
{sig[6]++;
if(sig[6]<=12)
{
ch_pwm[6]=31;
if(sig[6]==3)
n++;
}
else if(ch_pwm[6]!=0)
{ if(ch_pwm[6]>=17)
{for(rpt=0;rpt<5;rpt++)
ch_pwm[6]--;
}
else if(ch_pwm[6]<17)
{ch_pwm[6]--;
if(ch_pwm[6]==0)
{s[6]=0;sig[6]=0;}
}
}
}
if(n>=7&s[7])
{sig[7]++;
if(sig[7]<=12)
{
ch_pwm[7]=31;
if(sig[7]==3)
n++;
}
else if(ch_pwm[7]!=0)
{ if(ch_pwm[7]>=17)
{for(rpt=0;rpt<5;rpt++)
ch_pwm[7]--;
}
else if(ch_pwm[7]<17)
{ch_pwm[7]--;
if(ch_pwm[7]==0)
{s[7]=0;sig[7]=0;}
}
}
}
if(n>=8&s[8])
{sig[8]++;
if(sig[8]<=12)
{
ch_pwm[8]=31;
if(sig[8]==3)
n++;
}
else if(ch_pwm[8]!=0)
{ if(ch_pwm[8]>=17)
{for(rpt=0;rpt<5;rpt++)
ch_pwm[8]--;
}
else if(ch_pwm[8]<17)
{ch_pwm[8]--;
if(ch_pwm[8]==0)
{s[8]=0;sig[8]=0;}
}
}
}
if(n>=9&s[9])
{sig[9]++;
if(sig[9]<=12)
{
ch_pwm[9]=31;
if(sig[9]==3)
n++;
}
else if(ch_pwm[9]!=0)
{ if(ch_pwm[9]>=17)
{for(rpt=0;rpt<5;rpt++)
ch_pwm[9]--;
}
else if(ch_pwm[9]<17)
{ch_pwm[9]--;
if(ch_pwm[9]==0)
{s[9]=0;sig[9]=0;}
}
}
}
if(n>=10&s[10])
{sig[10]++;
if(sig[10]<=12)
{
ch_pwm[10]=31;
if(sig[10]==3)
n++;
}
else if(ch_pwm[10]!=0)
{ if(ch_pwm[10]>=17)
{for(rpt=0;rpt<5;rpt++)
ch_pwm[10]--;
}
else if(ch_pwm[10]<17)
{ch_pwm[10]--;
if(ch_pwm[10]==0)
{s[10]=0;sig[10]=0;}
}
}
}
if(n>=11&s[11])
{sig[11]++;
if(sig[11]<=12)
{
ch_pwm[11]=31;
if(sig[11]==3)
n++;
}
else if(ch_pwm[11]!=0)
{ if(ch_pwm[11]>=17)
{for(rpt=0;rpt<5;rpt++)
ch_pwm[11]--;
}
else if(ch_pwm[11]<17)
{ch_pwm[11]--;
if(ch_pwm[11]==0)
{s[11]=0;sig[11]=0;}
}
}
}
if(n>=12&s[12])
{sig[12]++;
if(sig[12]<=12)
{
ch_pwm[12]=31;
if(sig[12]==3)
n++;
}
else if(ch_pwm[12]!=0)
{ if(ch_pwm[12]>=17)
{for(rpt=0;rpt<5;rpt++)
ch_pwm[12]--;
}
else if(ch_pwm[12]<17)
{ch_pwm[12]--;
if(ch_pwm[12]==0)
{s[12]=0;sig[12]=0;}
}
}
}
if(n>=13&s[13])
{sig[13]++;
if(sig[13]<=12)
{
ch_pwm[13]=31;
if(sig[13]==3)
n++;
}
else if(ch_pwm[13]!=0)
{ if(ch_pwm[13]>=17)
{for(rpt=0;rpt<5;rpt++)
ch_pwm[13]--;
}
else if(ch_pwm[13]<17)
{ch_pwm[13]--;
if(ch_pwm[13]==0)
{s[13]=0;sig[13]=0;}
}
}
}
if(n>=14&s[14])
{sig[14]++;
if(sig[14]<=12)
{
ch_pwm[14]=31;
if(sig[14]==3)
n++;
}
else if(ch_pwm[14]!=0)
{ if(ch_pwm[14]>=17)
{for(rpt=0;rpt<5;rpt++)
ch_pwm[14]--;
}
else if(ch_pwm[14]<17)
{ch_pwm[14]--;
if(ch_pwm[14]==0)
{s[14]=0;sig[14]=0;}
}
}
}
if(n>=15&s[15])
{sig[15]++;
if(sig[15]<=12)
{
ch_pwm[15]=31;
if(sig[15]==3)
n++;
}
else if(ch_pwm[15]!=0)
{ if(ch_pwm[15]>=17)
{for(rpt=0;rpt<5;rpt++)
ch_pwm[15]--;
}
else if(ch_pwm[15]<17)
{ch_pwm[15]--;
if(ch_pwm[15]==0)
{s[15]=0;sig[15]=0;}
}
}
}
if(n>=16&s[16])
{sig[16]++;
if(sig[16]<=12)
{
ch_pwm[16]=31;
if(sig[16]==3)
n++;
}
else if(ch_pwm[16]!=0)
{ if(ch_pwm[16]>=17)
{for(rpt=0;rpt<5;rpt++)
ch_pwm[16]--;
}
else if(ch_pwm[16]<17)
{ch_pwm[16]--;
if(ch_pwm[16]==0)
{s[16]=0;sig[16]=0;}
}
}
}
if(n>=17&s[17])
{sig[17]++;
if(sig[17]<=12)
{
ch_pwm[17]=31;
if(sig[17]==3)
n++;
}
else if(ch_pwm[17]!=0)
{ if(ch_pwm[17]>=17)
{for(rpt1=0;rpt1<5;rpt1++)
ch_pwm[17]--;
}
else if(ch_pwm[17]<17)
{ch_pwm[17]--;
if(ch_pwm[17]==0)
{s[17]=0;sig[17]=0;}
}
}
}
if(n>=18&s[18])
{sig[18]++;
if(sig[18]<=12)
{
ch_pwm[18]=31;
if(sig[18]==3)
n++;
}
else if(ch_pwm[18]!=0)
{ if(ch_pwm[18]>=17)
{for(rpt1=0;rpt1<5;rpt1++)
ch_pwm[18]--;
}
else if(ch_pwm[18]<17)
{ch_pwm[18]--;
if(ch_pwm[18]==0)
{s[18]=0;sig[18]=0;}
}
}
}
if(n>=19&s[19])
{sig[19]++;
if(sig[19]<=12)
{
ch_pwm[19]=31;
if(sig[19]==3)
n++;
}
else if(ch_pwm[19]!=0)
{ if(ch_pwm[19]>=17)
{for(rpt=0;rpt<5;rpt++)
ch_pwm[19]--;
}
else if(ch_pwm[19]<17)
{ch_pwm[19]--;
if(ch_pwm[19]==0)
{s[19]=0;sig[19]=0;}
}
}
}
if(n>=20&s[20])
{sig[20]++;
if(sig[20]<=12)
{
ch_pwm[20]=31;
if(sig[20]==3)
n++;
}
else if(ch_pwm[20]!=0)
{ if(ch_pwm[20]>=17)
{for(rpt=0;rpt<5;rpt++)
ch_pwm[20]--;
}
else if(ch_pwm[20]<17)
{ch_pwm[20]--;
if(ch_pwm[20]==0)
{s[20]=0;rpt2=0;sig[20]=0;}
}
}
}
if(n>=21)
{rpt2++;
if(rpt2==60)
{m=0;n=0;l=0;
for(rpt=0;rpt<21;rpt++)
s[rpt]=1;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -