//转自某某大侠的(名字忘了)此程序用于颜色模块TCS230D的51驱动(2010.08.26大侠)
//鉴于你应该知道TCS230D芯片的资料,芯片引脚功能我就不说了
#include<reg52.h>
unsigned char tmp;
/*******************************************
定义颜色识别模块引脚
*******************************************/
sbit clr_S0=P3^0;
sbit clr_S1=P3^1;
//设置p3.0脚3.1脚分别接到tcs230d芯片的s0和s1脚
sbit clr_OE=P3^2;
sbit clr_OUT=P3^5;
//设置p3.2脚3.5脚分别接到tcs230d芯片的OE和OUT脚
sbit clr_S2=P3^4;
sbit clr_S3=P3^3;
//设置p3.4脚3.3脚分别接到tCS230D芯片的S2和S3脚
/*******************************************/
/**********
串口初始化
***********************/
/*******************************************/
void init_ser()//初始化串口
{
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
SCON=0x50;
PCON&=0xef;
TR1=1;
IE=0x00;
}
void ser_sendchar(unsigned char a)//串口发送一个字节
{
SBUF=a;
while(!TI);
TI=0;
}
/*******************************************/
/********
颜色识别模块配置
*******************/
/*******************************************/
void init_clr()
{
clr_OE=1;
}
unsigned int clr_get(unsigned char a)
{
unsigned int time;
TMOD=0x61;//设置定时器0工作方式为16位
TH0=TL0=0x00;//设置定时器0从0计时
TH1=TL1=0x00;
clr_S0=1;
clr_S1=1;
clr_S2=a&0x02;
clr_S3=a&0x01;
clr_OE=0;
TR1=TR0=1;
while(TL1<250);
TR1=TR0=0;
clr_OE=1;
time=TH0*256+TL0;
return(time);
}
/*******************************************/
/*******************************************/
/*******************************************/
void main()
{
unsigned int a;
init_ser();
init_clr();
while(1)
{
if(RI)
{
RI=0;
tmp=SBUF;
a=clr_get(tmp);
init_ser();
ser_sendchar(a&0x00ff);
ser_sendchar(a/256);
}
}
}
以上就是整个代码部分,希望有帮助
2023-06-12 广告