?? 分光分色子.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 + -