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

📄 debug.c

📁 电子条屏程序
💻 C
📖 第 1 页 / 共 2 页
字号:
   page_flash=0x43000/0x7fff;
   xp_flash=0x43000|0x8000;
   IO_CE=1;
   EXT_ADDR=page_flash;
   IO_CE=0;
   xp_flash=xp_flash+number*5;
   for(i=0;i<4;i++)
   {
     num[i]=*(xp_flash+i);
   }
   setvalue=(num[0]-0x30)*1000+(num[1]-0x30)*100+(num[2]-0x30)*10+num[3]-0x30;


   return(setvalue);

}
void SaveWord(uchar xdata *xp_ram)
{
   uint data i;
   uint data j;
   uchar data k;
   uchar data page_flash;
   uchar xdata *xp_flash;
   uchar data row;

     page_flash=0x44000/0x7fff;
     xp_flash=0x44000|0x8000;
     for(k=0;k<128;k++)
     {
               IO_CE=1;
               EXT_ADDR=0;
               IO_CE=0;
               XBYTE[0xD555]=0xaa;      //load 0xaa to adresss 5555
               XBYTE[0xAAAA]=0x55;      //load 0x55 to address 2aaa
               XBYTE[0xD555]=0xa0;      //load 0xa0 to adresss 5555
               IO_CE=1;
               EXT_ADDR=page_flash;
               IO_CE=0;

                for(i=0;i<256;i++)
                {
                    if(xp_ram<0x7fff)
                    {
                      *xp_flash++=*xp_ram++;
                    }
                    else
                    {
                       *xp_flash++=' ';
                    }

                }
                  delay(10000);
     }

}


void RamToFlash(uint  offset)
{
   uint data i;
   uint data j;
   uchar data page_flash;
   uchar xdata *xp_ram;
   uchar xdata *xp_flash;
   ulint data row1;
   uchar data row;
    union
         {
          uchar  byte[4];
          unsigned long int  dword;
          uint  word[2];
         }  word;

          xp_ram=0;

         {
            for(row=0;row<16;row++)
            {
               row1=row;
               word.dword=row1*0x3000+offset;
               page_flash=word.byte[1]+10;
               xp_ram=row*2048;
               xp_flash=word.word[1]|0x8000;

               for(j=0;j<8;j++)
               {
                  IO_CE=1;
                  EXT_ADDR=0;
                  IO_CE=0;
                  XBYTE[0xD555]=0xaa;      //load 0xaa to adresss 5555
                  XBYTE[0xAAAA]=0x55;      //load 0x55 to address 2aaa
                  XBYTE[0xD555]=0xa0;      //load 0xa0 to adresss 5555
                  IO_CE=1;
                  EXT_ADDR=page_flash;
                  IO_CE=0;
                   for(i=0;i<256;i++)
                   {
                      *xp_flash++=*xp_ram++;
                   }
                  delay(10000);
               }

            }
         }
}
//******************************************************************************

void  ClearRam()
{
  uchar xdata *xp_ram;
   xp_ram=0x0000;
   while(xp_ram<0x7fff)
   {
     *xp_ram++=0xff;
   }
}

