📄 lcd12864.c
字号:
#include "config.h"
#include"LCD12864.h"
const uint8 kuai[]={
/*-- 文字: 帅 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0xF8,0x00,0x00,0xFF,0x00,0xF8,0x08,0x08,0x08,0xFF,0x08,0x08,0x08,0xF8,0x00,
0x80,0x47,0x20,0x18,0x07,0x00,0x1F,0x00,0x00,0x00,0xFF,0x00,0x08,0x18,0x0F,0x00,
};
const uint8 liao[]={
/*-- 文字: 廖 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0xFE,0x8A,0x5A,0x2A,0x8A,0x7B,0x82,0x0A,0x5A,0xAA,0xFA,0x02,0x02,0x00,
0x80,0x60,0x1F,0x84,0xAC,0xAA,0xAA,0x55,0x54,0x4B,0x29,0x22,0x12,0x14,0x04,0x00,
};
const uint8 xu[]={
/*-- 文字: 旭 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x10,0x10,0x10,0xFF,0x10,0xF0,0x00,0x00,0xFE,0x22,0x22,0x22,0x22,0xFE,0x00,0x00,
0x40,0x30,0x0E,0x01,0x00,0x3F,0x40,0x40,0x47,0x44,0x44,0x44,0x44,0x47,0x70,0x00,
};
const uint8 ming[]={
/*-- 文字: 明 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0xFE,0x22,0x22,0x22,0xFE,0x00,0x00,0xFF,0x11,0x11,0x11,0x11,0xFF,0x00,0x00,
0x00,0x03,0x02,0x02,0x02,0x43,0x20,0x18,0x07,0x01,0x01,0x41,0x81,0x7F,0x00,0x00,
};
const uint8 ge[]={
/*-- 文字: 哥 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x02,0x02,0x7A,0x2A,0x2A,0x2A,0x2A,0x7A,0x02,0x02,0x7E,0x02,0x82,0x00,0x00,
0x01,0x01,0x01,0x3D,0x15,0x15,0x15,0x15,0x3D,0x41,0x81,0x7F,0x01,0x01,0x01,0x00,
};
/******************************************************************************************************************
* 函数名称:LCM12864_Delay()
* 功 能:软件延时函数。用于LCM12864显示输出时序控制。
* 入口参数:无
* 出口参数:无
*******************************************************************************************************************/
void LCM12864_Delay(void)
{
uint8 i;
for(i=0; i<100; i++);
}
/******************************************************************************************************************/
void DelayMS (uint32 dly)
{
uint32 i;
for ( ; dly>0; dly--)
for (i=0; i<50000; i++);
}
void hz_disp16f(uint8 pag, uint8 col, const uint8 *hzk,uint8 CS0_CS1 )
{
uint8 j=0,i=0;
CS0_CS1=CS0_CS1;
for(j=0;j<2;j++)
{
LCD_W_Code(LCM12864_ADDRSTRX+pag+j,CS0_CS1);
LCD_W_Code(LCM12864_ADDRSTRY+col,CS0_CS1);
for(i=0;i<16;i++)
{
LCD_W_Data(~hzk[16*j+i],CS0_CS1);
}
}
}
void hz_disp16(uint8 pag, uint8 col, const uint8 *hzk,uint8 CS0_CS1 )
{
uint8 j=0,i=0;
CS0_CS1=CS0_CS1;
for(j=0;j<2;j++)
{
LCD_W_Code(LCM12864_ADDRSTRX+pag+j,CS0_CS1);
LCD_W_Code(LCM12864_ADDRSTRY+col,CS0_CS1);
for(i=0;i<16;i++)
{
LCD_W_Data(hzk[16*j+i],CS0_CS1);
}
}
}
void InitLCD12864()
{
L_LCM12864_RST();//LCDRest=0;
DelayMS(2); //注意此时延时的时间
H_LCM12864_RST();//LCDRest=1;
DelayMS(2);
//LCD12864_Clear();
//LCDCs1=0;
//LCDCs2=1;
DelayMS(1);
LCD_W_Code(LCM12864_DISPON , CS0);
LCD_W_Code(LCM12864_STARTROW ,CS0);
LCD_W_Code(LCM12864_ADDRSTRX, CS0);
LCD_W_Code(LCM12864_ADDRSTRY, CS0);
LCD_W_Code(LCM12864_DISPON , CS1);
LCD_W_Code(LCM12864_STARTROW ,CS1);
LCD_W_Code(LCM12864_ADDRSTRX, CS1);
LCD_W_Code(LCM12864_ADDRSTRY, CS1);
}
/******************************************************************************************************************
* 函数名称:LCD_W_Code()
* 功 能:向LCM12864写命令。
* 入口参数:LCDCode 要写入LCM12864的命令字 CS0_CS1
* 出口参数:无
*******************************************************************************************************************/
void LCD_W_Code(uint8 LCDCode, uint8 CS0_CS1)
{
// LCD_check_busy();
if(0x00==CS0_CS1)
{
H_LCM12864_CSA();//LCDCs1=1;
L_LCM12864_CSB();//LCDCs2=0;
}
else
{
L_LCM12864_CSA();//LCDCs1=0;
H_LCM12864_CSB();//LCDCs2=1;
}
L_LCM12864_E();
L_LCM12864_RS();//LCD_DI=0; RS=0,表示发送命令
L_LCM12864_RW();//LCD_WR=0;
OutData(LCDCode);
LCM12864_Delay();
H_LCM12864_E();
LCM12864_Delay();
L_LCM12864_E();
LCM12864_Delay();
//LCD_DATA=tpcode;
//LCD_E=1;
//_nop_();
//LCD_E=0;
}
void LCD12864_Clear(void)
{
unsigned char i,j;
for(j=0;j<8;j++)
{
LCD_W_Code(LCM12864_ADDRSTRX+j,CS0);
LCD_W_Code(LCM12864_ADDRSTRY, CS0);
LCD_W_Code(LCM12864_ADDRSTRX+j,CS1);
LCD_W_Code(LCM12864_ADDRSTRY, CS1);
for(i=0;i<64;i++)
{
LCD_W_Data(0x00,CS0);
LCD_W_Data(0x00,CS1);
}
}
//LCD清屏函数
}
void LCD_W_Data(uint8 wDate ,uint8 CS0_CS1)
{
if(0x00==CS0_CS1)
{
H_LCM12864_CSA();//LCDCs1=1;
L_LCM12864_CSB();//LCDCs2=0;
}
else
{
L_LCM12864_CSA();//LCDCs1=0;
H_LCM12864_CSB();//LCDCs2=1;
}
L_LCM12864_E(); // 将E置低
H_LCM12864_RS(); // RS=1,表示发送数据
L_LCM12864_RW(); //LCD_WR=0;
OutData(wDate);
LCM12864_Delay();
H_LCM12864_E();
LCM12864_Delay();
L_LCM12864_E();
LCM12864_Delay();
}
void OutData(uint8 Date)
{
if((Date & 0x01)==1) H_LCM12864_D0(); else L_LCM12864_D0();
if((Date & 0x02)==2) H_LCM12864_D1(); else L_LCM12864_D1();
if((Date & 0x04)==4) H_LCM12864_D2(); else L_LCM12864_D2();
if((Date & 0x08)==8) H_LCM12864_D3(); else L_LCM12864_D3();
if((Date & 0x10)==16) H_LCM12864_D4(); else L_LCM12864_D4();
if((Date & 0x20)==32) H_LCM12864_D5(); else L_LCM12864_D5();
if((Date & 0x40)==64) H_LCM12864_D6(); else L_LCM12864_D6();
if((Date & 0x80)==128) H_LCM12864_D7(); else L_LCM12864_D7();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -