颜色传感器程序

//模块默认拉高S0 S1,单片机可以只接S2 S3 引脚。

//测试代码:

/*******************************************

* 文件名: TCS3200 颜色测试

* 型号: CJMCU-M125

S0 S1 S2 S3

GND VCC OUT LED

* 功能: 读取RGB 值

* 单片机: STC89C52

* 晶振: 11.0592m

* 时间: 2011-3-20

* LCD1602 显示R,G,B 值

/********************************************/

//接线说明:

//模块S2-----单片机P1.1

//模块S3-----单片机P1.0

//模块OUT----单片机P3.5(计数器1 输入)

//模块VCC----单片机VCC

//模块GND----单片机GND

//**********************************************

#include

#include //Keil library

#include //Keil library

#include

#define uchar unsigned char

#define uint unsigned int

//----------------------------------------

sfr T2MOD=0x0c9;

//----------------------------------------

/**引脚定义**/

sbit s2=P1^0; //TCS3200 S2

sbit s3=P1^1; //TCS3200 S3

/**比例因子**/

sbit s0=P1^2;

sbit s1=P1^3;

//TCS3200 S0 模块内部默认上拉

//TCS3200 S1 模块内部默认上拉

//TCS3200 OE 模块内部接地

//变量、常量定义

uchar ge,shi,bai,LJ=0 ;

//uchar rp=2,gp=1,bp=2; //定义比例因子,具体环境可以修改

uchar count; //颜色标志位(0:红1:绿2:蓝)

//显示数组

uchar disp_R[3]; //红

uchar disp_G[3]; //绿

uchar disp_B[3]; //蓝

//uchar FS[3]={0xfd,0x00,0xaa};

uchar AA[3]={0x01,0x02,0x03};

uchar CC[3]={0x04,0x05,0x06};

uchar DD[3]={0x07,0x08,0x09};

uchar FS[2]={0};

sbit LED1=P2^2;

//------------------------------------------

//********定义函数*****************************

void delay(unsigned int k);

//**********延时函数***************

void delay(unsigned int k)

