⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 分光分色子.c

📁 颜色分辨 芯片TCS230 读取白色发光二极管的亮度及颜色植转化后输出
💻 C
字号:
#include<reg52.h>
extern  unsigned char power; 
extern  unsigned int rgb[4],rgba[3];
extern  unsigned char zx,th0;
unsigned char sxy;
unsigned int gggg;
sbit S0=P1^5; //移位脉冲
sbit S1=P1^6;
sbit S2=P3^4;
sbit S3=P3^0;
sbit OE=P1^7;
display(unsigned int x);/////////////////
time0() interrupt 1//计数中断如果光线比较暗则容易溢出应加处理方法
{     
     TR1=0;//停止计数器
     gggg=0x00;//计数错误返回值
     TR0=0;//停止定时器
     ET0=0;//关中断 
     ET1=0;//关计数器       
}


time1() interrupt 3//颜色计数停用
{unsigned int yx;
 
  if(sxy=='o')
    {
    TH0=0;TL0=0; 
    TH1=0xf0;TL1=0xf0;//应该赙一个值
    TR1=1;TR0=1;ET0=1;ET1=1;
     sxy='s';   
    }
  else {ET0=0;ET1=0;TR0=0;TR1=0;gggg=TH0;gggg=((gggg<<8)|TL0);  }//此处应加TL放在底位
         //芯片的分辨率10位到12位应取值,,值越大越暗,,值越小越亮
}

close()//关闭电源函数
{S0=S1=0;}
open(unsigned char x)//选择颜色函数
{     if(x=='r'){S2=0;S3=0;} 
 else if(x=='g'){S2=1;S3=1;} 
 else if(x=='b'){S2=0;S3=1;}
 else if(x=='w'){S2=1;S3=0;}  
}
precision(unsigned char x)//精度选择函数
{
 if(x=='l')//2%
  {S0=0;S1=1;} 
 else if(x=='o')//20%
  {S0=1;S1=0;}
 else if(x=='h')//100%
  {S0=S1=1;}
}

s_time0()
{sxy='o';//启动计数器标志
 TH0=0x00;TL0=0x00;
 TH1=0xfF;TL1=0xfF;//进入计数中断第一次为卡定时间
 TR1=1;//启动计数器0
 TR0=1;//启动定时器
 ET0=1;//定时器中断允许
 ET1=1;//计数器中断允许 
}
w_transform()
{
          if((TR1==0))//如果停止计数则进行以下操作
              { 
                if(zx==0)
                   { precision('h');
                     open('r');//选择红转换
                     s_time0();//启动颜色识别
                     zx++;//close(); 
                    } 
                else if(zx==1)
                    {rgb[0]=gggg; 
                     open('g');//选择红转换
                     s_time0();//启动颜色识别
                     zx++;//close(); 
                    }

                 else if(zx==2)
                    { rgb[1]=gggg; 
                      open('b');//选择红转换
                      s_time0();//启动颜色识别
                      zx++; 
                    }
           
                 else if(zx==3)//白颜色识别
                    {rgb[2]=gggg;
                     open('w'); 
                     s_time0();  
                     zx++;
                     }
                 else if(zx==4)
                    {
                     rgb[3]=gggg; 
                     zx=0;
                     close();                            
                    }
     }
 power++;
}
/*此段程序为以计数器边沿触发启动启动定时器 zZZ*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -