📄 main.c
字号:
/* MAIN.C */
#include "stdio.h"
#include "reg51.h"
extern void init_lcd(void);
extern void init_kb(void);
extern void init_int0(void);
extern init_t0(void);
extern void write_com(unsigned char);
extern void write_data(unsigned char);
extern void clrscr(void);
extern void print(char,char *);
extern void clr_key(void);
extern void vref(int);
extern unsigned char press;
extern unsigned char key_num;
extern unsigned char is_up;
extern unsigned char buf;
extern unsigned char buffer[];
bit find=0;
bit flag=0;
bit full=0, flag_t=0,flag_ex0=0;
bit backward=0,forward=0;
bit changed=1;
unsigned int bx=0,rx=0;
unsigned int record_length=20;
unsigned char channel=0;
unsigned char time=200;
unsigned char courser;
unsigned char level=0;
unsigned char dat[1000]={0x00};
unsigned char *location=&dat[0];
unsigned char *_location=&dat[0];
unsigned char *point=&dat[0];
unsigned char *tpoint=&dat[0],*ppoint=&dat[0];
unsigned char cmp[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
char word[3]={0x00};
char _word[3]={0x00};
char mess[20];
init_sys(void); /* Reset system variable */
getlevel(void); /* Get Trigger Levl */
get_trigger_pattern(void); /* Display Trigger Pattern */
pattern_word(unsigned char); /* Input Trigger Word */
v_ref(void); /* Set Refernce Voltage */
getlength(void); /* Set data area length */
search(void); /* Search Trigger Location */
lcd_disp(void); /* Display On Lcd */
display(); /* Output Wave */
delay(int); /* Function Delay */
main()
{
_main: init_sys();
flag_t = 0;
PX1=1;
init_lcd();
init_int0();
init_kb();
init_t0();
sprintf(mess," Logic ");
print(1,mess);
sprintf(mess," Analysiser ");
print(2,mess);
delay(1500);
getlevel();
get_trigger_pattern();
delay(1000);
pattern_word(level);
v_ref();
delay(500);
getlength();
delay(500);
EX0=1;
flag_ex0=0;
full=0;
rx=0;
point=&dat[0];
search();
delay(500);
display();
goto _main;
}
init_sys()
{
int i;
EA=0;
find=0;
flag=0;
full=0;
flag_t=0;
flag_ex0=0;
backward=0;
forward=0;
changed=1;
bx=0;
rx=0;
record_length=20;
channel=0;
time=200;
level=0;
for(i=0;i<3;i++)
{
word[i]=0x00;
word[i]=0x00;
buffer[i]=0x00;
}
buf=0x00;
for(i=0;i<1000;i++)
dat[1000]=0x00;
location=&dat[0];
_location=&dat[0];
point=&dat[0];
tpoint=&dat[0];
ppoint=&dat[0];
}
getlevel()
{
sprintf(mess,"Input parameters? ");
print(1,mess);
sprintf(mess," ");
print(2,mess);
do
{}while(key_num!=7);
do
{}while(is_up==0);
delay(10);
clr_key();
sprintf(mess,"Input level:");
print(1,mess);
sprintf(mess," ");
print(2,mess);
clr_key();
do
{}while(key_num>'3'||key_num<'1');
do
{}while(is_up!=1);
level=key_num;
courser=0x8d;
write_com(courser);
write_data(level);
delay(500);
clr_key();
}
get_trigger_pattern()
{
sprintf(mess,"Input Trigger ");
print(1,mess);
sprintf(mess,"Pattern : ");
print(2,mess);
switch(level)
{
case '1': write_data('A');
delay(500);
break;
case '2': sprintf(mess,"Pattern : A & B");
print(2,mess);
delay(500);
break;
case '3': sprintf(mess,"Pattern : A&B&C");
print(2,mess);
delay(500);
break;
}
}
pattern_word(unsigned char l)
{
int i,j;
for(i=0;i<l-0x30;i++)
{
clrscr();
write_com(0x80);
write_data(0x41+i);
write_data(0x3a);
courser=0x8b;
for(j=0;j<8;j++)
{
clr_key();
do
{}while(key_num!=2&&key_num!=4&&key_num!=3);
do
{}while(is_up!=1);
write_com(courser);
if(key_num==2)
{
write_data('0');
courser--;
delay(10);
clr_key();
}
else if(key_num==4)
{
write_data('1');
courser--;
word[i]|=cmp[j];
delay(10);
clr_key();
}
else if(key_num==3)
{
write_data('X');
courser--;
_word[i]|=cmp[j];
delay(10);
clr_key();
}
delay(10);
clr_key();
}
_word[i]=~_word[i];
delay(500);
clrscr();
}
}
v_ref()
{
int step=1;
float voltage;
clr_key();
sprintf(mess,"Input REFVoltage");
print(1,mess);
do{
if(press==1&&step>=2)
{
if(key_num==2)
step--;
delay(40);
}
if(press==1&&step<16)
{
if(key_num==4)
step++;
delay(40);
}
clr_key();
voltage=0.25+0.25*(step-1);
sprintf(mess,"Step:%d V=%1.2f ",step,voltage);
print(2,mess);
}while(key_num!=7);
vref(step);
}
getlength()
{
int len=0,step=1;
sprintf(mess,"Input Rec Length");
print(1,mess);
do{
if(press==1&&step>=2)
{
if(key_num==2)
step--;
delay(40);
len=20*step;
}
if(press==1&&step<16)
{
if(key_num==4)
step++;
delay(40);
len=20*step;
}
clr_key();
sprintf(mess,"Record Length ");
print(1,mess);
sprintf(mess,"%d ",len);
print(2,mess);
}while(key_num!=7);
record_length=len;
sprintf(mess,"Input Direction");
print(1,mess);
sprintf(mess,"1:<- 2:-> ");
print(2,mess);
clr_key();
do
{}
while(key_num<'1'||key_num>'2');
do
{}while(is_up!=1);
if(key_num=='1')
{
backward=1;
sprintf(mess,"Backward ");
print(2,mess);
}
else
{
forward=1;
sprintf(mess,"Forward ");
print(2,mess);
}
}
search()
{
sprintf(mess,"Search Trigger");
print(1,mess);
sprintf(mess,"Point");
print(2,mess);
while(1)
{
if(find==1)
break;
}
sprintf(mess,"Found! ");
print(1,mess);
sprintf(mess,"Receive ");
print(2,mess);
while(1)
{
if(full==1)
break;
}
sprintf(mess,"Reveived! ");
print(1,mess);
sprintf(mess,"OK! ");
print(2,mess);
}
display()
{
bx=0;
sprintf(mess,"View data press ");
print(1,mess);
sprintf(mess,"Enter ");
print(2,mess);
delay(40);
clr_key();
do
{}while(key_num!=7||is_up!=1);
delay(10);
clr_key();
sprintf(mess,"Output Wave ");
print(1,mess);
sprintf(mess," ");
print(2,mess);
delay(500);
clr_key();
channel = 0;
location = tpoint+1;
ppoint=tpoint+1;
flag_t = 1;
do{
_location=location;
if(key_num>='0'&&key_num<='7')
{
channel=key_num-0x30;
delay(1);
clr_key();
}
if(key_num==4)
{
location++;
if(location==&dat[record_length]+1)
location=&dat[0];
delay(1);
clr_key();
}
else if(key_num==2)
{
location--;
if (location==&dat[0]-1)
location=&dat[record_length];
delay(1);
clr_key();
}
if(key_num==5)
{
if(time<255)
{
time++;
TR0=0;
TH0=TL0=time;
TR0=1;
}
delay(1);
clr_key();
}
else if(key_num==6)
{
if(time>0)
{
time--;
TR0=0;
TH0=TL0=time;
TR0=1;
}
delay(1);
clr_key();
}
if(changed==1)
lcd_disp();
if(location!=_location)
changed=1;
else changed=0;
}while(key_num!=1);
}
lcd_disp()
{
char i;
unsigned char buf[16];
for(i=0;i<16;i++)
buf[i]=0x20;
for(i=7;i>=0;i--)
{
if((*location&cmp[i])!=0)
buf[7-i]=0x31;
else
if((*location&cmp[i])==0)
buf[7-i]=0x30;
}
if(location>point)
sprintf(mess,"Location:%d",location-tpoint-1);
else
sprintf(mess,"Location:%d",location-tpoint-1+record_length);
print(1,mess);
write_com(0xc0);
for(i=0;i<16;i++)
write_data(buf[i]);
}
delay(int t)
{
int i,j;
for(i=0;i<t;i++)
for(j=0;j<100;j++);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -