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

📄 led.c

📁 显示屏程序
💻 C
📖 第 1 页 / 共 4 页
字号:




//***********************************
//    进屏方式
//***********************************
void v1_int(uchar disp_mod1)
{
    uchar idata  disp_mod2;       //显示方式
    if(!b_fnew)                   //有新信息   就推出显示
    {
    if(!b_clean)
    {
        disp_mod2=disp_mod1&0xf0;    //高位为进屏幕显示方式
    }
    else
    {
        disp_mod2=disp_mod1&0x0f;    //高位为进屏幕显示方式
        disp_mod2<<=4;
    }
    switch(disp_mod2)
    {   //无方式
        case 0x00:
        {
        }
        break;
        //1   从上往下显示
        case 0x10:
        {
            v2o_up_do();
        }
        break;
        //2   从下往上显示
        case 0x20:
        {
            v2o_do_up();
        }
        break;
        //3   从左向右显示
        case 0x30:
        {
            v2o_le_ri();
        }
        break;
        //4   从右向左显示
        case 0x40:
        {
            v2o_ri_le();
        }
        break;
        //5  上下开门
        case 0x50:
        {
            v2o_updo_open();
        }
        break;
        //6  上下关门
        case 0x60:
        {
            v2o_updo_close();
        }
        break;
        //7  向右百叶
        case 0x70:
        {
            v2o_right_leaf();
        }
        break;
        //8  向下百叶
        case 0x80:
        {
            v2o_down_leaf();
        }
        break;
        //9  左右开门显示
        case 0x90:
        {
            v2o_leri_open();
        }
        break;
        //10 左右关门显示
        case 0xa0:
        {
            v2o_leri_close();
        }
        break;
        //11 向左百叶
        case 0xb0:
        {
            v2o_left_leaf();
        }
        break;
        default:
        {

        }
        break;
    }
   }
    //清楚消屏标志
    b_clean=0;
}


//**********************************
//   左移子程序
//**********************************
void v2_left_mov(dad_long2)
{
    uchar idata j,daa;
    uchar  idata i,h,dad_1;

    dad_1=dad_long2+da_loog;
    for(i=0;i<da_high;i++)
    {
        v3_getmdp(i);
        daw_6264e+=i*dad_1;
        for(j=0;j<dad_1;j++)
        {
            daa=*daw_6264e--&0x80;       //取出当前位的第8位
            if(daa)
                daa=0x01;
            else
                daa=0x00;
            *daw_6264e++|=daa;           //前一位的第1位或上当前位的第8位
            *daw_6264e++<<=1;            //当前位左移
        }
        disp();
    }
}


//***********************************
//    游动显示
//***********************************
void v1_you1(uchar dad_yseep1,uchar dad_ylong1)
{
    uchar idata j,h,g,q,i1;
    uint  idata i;
    uchar idata dad_val9,dad_vala,p;        //临时数据

    for(i=0;i<dad_ylong1*8;i++)               //要移动的位数
    {
        v2_left_mov(dad_ylong1);           //整屏左移1位
        //取出显示内容
        for(j=0;j<da_high;j++)             //取出1屏信息
        {
            v3_getmdp(j);                 //由当前的行数 确定用到的6264 和f,e的起始地址
            daw_6264e+=j*(dad_ylong1+da_loog);         //取出每行的首地址
            daw_6264f+=j*da_loog;
            for(h=0;h<da_loog;h++)
            {
                *daw_6264f++=*daw_6264e++; //取出1行信息
            }
        }
        //游动速度
        for(g=0;g<1;g++)
        {
            disp();
        }
    }
}
   /*
    for(i=0;i<dad_ylong1;i++)              //游动的长度
    {
    //-----------------------------
    for(i1=0;i1<8;i1++)
    {
    //for(i=0;i<16;i++)//dad_ylong1;i++)              //游动的长度
    //{


        for(j=0;j<da_high;j++)             //p屏的高度   (左移一屏,移8个位)
        {
            v3_getmdp(j);                  //由当前的行数 确定用到的6264 和f,e的起始地址
            daw_6264e+=j*dad_ylong1+i;     //确定屏每1行 游动的起始
            daw_6264f+=j*da_loog+i%da_high; //确定显示每1行的起始地址
//            for(h=0;h<da_loog;h++)         //屏的长度     (左移一行,移8个位)
//            {
                dad_val9=*daw_6264e;        //取出一个字节  为左移作准备
                //--------------------------取出前1个字节的数据
                dad_vala=*daw_6264f;
                                            //

                 dad_val9<<=i1;            //移动下1位     开始=0;也就是不移动

                 dad_vala<<=1;

//                for(g=0;g<8;g++)           //1个字节8位数据左移  (左移一个字节)
//                {
                //左移子程序
                    p=dad_val9&0x80;          //取出要移动数据的地8位
                    if(p)
                    {
                        dad_vala|=0x01;      // 如果地8位为高 则地1位也为高
                    }
                    else
                    {
                        dad_vala&=0xfe;      // 如果地8位为底 则地1位也为底
                    }
                    *daw_6264f=dad_vala;     //移动1位就取1回数据去显示
                    //游动速度
                    for(q=0;q<dad_yseep1;q++)
                    {
                        disp();
                    }

//                    dad_val9<<=1;            //移动下1位
//                    dad_vala<<=1;
//                }
//                *daw_6264e++;              //指针指向 移动的下一个字节
//                *daw_6264f++;              //指针指向 移动的下一个字节
//            }
        }
        //---
    }
    }
    //--
//    }
}             */


