1. 我用的是AT89S52的单片机,运行以下函数一直不正常,最后一个chackcolor的函数没有输出值。
使用printf函数之前,你可以加一句。
TI=0;
再试试效果。
2. 单片机PWM控制RGB-led程序
RGB-LED变化出64中不同的颜色,......
----
每种颜色的LED,要有四种亮度。
三种颜色搭配,就有 64 种颜色了。
每种颜色的LED,要有四种亮度:不亮、1/3亮、2/3亮、全亮。
其实,并不难控制。
都用不上 PWM 控制器。
用一个定时器,每隔一毫秒中断一次,对三路输出,控制一下即可。
3. 用 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初始化
其他程序网上自己找找参照
4. 51单片机红外感应开关代码怎么写
RE200B红外热释电处理芯片BISS0001,BISS0001是一款具有较高性能的传感信号处理集成电路,它配以热释电红外传感器和少量外接元器件构成被动式的热释电红外开关。它能自动快速开启各类白炽灯、荧光灯、蜂鸣器、自动门、电风扇、烘干机和自动洗手池等装置,特别适用于企业、宾馆、商场、库房及家庭的过道走廊等敏感区域,或用于安全区域的自动灯光、照明和报警系统[6]。该处理芯片具有CMOS工艺,数模混合,具有独立的高输入阻抗运算放大器;内部的双向鉴幅器可有效抑制干扰,内设延迟时间定时器和封锁时间定时器,采用16脚DIP封装等特点。红外传感器接收到人体红外信号经BISS0001处理后输出输给单片机P1.0口,TEL0表示接STC89C52是的P1.0口,通过对P1.0电平的判断,实现对单片机外围电路的控制.具体去看我的网络文库“基于单片机的红外淋浴器的设计”。
5. 单片机中的代码sensor_low[1]=255是什么意思
从P1口以二进制形式输出255至0的数
程序的解释:
delay是一个延时函数
进入主函数后,有一个名为m的变量初值为255,主循环中先从P1端口输出当前m的值(255),然后延时,然后m减1,之后再次循环到P1=m处,此时m=254,从P1输出后延时,然后自减1,之后再次循环到p1=m处,此时m=253……
6. 如何用单片机读取颜色传感器的数值
单片机只能用来处理数据,检测气体是需要用传感器,有时还需要用放大器把传感器的微弱信号放大到足够单片机读取的幅度(通常是1v-5v),然后根据电压的高低来判定(a/d模拟量转换成数字量)气体的浓度
7. 如何用单片机读取颜色传感器的数值
首先您需要确定颜色传感器的通信方式,然后确定您目前的单片机是否支持该通信方式。比如传感器通信用的spi,那么您直接把单片机的spi接口和传感器的连接起来,然后根据颜色传感器的数据手册写个SPI的读程序,来读取数值。希望对您能够有用。
8. 求单片机控制rgb灯颜色渐变的代码。控制一个灯就行。颜色要都包括。
首先理解成你有三个颜色的LED各一个,红绿蓝,然后用三个IO口控制。
第一:占空比,白话就是不停的开关开关(频率至少要达到60赫兹肉眼才不会觉得闪动),当开的时间长,关闭的是间短,则很亮,当开的时间短,关的时间长,则暗,关闭的时间就是占空比中的:占空。
第二:颜色的混合,可以参考颜色表,网络都很多,就是红+绿=,红+蓝,绿+蓝,红+绿+蓝,然后在这个基础上,调整三个LED的亮度,理论上能达到所有的色值。
第三:这东西其实就是几乎所有LED显像中一个LED的显像方式。
9. 基于51单片机颜色传感器TCS3200的设计问题
你好!
有这些器材就够了,上位机采用什么语言编程?可以尝试帮你完成
10. 51单片机颜色传感器 请问颜色传感器怎么编程,为什么要使用计时器。那个计时器怎么用
计时 一个时间段内 不同颜色反回的脉冲数 颜色值不同脉冲个数不同 以得出RGB值