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

📄 light_232_11.c

📁 利用2051的AD转换+光敏电阻做成的16级简单亮度检测
💻 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 + -