配套流水计数系统的C语言编程
#include
#define uchar unsigned char //宏定义
#define uint unsigned int//宏定义
sbit key1=P2^0; //模式设定
sbit key2=P2^1; //启用定时加减切换
sbit key3=P2^2; //红外对射
sbit led1=P1^1; //模式设定指示灯
sbit led2=P1^2; //计时指示灯
sbit led3=P1^3; //计数指示灯
sbit bell=P2^7; //蜂鸣器0响1不响
uint num,T50ms,b,c,flag=0;
int d;
bitkey3flag,flag1,jishu10,key1flag,led1flag,key2flag,led2flag;
/***************************Zms延时函数**************************************/
void delay(uint z)//z毫秒延时
{uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
/*******************************红外对管计数检测程序**************************/
void jishi()
{
if(key3==1) //检测是否有物体遮住
{delay(5); //延时5ms去抖
if(key3==1);
{
key3flag=1;
if(flag==0|flag==1)num++;//加模式切换
if(flag1==1)num--; //减模式切换
led3=0;
bell=0;
}
while(key3);//等待物体离开
if(num>=100)num=0; //设定计数范围1-99
led3=1;
bell=1;
SBUF=num; //串口显示计数值
while(TI==0); //等待发送完毕
TI=0;//发送标志位清零
if((flag==0)&&(num==10)) //如果到达十次计数
{SBUF=d; //计数十次发送时间
while(TI==0); //等待时间值发送完毕
TI=0; //发送标志位清零
}
}
}
/************************模式设定按键程序************************************/
void moshi()
{if(key1==0)//检测模式键是否按下
{ delay(5);
if(key1==0);
{T50ms=0;
key1flag=1;
}
while(!key1);
key1flag=0;
}
}
/*****************************加减切换函数***************************/
void jiajian()
{ if(key2==0)//检测加减模式键是否按下
{ delay(5);
if(key2==0);
{T50ms=0;
key2flag=1;
}
while(!key2);
key2flag=0;
}
}
/******************************主函数**************************************/
void main()
{
TMOD=0x21; //设置定时器1为方式2 设置定时器0为方式1
TH1=0xfd;// 设置波特率为9600
TL1=0xfd; //
REN=1; // 允许串行口收发
SM0=0; // 设置串行口工作方式
SM1=1; //
TR1=1; //开定时器1
TH0=(65536-50000)/256; // 设置初值,50ms中断一次
TL0=(65536-50000)%256;
EA=1; // 开总中断
ET0=1; // 允许定时器中断
TR0=1; // 开定时器0
led1=led2=led3=bell=1;
num=0;
while(1)
{j