这是一个老程序了,可至今没明白程序是怎么写的,哪位大神知道的话可否将其注释一下

2019-07-18 11:10发布

是关于点阵广告牌设计的,有上位机和下位机
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit H1=P1^0;
sbit H2        =P1^1;
sbit  LATCH_L        =P1^2;
sbit  OUT_L        =P1^3;
sbit  DS_H        =P1^4;
sbit  DS_L        =P1^5;
void display();
void rxd_data();
void in_data();
void RXD_232();
void INIT();
uchar  xdata TABLE[1500];
uchar BUFF[6];
uint ROW=0xfffe;
bit  ks_bit;
uint second;
uchar s;       
uint temp,time,nib;
uchar num,left,cc;
uint count;
bit xz_bit;
uint num_int,num1_int;
void delay(uint z)
{
while(z--);
}
void main()
{         

        uchar clean;
        INIT();
        while(1)
        {  


        if(xz_bit)
        if(second++>=1000)
        {
        ks_bit=1;second=0;xz_bit=0;num_int=0;num1_int=0;
         for(clean=0;clean<64;clean++)
         {
           TABLE[(count-5)+clean+49]=0x00;
         }
        }
        if(ks_bit)       
        display();
               
         
        }
}

void INIT()
{
           TMOD=0x21;
        TH0=0xfc;
        TL0=0x18;
        TH1=0xfd;
        TL1=0xfd;
        EA=1;
        TR0=1;
        ET0=1;
        TR1=1;
        SM0=0;
        SM1=1;
        REN=1;
        ES=1;



}

void RXD_232()
{



        if(RI)
        {

        second=0;
          if(ks_bit)
          {
          nib=0;
         s=0;num=0;
     cc=0;
         ROW=0xfffe;
         left=0;
        P0=255;
        H2=H1=1;
        H2=H1=0;
        count=0;
          }

            ks_bit=0;

        if(count++>=5)
        {       
        if(((count-5)*2)>=num_int&&((count-5)*2)<num_int+32)
        TABLE[((count-5)*2+64)-(num1_int)]=SBUF;
        if((count-5)*2>=32+num_int&&(count-5)*2<64+num_int)
        TABLE[(((count-5)*2)+1+64)-(num1_int+32)]=SBUF;
        if(((count-5)*2)%64==0)
        {
        num1_int=num1_int+32;
        num_int=num_int+64;
        }
        }


        RI=0;
        xz_bit=1;
        }

       
}

void display()
{
        P0=255;//0xff
        H2=H1=1;
        H2=H1=0;
                         
        in_data();
        rxd_data();       
        OUT_L=0;
        OUT_L=1;
        P0=ROW/256;
        H2=1;
        H2=0;
        P0=ROW%256;
        H1=1;
        H1=0;
        num++;
        if(num==16)num=0;
        ROW=_iror_(ROW,1);//左移
        delay(150);
}

void rxd_data()
{        uchar l,i,temp;
        if(time>=50)
        {
                  time=0;
        left++;
        if(left>=8)
                {left=0;
            cc++;  
                if(cc>=2){cc=0;nib=nib+32;
                if(nib>=count+32)nib=0;
                }
                }
        }         
           for(l=0+cc;l<4+cc;l++)
           {
           temp=BUFF[l]<<left|BUFF[l+1]>>8-left;
           for(i=0;i<8;i++)
                    {
                 
                           temp<<=1;
                        DS_L=CY;
                        LATCH_L=0;
                        LATCH_L=1;
                 }
           }
}
void in_data()
{
for(s=0;s<=2;s++)
{
BUFF[2*s+1]=TABLE[nib+s*32+1+2*num];
BUFF[2*s]=TABLE[nib+s*32+2*num];
}
}
void tim0() interrupt 1
{         
        TH0=0xfc;
        TL0=0x18;
        time++;
}
void tim1() interrupt 4
{         
                  RXD_232();
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。