主函数:
/*-----------------------------------------------------------------------------
**函数名称:main
**作 者:tzhk100
**时 间:2012.9.8
**函数功能:LCD5110显示实验
**参数说明:无
**返 回:无
**--------------------------------------------------------------------------- */
void main(void)
{
PORT_Init();
LCD_VCC_H;
LCD_BGL_L;
LCD_GND_L;
LCD_Init();
LCD_Clear();
/* Start user code. Do not edit comment generated here */
while (1U)
{
LCD_Write_EnStr(0, 1, "Hello!RENESAS!");
LCD_Write_EnStr(0, 2, "www.eepw.com");
LCD_Write_EnStr(0, 3, "text5:LCD5110");
Delay(400);
}
/* End user code. Do not edit comment generated here */
}
LCD5110.H:
/*******************************************************************************
* 文件名 : LCD5110.c
* 作者 : tzhk100
* 创建日期 : 2012.8.30
* 描述 :
* 实验平台 :RL78
* 版本 : V0
* 历史记录 : 暂无
*******************************************************************************/
#ifndef _LCD5110_H
#define _LCD5110_H
#include "GLOABLE.h"
#include "CG_macrodriver.h"
#include "CG_port.h"
//宽高像素
#define LCD_X_RES 84
#define LCD_Y_RES 48
//枚举 D/C模式选择
typedef enum
{
DC_CMD = 0, //写命令
DC_DATA = 1 //写数据
} DCType;
// 管脚配置 H: high, L: low
// For RL78G13
#define LCD_RST_H (P7_bit.no0 = 1)
#define LCD_RST_L (P7_bit.no0 = 0)
#define LCD_CE_H (P7_bit.no1 = 1)
#define LCD_CE_L (P7_bit.no1 = 0)
#define LCD_DC_DATA (P7_bit.no2 = 1)
#define LCD_DC_CMD (P7_bit.no2 = 0)
#define LCD_MOSI_H (P7_bit.no3 = 1)
#define LCD_MOSI_L (P7_bit.no3 = 0)
#define LCD_CLK_H (P7_bit.no4 = 1)
#define LCD_CLK_L (P7_bit.no4 = 0)
#define LCD_VCC_H (P7_bit.no5 = 1)
#define LCD_BGL_L (P7_bit.no6 = 0)
#define LCD_GND_L (P7_bit.no7 = 0)
/**************************************************************/
extern void Delay(u32 nCount);
void Delay(u32 nCount);
void LCD_Init(void);
void LCD_Clear(void);
void LCD_Clear_part(u8 X,u8 Y,u8 L,u8 H);
void LCD_SetXY(u8 X, u8 Y);
void LCD_SetContrast(u8 contrast);
void LCD_Send(u8 data, DCType dc);
//void LCD_Write_Char(u8 ascii);
void LCD_Write_Char(u8 X, u8 Y,u8 ascii);
void LCD_Write_EnStr(u8 X, u8 Y, u8* s);
void LCD_Write_ChStr(u8 X, u8 Y, u8 num);
void LCD_ShowNum(u8 X,u16 Y,u32 num);
void LCD_Write_ChStr(u8 X,u8 Y,u8 n);
u32 mypow(u8 m,u8 n);
#endif
LCD5110.C
/*******************************************************************************
* 文件名 : LCD5110.c
* 作者 : tzhk100
* 创建日期 : 2012.8.30
* 描述 :
* 实验平台 :RL78
* 版本 : V0
* 历史记录 : 暂无
********************************************************************************/
#include "LCD5110.h"
#include "Pixel_EN.h"
#include "Pixel_CH.h"
//-------------------------------------------------------------------
// Nokia5510指令集
// D7 D6 D5 D4 D3 D2 D1 D0
// 0 0 1 0 0 PD V H
// | | |_______1->扩展指令集 0->基本指令集
// | |___________1->垂直寻址 0->水平寻址
// |_______________1->低功耗模式 0->正常模式
//-------------------------------------------------------------------
// 显示模式
// D7 D6 D5 D4 D3 D2 D1 D0
// 0 0 0 0 1 D 0 E
// | |_______0 0 1 1
// |_______________0 1 0 1
// 白屏 正常 全显 反转
//-------------------------------------------------------------------
/*-----------------------------------------------------------------------------
**函数名称:Delay
**作 者:tzhk100
**时 间:2012.9.7
**函数功能:延时
**参数说明:i--延时长短设置
**返 回:无
**--------------------------------------------------------------------------- */
void Delay(u32 nCount)
{
for(; nCount != 0; nCount--);
}
/*-----------------------------------------------------------------------------
**函数名称:LCD_Init
**作 者:tzhk100
**时 间:2012.9.7
**函数功能:LCD初始化
**参数说明:i--延时长短设置
**返 回:无
**--------------------------------------------------------------------------- */
void LCD_Init(void)
{
//复位LCD_低电平脉冲
LCD_RST_L;
Delay(200);
LCD_RST_H;
//复位串行接口_高电平脉冲
LCD_CE_H;
Delay(200);
LCD_CE_L;
//设置LCD
LCD_Send(0x21, DC_CMD); //使用扩展命令设置LCD模式
LCD_Send(0xC8, DC_CMD); //设置偏置电压
LCD_Send(0x06, DC_CMD); //温度校正
LCD_Send(0x13, DC_CMD); //1:48
LCD_Send(0x20, DC_CMD); //使用基本命令
LCD_Send(0x0C, DC_CMD); //设定显示模式,正常显示
}
/*-----------------------------------------------------------------------------
**函数名称:LCD_SetContrast
**作 者:tzhk100
**时 间:2012.9.7
**函数功能:设置LCD对比度
**参数说明:contrast对比度范围: 0~127
**返 回:无
**--------------------------------------------------------------------------- */
void LCD_SetContrast(u8 contrast)
{
LCD_Send(0x21, DC_CMD);
LCD_Send(0x80 | contrast, DC_CMD);
LCD_Send(0x20, DC_CMD);
}
/*-----------------------------------------------------------------------------
**函数名称:LCD_SetXY
**作 者:tzhk100
**时 间:2012.9.7
**函数功能:设置LCD当前坐标
**参数说明:XY对应LCD坐标
**返 回:无
**--------------------------------------------------------------------------- */
void LCD_SetXY(u8 X, u8 Y)
{
LCD_Send(0x40 | Y, DC_CMD); // 行
LCD_Send(0x80 | X, DC_CMD); // 列
}
/*-----------------------------------------------------------------------------
**函数名称:LCD_Clear
**作 者:tzhk100
**时 间:2012.9.7
**函数功能:LCD清屏
**参数说明:无
**返 回:无
**--------------------------------------------------------------------------- */
void LCD_Clear(void)
{
u16 i;
LCD_Send(0x0c, DC_CMD);
LCD_Send(0x80, DC_CMD);
for (i=0; i<504; i++)
LCD_Send(0, DC_DATA);
}
/*-----------------------------------------------------------------------------
**函数名称:LCD_Clear_part
**作 者:tzhk100
**时 间:2012.9.7
**函数功能:指定区域LCD清屏
**参数说明:X/Y起始坐标,L横长,H竖高
**返 回:无
**--------------------------------------------------------------------------- */
void LCD_Clear_part(u8 X,u8 Y,u8 L,u8 H)
{
u16 i,j;
LCD_Send(0x0c, DC_CMD);
LCD_Send(0x80, DC_CMD);
for (i=Y; i<Y+H+1; i++)
for(j=X;j<X+L+1;j++)
{ LCD_SetXY(j,i);
LCD_Send(0, DC_DATA);
}
}
/*-----------------------------------------------------------------------------
**函数名称:LCD_Send
**作 者:tzhk100
**时 间:2012.9.7
**函数功能:向LCD发送数据
**参数说明:dataa数据,dc发送类型
**返 回:无
**--------------------------------------------------------------------------- */
void LCD_Send(u8 data, DCType dc)
{
u8 i=8;
if (dc==DC_CMD)
LCD_DC_CMD; //发送命令
else
LCD_DC_DATA; //发送数据
while (i--)
{
LCD_CLK_L;
if(data&0x80)
LCD_MOSI_H; /* MSB first */
else
LCD_MOSI_L;
LCD_CLK_H;
data <<= 1; /* Data shift */
}
}
/*-----------------------------------------------------------------------------
**函数名称:LCD_Send
**作 者:tzhk100
**时 间:2012.9.7
**函数功能:向LCD发送数据
**参数说明:dataa数据,dc发送类型
**返 回:无
**--------------------------------------------------------------------------- */
void LCD_Write_Char(u8 X, u8 Y,u8 ascii)
{
u8 n;
LCD_SetXY(X,Y);
ascii -= 32; //ASCII码-32
for (n=0; n<7; n++)
LCD_Send(Font6x8[ascii][n], DC_DATA);
}
/*-----------------------------------------------------------------------------
**函数名称:LCD_Write_EnStr
**作 者:tzhk100
**时 间:2012.9.7
**函数功能:向LCD写入英文字符串
**参数说明:XY:起始坐标
** *s:所输入字符串
**返 回:无
**--------------------------------------------------------------------------- */
void LCD_Write_EnStr(u8 X, u8 Y, u8* s)
{
// LCD_SetXY(X,Y);
while (*s!='\0')
{
LCD_Write_Char(X,Y,*s++);
X=X+6;
if(X>84)
{ X=0;
Y=Y+1;
*s--;
if(Y>5)
{Y=0;}
}
}
}
//m^n函数
u32 mypow(u8 m,u8 n)
{
u32 result=1;
while(n--)result*=m;
return result;
}
/*-----------------------------------------------------------------------------
**函数名称:LCD_ShowNum
**作 者:tzhk100
**时 间:2012.9.7
**函数功能:显示一个数字
**参数说明:X/Y: 起始坐标
num: 数值(0~65536);
**返 回:无
**--------------------------------------------------------------------------- */
void LCD_ShowNum(u8 X,u16 Y,u32 num)
{
u32 res;
u8 t=0,t1=0;
res=num;
if(!num)LCD_Write_Char( X,Y,'0');//显示0
while(res) //得到数字长度
{
res/=10;
t++;
}
t1=t;
while(t) //显示数字
{
res=mypow(10,t-1);
LCD_Write_Char(X+(t1-t)*6,Y,(num/res)%10+'0');//数字字符第一个在'0'之前
t--;
}
}
/*-----------------------------------------------------------------------------
**函数名称:LCD_Write_ChStr
**作 者:tzhk100
**时 间:2012.9.7
**函数功能:显示一个数字
**参数说明:X/Y: 起始坐标
n : (这部分暂时保留);
**返 回:无
**--------------------------------------------------------------------------- */
void LCD_Write_ChStr(u8 X, u8 Y,u8 n)
{
int i;
LCD_SetXY(X,Y);
for(i = 0;i < 12; i++)//汉字上半身
{
LCD_Send(chinese_character[n][i],DC_DATA);
}
LCD_SetXY(X,Y+1);
for(i = 12; i < 24; i++)//汉字下半身
{LCD_Send(chinese_character[n][i],DC_DATA);}
}