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

📄 tiaosu.c

📁 单片机开发测试产线流水线速度
💻 C
字号:
//皮带线测速系统
//接光电开关的开关量输出,white信号,设为not_dang(),设为不挡时为1
#include <reg52.h>
#include <stdio.h>
#include <stdlib.h>
#include <absacc.h>

unsigned long Cnt_50ms=0;
unsigned long Pulse_Width[2];
unsigned long Time_Total=0;
unsigned long Time_Total_Last;

#define PIO_1 XBYTE[0xe023]
#define PIO_2 XBYTE[0xe027]

#define TRF1 XBYTE[0xe020]
#define TRF2 XBYTE[0xe021]
#define TRF3 XBYTE[0xe022]
#define Swh	 XBYTE[0xe024]
#define WDI  XBYTE[0xe025]

void delay(unsigned int loop)
{
	unsigned int i;
	for(i=0;i<=loop;i++){;}
}

bit not_dang()
{
	return (Swh%2);
}

void T1_Init(void)
{
	TMOD=0x11;	//T1为16位计数模式
	TH1=0;		//50ms定时器参数
	TL1=0;
}

void T1_Inter(void) interrupt  3
{   
    WDI=1-WDI;
	TR1=0;	//关定时器1
	TH1=0;	//50ms定时器参数
	TL1=0;
	TR1=1;	//开定时器1
	Cnt_50ms++;
}

int Display_Num(int num)
{
	switch(num)
	{
		case 0	: return (0xff-0x81);break;
		case 1	: return (0xff-0xb7);break;
		case 2	: return (0xff-0xc2);break;
		case 3	: return (0xff-0x92);break;
		case 4	: return (0xff-0xb4);break;
		case 5	: return (0xff-0x98);break;
		case 6	: return (0xff-0x88);break;
		case 7	: return (0xff-0xb3);break;
		case 8	: return (0xff-0x80);break;
		case 9	: return (0xff-0x90);break;
		default	: return (0xff-0xfe);break;
	}
}

void Display(unsigned long time)
{   
	if( (time>999999) && (time<99900001) )
	{   
		WDI=1-WDI;
		time=(int)(time/1000/100);
		TRF1=Display_Num(time/100);delay(100);
		TRF2=Display_Num(time/10%10);delay(100);
		TRF3=Display_Num(time%10);delay(100);
	}
	
	else
	{   
		WDI=1-WDI;
		TRF1=0xff-0xfe;delay(100);
		TRF2=0xff-0x7e;delay(100);
		TRF3=0xff-0xfe;delay(100);
	}
}

void Time_Cnt(void)    //启动定时器1开始计时。
{
NG:	while(!not_dang()){WDI=1-WDI;}
	TR1=1;
	Display(1);delay(30000);

	while(not_dang()){WDI=1-WDI;}
	Display(Time_Total);delay(30000);
  
	while(!not_dang()){WDI=1-WDI;}
	TR1=0;

	Pulse_Width[1]=TH1;
	Pulse_Width[0]=TL1;
	Time_Total_Last=Pulse_Width[1]*256+Pulse_Width[0];
	Time_Total=Cnt_50ms*71214+Time_Total_Last;
	if(Time_Total<1000000)	goto NG;
	Cnt_50ms=0;
}

main()
{   
	TR1=0;
	EA=1;
	ET1=1;
	WDI=1;
	T1_Init();
	delay(1000);
	PIO_1=0x80;
	PIO_2=0x90;
	delay(1000);
	Display(88800000);delay(60000);
	while(not_dang()){WDI=1-WDI;}
	delay(1000);
	
while(1)
{  
	TR1=0;
	TH1=0;
	TL1=0;
	Time_Cnt();
}
}

⌨️ 快捷键说明

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