//---液晶显示功能模块
/****************************************
主要调用的函数:void LCD5110_Drv_Write_Shu()
LCD5110_Drv_Write_Hanzi()
**LCDDrive()液晶的初始化部分
全局变量或是函数: extern void LCDDrive(void); //液晶驱动,在main中被调用 ,以便后续的写数字等函数执行
extern uchar DisplayBuffer[]; //数据的缓存数组,接收时间的值
extern void LCD5110_Drv_Write_Shu(unsigned char row, unsigned char page,unsigned char c); // 写数字到坐标为( 列,行)处
*****************************************/
#include"Lcd.h"
sbit RST = P0^0; //片选
sbit SCE = P0^1; //复位,0复位
sbit DC = P0^2; //1写数据,0写指令
sbit SDIN= P0^3; //数据
sbit SCLK= P0^4; //时钟
uchar DisplayBuffer[]={0,0,0,0,0,0};//数据缓冲
//******数字的码表数组
unsigned char code shuzi[]=
{
/*-- 文字: 0 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,
/*-- 文字: 1 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,
/*-- 文字: 2 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,
/*-- 文字: 3 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,
/*-- 文字: 4 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,
/*-- 文字: 5 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,
/*-- 文字: 6 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,
/*-- 文字: 7 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,
/*-- 文字: 8 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,
/*-- 文字: 9 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00,
/*-- 文字: a --10*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x19,0x24,0x22,0x22,0x22,0x3F,0x20,
/*-- 文字: b --11*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x08,0xF8,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x3F,0x11,0x20,0x20,0x11,0x0E,0x00,
/*-- 文字: c --12*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x0E,0x11,0x20,0x20,0x20,0x11,0x00,
/*-- 文字: d --13*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x00,0x00,0x80,0x80,0x88,0xF8,0x00,0x00,0x0E,0x11,0x20,0x20,0x10,0x3F,0x20,
/*-- 文字: e --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x22,0x22,0x22,0x22,0x13,0x00,
/*-- 文字: f --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x80,0x80,0xF0,0x88,0x88,0x88,0x18,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,
/*-- 文字: . 点号 --*/
/*-- Trebuchet MS12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00
} ;
//*****汉字的码表数组
unsigned char code hanzi[]=
{
/*-- 文字: 字 --*/
/*-- Trebuchet MS12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x10,0x0C,0x24,0x24,0x24,0x25,0x26,0xA4,0x64,0x24,0x04,0x14,0x0C,0x00,0x00,
0x00,0x02,0x02,0x02,0x02,0x42,0x82,0x7F,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,
/*-- 文字: 节 --*/
/*-- Trebuchet MS12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x04,0x04,0x44,0x44,0x44,0x5F,0xC4,0x44,0x44,0x44,0x5F,0x44,0xC4,0x04,0x04,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x08,0x10,0x0F,0x00,0x00,0x00,
/*-- 文字: 数 --*/
/*-- Trebuchet MS12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x10,0x92,0x54,0x38,0xFF,0x38,0x54,0x52,0x80,0xF0,0x1F,0x12,0x10,0xF0,0x10,0x00,
0x42,0x42,0x2A,0x2E,0x13,0x1A,0x26,0x02,0x40,0x20,0x13,0x0C,0x33,0x60,0x20,0x00,
/*-- 文字: : --*/
/*-- Trebuchet MS12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
/*
sbit RST = P0^0; //片选
sbit SCE = P0^1; //复位,0复位
sbit DC = P0^2; //1写数据,0写指令
sbit SDIN= P0^3; //数据
sbit SCLK= P0^4; //时钟
*/
//***********************
void LCD5110_Drv_Delay_1ms(void)//1ms延时函数
{
unsigned int i;
for (i=0;i<500;i++) ;
}
//***********************
/*void LCD5110_Drv_Delay(unsigned int z)
{
unsigned int x,y;
for(x=100;x>0;x--)
for(y=z;y>0;y--);
} */
//*******************
/*--------------------------------------------
LCD5110_Drv_Write_Byte: 使用SPI接口写数据到LCD
输入参数:dt:写入的数据;
command :写数据/命令选择;
编写日期:20080918
----------------------------------------------*/
void LCD5110_Drv_Write_Byte(unsigned char dt, unsigned char command)
{
unsigned char i;
SCE=0;
DC=command;
for(i=0;i<8;i++)
{
if(dt&0x80)
SDIN=1;
else
SDIN=0;
dt=dt<<1;
SCLK=0;
SCLK=1;
}
DC=1;
SCE=1;
SDIN=1;
}
//************************
/*---------------------------------------
LCD5110_Drv_Init: 3310LCD初始化
编写日期:20080918
----------------------------------------- */
void LCD5110_Drv_Init(void)
{
RST=0;
LCD5110_Drv_Delay_1ms();
RST=1;
LCD5110_Drv_Write_Byte(0x21,0);//初始化Lcd,功能设定使用扩充指令
LCD5110_Drv_Write_Byte(0xd0,0);//设定液晶偏置电压
LCD5110_Drv_Write_Byte(0x20,0);//使用基本指令
LCD5110_Drv_Write_Byte(0x0C,0);//设定显示模式,正常显示
}
/*-------------------------------------------
LCD5110_Drv_Set_XY: 设置LCD坐标函数
输入参数:X:0-83 Y:0-5
编写日期:20080918
---------------------------------------------*/
void LCD5110_Drv_Set_XY(unsigned char X, unsigned char Y)
{
LCD5110_Drv_Write_Byte(0x40 | Y, 0);// column
LCD5110_Drv_Write_Byte(0x80 | X, 0);// row
}
/*------------------------------------------
LCD5110_Drv_Clear: LCD清屏函数
编写日期:20080918
--------------------------------------------*/
//**********************
void LCD5110_Drv_Clear(void)
{
unsigned char t;
unsigned char k;
LCD5110_Drv_Set_XY(0,0);
for(t=0;t<6;t++)
{
for(k=0;k<84;k++)
{
LCD5110_Drv_Write_Byte(0x00,1);
}
}
}
/*---------------------------------------------
LCD5110_Drv_Write_Shu: 显示8(宽)*16(高)点阵列数字字母符号等半角类
输入参数:c:显示的字符;
编写日期:20080918
-----------------------------------------------*/
//*******************
void LCD5110_Drv_Write_Shu(unsigned char row, unsigned char page,unsigned char c) //row:列 page:页 dd:字符
{
unsigned char i;
LCD5110_Drv_Set_XY(row*8, page);// 列,页
for(i=0; i<8;i++)
{
LCD5110_Drv_Write_Byte(shuzi[c*16+i],1);
}
LCD5110_Drv_Set_XY(row*8, page+1);// 列,页
for(i=8; i<16;i++)
{
LCD5110_Drv_Write_Byte(shuzi[c*16+i],1);
}
}
//************************
/*---------------------------------------------
LCD5110_Drv_Write_Hanzi: 显示16(宽)*16(高)点阵列汉字等半角类
输入参数:c:显示的字符;
编写日期:20080918
-----------------------------------------------*/
void LCD5110_Drv_Write_Hanzi(unsigned char row, unsigned char page,unsigned char c) //row:列 page:页 dd:字符
{
unsigned char i;
LCD5110_Drv_Set_XY(row*8, page);// 列,页
for(i=0; i<16;i++)
{
LCD5110_Drv_Write_Byte(hanzi[c*32+i],1);
}