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

📄 main.c

📁 本设计主要由数字信号发生器和逻辑分析仪组成
💻 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 + -