导航:首页 > 操作系统 > 基于单片机的颜色识别

基于单片机的颜色识别

发布时间:2023-01-24 11:54:53

❶ 用 stc12c5a60s2单片机控制颜色传感器tcs3200的程序,我做得不知为什么识别不了,

1、参考网上程序或者模块提供的程序

2、仔细参读datasheet,尤其研究时序以及逻辑功能的实现

3、多动脑筋思考,学会调试程序,多网络Google。

/*模块的使用方法:把板距离白纸2CM处开机,使输出的数据位FFFFFFF(白平衡),接下来就可以正常使用
实现功能:对颜色传感器输出RGB
使用芯片:AT89S52或者STC89C52或AT89S51STC89C51
晶振:12MHZ
编译环境:Keil
作者:zhengzhongxign39*/
#include<reg52.h>
#defineucharunsignedchar
#defineuintunsignedint
//==============LCD1602接口连接方法=====================
/*-----------------------------------------------------
|DB0-----P0.0|DB4-----P0.4|RW-------P2.3|
|DB1-----P0.1|DB5-----P0.5|RS-------P2.4|
|DB2-----P0.2|DB6-----P0.6|E--------P2.2|
|DB3-----P0.3|DB7-----P0.7|
---------------------------------------------------*/
//================================================*/
#defineLCM_DataP0//LCD1602数据接口
#defineBusy0x80//用于检测LCM状态字中的Busy标识
sbitLCM_RW=P2^3;//读写控制输入端,LCD1602的第五脚
sbitLCM_RS=P2^4;//寄存器选择输入端,LCD1602的第四脚
sbitLCM_E=P2^2;//使能信号输入端,LCD1602的第6脚