//***********************************
//    游动显示              8位1移
//***********************************
void v1_you(uchar dad_yseep1,uchar dad_ylong1)
{
    uchar idata i,j,h,p,g;
    for(i=0;i<=dad_ylong1;i++)
    {
        if(b_fnew)                    //有新信息就退出
        {
            break;
        }
     //取出显示内容
        for(j=0;j<da_high;j++)             //取出1屏信息
        {
            v3_getmdp(j);                 //由当前的行数 确定用到的6264 和f,e的起始地址
            daw_6264e+=j*(dad_ylong1+da_loog)+i;         //取出每行的首地址
            daw_6264f+=j*da_loog;
            for(h=0;h<da_loog;h++)
            {
                *daw_6264f++=*daw_6264e++; //取出1行信息
            }
        }
     //游动速度
        for(g=0;g<dad_yseep1;g++)
        {
            if(b_fnew)                //有新信息就退出
            {
                break;
            }
            disp();
        }
    }
}

//***********************************
//    主程序
//***********************************
void main()
{
    uchar idata i,j,h,dad_yseepd;
    uchar idata dad_ylong; //游动的速度和长度
    static uchar n_all;             // 总的信息条数
    static uchar n_count;           // 信息条数计数器
    static uchar disp_mod;          // 显示格式
    uchar xdata  *pntt=&dram;
    uchar xdata  *pnt2=&d_rom0;      // 200H  是总的信息条数据

    wtdog();                        // 喂狗
    int_stant();                    // 程序初始化
    int_discontinuity();            // 中断初始化
    int_address();                  // 读屏号
    v1_send();                      // 整理正确的应答

    while(1)
    {
        pnt2-=1;
        n_all=*pnt2++;              //取出总的信息条数
        if(n_all!=*pnt2)            //两个存放信息总条数单元 内容不同的话就认为信息
        {                             //有信息也是错的
            n_all=0xff;
        }
                                      //-----测试
                                   //   b_fnew=1;
                                    //  n_all=3;
                                      //-----
    //没有信息的显示
        if(n_all==0xff)
        {
        //-------------------屏初始  为128 * 64 的刷屏
            da_high=0x10;                //屏高 64点
            da_loog=0x10;                //屏长128点
            da_scan=0x10;                //扫描 16扫
            disp_mod=0;                  //从0方式开始显示
            for(disp_mod=0;disp_mod<=0xbb;disp_mod+=0x11)       //00--0xbb  12种扫描方式
            {
                                  //显示方式梯增
                b_clean=0;                       //=0刷屏  标志
                v1_int(disp_mod);                //进屏显示
                for(i=0;i<50;i++)
                {
                    //[判断有无新信息
                    if(b_fnew)                  //有新信息
                    {
                       disp_mod=0xcc;
                       break;                   //有新信息  推出刷屏
                    }
                    disp();                      //停留时间
                }
                b_clean=1;                     //=1清屏信息  标志
                v1_int(disp_mod);              //进屏显示
            }
            b_fnew=0;                          // 清出 新信息标志位
        }



    //有信息 的  显示信息
        else
        {
            n_count=0;                                //从第1幅内容开始显示
            daw_ascc_count=&d_receive;                      //指针指向数据体起始地址
            for(n_count=0;n_count<n_all;n_count++)
            {
                v1_read(&dad_ylong,&dad_yseepd);      //将1条信息读入6264的E
            //不是游动信息
                if(!b_you)
                {
                    disp_mod=dad_ylong;                   //取显示方式
                    seep=dad_yseepd;                      //取停留时间
                    b_clean=0;                       //=0刷屏  标志
                    v1_int(disp_mod);                 //进屏方式
                    for(i=0;i<=seep;i++)              //停留时间
                    {
                    //[判断有无新信息
                        if(b_fnew)                  //有新信息
                        {
                           n_count=0xfe;
                           break;                   //有新信息  推出刷屏
                        }
                        disp();
                    }

                    b_clean=1;                        //=1清屏信息  标志
                    v1_int(disp_mod);                 //进屏显示
                }
            //是游动信息
                else
                {
                    v1_you(dad_yseepd,dad_ylong);     //游动显示
                }
            }
            b_fnew=0;                          // 清出 新信息标志位
        }
    }
}














⌨️ 快捷键说明

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