{

unsigned int i,j;

for(i=0;i

{

for(j=0;j

{;}

}

}

/*******************************************

* 函数名称: t0_init()

* 函数功能: 定时器0 初始化

* 入口参数: 无

* 出口参数: 无

/********************************************/

void t0_init()

{

TMOD=0x51; //T1 计数T0 定时工作方式1

TH1=0x00; //计数初值

TL1=0x00;

TH0=0x0dc;

TL0=0x00; //11。0592M 晶振10ms

EA=1; //开中断

ET0=1;

TR0=1; //启动

TR1=1;

}

//---------------------------------------------

void UART2(void)

{

T2MOD = 0x01; //自动重载

T2CON = 0x30; //T2用做发送接收时钟

TH2 = 0xFF; //9600波特率,11.0592Mhz晶振

TL2 = 0xDC;

RCAP2H = 0xFF;

RCAP2L = 0xDC;

SCON = 0x50; //串口方式1,1个起始位,1个停止位,8位数据

TR2 = 1; //启动T2

}

//---------------------------------------------

void SendByte(unsigned char c,unsigned char *YS)

{

char i;

for(i=0;i

{

SBUF = *YS++;

while(!TI);

TI = 0;

}

}

//*********************************************

//数值转换出个十百千的ASCII 码

//*********************************************

void conv

ersion(uint temp_data)

{

bai=temp_data/100+0x30 ;

temp_data=temp_data%100; //取余运算

shi=temp_data/10+0x30 ;

ge=temp_data%10+0x30; //取余运算

}

/*******************************************

* 函数名称: main()

/********************************************/

void main()

{

delay(10);

t0_init(); //定时计数初使化

UART2();

while(1)

{

//disp_R[0]=;

// disp_G[0]=disp_G[0]*100+disp_G[1]*10+disp_G[2];

SendByte(1,disp_G);

// disp_B[0]=disp_B[0]*100+disp_B[1]*10+disp_B[2];

SendByte(1,disp_B);

// SendByte(3,FS);

SendByte(1,disp_R);

delay(800);

}

}

/*******************************************

* 函数名称: c10ms_out()

* 函数功能: 定时中断0 服务程序

修改颜色标志disp_tc(0:红1:绿2:蓝)

设置S0 S1 S2 选择滤波器

计算脉冲,读取色值

* 入口参数: 无

* 出口参数: 无

/********************************************/

void c10ms_out() interrupt 1

{

uint temp;

s0=1;

s1=1;

TR0=0; //关闭定时

TR1=0; //关闭计数

/*LJ++;

if(LJ>100)

{

LJ=0;

LED1=~LED1;

}*/

/*temp=123;

conversion(temp);

disp_R[2]=ge; //因为这次的中断,是上次选择滤波器的数值

disp_R[1]=shi;

disp_R[0]=bai;*/

if(count==0)

{

count++;

s2=0;s3=0; //选择滤波器为red色

//temp=(8

//temp/=rp;

//temp=123;

temp=TL1;

// conversion(temp);

//disp_R[2]=ge; //因为这次的中断,是上次选择滤波器的数值

//disp_R[1]=shi;

disp_R[0]=temp;

//SendByte(3,AA);

}

else if(count==1)

{

count++;

s2=1;s3=1; //选择滤波器为green色

//temp=(8

// temp/=gp;

//temp=456;

temp=TL1;

//conversion(temp);

//disp_G[2]=ge; //因为这次的中断,是上次选择滤波器的数值

//disp_G[1]=shi;

// disp_G[0]=bai;

disp_G[0]=temp;

//SendByte(3,CC);

}

else if(count==2)

{

count=0;

s2=0;s3=1; //选择滤波器为blue色

temp=TL1;

//temp=(8

//temp/=bp;

//temp=789;

/*FS[0]=TL1;

FS[1]=TH1;

SendByte(2,FS); */

//conversion(temp);

//disp_B[2]=ge; //因为这次的中断,是上次选择滤波器的数值

//disp_B[1]=shi;

// disp_B[0]=bai;

disp_B[0]=temp;

//SendByte(3,DD);

}

//定时器计数器重赋初值

TH0=0x0dc;

TL0=0x00; //11。0592M 晶振,为10ms

TL1=0x00;//计数器清零

TH1=0x00;//计数器清零

TR0=1; //打开定时器

TR1=1; //打开计数器

}

//------------------------------------------------------

//模块默认拉高S0 S1,单片机可以只接S2 S3 引脚。

//测试代码:

/*******************************************

* 文件名: TCS3200 颜色测试

* 型号: CJMCU-M125

S0 S1 S2 S3

GND VCC OUT LED

* 功能: 读取RGB 值

* 单片机: STC89C52

* 晶振: 11.0592m

* 时间: 2011-3-20

* LCD1602 显示R,G,B 值

/********************************************/

//接线说明:

//模块S2-----单片机P1.1

//模块S3-----单片机P1.0

//模块OUT----单片机P3.5(计数器1 输入)

//模块VCC----单片机VCC

//模块GND----单片机GND

//**********************************************

#include

#include //Keil library

#include //Keil library

#include

#define uchar unsigned char

#define uint unsigned int

//----------------------------------------

sfr T2MOD=0x0c9;

//----------------------------------------

/**引脚定义**/

sbit s2=P1^0; //TCS3200 S2

sbit s3=P1^1; //TCS3200 S3

/**比例因子**/

sbit s0=P1^2;

sbit s1=P1^3;

//TCS3200 S0 模块内部默认上拉

//TCS3200 S1 模块内部默认上拉

//TCS3200 OE 模块内部接地

//变量、常量定义

uchar ge,shi,bai,LJ=0 ;

//uchar rp=2,gp=1,bp=2; //定义比例因子,具体环境可以修改

uchar count; //颜色标志位(0:红1:绿2:蓝)

//显示数组

uchar disp_R[3]; //红

uchar disp_G[3]; //绿

uchar disp_B[3]; //蓝

//uchar FS[3]={0xfd,0x00,0xaa};

uchar AA[3]={0x01,0x02,0x03};

uchar CC[3]={0x04,0x05,0x06};

uchar DD[3]={0x07,0x08,0x09};

uchar FS[2]={0};

sbit LED1=P2^2;

//------------------------------------------

//********定义函数*****************************

void delay(unsigned int k);

//**********延时函数***************

void delay(unsigned int k)

{

unsigned int i,j;

for(i=0;i

{

for(j=0;j

{;}

}

}

/*******************************************

* 函数名称: t0_init()

* 函数功能: 定时器0 初始化

* 入口参数: 无

* 出口参数: 无

/********************************************/

void t0_init()

{

TMOD=0x51; //T1 计数T0 定时工作方式1

TH1=0x00; //计数初值

TL1=0x00;

TH0=0x0dc;

TL0=0x00; //11。0592M 晶振10ms

EA=1; //开中断

ET0=1;

TR0=1; //启动

TR1=1;

}

//---------------------------------------------

void UART2(void)

{

T2MOD = 0x01; //自动重载

T2CON = 0x30; //T2用做发送接收时钟

TH2 = 0xFF; //9600波特率,11.0592Mhz晶振

TL2 = 0xDC;

RCAP2H = 0xFF;

RCAP2L = 0xDC;

SCON = 0x50; //串口方式1,1个起始位,1个停止位,8位数据

TR2 = 1; //启动T2

}

//---------------------------------------------

void SendByte(unsigned char c,unsigned char *YS)

{

char i;

for(i=0;i

{

SBUF = *YS++;

while(!TI);

TI = 0;

}

}

//*********************************************

//数值转换出个十百千的ASCII 码

//*********************************************

void conv

ersion(uint temp_data)

{

bai=temp_data/100+0x30 ;

temp_data=temp_data%100; //取余运算

shi=temp_data/10+0x30 ;

ge=temp_data%10+0x30; //取余运算

}

/*******************************************

* 函数名称: main()

/********************************************/

void main()

{

delay(10);

t0_init(); //定时计数初使化

UART2();

while(1)

{

//disp_R[0]=;

// disp_G[0]=disp_G[0]*100+disp_G[1]*10+disp_G[2];

SendByte(1,disp_G);

// disp_B[0]=disp_B[0]*100+disp_B[1]*10+disp_B[2];

SendByte(1,disp_B);

// SendByte(3,FS);

SendByte(1,disp_R);

delay(800);

}

}

/*******************************************

* 函数名称: c10ms_out()

* 函数功能: 定时中断0 服务程序

修改颜色标志disp_tc(0:红1:绿2:蓝)

设置S0 S1 S2 选择滤波器

计算脉冲,读取色值

* 入口参数: 无

* 出口参数: 无

/********************************************/

void c10ms_out() interrupt 1

{

uint temp;

s0=1;

s1=1;

TR0=0; //关闭定时

TR1=0; //关闭计数

/*LJ++;

if(LJ>100)

{

LJ=0;

LED1=~LED1;

}*/

/*temp=123;

conversion(temp);

disp_R[2]=ge; //因为这次的中断,是上次选择滤波器的数值

disp_R[1]=shi;

disp_R[0]=bai;*/

if(count==0)

{

count++;

s2=0;s3=0; //选择滤波器为red色

//temp=(8

//temp/=rp;

//temp=123;

temp=TL1;

// conversion(temp);

//disp_R[2]=ge; //因为这次的中断,是上次选择滤波器的数值

//disp_R[1]=shi;

disp_R[0]=temp;

//SendByte(3,AA);

}

else if(count==1)

{

count++;

s2=1;s3=1; //选择滤波器为green色

//temp=(8

// temp/=gp;

//temp=456;

temp=TL1;

//conversion(temp);

//disp_G[2]=ge; //因为这次的中断,是上次选择滤波器的数值

//disp_G[1]=shi;

// disp_G[0]=bai;

disp_G[0]=temp;

//SendByte(3,CC);

}

else if(count==2)

{

count=0;

s2=0;s3=1; //选择滤波器为blue色

temp=TL1;

//temp=(8

//temp/=bp;

//temp=789;

/*FS[0]=TL1;

FS[1]=TH1;

SendByte(2,FS); */

//conversion(temp);

//disp_B[2]=ge; //因为这次的中断,是上次选择滤波器的数值

//disp_B[1]=shi;

// disp_B[0]=bai;

disp_B[0]=temp;

//SendByte(3,DD);

}

//定时器计数器重赋初值

TH0=0x0dc;

TL0=0x00; //11。0592M 晶振,为10ms

TL1=0x00;//计数器清零

TH1=0x00;//计数器清零

TR0=1; //打开定时器

TR1=1; //打开计数器

}

//------------------------------------------------------


相关文章

  • 基于PLC的材料分拣系统
  • 引 言 随着社会的不断发展,市场的竞争也越来越激烈,因此各个生产企业都迫切地需要改进生产技术,提高生产效率.在需要进行材料分拣的企业,以往都采用人工分拣的方法,分拣效率极为低下,致使生产成本高,企业竞争力差.近年来,随着科学技术的不断发展, ...查看


  • 颜色传感器的应用
  • 高分辨率颜色传感器原理与应用 随着现代工业生产向高速化.自动化方向的发展,生产过程中长期以来由人眼起主导作用的颜色识别工作将越来越多地被相应的颜色传感器所替代.例如:图书馆使用颜色区分对文献进行分类,能够极大地提高排架管理和统计等工作:在包 ...查看


  • 关于使用喷墨打印机的几个简单问题的回答
  • 打印机基础知识(四) 关于使用喷墨打印机的几个简单问题的回答 第一节 解决打印机不能打印问题的几种方法 1. 从其它应用程序打印:在DOS 下打印,当一个WINDOWS 应用程序不能打印时,请尝试从其它程序打印,看是否存在相同的问题,如果仅 ...查看


  • 纳英特机器人3D仿真系统简介
  • 纳英特机器人3D仿真系统简介 0.1 软件简介 NSTRSS是NST科技新近推出的一款以.NET平台为基础,使用Microsoft DirectX9.0技术的3D机器人仿真软件..用户通过构建虚拟机器人.虚拟环境,编写虚拟机器人的驱动程序, ...查看


  • 循迹小车报告
  • 摘 要 80C51单片机是一款八位单片机,我做的是的是如何用80C51单片机来实现小车智能循迹.本系统以设计题目的要求为目的,采用80C51单片机为控制核心,利用红外对管传感器检测道路上的黑线,控制电动小汽车的自动循迹,快慢速行驶,以及声控 ...查看


  • 机器人擂台赛程序程序调试要点
  • 擂台赛程序调试要点 声明:这里给出的调试要点仅供用户参考. § 无差别组 1. 根据比赛策略,合理布置传感器,并根据调试效果调节.实际调试时,可以先大致确定安装位置和安装方式,然后根据实际调试的结果修改.例如,某些位置的红外测距倾斜角度太大 ...查看


  • 机器人的"感觉器官"
  • 什么是传感器? 传感器是机器人的"感觉器官",是一种电子元件或装置,能响应或感知被测量的物理量或化学量,并按一定规律转换成电信号,以供机器人核心识别.它就像人的眼睛.耳朵.鼻子一样,能够感应到周围环境的信息,并把这些信息 ...查看


  • 智能机器人实验报告
  • 智能机器人实验报告 实验目的: 1.了解广茂达智能小车的工作原理: 2.通过实际操作理解小车各项功能的实现方法: 3.掌握对小车功能的编程及调试方法: 4:通过实验促进对理论课学习到的知识的理解. 实验原理: 实验一:遥操作实验 本实验利用 ...查看


  • 排水管道声纳检测基础课程
  • 上海市排水行业协会 S W a R T A 基础课程 编制单位: 上海市排水行业协会 上海乐通管道工程有限公司 编制时间: 2007年2月 排水管道声纳检测基础课程 培训对象: 新员工.排水管道声纳检测队伍的领导/项目经理/班组长/质量管理 ...查看


热门内容