📄 mainold.c
字号:
#include <reg52.h>
//#include <string.h>
#include <intrins.h>
#include <stdio.h>
#include <borad.h>
#include <SERIAL.H>
#define uint unsigned int
#define uchar unsigned char
#define CYCLE (-50000)
//#include "VI2C_C51.h"
//#include "ocm4x8c串.h"
//#define Debugging 1
sbit Rf=P3^2;
sbit Cf=P3^3;
sbit BELL=P3^5;
sbit DAT=P1^0;
sbit CLK=P1^1;
sbit CS=P1^2;
sbit LCM_CS=P1^5;
sbit LCM_STD=P1^6;
sbit LCM_SCLK=P1^7;
sbit LCM_RST=P1^4;
sbit RA=P2^0;
sbit RB=P2^1;
sbit RC=P2^2;
sbit CA=P2^3;
sbit CB=P2^4;
sbit STEP=P0^1;
sbit AUTOSTEP=P0^2;
sbit Mouse1=P0^5;
sbit Mouse2=P0^6;
sbit Mouse3=P0^7;
sbit MD=P0^4;
bit TestModel;
uchar OKLED;
uchar NGLED;
#define OK 33
#define NG 44
uchar Test_timer;
uchar Test_OKNG;
uchar Test_012;
uchar Test_Order;
uchar STEP_check;
uchar cycle;
uchar BELL_temp;
uchar BELL_Flash;
#define BELL_timer 6
uint R1,R2,R3,R4,C1,C2;
bit StartTest=1;
uchar tdTH,tdTL;
uint tn;
char CtrlP=0;
uint RC_timer;
uint RCr_timer;
#define FN 12
//uint RCtemp[FN];
//LED显示
/*void LEDshow(void)
{
uchar i;
for(i=0;i<7;i++)
{
if((NGLED>>(6-i))&1) DAT=1;
else DAT=0;
delay (5);
CLK=1;
delay (5);
CLK=0;
delay (5);
}
for(i=0;i<7;i++)
{
if((OKLED>>(6-i))&1)DAT=1; //判断发送位
else DAT=0;
delay (5);
CLK=1;
delay (5);
CLK=0;
delay (5);
}
CS=1;
delay (5);
CS=0;
}*/
/*
//串口初始化
void init_serialcomm(void)
{
SCON = 0x50; //串口模式: 模式1 接收允许
TMOD |= 0x20; //定时器模式:定时器工作在模式2
PCON |= 0x80; //SMOD=1; 倍波特率
TH1 = 0xF3; //Baud:9600fosc=24MHz
// ES = 1; //串行中断允许
TI = 1;
TR1 = 1; //定时器1启动
*/
/* SCON = 0x50; //串口方式1,允许接收
TMOD = 0x20; //定时器1定时方式2
TCON = 0x40; //设定时器1开始计数
TH1 = 0xE8; //11.0592MHz 1200波特率
TL1 = 0xE8;
TR1 = 1; //启动定时器 */
//}
//初始化定时器
/*void init_timer(void)
{
TH0=0;
TL0=0;
// TMOD|=0x01; //工作方式1 16位计数方式
// ET0=1; //定时器0中断允许
// TR0=1; //定时器0启动
}
//定时器0中断
/*void timer0(void) interrupt 1 using 1
{
if(++Test_timer>30) //超时1秒
{
IE0=0;
IE1=0;
TF0=0;
EX0=0;
EX1=0;
TR0=0;
Test_OKNG=NG;
}
if(BELL_temp>0)
{
Test_timer=0;
if(--BELL_temp==0)
{
if(BELL_Flash>0)
{
BELL_Flash--;
BELL_temp=BELL_timer;
BELL=~BELL;
}
else
{
BELL=1;
TR0=0;
}
}
}
else BELL=1;
} */
//初始外部中断
/*void init_int(void)
{
IT0=1; //外部中断0边沿触发
// EX0=1; //外部中断0允许中断
IT1=1;
// EX1=1;
} */
//外部中断0
void int0(void) interrupt 0 using 2
{
if(StartTest)
{
StartTest=0;
TH0=0;
TL0=0;
TR0=ET0=1;
tn=0;
}
else
{
do
{
tdTH=TH0;
tdTL=TL0;
}
while(tdTH!=TH0);
tn++;
}
}
void Time32ms (void) interrupt TIMER0INT using 1
{
uint re;
re=tdTH;
re=(re<<8)+tdTL-tn/2;
re/=tn;
re++;
switch(CtrlP)
{
case 0:R1=re;break;
case 1:R2=re;break;
case 2:R3=re;break;
case 3:R4=re;break;
}
re=0;
//Next Component
CtrlP++;
CtrlP&=0x3;
P2=CtrlP;
StartTest=1;
}
//外部中断1
/*void int1(void) interrupt 2 using 3
{
uint temp;
temp=TH0;
temp=(temp<<8)+TL0;
TH0=0;
TL0=0;
cycle++;
if(cycle>=50)
{
RCtemp[cycle-50]=temp;
if(cycle==(FN+50-1))
{
TF0=0;
IE1=0;
TR0=0;
EX1=0;
cycle=0;
Test_OKNG=OK;
}
}
}
*/
/*
void TEST_GO(void)
{
BELL=1;
BELL_Flash=0;
BELL_temp=0;
Test_timer=0;
Test_OKNG=0;
cycle=0;
IE0=0;
IE1=0;
TF0=0;
if(Test_Order<5) EX0=1;
else EX1=1;
TH0=0;
TL0=0;
TR0=1;
}
void BB(uchar i)
{
BELL=0;
TH0=0;
TL0=0;
TR0=1;
if(i==OK)
{
BELL_temp=BELL_timer*2;
}
else
{
BELL_temp=BELL_timer;
BELL_Flash=2;
}
}
uint Filtering(uint *RCi)
{
unsigned long temp;
uchar i,j;
for (j=0;j<FN-1;j++)
{
for (i=0;i<FN-j;i++)
{
if (RCi[i]>RCi[i+1])
{
temp=RCi[i];
RCi[i]=RCi[i+1];
RCi[i]=temp;
}
}
}
temp=0;
for(i=2;i<FN-2;i++) temp+=RCi[i];
return (uint)(temp>>3);
}
uint code RCmaxmin[6][2]= //上下限
{
{12672,8448}, //10560 +-20%
{12672,8448}, //
{12672,8448}, //
{12672,8448}, //
{700, 300}, //500 +-40%
{700, 300} //
};
#define Rr 10000
#define Cr 497
#define Cc 30
void TEST(uchar Order)
{
unsigned long temp;
uchar LCM_ASCII[16];
static uchar Ti;
if(Test_OKNG==NG)
{
// P2=0xff;
Test_012=2;
NGLED&=~(1<<(Order-1));
Test_OKNG=0;
if(TestModel==0) BB(NG);
if(Order==6)
{
if(OKLED==0xc0)
{
OKLED&=~(1<<6);
if(TestModel==1) BB(OK);
}
else
{
NGLED&=~(1<<6);
if(TestModel==1) BB(NG);
}
}
LEDshow();
switch(Order)
{
case 1:
//printf("R1:∞K NG\n");//测试
//chn_disp3("R1:∞K NG\n",0x80);
break;
case 2:
//printf("R2:∞K NG\n");//测试
//chn_disp3("R2:∞K NG\n",0x90);
break;
case 3:
//printf("R3:∞K NG\n");//测试
//chn_disp3("R3:∞K NG\n",0x88);
break;
case 4:
//printf("R4:∞K NG\n");//测试
//chn_disp3("R4:∞K NG\n",0x98);
break;
case 5:
//clrram();
//printf("C5:0p NG\n");//测试
//chn_disp3("C5:0p NG\n",0x80);
break;
case 6:
//printf("C6:0p NG\n");//测试
//chn_disp3("C6:0p NG\n",0x90);
//printf("\n");
break;
}
}
if(Test_OKNG==OK)
{
// P2=0xff;
Test_OKNG=0;
switch(Test_012)
{
case 0:
// RCr_timer=Filtering(RCtemp);
RCr_timer=((unsigned long)RCr_timer+Filtering(RCtemp))>>1;
if(++Ti>10)
{
// if(Order<5) P2=Order|0xf8;
// else P2=((Order-4)<<3)|0xe7;
// Test_012=1;
Ti=0;
P2=0;
Test_012=0;
//printf("%u,\n" ,RCr_timer);//测试
}
else
{
P2=0;
Test_012=0;
}
TEST_GO();
break;
case 1:
Test_012=2;
RC_timer=Filtering(RCtemp);
if(Order<5) temp=RC_timer*Rr/RCr_timer;
else
{
temp=RC_timer*(Cr+Cc)/RCr_timer;
if(temp>Cc) temp-=Cc;
else temp=0;
}
if((RCmaxmin[Order-1][0]>=temp)&&(temp>=RCmaxmin[Order-1][1]))
{
OKLED&=~(1<<(Order-1));
if(TestModel==0) BB(OK); //BB
switch(Order)
{
case 1:
//printf("R1:%uK OK\n",(uint)temp);//测试
//sprintf(LCM_ASCII,"R1:%uK OK\n",(uint)temp);
//chn_disp3(LCM_ASCII,0x80);
break;
case 2:
//printf("R2:%uK OK\n",(uint)temp);//测试
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -