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