📄 light_232_11.c
字号:
#pragma DEBUG CODE
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
#define x_th0 0xfe
#define x_tl0 0xd3
#define x_th1 0xfd
#define x_tl1 0xfd
sbit ad_star=P3^7;
sbit ad_end=P3^6;
sbit out_4=P1^4;
sbit out_5=P1^5;
sbit out_6=P1^6;
sbit out_7=P1^7;
bit adchange,starad;
bit out_flag,re_ok;
unsigned int data addelay,lastplus;
unsigned char data outdata,addata,step;
unsigned char data lastdata[10];
unsigned char data recbuff[12];
unsigned char data sendbuff[12];
unsigned char code lighttab[17]={1,2,4,7,10,14,19,25,32,40,50,65,85,110,140,180,251};
unsigned char code checktab[16]={2,4,7,11,16,21,28,36,45,55,68,86,110,140,180,255};
//unsigned char code outtab[16]={56,46,37,29,22,16,11,7,4,2,1,0,0,0,0,0};
unsigned char code outtab[16]={56,46,37,29,23,19,15,12,9,7,5,4,3,2,1,0};
//unsigned char code outtab[16]={63,59,55,51,47,43,39,35,31,27,23,19,15,11,7,3,0};
void serial(void) interrupt 4 using 1
{ if(RI)
{
RI=0;
recbuff[step]=SBUF;
step++;
if(step==12)
{
step=0;
re_ok=1;
}
}
else
{
TI=0;
}
}
void sendbyte(uchar x)
{ ES=0;
TI=0;
SBUF=x;
do{}
while(!TI);
TI=0;
ES=1;
}
void sendlight(void)
{ unsigned char i;
sendbuff[3]=outtab[outdata];
sendbuff[7]=sendbuff[3];
sendbuff[11]=sendbuff[3];
for(i=0;i<12;i++)
{
sendbyte(sendbuff[i]);
}
}
void t0_p(void) interrupt 1 using 0
{ TL0=0x6f;
TH0=0xfe;
if(adchange)
{
ad_star=1;
addata+=2;
}
else
{
ad_star=0;
if(addelay)
addelay--;
else
{
addelay=2000;
starad=1;
ad_star=1;
}
}
}
unsigned char getlightdata(void)
{unsigned char i,j;
unsigned int plus=0;
/* for(i=0;i<16;i++)
{
if(addata<lighttab[i+1])
break;
}
addata=lighttab[i];
for(i=0;i<9;i++)
{lastdata[i]=lastdata[i+1];
plus+=lastdata[i];
}
lastdata[9]=addata;
plus+=addata;
j=plus/10;
for(i=0;i<16;i++)
{
if(j<checktab[i])
break;
}
return i; */
for(j=0;j<16;j++)
{
if(addata<checktab[j])
break;
}
for(i=0;i<9;i++)
{lastdata[i]=lastdata[i+1];
plus+=lastdata[i];
}
lastdata[9]=j;
plus+=j;
return(plus/10);
}
void change(void)
{ adchange=1;
addata=0;
do{}
while(!ad_end&&addata<200);
adchange=0;
outdata=15-getlightdata();
ad_star=0;
out_flag=1;
}
void init(void)
{
unsigned char i;
TMOD=0x21;
TH0=x_th0;TL0=x_tl0;
TH1=x_th1;TL1=x_tl1;
PCON=0x00;SCON=0x50;
TR0=1;ET0=1;
TR1=1;ET1=0;
ES=1;
EA=1;
starad=0;
adchange=0;
addata=0;
ad_star=0;
outdata=6;
out_flag=1;
change();
addelay=3000;
for(i=0;i<10;i++)
{lastdata[i]=addata;
}
sendbuff[0]=0xd8;
sendbuff[1]=0x4a;
sendbuff[2]=0xd0;
sendbuff[4]=0xd8;
sendbuff[5]=0x4b;
sendbuff[6]=0xd0;
sendbuff[8]=0xd8;
sendbuff[9]=0x4c;
sendbuff[10]=0xd0;
}
void main(void)
{ init();
for(;;)
{ if (starad)
{
starad=0;
change();
}
if(out_flag)
{
sendlight();
out_4=outdata&1;
out_5=outdata&2;
out_6=outdata&4;
out_7=outdata&8;
out_flag=0;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -