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

📄 12232.c

📁 12232 LCD中实现16*16汉字任意行显示的源代码 UV2开发环境
💻 C
📖 第 1 页 / 共 2 页
字号:
/*
2007,3,8拷贝后修改成显示16*16BMP和取模汉字的任意行显示的子程序。
母版为KE文件夹中的12232.C
2007.3.9修改目标为任意行和可以读改写。
*/

#include<reg52.h>
//#include<LCD_code.h>
#include<intrins.h>


//
sbit RS=P3^6;
sbit RW=P0^2;
sbit E1=P0^0;
sbit E2=P0^1;


#define lcd_data P1
//
#define disp_on 0xAf
#define disp_off 0xAe
#define disp_start_line 0xC0
#define page_addr_set 0xB8  //显示起始地址(后五位表示0~31行)
#define col_addr_set 0x00
#define mode_write 0xEE      //写模式
#define status_busy 0x80
#define dynamic_driver 0xA4 // 动态驱动
#define adc_select 0xA0		//CLOCKWISE
#define clk32 0xA9
#define clk16 0xA8
#define reset 0xE2          //软件复位

#define u_char unsigned char
#define u_int unsigned int

void lcd_init(void);
void lcd_clr(void);
void wait_ready(void);
void draw_bmp(u_char col,u_char y,u_char width,u_char *bmp);



//      全局变量及标志位定义


/****************************************************************************/
/* 函数名:send_mi                                                          */
/* 功  能:发指令instruction到主窗口                                        */
/* 作  者:spot                                                             */
/* 输  入:instruction                                                      */
/* 输  出:无                                                               */
/*                                                                          */
/* 历史记录:                                                               */
/*  spot          2005-06-28     Creat Inital version. (Version 1.0)        */
/****************************************************************************/
void send_mi(u_char instruction)
{
    E2 = 0;
    E1 = 1;
//	wait_ready();
    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 = 0;
    E1 = 1;  
 //   wait_ready();
    _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)
{
	E1=0;
    E2 = 1;   
//	 wait_ready();

    _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)
{
	E1=0;
    E2 = 1;
//	 wait_ready();
    _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_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);
        }
    }
}

/****************************************************************************/
/* 函数名: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();
}


/****************************************************************************/
/* 函数名: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_address                                                      */
/* 功  能:同时设置主从列地址为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);
}

//----------------------------------------------------------
//--------设置读写改--------
//----------------------------------------------------------
u_char read_data()
{
u_char d=0;	
RS = 0;
_nop_();
_nop_();
RS = 1;
_nop_();

RW=1;
_nop_();

d=lcd_data;



return d;



}


//----------------------------------------------------------
//--------设置读写改--------
//----------------------------------------------------------
void read_write_l(u_char ubyte)
{


    send_mi(0xe0);
    send_si(0xe0);
    ubyte=ubyte|read_data();

⌨️ 快捷键说明

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