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

📄 lcd.c.bak

📁 压缩包中包括多个常用的汇编
💻 BAK
📖 第 1 页 / 共 3 页
字号:
/* 作  者:spot                                                             */
/* 输  入:                                                                 */
/*         col           图型的起始位置0~121                                */
/*         layer         图形的位置(Y坐标)0-下半部分 非0-上半部分           */
/*         n             所要显示的十进制数字长度                           */
/*         mode          显示模式,0正显,1反显                             */
/*                                                                          */
/* 输  出:无                                                               */
/*                                                                          */
/* 历史记录:                                                               */
/*  spot          2005-06-28     Creat Inital version. (Version 1.0)        */
/****************************************************************************/
void disp_ram_data(u_char col,u_char layer,u_char n,u_char mode)
{
    while(n--)
    {
        if (mode)
            disp_one_ascii(col,layer,disp_buffer[n]+0x30,1);
        else
            disp_one_ascii(col,layer,disp_buffer[n]+0x30,0);

        col += 8;
    }
}

/****************************************************************************/
/* 函数名:dprintf                                                          */
/* 功  能:通用混合字串显示                                                 */
/* 作  者:spot                                                             */
/* 输  入:                                                                 */
/*         col     图型的起始位置0~121                                      */
/*         layer   图形的位置(Y坐标)0-下半部分 非0-上半部分                 */
/*         ptr     显示字串指针                                             */
/*         mode    显示模式,0正显,1反显                                   */
/*                                                                          */
/* 输  出:无                                                               */
/*                                                                          */
/* 历史记录:                                                               */
/*  spot          2005-06-28     Creat Inital version. (Version 1.0)        */
/****************************************************************************/
void dprintf(u_char col,u_char layer,u_char *ptr,u_char mode)
{
    u_char c1,c2;
    u_char i,j,k;
    u_char ulen;
    u_char ucol,ulayer;

    ulen = 0;
    ucol = col;
    ulayer = layer;

    while (ptr[ulen]!= 0)
    {
        ulen++;       /* 探测字串长度 */
    }

    i=0;
    while (i<ulen)
    {
        c1 = ptr[i];
        c2 = ptr[i+1];

        /* ASCII字符与汉字内码的区别在于128做分界;大于128的为汉字码 */
        if(c1 <=128)  /* ASCII */
        {
            if (mode)
                disp_one_ascii(ucol,ulayer,c1,1);
            else
                disp_one_ascii(ucol,ulayer,c1,0);

            ucol+=8;
            i++;      /* ASCII码的处理 */
        }
        else          /* 中文 */
        {
            for (j=0; j<sizeof(hz16)/sizeof(hz16[0]); j++)
            {         /* 查找定位当前汉字的点阵区 */
                if ((c1 == hz16[j].index[0]) && (c2 == hz16[j].index[1]))
                    break;
            }

            for (k=0; k<32; k++)
            {
                if (mode)
                    dot_buffer[k]=~hz16[j].zimo[k];
                else
                    dot_buffer[k]= hz16[j].zimo[k];
            }

            draw_bmp(ucol,ulayer,16,dot_buffer);
            ucol += 16;
            i += 2;   /* 中文的处理 */
        }
    }
}


/****************************************************************************/
/* 函数名:num_to_buff                                                      */
/* 功  能:将数值转换为ASCII序列,保存在全局变量显示缓冲区中,内部使用      */
/* 作  者:spot                                                             */
/* 输  入:num                                                              */
/* 输  出:无                                                               */
/*                                                                          */
/* 历史记录:                                                               */
/*  spot          2005-06-28     Creat Inital version. (Version 1.0)        */
/****************************************************************************/
void num_to_buff(u_int num)
{
    u_int i=0;
    for (i=0; i<14; i++)
    {
        disp_buffer[i]=0;
    }

    for (i=0; i<10; i++)
    {
        disp_buffer[i] = num%10;
        num = num/10;
        if (num==0)
            break;
    }
}

/****************************************************************************/
/* 函数名:bcd_to_buff                                                      */
/* 功  能:将BCD码转换为ASCII序列,保存在全局变量显示缓冲区中,内部使用     */
/* 作  者:spot                                                             */
/* 输  入:bcd                                                              */
/* 输  出:无                                                               */
/*                                                                          */
/* 历史记录:                                                               */
/*  spot          2005-08-28     Creat Inital version. (Version 1.0)        */
/****************************************************************************/
void bcd_to_buff(u_char bcd)
{
    u_int i=0;
    for (i=0; i<14; i++)
    {
        disp_buffer[i]=0;
    }

    disp_buffer[0] = (bcd & 0x0f);
    disp_buffer[1] = ( (bcd & 0xf0) >> 4 );
}

/* 以下函数为固定液晶显示内容函数 */
void show_title(void)
{
    lcd_clr();
    dprintf(0,0,"   欢迎使用    ",0);
    dprintf(0,1,"圣通科技报警器 ",0);
}

void show_setmenu_a(void)
{
    lcd_clr();
    dprintf(0,0,"a设置温度阈值  ",1);
    dprintf(0,1,"a设置模入阈值  ",0);
}

void show_setmenu_b(void)
{
    lcd_clr();
    dprintf(0,0,"a设置温度阈值  ",0);
    dprintf(0,1,"a设置模入阈值  ",1);
}

void show_setmenu_c(void)
{
    lcd_clr();
    dprintf(0,0,"a设置模入阈值  ",0);
    dprintf(0,1,"a设置光强阈值  ",1);

}

void show_setmenu_d(void)
{
    lcd_clr();
    dprintf(0,0,"a设置模入阈值  ",1);
    dprintf(0,1,"a设置光强阈值  ",0);

}

/* 显示温度阈值上限设置 */
void show_temp_limit_high(u_char high_limit, u_char low_limit)
{
    lcd_clr();
    dprintf(0,0,"    温度阈值   ",0);
    dprintf(8,1,"上限",1);
    num_to_buff(high_limit);
    disp_ram_data(40,1,2,1);

    dprintf(71,1,"下限",0);
    num_to_buff(low_limit);
    disp_ram_data(103,1,2,0);
}

/* 显示温度阈值下限设置 */
void show_temp_limit_low(u_char high_limit, u_char low_limit)
{
    lcd_clr();
    dprintf(0,0,"    温度阈值   ",0);
    dprintf(8,1,"上限",0);
    num_to_buff(high_limit);
    disp_ram_data(40,1,2,0);

    dprintf(71,1,"下限",1);
    num_to_buff(low_limit);
    disp_ram_data(103,1,2,1);
}

/* 显示模拟量输入阈值上限设置 */
void show_analog_limit_high(u_int high_limit, u_int low_limit)
{
    lcd_clr();
    dprintf(0,0,"    模入阈值   ",0);
    dprintf(0,1,"上",1);
    num_to_buff(high_limit);
    disp_ram_data(16,1,4,1);

    dprintf(61,1,"下",0);
    num_to_buff(low_limit);
    disp_ram_data(77,1,4,0);
}

/* 显示模拟量输入阈值下限设置 */
void show_analog_limit_low(u_int high_limit, u_int low_limit)
{
    lcd_clr();
    dprintf(0,0,"    模入阈值   ",0);
    dprintf(0,1,"上",0);
    num_to_buff(high_limit);
    disp_ram_data(16,1,4,0);

    dprintf(61,1,"下",1);
    num_to_buff(low_limit);
    disp_ram_data(77,1,4,1);
}

/* 显示光强阈值上限设置 */
void show_light_limit_high(u_char high_limit, u_char low_limit)
{
    lcd_clr();
    dprintf(0,0,"    湿度阈值   ",0);
    dprintf(8,1,"上限",1);
    num_to_buff(high_limit);
    disp_ram_data(40,1,2,1);

    dprintf(71,1,"下限",0);
    num_to_buff(low_limit);
    disp_ram_data(103,1,2,0);
}

/* 显示光强阈值下限设置 */
void show_light_limit_low(u_char high_limit, u_char low_limit)
{
    lcd_clr();
    dprintf(0,0,"    湿度阈值   ",0);
    dprintf(8,1,"上限",0);
    num_to_buff(high_limit);
    disp_ram_data(40,1,2,0);

    dprintf(71,1,"下限",1);
    num_to_buff(low_limit);
    disp_ram_data(103,1,2,1);
}

/* 显示继电器开状态 */
void show_relay_on(void)
{
    lcd_clr();
    dprintf(0,0,"  继电器   开  ",0);
}

/* 显示继电器关状态 */
void show_relay_off(void)
{
    lcd_clr();
    dprintf(0,0,"  继电器   关  ",0);
}

/* 显示模拟量输出值 */
void show_analog_out(u_int analog_data)
{
    lcd_clr();
    dprintf(16,0,"模拟量输出",0);
    num_to_buff(analog_data);
    disp_ram_data(32,1,4,0);
}

/* 显示当前温度、光强、模拟量输入、开关量输入 */
void show_current_environment(u_char temp, u_char lumin, u_int analog_in, bit switch_in)
{
    lcd_clr();
    dprintf(0,0,"温度",0);
    num_to_buff(temp);
    disp_ram_data(32,0,2,0);  /* 在lcd第一行左半部分显示温度 */

    dprintf(64,0,"光强",0);
    num_to_buff(lumin);
    disp_ram_data(96,0,2,0);  /* 在lcd第一行右半部分显示光强 */

    dprintf(0,1,"模入",0);
    num_to_buff(analog_in);
    disp_ram_data(32,1,4,0);  /* 在lcd第二行左半部分显示模拟量输入 */

    dprintf(64,1,"开入",0);
    if (switch_in)
        dprintf(104,1,"1",0);
    else
        dprintf(104,1,"0",0);  /* 在lcd第二行右半部分显示开关量输入 */
}

/* 显示当前时间 */
void show_time(void)
{
    lcd_clr();

    bcd_to_buff(date[0]);
    disp_ram_data(0,0,2,0);
    dprintf(16,0,"年",0);

    bcd_to_buff(date[1]);
    disp_ram_data(40,0,2,0);
    dprintf(56,0,"月",0);

    bcd_to_buff(date[2]);
    disp_ram_data(80,0,2,0);
    dprintf(96,0,"日",0);


    bcd_to_buff(date[4]);
    disp_ram_data(0,1,2,0);
    dprintf(16,1,"时",0);

    bcd_to_buff(date[5]);
    disp_ram_data(40,1,2,0);
    dprintf(56,1,"分",0);

    bcd_to_buff(date[6]);
    disp_ram_data(80,1,2,0);
    dprintf(96,1,"秒",0);
}

⌨️ 快捷键说明

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