📄 lcd.c
字号:
#include "LCDCharres.h"
#include "LCD.h"
#include "string.h"
u8 LCDRW;
u8 RS;
static u8 ProgressYpos; //进度条 Y轴
static u8 ProgressXpos; //进度条当前值
//const u8 LCDINIDATA[]={0xa0,0xa2,0xa6,0xa4,0x60,0xc8,0x2f,0x27,0x81,0x3f,0xaf};
const u8 LCDINIDATA[]={0xe2,0xa0,0xa2,0xa6,0xa4,0x40,0xc8,0x2f,0x27,0x81,0x3f,0xe0,0xaf};
/**************************************************************************************************
** 函数名: _GS_lcd_send
** 输 入: _data, dc
** _data : 传送的指令
** dc : 0:COMMAND 1:DATA
** 输 出: void
** 功能描述: 本函数将 LCD DRIVER 的数据传给 MCU
** 说 明: void
** 作 者: SIMPLE
** 日 期: 2005/04/14
** 修 改:
** 日 期:
** 版 本: V0.0
** lh
**************************************************************************************************/
void _GS_lcd_send(u8 _data, u8 dc)
{
GPIO_Config(GPIO0, 0x0100, GPIO_OUT_PP); //RS, p0.8
if(dc==0)
GPIO_BitWrite(GPIO0,0x08,0);
else if(dc==1)
GPIO_BitWrite(GPIO0,0x08,1);
else return;
GPIO_Config(GPIO0, 0x0080, GPIO_OUT_PP); //LCD片选CS端口,P0.7
GPIO_BitWrite(GPIO0,0x07,0x00);
GPIO_Config(GPIO0, 0x0040, GPIO_OUT_PP); //LCD CLK端口,P0.6
GPIO_BitWrite(GPIO0,0x06,0x00);
//Delay(9); //1us
GPIO_Config(GPIO0, 0x0020, GPIO_OUT_PP); //DATA, p0.5
for(int i = 0; i < 8; ++i)
{
if(_data&0x80)
GPIO_BitWrite(GPIO0,0x05,1);
else
GPIO_BitWrite(GPIO0,0x05,0);
//Delay(9); //1us
GPIO_BitWrite(GPIO0,0x06,0x01); //LCD CLK端口,p0.6
//Delay(9);
GPIO_BitWrite(GPIO0,0x06,0x00); //LCD CLK端口,p0.6
//Delay(9);
_data <<=1;
}
//Delay(9);
GPIO_Config(GPIO0, 0x0080, GPIO_OUT_PP); //LCD片选CS端口,P0.7
GPIO_BitWrite(GPIO0,0x07,0x01);
}
/*void _GS_lcd_send(u8 _data, u8 dc)
{
GPIO_Config(GPIO0, 0x0020, GPIO_OUT_PP); //RS, p0.5
if(dc==0)
GPIO_BitWrite(GPIO0,0x05,0);
else if(dc==1)
GPIO_BitWrite(GPIO0,0x05,1);
else return;
GPIO_Config(GPIO0, 0x0010, GPIO_OUT_PP); //LCD片选CS端口,P0.4
GPIO_BitWrite(GPIO0,0x04,0x00);
GPIO_Config(GPIO0, 0x0100, GPIO_OUT_PP); //LCD CLK端口,p0.8
GPIO_BitWrite(GPIO0,0x08,0x00);
//Delay(9); //1us
GPIO_Config(GPIO0, 0x0200, GPIO_OUT_PP); //DATA, p0.9
for(int i = 0; i < 8; ++i)
{
if(_data&0x80)
GPIO_BitWrite(GPIO0,0x09,1);
else
GPIO_BitWrite(GPIO0,0x09,0);
//Delay(9); //1us
GPIO_BitWrite(GPIO0,0x08,0x01); //LCD CLK端口,p0.8
//Delay(9);
GPIO_BitWrite(GPIO0,0x08,0x00);
//Delay(9);
_data <<=1;
}
//Delay(9);
GPIO_Config(GPIO0, 0x0010, GPIO_OUT_PP); //LCD片选CS端口,P0.4
GPIO_BitWrite(GPIO0,0x04,0x01);
}*/
/*
void _GS_lcd_send(u8 _data, u8 dc)
{
//bool BitOut;
//RS = dc;
//LCDRW = _data;
GPIO_Config(GPIO0, 0x0020, GPIO_OUT_PP); //RS, p0.5
if(dc==0)
GPIO_BitWrite(GPIO0,0x05,0);
else if(dc==1)
GPIO_BitWrite(GPIO0,0x05,1);
else return;
Delay(9600); //1us
GPIO_Config(GPIO0, 0x0100, GPIO_OUT_PP); //LCD CLK端口,p0.8
GPIO_BitWrite(GPIO0,0x08,0x01);
GPIO_Config(GPIO0, 0x0200, GPIO_OUT_PP); //DATA, p0.9
for(int i = 0; i < 8; ++i)
{
if(_data&0x80)
GPIO_BitWrite(GPIO0,0x09,1);
else
GPIO_BitWrite(GPIO0,0x09,0);
GPIO_BitWrite(GPIO0,0x08,0x00);
Delay(9600); //1us
GPIO_BitWrite(GPIO0,0x08,0x01);
Delay(9600);
_data <<=1;
}
}
*/
/**************************************************************************************************
** 函数名: _GS_lcd_setaddr
** 输 入: u8 x, u8 y
** x : 输入的起始横坐标
** y : 输入的其始纵坐标
** 输 出: void
** 功能描述: 本函数是对 LCD 设置当前点位置
** 作 者: SIMPLE
** 日 期: 2005/04/14
** 修 改:
** 日 期:
** 版 本: V0.0
**************************************************************************************************/
void _GS_lcd_setaddr(u8 x, u8 y)
{
_GS_lcd_send(PAGEHEAD|y ,0); /*指定页地址*/
// ++x;
_GS_lcd_send(SEGHEADH|(x / 16), 0); /*指定页内地址*/
_GS_lcd_send(SEGHEADL|(x % 16), 0); /*指定页内地址*/
}
/**************************************************************************************************
** 函数名: GS_InitLCD
** 输 入: void
** 输 出: void
** 功能描述: 本函数对 LCD 进行并行传输初始化
** 说 明: IC[]为初始化参数
** 作 者: SIMPLE
** 日 期: 2005/04/14
** 修 改:
** 日 期:
** 版 本: V0.0
** //lh
**************************************************************************************************/
void GS_InitLCD(void)
{
u8 i, ContData;
//初始化端口
/*GPIO_Config(GPIO0, 0x0010, GPIO_OUT_PP); //LCD片选CS端口,P0.4
GPIO_BitWrite(GPIO0,0x04,0x00);
GPIO_Config(GPIO0, 0x0040, GPIO_OUT_PP); //LCD WR端口,P0.6
GPIO_BitWrite(GPIO0,0x06,0x00);
GPIO_Config(GPIO0, 0x0100, GPIO_OUT_PP); //LCD CLK端口,P0.8
GPIO_BitWrite(GPIO0,0x08,0x01);
*/
GPIO_Config(GPIO0, 0x0200, GPIO_OUT_PP); //LCD背光,P0.9
//GPIO_BitWrite(GPIO0,0x09,0x00);
// if(GS_ReadLCDlight()==0x11)
// GPIO_BitWrite(GPIO0,0x09,0x00);
// else
GPIO_BitWrite(GPIO0,0x09,0x01);
GPIO_Config(GPIO0, 0x0080, GPIO_OUT_PP); //LCD片选CS端口,P0.7
GPIO_BitWrite(GPIO0,0x07,0x00);
GPIO_Config(GPIO0, 0x0010, GPIO_OUT_PP); //LCD WR端口,P0.4
GPIO_BitWrite(GPIO0,0x04,0x00);
GPIO_Config(GPIO0, 0x0040, GPIO_OUT_PP); //LCD CLK端口,P0.6
GPIO_BitWrite(GPIO0,0x06,0x01);
//发送初始化参数
for (i=0; i<13; i++)
_GS_lcd_send(LCDINIDATA[i],0);
//------------- 设置对比度 ---------------------------
//ContData = GS_ReadContrast();
ContData = 0x20;
if((ContData & 0x40)||(!ContData))
ContData = 0x0f;
_GS_lcd_send(0x81,0); //0x81
_GS_lcd_send(ContData,0); //0x00--0x3f
}
/**************************************************************************************************
** 函数名: _GS_sendasciilat
** 输 入: char charstr, bit FXFlag
** FXFlag 0 : 不反色显示
** 1 : 反色显示
** 输 出: void
** 功能描述: 本函数是向LCD输出字符
** 说 明: 无
** 作 者: SIMPLE
** 日 期: 2005/04/14
** 修 改:
** 日 期:
** 版 本: V0.0
**************************************************************************************************/
void _GS_sendasciilat(u8 charstr, u8 FNo)
{
u8 volatile i, temp;
u16 spos;
spos = (charstr-0x20)*6;
for(i=0; i<6; i++)
{
temp = ASCIILAT[spos+i];
if(FNo)
temp = ~temp;
_GS_lcd_send(temp,1);
}
}
/**************************************************************************************************
** 函数名: GS_PutChar
** 输 入: u8 x, u8 y, char ucChar, bit FXFlag
** x : 输出字符在LCD屏幕上的 x 坐标
** y : 输出字符在LCD屏幕上的 y 坐标
** ucChar : 要输出字符
** ucNegateColor : NEGATE_COLOR_NONE 不反色显示
** NEGATE_COLOR_CHAR 反色显示
** 输 出: void
** 功能描述: 本函数是向LCD指定位置输出一个字符
** 说 明: 无
** 作 者: SIMPLE
** 日 期: 2005/04/14
** 修 改:
** 日 期:
** 版 本: V0.0
**************************************************************************************************/
void GS_PutChar(u8 x, u8 y, u8 ucChar, u8 ucNegateColor)
{
if(ucChar<0x20)
return;
_GS_lcd_setaddr(x, y);
_GS_sendasciilat(ucChar, ucNegateColor);
}
/**************************************************************************************************
** 函数名: GS_PutChar_DZ
** 输 入: u8 x, u8 y, char charstr
** x : 输出字符在LCD屏幕上的 x 坐标
** y : 输出字符在LCD屏幕上的 y 坐标
** charstr : 输出字符
** 输 出: void
** 功能描述: 本函数是向LCD输出字符
** 说 明: 无
** 作 者: SIMPLE
** 日 期: 2005/04/14
** 修 改:
** 日 期:
** 版 本: V0.0
** 16*12点阵的字符
**************************************************************************************************/
void GS_PutChar_DZ(u8 x, u8 y, u8 charstr)
{
u8 i;
u16 volatile spos;
if(charstr<=18)
spos = charstr*24;
else
spos = 456;
_GS_lcd_setaddr(x, y);
for(i=0; i<12; i++)
_GS_lcd_send(Dot_DZ[spos+i], 1);
_GS_lcd_setaddr(x, y+1);
for(i=0; i<12; i++)
_GS_lcd_send(Dot_DZ[spos+i+12], 1);
}
/**************************************************************************************************
** 函数名: GS_ClearLCD
** 输 入: void
** 输 出: void
** 功能描述: 本函数是对LCD进行清屏处理
** 说 明: 无
** 作 者: SIMPLE
** 日 期:
** 修 改:
** 日 期: 2004/11/10
** 版 本: V0.0
**************************************************************************************************/
/*void GS_ClearLCD(void)
{
u8 i,j;
for (i=0; i<=LCD_HEIGHT/8; i++)
{
_GS_lcd_send(PAGEHEAD|i, 0);
_GS_lcd_send(SEGHEADH, 0);
_GS_lcd_send(SEGHEADL, 0);
for(j=0; j<LCD_WIDTH; j++)
_GS_lcd_send(0x00,1);
}
}*/
void GS_ClearLCD(void)
{
u8 i,j;
for (i=0; i<LCD_HEIGHT/8; i++)
{
_GS_lcd_setaddr(0, i);
for(j=0; j<LCD_WIDTH; j++)
_GS_lcd_send(0x00,1);
}
}
/**************************************************************************************************
** 函数名: GS_PutString
** 输 入:
** u8 x, 输出字符在LCD屏幕上的 x 坐标
** u8 y, 输出字符在LCD屏幕上的 y 坐标
** P_u8 pucStr, 要显示的字符串,以0结束的字符串
** u8 ucAlignMode, 显示对齐方式
** 值可为: TEXT_ALIGN_NONE--0;TEXT_ALIGN_LEFT--1;TEXT_ALIGN_CENTER--2;
** TEXT_ALIGN_RIGHT--3
** u8 ucNegateColor,反色显示方式
** NEGATE_COLOR_NONE--0;NEGATE_COLOR_CHAR--1; NEGATE_COLOR_LINE--2
** 输 出: void
** 功能描述: 本函数是向LCD输出字符串
** 说 明: 无
** 作 者: SIMPLE
** 日 期: 2005/04/14
** 修 改:
** 日 期:
** 版 本: V0.0
** //lh
**************************************************************************************************/
void GS_PutString(u8 x, u8 y, u8 * pucStr, u8 ucAlignMode, u8 ucNegateColor)
{
//u8 data ucLen, ucStartPos, i;
u8 volatile ucLen, ucStartPos, i;
u8 * pucStrBuf;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -