TCS230/3200实现颜色复制显示源码分享
今天小编给大家分享的是TCS230/3200实现颜色复制显示的详细介绍,相信大部分人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,话不多说,一起往下看吧。
关于粘贴复制乱码的问题:如果程序复制到Keil编译器上出现注释乱码,可以先建一个.c文件,也就是说不在keil里面编辑,然后用记事本打开.c文件,将源码复制进去,再在keil中添加文件即可。
/**************************************************************************************基于TCS3200/230颜色复制显示器*用途:用于颜色的复制显示,通过TCS3200模块将取得的数据转换为对应的PWM波给三色灯显示出来,同时在LCD1602上显示出来*接线方法P0为LCD1602数据端口P2.5接LCD1602RSP2.6接LCD1602RWP2.7接LCD1602EN*三色灯接法P1.5接红色端P1.6接绿色端P1.7接蓝色端*TCS3200接法模块S2-----单片机P1.1模块S3-----单片机P1.0模块OUT----单片机P3.5(计数器1输入)模块VCC----单片机VCC模块GND----单片机GND2016-12-30------------------------------------------------------SWorld**************************************************************************************/#include<REG52.H>#include<math.h>//Keillibrary#include<stdio.h>//Keillibrary#include<INTRINS.H>#defineucharunsignedchar#defineuintunsignedint#defineDataPortP0//LCD1602数据端口sbitLCM_RS=P2^5;//LCD1602控制端口sbitLCM_RW=P2^6;//LCD1602控制端口sbitLCM_EN=P2^7;//LCD1602控制端口sbitRed=P1^5;sbitGreen=P1^6;sbitBlue=P1^7;/**引脚定义**/sbits2=P1^1;//TCS3200S2sbits3=P1^0;//TCS3200S3//TCS3200S0模块内部默认上拉//TCS3200S1模块内部默认上拉//TCS3200OE模块内部接地sbittest_pin=P1^2;//用示波器看这个引脚,可知道定时器中断频率//变量、常量定义ucharge,shi,bai;ucharrp=3,gp=3,bp=6;//定义比例因子,具体环境可以修改ucharcount;//颜色标志位(0:红1:绿2:蓝)uintRC=0,GC=0,BC=0;//显示数组uchardisp_R[3];//红uchardisp_G[3];//绿uchardisp_B[3];//蓝//********定义函数*****************************voiddelay(unsignedintk);voidInitLcd();voidWriteDataLCM(uchardataW);voidWriteCommandLCM(ucharCMD,ucharAttribc);voidDisplayOneChar(ucharX,ucharY,ucharDData);//*********LCD1602初始化**********************voidInitLcd(){WriteCommandLCM(0x38,1);WriteCommandLCM(0x08,1);WriteCommandLCM(0x01,1);WriteCommandLCM(0x06,1);WriteCommandLCM(0x0c,1);}//**********检测忙信号************************voidWaitForEnable(void){DataPort=0xff;LCM_RS=0;LCM_RW=1;_nop_();LCM_EN=1;_nop_();_nop_();while(DataPort&0x80);LCM_EN=0;}//**********写命令至LCD***********************voidWriteCommandLCM(ucharCMD,ucharAttribc){if(Attribc)WaitForEnable();LCM_RS=0;LCM_RW=0;_nop_();DataPort=CMD;_nop_();LCM_EN=1;_nop_();_nop_();LCM_EN=0;}//**********写数据至LCD************************voidWriteDataLCM(uchardataW){WaitForEnable();LCM_RS=1;LCM_RW=0;_nop_();DataPort=dataW;_nop_();LCM_EN=1;_nop_();_nop_();LCM_EN=0;}//*********写一个字符数据到指定的目标***********voidDisplayOneChar(ucharX,ucharY,ucharDData){Y&=1;X&=15;if(Y)X|=0x40;X|=0x80;WriteCommandLCM(X,0);WriteDataLCM(DData);}//**********延时函数***************voiddelay(unsignedintk){unsignedinti,j;for(i=0;i<k;i++){for(j=0;j<121;j++){;}}}/********************************************函数名称:t0_init()*函数功能:定时器0初始化*入口参数:无*出口参数:无/********************************************/voidt0_init(){TMOD=0x51;//T1计数T0定时工作方式1TH1=0x00;//计数初值TL1=0x00;TH0=0xE0;TL0=0x00;//11。0592M晶振10msEA=1;//开中断ET0=1;TR0=1;//启动TR1=1;}//*********************************************//数值转换出个十百千的ASCII码//*********************************************voidconversion(uinttemp_data){bai=temp_data/100+0x30;temp_data=temp_data%100;//取余运算shi=temp_data/10+0x30;ge=temp_data%10+0x30;//取余运算}/********************************************函数名称:main()/********************************************/voidmain(){delay(10);InitLcd();//lcd初始化s2=0;//初始设定S2引脚s3=0;//初始设定S3引脚t0_init();//定时计数初使?while(1){uintcount=0;/**********************最笨的方法通过主函数循环来实现显示各种颜色******************/while(1){if(count<=RC){Red=0;}else{Red=1;}if(count<=BC){Blue=0;}else{Blue=1;}if(count<=GC){Green=0;}else{Green=1;}count++;if(count>=256){count=0;}}}}/********************************************函数名称:c10ms_out()*函数功能:定时中断0服务程序修改颜色标志disp_tc(0:红1:绿2:蓝)设置S0S1S2选择滤波器计算脉冲,读取色值*入口参数:无*出口参数:无/********************************************/voidc10ms_out()interrupt1{uinttemp;test_pin=!test_pin;//测试定时器中断频率引脚,可以用示波器观察TR0=0;//关闭定时TR1=0;//关闭计数//count+1实现先检测绿色,再检测蓝色,然后检测红色,循环检测if(count==0){count++;s2=1;s3=1;//选择滤波器为绿色temp=(8<<TH1)+TL1;//计算这段时间内TCS230的输出脉冲数temp/=rp;GC=temp;conversion(temp);disp_R[2]=ge;disp_R[1]=shi;disp_R[0]=bai;}elseif(count==1){count++;s2=1;s3=0;//选择滤波器为蓝色temp=(8<<TH1)+TL1;//计算这段时间内TCS230的输出脉冲数temp/=gp;BC=temp;conversion(temp);disp_G[2]=ge;disp_G[1]=shi;disp_G[0]=bai;}elseif(count==2){count=0;s2=0;s3=0;//选择滤波器为红色temp=(8<<TH1)+TL1;//计算这段时间内TCS230的输出脉冲数temp/=bp;RC=temp;conversion(temp);disp_B[2]=ge;disp_B[1]=shi;disp_B[0]=bai;}DisplayOneChar(0,0,'T');DisplayOneChar(1,0,'C');DisplayOneChar(2,0,'S');DisplayOneChar(3,0,'2');DisplayOneChar(4,0,'3');DisplayOneChar(5,0,'0');DisplayOneChar(10,0,'R');DisplayOneChar(11,0,'[');DisplayOneChar(12,0,disp_R[0]);DisplayOneChar(13,0,disp_R[1]);DisplayOneChar(14,0,disp_R[2]);DisplayOneChar(15,0,']');DisplayOneChar(0,1,'G');DisplayOneChar(1,1,'[');DisplayOneChar(2,1,disp_G[0]);DisplayOneChar(3,1,disp_G[1]);DisplayOneChar(4,1,disp_G[2]);DisplayOneChar(5,1,']');DisplayOneChar(10,1,'B');DisplayOneChar(11,1,'[');DisplayOneChar(12,1,disp_B[0]);DisplayOneChar(13,1,disp_B[1]);DisplayOneChar(14,1,disp_B[2]);DisplayOneChar(15,1,']');//定时器计数器重赋初值TH0=0x01;TL0=0x00;//11。0592M晶振,为10msTL1=0x00;//计数器清零TH1=0x00;//计数器清零TR0=1;//打开定时器TR1=1;//打开计数器}
完上诉内容,你们掌握TCS230/3200实现颜色复制显示的方法了吗?如果想了解更多相关内容,欢迎关注亿速云行业资讯频道,感谢各位的阅读!
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。