void  CreateFnt16(uchar kind)    //构建16点阵显示RAM
{
   uchar xdata *xp_ram;
   uchar xdata *xp_rom;
   uchar code  *xp_code;
   uchar xdata *xp_word;
   uchar data  temp;
   uchar data  row;    //点阵行,16点阵字为16行
   uchar data  col;   // 点阵列,16点阵字为16列
   uint  data  length;     // 汉字长度,即多少个汉字,32K RAM 存16点阵字则可存储128字,共2048点
   uint  data  length1;
   uchar data  low ;
   uchar data  high;
   uchar data  asc;
   unsigned long int data  qu_code;
   uint  wei_code;
   unsigned long int data position;
   uint data  page;
   uchar data page_flash;
   uchar data   character;
   bit   flag;
   uchar  word_end;

    union
         {
          uchar  bytel;
          uchar  byteh;
          uint  word;
         }  word;


   xp_ram=0x0000;
   length=0;
   flashaddr=0;
   length1=0;
   word_end=0;
   flag=0;
   xp_word=0x4000|0x8000;
   IO_CE=1;
   EXT_ADDR=8;
   IO_CE=0;
   character=*xp_word;
  //  while(character!=0x0D)
   while(word_end<4)
   {

     if((character==0x0d)||(character==0x0a))
     {
                   word_end++;
                   character=*xp_word++;
     }
     else

     {
       word_end=0;
       if(character<0xa0)          //  ASC 处理部分
       {
            asc=character;

            IO_CE=1;
            EXT_ADDR=8;
            IO_CE=0;
            xp_word++;
            character=*xp_word;

            position=asc*16;               //  字符在ASC16中的偏移位置 
            position=position+0x42000;     // ASC字库在存储器中的偏移位置 
            IO_CE=1;
            page=position/32768;           //  计数页码 32K/页
            EXT_ADDR=page;
            IO_CE=0;
            page=(position%32768);
            xp_rom=(page|0x8000);          // 字库芯片在硬件电路中的地址
            for(row=0;row<16;row++)
            {
               xp_ram=row*2048+length*8;       // 每行数据为2048个字节
               low=*xp_rom++;
               for(col=0;col<8;col++)      // 将字库中点阵数据变换为LED显示屏把需数据
               {
                    low<<=1;
                    temp=(CY&RED0)^DAT_INVERSE;
                    *xp_ram++=temp;


                }

            }
            if(length<255)
            {
                 length++;
                 flag=~flag;

            }
            else
            {
                 RamToFlash(length1);
                 length1+=2048;
                 xp_ram=0;
                 length=0;
                 flag=0;
            }

       }
       else

       {
         IO_CE=1;
         EXT_ADDR=8;
         IO_CE=0;
         character=*xp_word++;

         qu_code=character-0xa1;             //区码

         character=*xp_word++;
         wei_code=character-0xa1;            //位码
         character=*xp_word;
         position=32*(qu_code*94+wei_code);     //根据区位码计算汉字点阵在字库中的位置 
         IO_CE=1;                               // 选择外部IO
         page=position/32768;                   //计算页码
         EXT_ADDR=page;                         //将页码写入扩展地址寄存器
         IO_CE=0;                               // 选 择EEPROM
         page= (position%32768);
         xp_rom=(page|0x8000);
         for(row=0;row<16;row++)
         {

            xp_ram=row*2048+length*8;
            high=*xp_rom++;                     // 汉字点阵左半部分
            low=*xp_rom++;;                     // 汉字点阵右半部分
            for(col=0;col<8;col++)
            {
               high<<=1;
               temp=(CY&RED0)^DAT_INVERSE;
              *xp_ram++=temp;


            }

            for(col=0;col<8;col++)
            {
               low<<=1;
               temp=(CY&RED0)^DAT_INVERSE;
              *xp_ram++=temp;

            }
         }
            if(length<253)
            {
                 length+=2;


            }
            else
            {
                 RamToFlash(length1);
                 length1+=2048;
                 xp_ram=0;
                 length=0;
                 flag=0;
            }

      }
   }
 }

}

void init()
     {

      uchar i,j;
      uchar xdata *xp2;
      uchar xdata *xp1;
      uchar  idata  *ip_time;
      uchar sec;

      DE=0;
      IO_CE=1;
      CT_REG=CT_1;         // LED显示板上OE
      SC_REG=1;
      IN_OE=0;
      ClearRam();
      EA=1;
      SCON=0X50;          //  SM0/SM1/SM2/REN/TB8/RB8/TI/RI
      TMOD=0X21;

      TH1=0XF4;
      TL1=0XF4;
   //   TH1=0XF7;
   //   TL1=0XF7;
      TR1=1;
      ES=1;
      PS=1;
      IT0=1;
      TR0=1;
      TH0=0Xf8;
      TL0=0Xf8;
      dp.dph=0;

      charge();
      ip_time=timemem;
      v_Get1302(ip_time);
      sec=*ip_time;
      if(sec>0x7f)
                *ip_time=0;
      v_Set1302(ip_time);
    //  SetTime();

     }