//=================颜色传感模块连接=====================
/*-----------------------------------------------------
|EO-----GND
|S0-----VCC|S2-----P2.0|OUT-------P3.5
|S1-----VCC|S3-----P2.1|
---------------------------------------------------*/
sbittcs230_s2=P2^0;//TCS230S2接单片机P2.0
sbittcs230_s3=P2^1;//TCS230S3接单片机P2.1
sbittcs230_en=P3^0;//TCS230EN(E0)接GND
//**************函数声明***************************************
voidWriteDataLCM(ucharWDLCM);//LCD模块写数据
voidWriteCommandLCM(ucharWCLCM,BuysC);//LCD模块写指令
ucharReadStatusLCM(void);//读LCD模块的忙标
voidDisplayOneChar(ucharX,ucharY,ucharASCII);//在第X+1行的第Y+1位置显示一个字符
voidLCMInit(void);//LCD初始
voidDelayMs(uintMs);//1MS基准延时程序
voidpingheng();//白平衡子程序
voidceliang();//实际颜色程序
uintryz,gyz,byz;//分别定义红色因子绿色因子蓝色因子
uintrb,gb,bb;//RGB值
uchartab1[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
//***********************主程序******************************
main()
{
TMOD=0x51;//设定T0以工作方式1定时10毫秒
LCMInit();//LCD初始
pingheng();//上电时先白平衡一次
while(1)
{
celiang();//颜色测试
DisplayOneChar(0,0,'R');//以十进制显示RGB中红色的分值
DisplayOneChar(0,1,rb/100+0x30);//显示百位数据
DisplayOneChar(0,2,rb/10%10+0x30);//显示十位数据
DisplayOneChar(0,3,rb%10+0x30);//显示个位数据
DisplayOneChar(0,5,'G');//以十进制显示RGB中绿色的分值
DisplayOneChar(0,6,gb/100+0x30);//显示百位数据
DisplayOneChar(0,7,gb/10%10+0x30);
DisplayOneChar(0,8,gb%10+0x30);
DisplayOneChar(0,10,'B');//以十进制显示RGB中蓝色的分值
DisplayOneChar(0,11,bb/100+0x30);
DisplayOneChar(0,12,bb/10%10+0x30);
DisplayOneChar(0,13,bb%10+0x30);
//*****在LCD1602的第二行以16进制显示RGB*******************
DisplayOneChar(1,1,tab1[rb/16]);
DisplayOneChar(1,2,tab1[rb%16]);
DisplayOneChar(1,3,'H');
DisplayOneChar(1,6,tab1[gb/16]);
DisplayOneChar(1,7,tab1[rb%16]);
DisplayOneChar(1,8,'H');
DisplayOneChar(1,11,tab1[bb/16]);
DisplayOneChar(1,12,tab1[bb%16]);
DisplayOneChar(1,13,'H');
DelayMs(250);//每隔0.25秒测试一次颜色
}
}
//******************************************************
//白平衡子程序
voidceliang()
{
//*********求R值************************************
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
TH1=0;
TL1=0;
tcs230_s2=0;
tcs230_s3=0;//选择红色滤光器
tcs230_en=0;
TR0=1;//10毫秒开始计时
TR1=1;//开始计数
while(TF0==0);//等待定时器溢出
TF0=0;//清楚定时器0溢出标志
TR0=0;//关闭定时0
TR1=0;
rb=(unsignedlong)(TH1*256+TL1)*255/ryz;
if(rb>255)rb=255;//判断RGB值是否合法
//***********求B值**************************************
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
TH1=0;
TL1=0;
tcs230_s2=0;
tcs230_s3=1;//选择蓝色滤光器
TR0=1;//10毫秒开始计时
TR1=1;//开始计数
while(TF0==0);//等待定时器溢出
TF0=0;//清楚定时器0溢出标志
TR0=0;//关闭定时0
TR1=0;
bb=(unsignedlong)(TH1*256+TL1)*255/byz;
if(bb>255)bb=255;//判断RGB值是否合法
//***********求G值**************************************
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
TH1=0;
TL1=0;
tcs230_s2=1;
tcs230_s3=1;//选择绿色滤光器
TR0=1;//10毫秒开始计时
TR1=1;//开始计数
while(TF0==0);//等待定时器溢出
TF0=0;//清楚定时器0溢出标志
TR0=0;//关闭定时0
TR1=0;
tcs230_en=1;
gb=(unsignedlong)(TH1*256+TL1)*255/gyz;
if(gb>255)gb=255;//判断RGB值是否合法
}
//******************************************************
//白平衡子程序
voidpingheng()
{
//**************求取红色因子***********************
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
TH1=0;
TL1=0;
tcs230_s2=0;
tcs230_s3=0;//选择红色滤光器
tcs230_en=0;
TR0=1;//10毫秒开始计时
TR1=1;//开始计数
while(TF0==0);//等待定时器溢出
TF0=0;//清楚定时器0溢出标志
TR0=0;//关闭定时0
TR1=0;
ryz=TH1*256+TL1;//其实这里的比例因子应该为255/(TH1*256+TL1)
//**************求取蓝色因子***********************
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
TH1=0;
TL1=0;
tcs230_s2=0;
tcs230_s3=1;//选择蓝色滤光器
TR0=1;//10毫秒开始计时
TR1=1;//开始计数
while(TF0==0);//等待定时器溢出
TF0=0;//清楚定时器0溢出标志
TR0=0;//关闭定时0
TR1=0;
byz=TH1*256+TL1;//其实这里的比例因子应该为255/(TH1*256+TL1)
//**************求绿红色因子***********************
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
TH1=0;
TL1=0;
tcs230_s2=1;
tcs230_s3=1;//选择绿色滤光器
TR0=1;//10毫秒开始计时
TR1=1;//开始计数
while(TF0==0);//等待定时器溢出
TF0=0;//清楚定时器0溢出标志
TR0=0;//关闭定时0
TR1=0;
tcs230_en=1;
gyz=TH1*256+TL1;//其实这里的比例因子应该为255/(TH1*256+TL1)
}
/*======================================================================
LCM初始化
其他程序网上自己找找参照

❷ 单片机(任何一种)+ov7670做图像识别的程序,比如说能识别出图像的颜色或者图像中的点的位置,有思路也行

识别颜色和位置应该比较简单啊,我之前就做过用STC12C5A60加ov7670控制小车识别指定颜色,思路是这样的:
配置好OV7670,比如说输出格式为RGB565,分辨率为160X120,在程序中设置R,G,B阀值对每个像素的R,G,B进行比较,如果阀值比对OK,就输出此像素的坐标值。假若设置左上角为坐标原点(0,0),则第一行结束的坐标即为(159,0),依次对整个图像数据采集判读即可得到相应颜色的坐标值进而判读指定颜色目标的位置。

❸ 基于单片机(友善之臂)的西红柿成熟度判定,本科毕业设计。求高手指导

用颜色识别,其中可以用摄像头或者用颜色识别芯片针对某一个颜色判断!

❹ 这个颜色识别仿真的tcs怎么连接单片机的

哦,我的元件库里面没有这个东西;
颜色有多种,能识别出来,说明这个东西会输出可变的电压信号,因此,需要把她连接到ADC;

❺ 单片机机械手怎么识别三种颜色的球

不同颜色的波长不同,机械手上加上颜色传感器就可以识别了

❻ 如何制作单片机机器人

传感器,单片机编程,电路设计,机械部分,模拟电路转数字电路。对于零基础来说有些困难,毕竟要学的东西不少

❼ 如何用单片机读取颜色传感器的数值

单片机只能用来处理数据,检测气体是需要用传感器,有时还需要用放大器把传感器的微弱信号放大到足够单片机读取的幅度(通常是1v-5v),然后根据电压的高低来判定(a/d模拟量转换成数字量)气体的浓度

❽ 亚龙236型51单片机 YL_G001机械手如何识别颜色啊

颜色传感器。不同颜色送出不同值。

❾ 求51单片机用的的 TCS230D颜色识别模块c语言程序

//转自某某大侠的(名字忘了)此程序用于颜色模块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);

}

}

}

以上就是整个代码部分,希望有帮助

❿ proteus单片机仿真时,如何看那些引脚出现的颜色代表什么

proteus单片机仿真时出现的颜色意思为:

红色:输出,高电平(一般 =VCC) 也表示为 1。

蓝色:输出,低电平(一般 =GND) 也表示为 0。

灰色:输出,不确定。

proteus可以仿真51系列、AVR、PIC、ARM、等常用主流单片机。还可以直接在基于原理图的虚拟原型上编程,再配合显示及输出,能看到运行后输入输出的效果。配合系统配置的虚拟逻辑分析仪、示波器等,Proteus建立了完备的电子设计开发环境。

(10)基于单片机的颜色识别扩展阅读:

proteus的相关要求规定:

1、Proteus可提供的仿真仪表资源 :示波器、逻辑分析仪、虚拟终端、SPI调试器、I2C调试器、信号发生器、模式发生器、交直流电压表、交直流电流表。理论上同一种仪器可以在一个电路中随意的调用。

2、Proteus提供了一个图形显示功能,可以将线路上变化的信号,以图形的方式实时地显示出来,其作用与示波器相似,但功能更多。这些虚拟仪器仪表具有理想的参数指标,例如极高的输入阻抗、极低的输出阻抗。这些都尽可能减少了仪器对测量结果的影响。

3、Proteus可提供的调试手段 Proteus提供了比较丰富的测试信号用于电路的测试。这些测试信号包括模拟信号和数字信号。

阅读全文

与基于单片机的颜色识别相关的资料

热点内容
安卓手机mp3压缩工具 浏览:214
程序员和交易员 浏览:422
怎么变字体样式app 浏览:173
名字叫汤什么的视频app 浏览:207
金属加密键盘联系电话 浏览:333
自制解压牛奶盒子教程 浏览:62
编译高手的图片 浏览:922
单片机数码管显示时分秒 浏览:780
手指解压最简单的方法 浏览:343
韩国邮箱服务器地址 浏览:967
android版本介绍 浏览:410
pdf文件加密软件 浏览:410
长沙住房app怎么看备案 浏览:603
安装加密软件的电脑会被监控么 浏览:221
java微博源码 浏览:569
堆排序简单实现python 浏览:461
单片机引脚与键盘的关系 浏览:132
压缩火柴盒制作 浏览:38
谷歌地图android偏移 浏览:214
bitlocker硬盘加密空间 浏览:238