lcddrive.c
来自「一个分选系统的软件:用SmallRtos操作系统」· C语言 代码 · 共 635 行 · 第 1/2 页
C
635 行
/*********************************************************************************************************
**--------------文件信息--------------------------------------------------------------------------------
**文 件 名: LCDDRIVE.C
**创 建 人: 刘宝贵
**最后修改日期: 2004年12月8日
**描 述: LCD驱动
**
**--------------历史版本信息----------------------------------------------------------------------------
** 创建人: 刘宝贵
** 版 本: V1.00
** 日 期: 2004年12月8日
** 描 述: 原始版本
**
**------------------------------------------------------------------------------------------------------
** 修改人:
** 版 本:
** 日 期:
** 描 述:
**
**------------------------------------------------------------------------------------------------------
**--------------当前版本修订------------------------------------------------------------------------------
** 修改人: 刘宝贵
** 日 期: 2004年4月20日
** 描 述:
**
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
#include "config.h"
sbit LCDLS = P1^0;
sbit LCDRS = P1^1;
sbit LCDDI = P3^5;
sbit LCDRW = P3^6;
sbit LCDE = P3^7;
uint8 code lcd_lattice16_8[]={0};
uint8 code lcd_lattice16_16[]={9};
uint8 code lcd_lattice8_8[]={0};
uint8 code mb[]={0};
bit DotNot;
uint8 xdata DeepOne;
uint8 xdata DeepTwo;
uint8 xdata DeepThree;
uint8 xdata MenuDeep;
bit RedrawLcd;
bit RedrawLcdFocus;
void lcddelay()
{
// _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
}
/******************************************************************************/
void change_bin_to_bcd(uint16 temp,uint8 dotplace)
{
/*
int8 i;
for(i=5;i>0;i--)
{
image[i-1] = temp%10;
temp/=10;
}
for(i=5;i>dotplace;i--)
{
image[i]=image[i-1];
}
if(dotplace<7)image[dotplace]=10;
if(dotplace>4) image[5]=0xff;
else image[6]=0xff;
*/
}
/******************************************************************************/
void outsi(uint8 parameter)
{
LCDRS = 1;lcddelay();
// LCDLS = 0;
LCDDI = 0;lcddelay();
LCDRW = 0;lcddelay();
LCDE = 1;lcddelay();
P2 = parameter;lcddelay();
LCDE = 0;lcddelay();
LCDRW = 1;lcddelay();
LCDRS = 0;lcddelay();
// LCDLS = 1;
}
/******************************************************************************/
void outsd(uint8 parameter)
{
LCDRS = 1;lcddelay();
// LCDLS = 0;
LCDDI = 1;lcddelay();
LCDRW = 0;lcddelay();
LCDE = 1;lcddelay();
P2 = parameter;lcddelay();
LCDE = 0;lcddelay();
LCDRW = 1;lcddelay();
LCDRS = 0;lcddelay();
// LCDLS = 1;
}
/******************************************************************************/
void outmi(uint8 parameter)
{
LCDLS = 1;lcddelay();
// LCDRS = 0;
LCDDI = 0;lcddelay();
LCDRW = 0;lcddelay();
LCDE = 1;lcddelay();
P2 = parameter;lcddelay();
LCDE = 0;lcddelay();
LCDRW = 1;lcddelay();
LCDLS = 0;lcddelay();
// LCDRS = 1;
}
/******************************************************************************/
void outmd(uint8 parameter)
{
LCDLS = 1;lcddelay();
// LCDRS = 0;
LCDDI = 1;lcddelay();
LCDRW = 0;lcddelay();
LCDE = 1;lcddelay();
P2 = parameter;lcddelay();
LCDE = 0;lcddelay();
LCDRW = 1;lcddelay();
LCDLS = 0;lcddelay();
// LCDRS = 1;
}
/******************************************************************************/
void lcdinit() /*left and right show open*/
{
outmi(0x3f);
outsi(0x3f); /*display on*/
}
/******************************************************************************/
/******************************************************************************/
void displayword(uint8 lcdrow,uint8 lcdline,uint8 wordnumber)
{ /*display 16x16 word*/
uint8 data i;
uint16 data 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
{}
}
/******************************************************************************/
/******************************************************************************/
void displaydata(uint8 lcdrow,uint8 lcdline,uint8 datanumber) /* display 16x8 data */
{
uint8 data i;
uint16 data j;
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<121)
{
// outsi(0xc0); /*设置显示起始行*/
outsi(0xb8|lcdrow); /*设置页地址*/
if(lcdline<121)
{
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)); /*设置列地址*/
}
}
}
}
/******************************************************************************/
/******************************************************************************/
void displaybyte(uint8 lcdrow,uint8 lcdline,uint8 datanumber) /*display 8x8 data*/
{
uint8 data i;
uint16 data j;
outmi(0xc0);
outsi(0xc0); /*设置显示起始行*/
if(lcdline<64)
{
outmi(0xb8|lcdrow); /*设置页地址*/
outmi(0x40|lcdline); /*设置列地址*/
j=datanumber*8;
for(i=0;i<8;i++)
{
outmd(lcd_lattice8_8[i+j]);
}
}
else
{
outsi(0xb8|lcdrow); /*设置页地址*/
outsi(0x40|(lcdline-64)); /*设置列地址*/
j=datanumber*8;
for(i=0;i<8;i++)
{
outsd(lcd_lattice8_8[i+j]);
}
}
}
/******************************************************************************/
/******************************************************************************/
void displaycls(void)
{
uint8 data i;
uint8 data j;
lcdinit();
outmi(0xc0);
outsi(0xc0); /*设置显示起始行*/
for(i=0;i<8;i++)
{
outmi(0xb8|i); /*设置页地址*/
outmi(0x40|0); /*设置列地址*/
for(j=0;j<64;j++)
{
outmd(0);
}
}
for(i=0;i<8;i++)
{
outsi(0xb8|i); /*设置页地址*/
outsi(0x40|0); /*设置列地址*/
for(j=0;j<64;j++)
{
outsd(0);
}
}
}
/******************************************************************************/
/******************************************************************************/
void display_word_item(uint8 dlcdrow,uint8 dlcdline,uint8 item)
{
uint8 i=0;
// do
// {
// displayword(dlcdrow,(dlcdline+i*16), mb[item][i]);
// i++;
// }while(mb[item][i]!=0xff);
}
/******************************************************************************/
/******************************************************************************/
void display_data_item(uint8 dlcdrow,uint8 dlcdline,uint8 dotplace,uint16 temp)
{
if(dotplace==1||temp>9)
{
do
{
displaydata(dlcdrow,dlcdline, temp%10);
dlcdline-=8;
temp/=10;
if(--dotplace==0)
{
displaydata(dlcdrow,dlcdline, 10);
dlcdline-=8;
}
}while(temp>=10);
displaydata(dlcdrow,dlcdline, temp%10);
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?