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

📄 led.c

📁 显示屏程序
💻 C
📖 第 1 页 / 共 4 页
字号:
//***********************************
void sd374(uchar dad_12)
{
    uchar xdata *pnt7=&d_374;
    pnt7=&d_374;
    *pnt7=dad_12;
}


//***********************************
//     显示子程序
//***********************************
void disp(void)
{
 uchar idata i,j,b;
 uchar xdata *pnt2=&dramm;
 sdram();  //启动所有6264
 wtdog();  //喂狗
 store=0;
                   enabl=0;
 for(j=0;j<da_high;j++)
    {
  //  sdram();  //启动所有6264
     for(i=0;i<da_loog;i++)
         {
          b=*pnt2++;
          }
      enabl=0;
      _nop_();_nop_();_nop_();_nop_();
      _nop_();_nop_();_nop_();_nop_();
      P1=j|0xd0;
      store=1;
      _nop_();_nop_();_nop_();
      store=0;
      enabl=1;
      _nop_();_nop_();_nop_();_nop_();
      _nop_();_nop_();_nop_();_nop_();
      _nop_();_nop_();_nop_();_nop_();
      _nop_();_nop_();_nop_();_nop_();

      //}
     }
    _nop_();_nop_();_nop_();_nop_();
    _nop_();_nop_();_nop_();_nop_();
    _nop_();_nop_();_nop_();_nop_();
    _nop_();_nop_();_nop_();_nop_();
    _nop_();_nop_();_nop_();_nop_();
    _nop_();_nop_();_nop_();_nop_();
    _nop_();_nop_();_nop_();_nop_();
    _nop_();_nop_();_nop_();_nop_();
        _nop_();_nop_();_nop_();_nop_();
    _nop_();_nop_();_nop_();_nop_();
    _nop_();_nop_();_nop_();_nop_();
    _nop_();_nop_();_nop_();_nop_();
    _nop_();_nop_();_nop_();_nop_();
    _nop_();_nop_();_nop_();_nop_();
    _nop_();_nop_();_nop_();_nop_();
    _nop_();_nop_();_nop_();_nop_();
        _nop_();_nop_();_nop_();_nop_();
    _nop_();_nop_();_nop_();_nop_();
    _nop_();_nop_();_nop_();_nop_();
    _nop_();_nop_();_nop_();_nop_();
    _nop_();_nop_();_nop_();_nop_();
    _nop_();_nop_();_nop_();_nop_();
    _nop_();_nop_();_nop_();_nop_();
    _nop_();_nop_();_nop_();_nop_();
        _nop_();_nop_();_nop_();_nop_();
    _nop_();_nop_();_nop_();_nop_();
    _nop_();_nop_();_nop_();_nop_();
    _nop_();_nop_();_nop_();_nop_();
    _nop_();_nop_();_nop_();_nop_();
    _nop_();_nop_();_nop_();_nop_();
    _nop_();_nop_();_nop_();_nop_();
    _nop_();_nop_();_nop_();_nop_();
        _nop_();_nop_();_nop_();_nop_();
    _nop_();_nop_();_nop_();_nop_();
    _nop_();_nop_();_nop_();_nop_();
    _nop_();_nop_();_nop_();_nop_();
    _nop_();_nop_();_nop_();_nop_();
    _nop_();_nop_();_nop_();_nop_();
    _nop_();_nop_();_nop_();_nop_();
    _nop_();_nop_();_nop_();_nop_();
    enabl=0;
}



//***********************************
//  整理要发送的数据
//***********************************
void v1_send()
{
    uchar i,checksum;
    i=0;
    checksum=0;
    da_send_count=0;
    wd_send_sbuf[0]=0x8c;                   //发送1个针头
    checksum=0x8c;
    da_send_count++;

    wd_send_sbuf[1]=da_address;                  //发送地址
    checksum+=da_address;
    da_send_count++;

    wd_send_sbuf[2]=0xc8;
    checksum+=0xc8;                             //发送状态字
    da_send_count++;

    wd_send_sbuf[3]=checksum;                   //发送异或校验
    da_send_count++;

}

//***********************************
//    读取屏号
//***********************************
void int_address()
{
    xdata uchar *pnt1=&d_address;
    da_address=*pnt1;
}

//************************************
//  汉字  ascc--点阵
//***********************************
void v2_get_word(uchar dad_count1,uchar dad_long1)       //取汉字
{
    uchar idata i,j,h,dad_1,dad_2,data1;
    uint  idata dad_addr;
    ulong idata zhi_zhen;
    uchar code *pnt_2=&data_count1;        //内码
    uchar xdata *pnt7=&d_374;

    zhi_zhen=*daw_ascc_count++-0xa1;     //取出第1个字节地址
    dad_1=*daw_ascc_count++-0xa1;        //取出第2个字节地址
    zhi_zhen*=94;                        //第1个字节地址 * 94
    zhi_zhen+=dad_1;                     //第1个字节*94 后 + 第2个字节
    zhi_zhen<<=5;                        //左移5次       (*10)
    zhi_zhen+=0x3000;//data_count;                //加上字库地址
    dad_addr=zhi_zhen&0xffff;                       //作为点阵的起始地址
    zhi_zhen<<=1;                        //左移1次        (*2)
    //----------
    zhi_zhen>>=(16-4);                   //右移12次        (取第3个字节的底4位)
    dad_2=zhi_zhen&0xf0;

    dad_2|=0x08;                         //或上0x08 作为 字库地址的高 4位

   // dad_addr-=0x3000;
  //  pnt_2=&data_count1;
    pnt_2=dad_addr|0x8000;              //点阵地址或上0x8000
    //确定 字库地址
//    for(h=0;h<2;h++)
//    {
                          //  v3_getmdp(0);    //确定第几个6264
  //      sd374(dad_2);                    //字库地址  的高4位
     *pnt7=dad_2;
     dad_2=*pnt7;
        //取出16个点阵
        data1=dad_count1/dad_long1;      //算出当前的行
        for(i=0;i<16/da_scan;i++)        //根据扫描方式16个点阵要放几个6264
        {
       //     v3_getmdp(data1/da_scan);    //确定第几个6264
            daw_6264e+=dad_count1%dad_long1;//当前列数/总列数  //每列的首行地址

      //      sd374(dad_2);                    //字库地址  的高4位

            for(j=0;j<da_scan;j++)
            {
                *daw_6264e++=~*pnt_2++;     //取出点阵放入0xf000
                *daw_6264e=~*pnt_2++;     //取出点阵放入0xf000
                *daw_6264e--;
                daw_6264e+=dad_long1;    //指针指向这1列的一行
            }
        }
        dad_count1++;                  //总共两个16字点阵, 指向下一个16点阵存放地址
//    }
}

//************************************
//  不是汉字  ascc--点阵
//***********************************
void v2_get_byte(uchar dad_count1,uchar dad_long1)       //取不是汉字
{
    uchar idata i,j,data0,data1;
    uint  idata dataa;
    uchar code *pnt_2=&data_count;      //内码

    data0=*daw_ascc_count++;            //取出1字节的ASCC码 地址
    dataa=data0*16;                    // *16   每个ASCC码占有16字节点阵
    pnt_2=&data_count;                 //点阵从0x2000开始
    pnt_2+=dataa|0x8000;               //点阵地址或上0x8000
    //确定 字库地址
    sd374(0x08);
    //取出16个点阵
    data1=dad_count1/dad_long1;        //算出当前的行
    for(i=0;i<16/da_scan;i++)          //根据扫描方式16个点阵要放几个6264
    {
        v3_getmdp(data1/da_scan);     //算出第几个6264
        daw_6264e+=dad_count1%dad_long1;//当前列数/总列数  //每列的首行地址

    //    sd374(0x08);

        for(j=0;j<da_scan;j++)
        {
            *daw_6264e=~*pnt_2++;       //取出点阵放入0xf000
            daw_6264e+=dad_long1;      //指针指向这1列的一行
        }
    }
}

//***********************************
//    读取1条信息到E
//***********************************
void v1_read(uchar *mod_or_long,uchar *speed)
{
    uchar idata j,k,dad_v1,dad_v2,dad_v3,dad_v4,dad_high1;
    uint  idata i,dad_count,dd;
    //取出第1位看是不是游动, 如果出错就 退出从第一条信息从新开始显示
    dad_v2=0;
    dad_v1=*daw_ascc_count++;
    if(dad_v1==1)
    {
        b_you=0;                                 //不是游动
        *mod_or_long=*daw_ascc_count++;          //取出 刷屏方式
        dad_count=da_loog*da_high;            //信息长度为  长乘以高/16  因为是assc
        dad_count/=16;
    }
    else if(dad_v1==2)
    {
        b_you=1;                                 //是游动


        *mod_or_long=da_loog+*daw_ascc_count++;  //游动长度
        dad_count=*mod_or_long+da_loog;//)**daw_ascc_count++/16;//信息长度为  长乘以高/16
                                                //因为是assc  且要加上头未 两黑平
        dad_high1=*daw_ascc_count++;             //游动的高度
        dad_count=dad_count*dad_high1/16;         //长乘高  得到 信息的总长度
    }
    else
    {
        dad_v2=0x8c;
    }
    if(dad_v2!=0x8c)
    {
        // 取出 停留时间 或 游动速度
        *speed=*daw_ascc_count++;

        //--------------------------------开始取信息内容
        //是游动信息
        if(b_you)
        {
            for(i=0;i<dad_count;i++)                 //一条信息的总长度
            {
                dad_v3=(*mod_or_long+da_loog);       //一条游动信息的列长度
              //游动的第1屏和最后1屏为不显示
                if((i%dad_v3<da_loog)||(i%dad_v3>=*mod_or_long))  //前一个屏长的列和最后一个屏
                {                                                //长的列里面放不显示 0xff
                    for(k=0;k<16/da_scan;k++)       //有多少行游动
                    {
                        dad_v4=i/dad_v3;                  //当前长度 / 列数长度 得到 行数
                        v3_getmdp(dad_v4/da_scan);        //当前行数/扫描行数确定第几个6264
                        daw_6264e+=i%dad_v3;              //当前列长度/总列长度 得到正真的列
                                                      //列的首行地址
                        for(j=0;j<da_scan;j++)                 //1个ascc 16个点阵
                        {
                            *daw_6264e=0xff;
                            daw_6264e+=dad_v3;
                        }
                    }
                }
              //游动信息 放入6264e中
                else
                {
                //是   汉字的话就要有  两个ascc码
                    if(*daw_ascc_count>=0xa1)
                    {

                        v3_getmdp(0);                 //2007.8.17
                        v2_get_word(i,dad_v3);      //取汉字
                        i++;
                    }
                //不是  汉字的话就要有  1个ascc码
                    else
                    {
                        v2_get_byte(i,dad_v3);      //取 不是汉字
                    }
                }
            }
        }
        //不是游动信息
        else
        {
            for(i=0;i<dad_count;i++)                 //一条信息的总长度
            {
                //是   汉字的话就要有  两个ascc码
                if(*daw_ascc_count>=0xa1)
                {
                    v3_getmdp(0);    //确定第几个6264      //2007.8.17
                    v2_get_word(i,da_loog);      //取汉字
                    v3_getmdp(0);    //选种 628128
                    i++;
                }
                //不是  汉字的话就要有  1个ascc码
                else
                {
                    v2_get_byte(i,da_loog);      //取 不是汉字
                }
            }
        }
    }
    else     //信息出错就从头开始显示信息
    {
        daw_ascc_count=&d_receive; //指针指向数据体起始地址
    }
}


//***********************************
//    确定6264和数据指针
//***********************************
void v3_getmdp(uchar high_1)
{
    uchar idata  mod6264;           //6264的片选
    mod6264=high_1/da_scan;        //取莫从而确定  是第几个6264
    sdram0(mod6264);               //选定6264
}


//***********************************
//   放一行数据
//***********************************
void v3_movdph(uchar high_2)
{
    uchar idata  i;
    uchar idata   addr_1;                 //信息的地址指针
    addr_1=high_2*da_loog;              //行数 乘以 一行的长度  从得到1行的第一个字节的地址
    daw_6264e+=addr_1;
    daw_6264f+=addr_1;
    for(i=0;i<da_loog;i++)
    {
        if(!b_clean)
        {
            *daw_6264f++=*daw_6264e++;      //取一行信息
        }
        else
        {
            *daw_6264f++=0xff;             //消屏
        }
    }
}

//***********************************
//    1从上往下显示
//***********************************
void v2o_up_do()
{
    uchar idata  i,j,high_count;         //高计数器

    for(i=0;i<da_high;i++)            //从0行扫描到最后一行
    {
        v3_getmdp(i);                //确定6264和数据指针
        v3_movdph(i);                //放1行数据
        for(j=0;j<da_loog/2;j++)
        {
            disp();
        }
    }
}

//***********************************
//    2从下往上显示
//***********************************
void v2o_do_up()
{

⌨️ 快捷键说明

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