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

📄 chengxu.c

📁 TCS230颜色识别传感器应用学习资料
💻 C
字号:

 /********************************************************************
                            汇诚科技

实现功能:对颜色传感器输出的频率进行测量
使用芯片:AT89S52 或者 STC89C52
晶振:11.0592MHZ
编译环境:Keil
作者:zhangxinchunleo
网站:www.ourhc.cn
淘宝店:汇诚科技 http://shop36330473.taobao.com
【声明】此程序仅用于学习与参考,引用请注明版权和作者信息!     

/*********************************************************************/

#include <reg52.h>	 //头文件
unsigned char code dispbit[]={0xef,0xdf,0xbf,0x7f};	  //位控制
unsigned char code dispcode[]={0xc0,0Xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //数字码
unsigned char dispbuf[4]={0,0,0,0};	  //临时数据位
unsigned char temp[8];	 //缓存数组
unsigned char dispcount; //数值组变量
unsigned char T0count;	 //计数器
unsigned char timecount; //时间计数器
unsigned char bz;		 //采集标志位
unsigned int bz1;		 //延时标志位
bit flag;				 //数值变换使能
unsigned long x;		 //计数值换算变量

/******************************************************************
                        输入输出初始化定义
******************************************************************/

sbit P2_0=P2^0;			 //采集锁定按键
sbit P2_1=P2^1;			 //采集解锁按键
sbit P1_1=P1^6;			 //采集解锁指示
sbit P1_2=P1^7;			 //采集锁定指示


sbit S0=P1^0;			 //用于选择输出比例因子或电源关断模式
sbit S1=P1^1;			 //用于选择输出比例因子或电源关断模式
sbit OE=P1^2;			 //频率输出使能引脚
sbit S2=P1^3;			 //用于选择滤波器的类型
sbit S3=P1^4;			 //用于选择滤波器的类型

/*************************************************************************
                               TCS230连接初始化	
**************************************************************************/

void TCS230()
{
 S0=0;			 //用于选择输出比例因子或电源关断模式
 S1=1;			 //用于选择输出比例因子或电源关断模式
 OE=0;			 //频率输出使能引脚
 S2=1;			 //用于选择滤波器的类型
 S3=0;			 //用于选择滤波器的类型
}


/*************************************************************************
                                主函数	
**************************************************************************/

void main(void)			 //主函数
{

unsigned char i;
TMOD=0x15;				  //定义定时器
TH0=0;
TL0=0;
TH1=(65536-4000)/256;
TL1=(65536-4000)%256;
TR1=1;
TR0=1;
ET0=1;
ET1=1;
EA=1;
TCS230();						   
while(1)				  //主函数循环体
{
if(flag==1)				   //显示使能开
{
flag=0;
x=T0count*65536+TH0*256+TL0;  //计数器换算
for(i=0;i<4;i++)
{
 temp[i]=0;
}
i=0;
while(x/10)
{
temp[i]=x%10;
x=x/10;
i++;
}
temp[i]=x;
for(i=0;i<4;i++)
{
dispbuf[i]=temp[i];
}
timecount=0;
T0count=0;
TH0=0;
TL0=0;
TR0=1;
}
}
}
/*************************************************************************
                                定时器函数	
**************************************************************************/

void t0(void) interrupt 1 using 0	  //计数器中断
{
T0count++;
}

/*************************************************************************
                                中断函数	
**************************************************************************/
void t1(void) interrupt 3 using 0	  //定时器中断
{
TH1=(65536-4000)/256;
TL1=(65536-4000)%256;
timecount++;

if(P2_0==0){bz=1;P1_2=0;}
if(P2_1==0){bz=0;bz1=0;P1_2=1;P1_1=1;}

if(timecount==250)
{
TR0=0;
timecount=0;

flag=1;
if(bz==1){bz1++;}
if(bz1>=5){flag=0;bz1=6;P1_1=0;}

}
P0=dispcode[dispbuf[dispcount]];
P2=dispbit[dispcount];
dispcount++;
if(dispcount==4)
{
dispcount=0;
}
} 

/*************************************************************************
                                结束	
**************************************************************************/

⌨️ 快捷键说明

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