uchar xdata *CompareBuffer(uchar code * pc_str)    // 在RAM中搜索指定字符串

{
  uchar  data i;
  uchar  xdata *xp_ram;
  uchar  code   *cp_str;
  uchar  xdata  *xp_ram1;
  bit    same;

  xp_ram=0;
  for(xp_ram=0;xp_ram<0x7fff;xp_ram++)
  {
    cp_str=pc_str;
    xp_ram1=xp_ram;
    while(*cp_str)
    {
     if(*xp_ram1!=*cp_str)
     {
         same=0;
         break;
     }
     else
     {
        same=1;
        cp_str++;
        xp_ram1++;
        _nop_();
     }
    }
     if(same)
            break;

   }
  return(xp_ram);
}

void ProcessBuffer()
{
   uchar xdata *xp_ram;

   xp_ram=CompareBuffer("*%%%%%#:");
   {
    if(xp_ram<0x7fff)
    {
       SetTime(xp_ram+8);
       ledflag=1;

    }

   }

   xp_ram=CompareBuffer("*$$$$$#:");
   if(xp_ram<0x7fff)
   {
      SaveWord(xp_ram+8);  //将文字存入FLASH
      CreateFnt16();
      pt_col=START_PT;
     _nop_();
   }


}


void main()
{
      init();

      while(1)
     {

            v_Get1302(timemem);
            led_disp();

            if(timeout>1000)
            {
                 xp_rbuffer=0;
                 ET0=0;
                IO_CE=1;
                 CT_REG=CT_0;
                 ET0=1;

            }
            else
            {
                timeout++;
            }
            if(receiveflag)
            {
               EA=0;
               IO_CE=1;
               CT_REG=CT_1;
               ProcessBuffer();
               receiveflag=0;
               IO_CE=1;
               CT_REG=CT_0;
               EA=1;
            }
     }

}


void serial()  interrupt 4
{
   uchar i;

  i=SBUF;
  RI=0;
  timeout=0;
  if(!receiveflag)
        *xp_rbuffer++=i;
   if((i==0x0A)||(i==0x0d))
   {
       over_count++;
       if(over_count>4)
       {
               xp_rbuffer=0;
               over_count=0;
               receiveflag=1;


       }
   }
   else
   {
       over_count=0;

   }
 _nop_();
}

void  intt0()  interrupt  1
   {


    uchar xdata *px2;
    uchar xdata *px1;
    ulint  row1;
    uint  addr;
    uchar temp;
    uchar page1;
    uchar page;
    uint  offset;
    uchar  dot;
    union
         {
          uchar  byte[4];
          unsigned long int  dword;
          uint  word[2];
         }  word;
    row1=row;

    word.dword=row1*0x3000+pt_col;
    page=word.byte[1]+10;
    IO_CE=1;
    EXT_ADDR=page;
    IO_CE=0;
    px1=(word.word[1]|0x8000);
    for(dot=0;dot<128;dot++)
    {
                       temp=*px1++;
    }

    IO_CE=1;    //选择外部IO,也就是使CPLD内部锁存器有效,使eeprom无效
    SC_REG=0;    // 595 锁存
    SC_REG=1;
    SCAN=row;//^0xff;    // 行扫描 输出
    row++;       // 下一行
    if(row&0x10)
    {
               row=0;     // 扫完16行回到第1行
               if(pt_col<=4096-160)
               {
                      pt_col++;
               }
               else
               {
                      pt_col=START_PT;


               }
    }

     TH0=0Xf5;
     TL0=0X00;
   }


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -