📄 chengxu.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 + -