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

📄 tcs230.c

📁 51单片连tcs230的源程序
💻 C
字号:
#define uchar unsigned char
#include <reg52.h>
#include<math.h>
sbit S0=P1^7;
sbit S1=P1^0;           //端口定义
sbit S2=P1^1;
sbit S3=P1^2;
sbit OE=P1^3;
sbit OUT=P3^4;        //频率从TO口输入
sbit key0=P1^5;
sbit LED=P1^6;
sbit a=P3^0;
sbit b=P3^1;
uchar color;			//1:blue   2:green   3:red
uchar T[4];							 //color timer
uchar TH[4];
uchar TL[4];
uchar bizhi[4];
void time1()  interrupt 3 
{
   	TH[color]=TH0;
		TL[color]=TL0;		
		T[color]=(TH[color]*0xff+TL[color]);	  
		TR0=0;//关定时器
		TR1=0;
		TH1=0xB1;
		TL1=0xE0;//归0
		TH0=0x00;
		TL0=0x00;//归0
}
void TCS320_onecolor(n)   //进行一种颜色的扫描识别
{		
 switch(n)
{	case 1: S2=0; S3=1; break;  //bule filter used
	case 2: S2=1; S3=1; break;  //green filter used
	case 3: S2=0; S3=0; break;  //red filter used
}
}
void color_data(void)     // color balance adjust function
{
for(color=1;color<=3;color++)//三种颜色都判断一下
    {
	TCS320_onecolor(color);
  	TR0=1;                     //打开两个定时器
	TR1=1;
	TMOD=0x15;	  //T0--counter mode 2 且是计数器,   T1--timer 
   	while(TF1==0)
      {
	   }
	
	}
}
void key(void)                     // 左转外部中断0是0号
{
 uchar B; 
 color_data();
 B=(T[3]+T[2]+T[1]);
 B=(B/10);
 T[3]=(T[3]/10);                   //消除抖动
 T[2]=(T[2]/10);
 T[1]=(T[1]/10);
 bizhi[3]=((T[3]*100)/B);         //提高精度
 bizhi[2]=((T[2]*100)/B);
 bizhi[1]=((T[1]*100)/B); 
 }
void color_shibie(void)
{
uchar i,j,h,k,m;
color_data();
k=(T[1]+T[2]+T[3]);
k=(k/10);
T[3]=(T[3]/10);                  //消除抖动
T[2]=(T[2]/10);
T[1]=(T[1]/10);
h=((T[3]*100)/k);               //提高精度
i=((T[2]*100)/k);
j=((T[1]*100)/k); 
m=1;
if((bizhi[2]==i)&&(bizhi[1]==j)&&(bizhi[3]==h))
{LED=0;                                       //进行颜色判断
}
else if((bizhi[2]!=i)||(bizhi[1]!=j)||(bizhi[3]!=h))
{LED=1;}
}
void main()
{
EA=1;
ET1=1;
P1=0x00;
TH0=0x00;
TL0=0x00;
TH1=0xB1;
TL1=0xE0;
OE=0;                   //频率输出使能端
S0=0;                  	//S0S1=01  output frequency scaling 2%
S1=1;
LED=1;
bizhi[1]=1;
bizhi[2]=1;
bizhi[3]=1;
TMOD=0x15;	 	//T0--counter mode 2 且是计数器,  
 //T1--timer mode 1  C/T为0时是做定时器用
while(1)
 { 
if(key0==1)
 {key();}
if(key0==0)
 {color_shibie();}
  }
}

⌨️ 快捷键说明

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