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

📄 lcddrive12864.c

📁 Keil单片机软件开发平台下的一个51系列单片机工程
💻 C
📖 第 1 页 / 共 3 页
字号:
/*********************************************************************************************************
**--------------文件信息--------------------------------------------------------------------------------
**文   件   名: LCDDRIVE.C
**创   建   人: 刘宝贵
**最后修改日期: 2004年12月8日
**描        述: LCD驱动
**
**--------------历史版本信息----------------------------------------------------------------------------
** 创建人: 刘宝贵
** 版  本: V1.00
** 日 期: 2004年12月8日
** 描 述: 原始版本
**
**------------------------------------------------------------------------------------------------------
** 修改人:
** 版  本:
** 日 期:
** 描 述:
**
**------------------------------------------------------------------------------------------------------
**--------------当前版本修订------------------------------------------------------------------------------
** 修改人: 刘宝贵
** 日 期: 2004年4月20日
** 描 述:
**
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/

#include"includes.h"

sbit LCDCS  = P1^3;
sbit LCDCS2 = P1^2;
sbit LCDDI  = P1^0;
sbit LCDE   = P1^1;
//sbit LCDRW = P3^6;

extern unsigned char code lcd_lattice16_4[];
extern unsigned char code lcd_lattice16_8[];
extern unsigned char code lcd_lattice16_16[];
extern unsigned char code lcd_lattice8_8[];
extern unsigned char code mb[][16];
void lcddelay()
{
}
/*********************************************************************************************************
** 函数名称: outsi
** 功能描述: 12864底层函数
** 输 入:   无
** 输 出:   无
** 全局变量:
** 调用模块:
**
** 作 者: 刘宝贵
** 日 期: 2005年1月26日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**-------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
void outsi(uint8 parameter)
{
    LCDCS2 = 0;//lcddelay();
    LCDDI = 0;//lcddelay();
    LCDE  = 1;//lcddelay();
    WriteOutXRAM(CPLD_PORT_B,parameter);
    LCDE  = 0;//lcddelay();
    LCDCS2 = 1;//lcddelay();
}
/*********************************************************************************************************
** 函数名称: outsd
** 功能描述: 12864底层函数
** 输 入:   无
** 输 出:   无
** 全局变量:
** 调用模块:
**
** 作 者: 刘宝贵
** 日 期: 2005年1月26日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**-------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
void outsd(uint8 parameter)
{
    LCDCS2 = 0;//lcddelay();
    LCDDI = 1;//lcddelay();
    LCDE  = 1;//lcddelay();
    WriteOutXRAM(CPLD_PORT_B,parameter);
    LCDE  = 0;//lcddelay();
    LCDCS2 = 1;//lcddelay();
}
/*********************************************************************************************************
** 函数名称: outmi
** 功能描述: 12864底层函数
** 输 入:   无
** 输 出:   无
** 全局变量:
** 调用模块:
**
** 作 者: 刘宝贵
** 日 期: 2005年1月26日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**-------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
void outmi(uint8 parameter)
{
    LCDCS = 0;//lcddelay();
    LCDDI = 0;//lcddelay();
    LCDE  = 1;//lcddelay();
    WriteOutXRAM(CPLD_PORT_B,parameter);
    LCDE  = 0;//lcddelay();
    LCDCS = 1;//lcddelay();
}
/*********************************************************************************************************
** 函数名称: outmd
** 功能描述: 12864底层函数
** 输 入:   无
** 输 出:   无
** 全局变量:
** 调用模块:
**
** 作 者: 刘宝贵
** 日 期: 2005年1月26日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**-------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
void outmd(uint8 parameter)
{
    LCDCS = 0;//lcddelay();
    LCDDI = 1;//lcddelay();
    LCDE  = 1;//lcddelay();
    WriteOutXRAM(CPLD_PORT_B,parameter);
    LCDE  = 0;//lcddelay();
    LCDCS = 1;//lcddelay();
}
/*********************************************************************************************************
** 函数名称: outsi
** 功能描述: 12864底层函数
** 输 入:   无
** 输 出:   无
** 全局变量:
** 调用模块:
**
** 作 者: 刘宝贵
** 日 期: 2005年1月26日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**-------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
void lcdinit()                              /*left and right show open*/
{
    outmi(0x3f);
    outsi(0x3f);                               /*display on*/
}
/*********************************************************************************************************
** 函数名称: Display16X16
** 功能描述: 在指定的行列绘16X16点阵
** 输 入:   
** 输 出:   
** 全局变量:
** 调用模块:
**
** 作 者: 刘宝贵
** 日 期: 2005年1月26日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**-------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
/*void Display16X16(uint8 lcdrow,uint8 lcdline,uint8 wordnumber)
{                                                 //display 16x16 word//
    uint8  i;
    uint16   j;
    lcdinit();//                                  //left and right show open//
    if(lcdline<64)
    {
        outmi(0xc0);
        outmi(0xb8|lcdrow);                       //设置页地址//
        outmi(0x40|lcdline);                      //设置列地址//
        j=wordnumber*32;
        for(i=0;i<32;i++)
        {
            if(DotNot)outmd(~lcd_lattice16_16 [i+j]);
            else      outmd( lcd_lattice16_16 [i+j]);
            if(i==15)
            {
                outmi(0xb8|(lcdrow+1));           //设置页地址//
                outmi(0x40|lcdline);              //设置列地址//
            }
        }
    }
    else if(lcdline<128)
    {
        outsi(0xc0);                              //设置显示起始行//
        outsi(0xb8|lcdrow);                       //设置页地址//
        outsi(0x40|(lcdline-64));                 //设置列地址//
        j=wordnumber*32;
        for(i=0;i<32;i++)
        {
            if(DotNot)outsd(~lcd_lattice16_16[i+j]);
            else      outsd( lcd_lattice16_16[i+j]);
            if(i==15)
            {
                outsi(0xb8|(lcdrow+1));           //设置页地址//
                outsi(0x40|(lcdline-64));         //设置列地址//
            }
        }
    }
    else
    {}
}
/*********************************************************************************************************
** 函数名称: Display16X8
** 功能描述: 在指定的行列绘16X8点阵
** 输 入:   
** 输 出:   
** 全局变量:
** 调用模块:
**
** 作 者: 刘宝贵
** 日 期: 2005年1月26日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**-------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
void Display16X8(uint8 lcdrow,uint8 lcdline,uint8 datanumber,uint8 DotNot) // display 16x8 data 
{
    uint8  i;
    uint16 j;
    datanumber-=0x20;
    if(lcdline<64)
    {
        outmi(0xc0);
        outmi(0xb8|lcdrow);                       //设置页地址
        outmi(0x40|lcdline);                      //设置列地址
        j=datanumber*16;
        for(i=0;i<16;i++)
        {
            if(DotNot==1)
            {
                outmd(~lcd_lattice16_8[i+j]);
            }
            else
            {
                outmd(lcd_lattice16_8[i+j]);
            }
            if(i==7)
            {
                outmi(0xb8|(lcdrow+1));           //设置页地址
                outmi(0x40|lcdline);              //设置列地址
            }
         }
    }
    else if(lcdline<128)
    {
        outsi(0xc0);                         //设置显示起始行
        outsi(0xb8|lcdrow);                       //设置页地址
        outsi(0x40|(lcdline-64));             //设置列地址
        j=datanumber*16;
        for(i=0;i<16;i++)
        {
            if(DotNot==1)
            {
                outsd(~lcd_lattice16_8[i+j]);
            }
            else
            {
                outsd(lcd_lattice16_8[i+j]);
            }
            if(i==7)
            {
                outsi(0xb8|(lcdrow+1));           //设置页地址
                outsi(0x40|(lcdline-64));         //设置列地址
            }
        }
    }
}
/*********************************************************************************************************
** 函数名称: Display5X8
** 功能描述: 在指定的行列绘8X8点阵
** 输 入:   
** 输 出:   
** 全局变量:
** 调用模块:
**
** 作 者: 刘宝贵
** 日 期: 2005年1月26日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**-------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
void Display5X8(uint8 lcdrow,uint8 lcdline,uint8 datanumber,uint8 DotNot) //display 8x8 data
{
    uint8  i;
    uint16 j;
    outmi(0xc0);
    outsi(0xc0);                                  //设置显示起始行
    if(lcdline<64)
    {
        outmi(0xb8|lcdrow);                       //设置页地址
        outmi(0x40|lcdline);                      //设置列地址
        j=datanumber*8;
        for(i=0;i<6;i++)
        {
            if(DotNot==1)
            {
                outmd(~lcd_lattice8_8[i+j]);
            }
            else
            {
                outmd(lcd_lattice8_8[i+j]);
            }
        }
    }
    else
    {
        outsi(0xb8|lcdrow);                       //设置页地址
        outsi(0x40|(lcdline-64));                 //设置列地址
        j=datanumber*8;
        for(i=0;i<6;i++)
        {
            if(DotNot==1)
            {
                outsd(~lcd_lattice8_8[i+j]);
            }
            else
            {
                outsd(lcd_lattice8_8[i+j]);
            }
        }
    }
}
/*********************************************************************************************************
** 函数名称: Display16X4
** 功能描述: 在指定的行列绘16X4点阵
** 输 入:   
** 输 出:   
** 全局变量:
** 调用模块:
**
** 作 者: 刘宝贵
** 日 期: 2005年1月26日

⌨️ 快捷键说明

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