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

📄 lcd.c.bak

📁 压缩包中包括多个常用的汇编
💻 BAK
📖 第 1 页 / 共 3 页
字号:
};

/****************************************************************************/
/* 函数名:send_mi                                                          */
/* 功  能:发指令instruction到主窗口                                        */
/* 作  者:spot                                                             */
/* 输  入:instruction                                                      */
/* 输  出:无                                                               */
/*                                                                          */
/* 历史记录:                                                               */
/*  spot          2005-06-28     Creat Inital version. (Version 1.0)        */
/****************************************************************************/
void send_mi(u_char instruction)
{
    E2 = 1;
    E1 = 1;
    RS = 0;                 /* 指令   */
    RW = 0;                 /* 写触发 */
    _nop_();
    lcd_data = instruction; /* 指令码 */
    _nop_();
    E1 = 0;                 /* 关M    */
    _nop_();
}

/****************************************************************************/
/* 函数名:send_md                                                          */
/* 功  能:发数据data到主窗口                                               */
/* 作  者:spot                                                             */
/* 输  入:c_data                                                           */
/* 输  出:无                                                               */
/*                                                                          */
/* 历史记录:                                                               */
/*  spot          2005-06-28     Creat Inital version. (Version 1.0)        */
/****************************************************************************/
void send_md(u_char c_data)
{
    E2 = 1;
    E1 = 1;                 /* 开M    */
    _nop_();
    RS = 1;                 /* 数据   */
    RW = 0;                 /* 写触发 */
    _nop_();
    lcd_data = c_data;      /* 数据   */
    _nop_();
    E1 = 0;                 /* 关M    */
    _nop_();
}

/****************************************************************************/
/* 函数名:send_si                                                          */
/* 功  能:发指令instruction到从窗口                                        */
/* 作  者:spot                                                             */
/* 输  入:instruction                                                      */
/* 输  出:无                                                               */
/*                                                                          */
/* 历史记录:                                                               */
/*  spot          2005-06-28     Creat Inital version. (Version 1.0)        */
/****************************************************************************/
void send_si(u_char instruction)
{
    E2 = 1;                 /* 开S    */
    _nop_();
    RS = 0;                 /* 指令   */
    RW = 0;                 /* 写触发 */
    _nop_();
    lcd_data=instruction;   /* 指令码 */
    _nop_();
    E2 = 0;                 /* 关S    */
    _nop_();
}

/****************************************************************************/
/* 函数名:send_sd                                                          */
/* 功  能:发数据data到从窗口                                               */
/* 作  者:spot                                                             */
/* 输  入:c_data                                                           */
/* 输  出:无                                                               */
/*                                                                          */
/* 历史记录:                                                               */
/*  spot          2005-06-28     Creat Inital version. (Version 1.0)        */
/****************************************************************************/
void send_sd(u_char c_data)
{
    E2 = 1;
    _nop_();
    RS = 1;                 /* 数据   */
    RW = 0;                 /* 写触发 */
    _nop_();
    lcd_data = c_data;
    _nop_();
    E2 = 0;
    _nop_();
}

/****************************************************************************/
/* 函数名:wait_ready                                                       */
/* 功  能:等待ready:等待LCD内部操作完成                                    */
/* 作  者:spot                                                             */
/* 输  入:无                                                               */
/* 输  出:无                                                               */
/*                                                                          */
/* 历史记录:                                                               */
/*  spot          2005-06-28     Creat Inital version. (Version 1.0)        */
/****************************************************************************/
void wait_ready(void)
{
    RS = 0;/*指令*/
    RW = 1;/*读*/
    _nop_();
    while(lcd_data & status_busy); /*读入LCD状态,1=忙,一直等待LCD内部操作完成*/
}

/****************************************************************************/
/* 函数名:lcd_init                                                         */
/* 功  能:122x32LCD初始化,开机后仅调用一次                                 */
/* 作  者:spot                                                             */
/* 输  入:无                                                               */
/* 输  出:无                                                               */
/*                                                                          */
/* 历史记录:                                                               */
/*  spot          2005-06-28     Creat Inital version. (Version 1.0)        */
/****************************************************************************/
void lcd_init(void)
{
    send_mi(reset);           /* 复位m-left,s-right */
    send_si(reset);

    send_mi(disp_off);        /* 关闭显示 */
    send_si(disp_off);

    send_mi(dynamic_driver);
    send_si(dynamic_driver);

    send_mi(clk32);
    send_si(clk32);

    send_mi(adc_select);      /* clockwise */
    send_si(adc_select);

    send_mi(mode_write);
    send_si(mode_write);

    send_mi(col_addr_set);
    send_mi(disp_start_line); /* 归回零列,设定显示起始行首 */

    send_si(col_addr_set);
    send_si(disp_start_line);

    send_mi(disp_on);         /* 开显示 */
    send_si(disp_on);

    lcd_clr();
}

/****************************************************************************/
/* 函数名:lcd_clr                                                          */
/* 功  能:LCD清屏                                                          */
/* 作  者:spot                                                             */
/* 输  入:无                                                               */
/* 输  出:无                                                               */
/*                                                                          */
/* 历史记录:                                                               */
/*  spot          2005-06-28     Creat Inital version. (Version 1.0)        */
/****************************************************************************/
void lcd_clr(void)
{
    u_char i, page;

    for (page=0; page<4; page++)
    {
        send_mi(page_addr_set|page);
        send_si(page_addr_set|page);

        send_mi(col_addr_set);  /* 主窗口设置为0列 */

        for (i=0; i<62; i++)
        {
            send_md(0x00);
        }

        send_si(col_addr_set);  /* 从窗口设置为0列 */
        for (i=0; i<62; i++)
        {
            send_sd(0x00);
        }
    }
}

/****************************************************************************/
/* 函数名:set_page                                                         */
/* 功  能:同时设置主(左)从(右)显示页为0-1页                                */
/* 作  者:spot                                                             */
/* 输  入:page                                                             */
/* 输  出:无                                                               */
/*                                                                          */
/* 历史记录:                                                               */
/*  spot          2005-06-28     Creat Inital version. (Version 1.0)        */
/****************************************************************************/
void set_page(u_char page)
{
    send_mi(page_addr_set|page);
    send_si(page_addr_set|page);
}

/****************************************************************************/
/* 函数名:set_page                                                         */
/* 功  能:同时设置主从列地址为0-61列                                       */
/* 作  者:spot                                                             */
/* 输  入:address                                                          */
/* 输  出:无                                                               */
/*                                                                          */
/* 历史记录:                                                               */
/*  spot          2005-06-28     Creat Inital version. (Version 1.0)        */
/****************************************************************************/
void set_address(u_char address)
{
    send_mi(address&0x7F);  /* &0x7F,考虑到防止越限 */
    send_si(address&0x7F);
}

/****************************************************************************/
/* 函数名:putchar_l                                                        */
/* 功  能:在左页(主窗口)当前地址画一个字节(8点)                            */
/* 作  者:spot                                                             */
/* 输  入:c                                                                */
/* 输  出:无                                                               */
/*                                                                          */
/* 历史记录:                                                               */
/*  spot          2005-06-28     Creat Inital version. (Version 1.0)        */
/****************************************************************************/
void putchar_l(u_char c)
{
    send_md(c);
}

/****************************************************************************/
/* 函数名:putchar_r                                                        */
/* 功  能:在右页(从窗口)当前地址画一个字节(8点)                            */
/* 作  者:spot                                                             */
/* 输  入:c                                                                */
/* 输  出:无                                                               */
/*                                                                          */
/* 历史记录:                                                               */
/*  spot          2005-06-28     Creat Inital version. (Version 1.0)        */
/****************************************************************************/
void putchar_r(u_char c)
{
    send_sd(c);
}

/****************************************************************************/
/* 函数名:draw_bmp                                                         */
/* 功  能:画一个图,横坐标是col,layer表示上下层,width是图形的宽,高固定16    */
/* 作  者:spot                                                             */
/* 输  入:                                                                 */
/*         col     图型的起始位置0~121                                      */
/*         layer   图形的位置(Y坐标)0-下半部分 非0-上半部分                 */
/*         width   图形宽度8,16可选                                         */
/*         bmp     图形数据指针                                             */
/*                                                                          */
/* 输  出:无                                                               */
/*                                                                          */
/* 历史记录:                                                               */
/*  spot          2005-06-28     Creat Inital version. (Version 1.0)        */
/****************************************************************************/
void draw_bmp(u_char col,u_char layer,u_char width,u_char *bmp)
{
    u_char x;
    u_char address;           /* address表示显存的物理地址 */
    u_char p=0;
    u_char page=0;            /* page表示上下两页,window表示左右窗口(0左,1右) */
    u_char window=0;

    if (layer)
    {
        page=2;               /* 左-主窗口,右-从窗口 */
    }

    for (x=col; x<col+width; x++)
    {
        if (x>121)
            return;           /* 防止显示乱码 */

        if (x>60)             /* 左右窗口定位 */
        {
            window=1;         /* 右-从窗口    */
            address=x%61;
        }
        else
        {
            address=x;        /* 主窗口输出   */
        }

        set_page(page);       /* 上层数据输出 */
        set_address(address);

        if (window)
            putchar_r(bmp[p]);
        else
            putchar_l(bmp[p]);

        set_page(page+1);     /* 下层数据输出 */
        set_address(address); /* 列保持不变   */

        if (window)
            putchar_r(bmp[p+width]);
        else
            putchar_l(bmp[p+width]);

        p++;
    }
}

/****************************************************************************/
/* 函数名:disp_one_ascii                                                   */
/* 功  能:显示单个ASCII码                                                  */
/* 作  者:spot                                                             */
/* 输  入:                                                                 */
/*         col           图型的起始位置0~121                                */
/*         layer         图形的位置(Y坐标)0-下半部分 非0-上半部分           */
/*         ascii_code    所要显示德ASCCII码                                 */
/*         mode          显示模式,0正显,1反显                             */
/*                                                                          */
/* 输  出:无                                                               */
/*                                                                          */
/* 历史记录:                                                               */
/*  spot          2005-06-28     Creat Inital version. (Version 1.0)        */
/****************************************************************************/
void disp_one_ascii(u_char col,u_char layer,u_char ascii_code,u_char mode)
{
    u_char i,temp;
    temp = ascii_code;
    for (i=0; i<16; i++)                /*ASCII码显示占用16个字节*/
    {
        if (mode)
            dot_buffer[i]=~ascii_tab[(ascii_code-0x20)*16 + i];
        else
            dot_buffer[i]= ascii_tab[(ascii_code-0x20)*16 + i];
    }
    draw_bmp(col,layer,8,dot_buffer);
}

/****************************************************************************/
/* 函数名:disp_ram_data                                                    */
/* 功  能:显示小于14位的十进制数字                                         */

⌨️ 快捷键说明

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