📄 lcddrive12864.c
字号:
/*********************************************************************************************************
**--------------文件信息--------------------------------------------------------------------------------
**文 件 名: 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 + -