#include "LM13232A.h"
#include "LMFONT.h"
#define _CS1 PCout(0)
#define _RST PCout(1)
#define RS PCout(11)
#define SCLK PCout(10)
#define SID PCout(9)
extern unsigned char LIG1[2];
extern unsigned char LIG2[2];
uchar ContrastLevel; // 对比度设置级别
void lm13232_GPIO_ITN(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure);
}
//-------写命令------------------------
void SdCmd(uchar Command)
{
uchar j;
SCLK = 1;
RS = 0; //0写命令
_CS1 = 0;
for(j=0;j<8;j++)
{
if(Command&0x80) SID=1;
else SID=0;
SCLK=0;
SCLK=1;
Command=Command<<1;
}
_CS1=1;
}
//-----写数据--------------------------
void SdData(uchar DData)
{
uchar j;
SCLK = 1;
RS = 1; //1写数据
_CS1 = 0;
for(j=0;j<8;j++)
{
if(DData&0x80) SID=1;
else SID=0;
SCLK=0;
SCLK=1;
DData=DData<<1;
}
_CS1=1;
}
//-----------------------------------
// 写一个字节
//-----------------------------------
void WriteScreen(uchar *DisplayData) // 显示为: 132x32/8 byte
{
uchar TempData;
uchar i, j;
for(i=0;i<4;i++)
{
SdCmd(0xb0 | i); // select page
SdCmd(0x10); // start form column 0开始
SdCmd(0x00); // (2byte command)
for(j=0;j<132;j++)
{
TempData=(*(DisplayData+(i*132)+j));
SdData(TempData);
}
}
}
/*显示位置*/
void LM_Pos(uchar x,uchar y)
{
SdCmd(0xb0+y);
SdCmd(((x&0xf0)>>4)|0x10);
SdCmd((x&0x0f)|0x01);
}
/*清屏函数*/
void LM_Cler(void)
{
uchar i,n;
for(i=0;i<8;i++)
{
SdCmd(0xb0+i);
SdCmd(0x00);
SdCmd(0x10);
for(n=0;n<132;n++)SdData(0x00);
}
}
//在指定位置显示一个字符,包括部分字符
//x:0~127
//y:0~63
//mode:0,反白显示;1,正常显示
//size:选择字体 16/12
void LM_ShowChar(uchar x,uchar y,uchar chr)
{
uchar c=0,i=0;
c=chr-' ';//得到偏移后的值
if(x>Max_Column-1){x=0;y=y+2;}
if(SIZE ==16)
{
LM_Pos(x,y);
for(i=0;i<8;i++)
SdData(F8X16[c*16+i]);
LM_Pos(x,y+1);
for(i=0;i<8;i++)
SdData(F8X16[c*16+i+8]);
}
else
{
LM_Pos(x,y+1);
for(i=0;i<6;i++)
SdData(F6x8[c][i]);
}
}
//m^n函数
int LM_pow(uchar m,uchar n)
{
int result=1;
while(n--)result*=m;
return result;
}
//显示2个数字
//x,y :起点坐标
//len :数字的位数
//size:字体大小
//mode:模式 0,填充模式;1,叠加模式
//num:数值(0~4294967295);
void LM_ShowNum(uchar x,uchar y,int num,uchar len,uchar size)
{
uchar t,temp;
uchar enshow=0;
for(t=0;t<len;t++)
{
temp=(num/LM_pow(10,len-t-1))%10;
if(enshow==0&&t<(len-1))
{
if(temp==0)
{
LM_ShowChar(x+(size/2)*t,y,' ');
continue;
}else enshow=1;
}
LM_ShowChar(x+(size/2)*t,y,temp+'0');
}
}
//显示一个字符号串
void LM_ShowString(uchar x,uchar y,uchar *chr)
{
unsigned char j=0;
while (chr[j]!='\0')
{ LM_ShowChar(x,y,chr[j]);
x+=8;
if(x>120){x=0;y+=2;}
j++;
}
}
//显示汉字
void LM_ShowCHinese(uchar x,uchar y,uchar no)
{
u8 t,adder=0;
LM_Pos(x,y);
for(t=0;t<16;t++)
{
SdData(Hzk[2*no][t]);
adder+=1;
}
LM_Pos(x,y+1);
for(t=0;t<16;t++)
{
SdData(Hzk[2*no+1][t]);
adder+=1;
}
}
/***********功能描述:显示显示BMP图片128×64起始点坐标(x,y),x的范围0~127,y为页的范围0~7*****************/
void LM_DrawBMP(unsigned char x0, unsigned char y0,unsigned char x1, unsigned char y1,unsigned char BMP[])
{
unsigned int j=0;
unsigned char x,y;
if(y1%8==0) y=y1/8;
else y=y1/8+1;
for(y=y0;y<y1;y++)
{
LM_Pos(x0,y);
for(x=x0;x<x1;x++)
{
SdData(BMP[j++]);
}
}
}
//-----------------------------------
// 对比度调节
//-----------------------------------
void LCD_Darker(void)
{
if (ContrastLevel<0x3F)
{
ContrastLevel++;
}
SdCmd(0x81); // E-Vol setting
SdCmd(ContrastLevel); // (2byte command)
}
void LCD_Lighter(void)
{
if (ContrastLevel>0x00)
{
ContrastLevel--;
}
SdCmd(0x81); // E-Vol setting
SdCmd(ContrastLevel); // (2byte command)
}
//-----------------------------------
// 初始化lcd
//-----------------------------------
void initLCDM(void)
{
lm13232_GPIO_ITN();
_CS1 = 1;
_RST = 1;
RS = 1;
SCLK = 1;
SID = 1;
// _RST=1; // 复位lcd
_RST=0;
delay_ms(1);
_RST=1;
delay_ms(100);
ContrastLevel=0x0f; // 默认对比度
SdCmd(0xaf); // 开
SdCmd(0x40); // 显示起点0
SdCmd(0xa0); // ADC=0
SdCmd(0xa6); // 正常显示
SdCmd(0xa4); // 全部开
SdCmd(0xa2); // 偏差 = 1/6 (duty=1/33)
SdCmd(0xc8); // 公共输出模式为反向
SdCmd(0x2f); // 全部开
SdCmd(0x23); // RA/RB setting
SdCmd(0xf8);SdCmd(0x00);// Booster Ratio Set= 2x,3x,4x (2byte command)
SdCmd(0x81); // E-Vol setting
SdCmd(ContrastLevel); // (2byte command)
}
|