📄 boradme.c
字号:
#include <reg52.h>
#include <setjmp.h>
#define CYCLE (-10000)
//InterrupT
#define INT0INT 0
#define TIMER0INT 1
#define INT1INT 2
#define TIMER1INT 3
#define COMINT 4
#define TIMER2INT 5
sbit SW952D=P0^0;
sbit SW951D=P0^1;
sbit LED951D=P0^2;
sbit LED952D=P0^3;
sbit LED953D=P0^4;
sbit LED954D=P0^5;
sbit LED955D=P0^6;
sbit LED956D=P0^7;
sbit SW952T=P1^0; //hi
sbit SW951T=P1^1; //hi
sbit LED951T=P1^2; //lo
sbit LED952T=P1^3; //lo
sbit LED953T=P1^4; //lo
sbit LED954T=P1^5; //lo
sbit LED955T=P1^6; //lo
sbit LED956T=P1^7; //lo
sbit OkLed=P2^4;
sbit NgLed=P2^5;
sbit Bell=P3^7;
bit Start=0,Next=0,Stop=0;
char CurrentX=0,CurrentY=0;
char INPORT;
int td;
code char TestBit[]={0,2,1,4,8,16,32,64,128};
//code char Name[8][]={"S1";"S2";"L1";"L2";"L3";"L4";"L5";"L6"};
unsigned char code Name[][6]={" ","SW951","SW952","LD951","LD952","LD953","LD954","LD955","LD956"};
jmp_buf env;
void Initial(void);
void delay10ms(int);
void LcdPrint(char *);
void LcdClear(void);
#include <serial.c>
void main(void)
{
char ErrNo=0;
char Pin[9];
auto unsigned char i,j,d,dm,db;
bit ok;
bit Round;
EA=0;
// P0=0;
OkLed=0;
NgLed=0;
Bell=0;
SP=0x5f;
init_lcd ();
/*------------------主程序--------------------*/
while (1)
{
lat_disp (0x00,0x00);
chn_disp (tab1);
con_disp (0xff,0xff,0x8c,0x80,2,16);
delay1 (8000);
clrram();
lat_disp (0xcc,0xcc);
delay1 (8000);
lat_disp (0x00,0x00);
chn_disp1 (tab31);
img_disp1 (tab32);
delay1 (8000);
clrram();
lat_disp (0xff,0x00);
delay1 (8000);
img_disp (tab5);
delay1 (8000);
}
// Initial();
P0=0;
while(1)
{
P0=0xfc;delay10ms(20);
Round=((P1^0xfc)&0xfc)?1:0;
if(Round)
{
P0=0;delay10ms(20);
Round=((P1^0xfc)&0xfc)?0:1;
}
if(Round) i++; else i=0;
if(i>=200) Start=1;
if(setjmp(env)) Start=1;
if(Start)
{
Start=0;
ok=1;
LcdClear();
LcdPrint("\n");
LcdPrint(" Testing");
for(i=0;i<=8;i++)
{
d=TestBit[i];
P0=d;
delay10ms(160);
if((Pin[i]=P1^0xfc)!=d) ok=0;
delay10ms(40);
P0=0;
}
LcdClear();
//Error analyse
if(ok)
{
OkLed=0;
NgLed=1;
LcdPrint("\n");
LcdPrint(" **OK**");
}
else
{
OkLed=1;
NgLed=0;
CurrentX=0;
for(i=1;i<8;i++)
{
db=TestBit[i];
if(Pin[0]&db) LcdPrint(Name[i]);LcdPrint("与电源短路\n");
if((dm=Pin[i])!=db)
{
if(dm)
{
for(j=j+1;j<=8;j++)
{
d=TestBit[j];
if(dm&d)
{
LcdPrint(Name[i]);
LcdPrint("/");
LcdPrint(Name[i]);
LcdPrint("短路\n");
}
}
}
else
{
LcdPrint(Name[i]);LcdPrint("开路\n");
}
}
}
}
}
}
return;
}
/*
void Initial(void)
{
P0=0;
P1=P2=P3=0xff;
INPORT=0XFF;
TMOD=0X11;
TR0=1;
EX0=0;
ET0=1;
EA=1;
TL0=CYCLE % 256;
TH0=CYCLE/256;
}
void PowerOff (void) interrupt INT0INT
{
return;
}
void Timems (void) interrupt TIMER0INT
{
// #define FLASHTIME 60
// static unsigned char ft=FLASHTIME;
static char InP1=0,InP2=0;
char InP,InP3;
TL0=CYCLE % 256;
TH0=CYCLE/256;
InP=INPORT^P2;
InP3=InP&InP2; //count 3
InP2=InP&InP1&(~InP3);
InP1=InP&(~InP3);
InP^=INPORT; //InP=PP1
InP&=InP3;
INPORT&=~InP3;
INPORT|=InP;
if(!(INPORT&0x40)) {Next=1;Stop=1;}
if(!(INPORT&0x80)) Start=1;
if(td) td--;
return;
}*/
void LcdClear(void)
{
init_lcd();
}
void LcdPrint(char * DisBuf)
{
code unsigned char Line[]={0x80,0x90,0x88,0x98};
wr_lcd(comm,0x30);
if(*DisBuf&&CurrentY<4)
{
if(*DisBuf=='\n'||CurrentX>=16)
{
CurrentX=0;
CurrentY++;
if(CurrentY<4)
{
wr_lcd(comm,Line[CurrentY]);
}
else
{
do
{
if(Start) {Start=0;LcdClear();CurrentY=0;longjmp(env,1);}
}while(!Next);
Next=0;Stop=0;
LcdClear();
CurrentY=0;
}
}
else
{
wr_lcd(dat,*DisBuf);
CurrentX++;
}
}
return;
}
void delay10ms(int a)
{
td=a/10;
while(td);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -