📄 lcd.c
字号:
/*----------------------------------------------------------------------------------
LCD.C
128*64点阵液晶基本函数库
-----------------------------------------------------------------------------------*/
//-----------------------------------------------------
#include "Main.h"
#include "PORT.h"
#include "CHAR_MAP.h"
#include "DELAY.h"
/*-------私有函数原型-------------------------------------------------*/
static void sendorder(void);
static void senddata(void);
static void setpage( int a);
static void setpage( int a);
static void setaddr( int addr);
static void x(char n);
static void ClearScreen( int a);
static void put_china(char a,char b,char n);
//---------------------------------------------------------
//显示中文界面
//---------------------------------------------------------
void LCD_China_Disp(void)
{
put_china(6,36,10); //欢迎光临
put_china(6,52,11);
put_china(6,70,12);
put_china(6,86,13);
put_china(4, 0,3); //卡号
put_china(4,16,4);
put_china(2, 0,8); //扣除 元
put_china(2,16,9);
put_china(2,80,7);
put_china(0, 0,5); //余额 元
put_china(0,16,6);
put_china(0,80,7);
}
//---------------------------------------------------------
//显示数据
//--------------------------------------------------------
void LCD_Update(tByte *p,tByte *q)
{
put_char(2,40,p); //显示扣除金额
put_char(0,40,q); //显示卡内余额
}
//-----------------------------------------------------
//显示汉字函数
//-------------------------------------------------------
void put_china(char a,char b,char n)
{
char i,*p;
p=cha+32*n;
setpage(a+1);
setaddr(b);
for(i=0;i<16;i++)
{x(*p);
p++;}
setpage(a);
setaddr(b);
for(i=16;i<32;i++)
{x(*p);
p++;}
}
//---------------------------------------------------------
//显示字符串函数
//---------------------------------------------------------
void put_char(char a,char b,tByte *n)
{
char i,*p;
while(*n!='\0')
{
p=chb+16*(*n-32);
setpage(a+1);
setaddr(b);
for(i=0;i<8;i++)
{x(*p);
p++;
}
setpage(a);
setaddr(b);
for(i=8;i<16;i++)
{ x(*p);
p++;
}
b = b+8;
if((b + 8) > 127)
{
b = 0;
if(a < 2 ) break;
else a -= 2;
}
n++;
}
}
//---------------------------------------------------------
//初始化LCD函数
//---------------------------------------------------------
void LCD_Init(void)
{
P_IO_Data_Data =0x00; //端口初始化
P_IO_Control_Data =0x8f;
P_IO_Data_Data =0xaf; //LCD_ON
sendorder();
P_IO_Data_Data =0x2f; //上电模式
sendorder();
P_IO_Data_Data =0x81; //电量设置模式(屏幕亮度)
sendorder();
P_IO_Data_Data =0x30; //指令数据
sendorder();
P_IO_Data_Data =0x27; //内部电压调节电阻设置
sendorder();
P_IO_Data_Data =0xa2; //偏压设置
sendorder();
P_IO_Data_Data =0xc0; //Com 扫描方式设置(0xc8反向)
sendorder();
//P_IO_Data_Data =0xa1;
P_IO_Data_Data =0xa0; //Segment方向选择(0xa1反向)
sendorder();
P_IO_Data_Data =0xa4; //全屏变亮(0xa5变亮)
sendorder();
P_IO_Data_Data =0xa6; //正相反相显示控制指令,RAM中数据不变(0xa7)正常反白
sendorder();
P_IO_Data_Data =0xac; //静态指示器控制指令(0xad为on)
sendorder();
P_IO_Data_Data =0x00;
sendorder();
P_IO_Data_Data =0x40; //设置显示起始行对应RAM行号
sendorder();
//setpage(0);
//setaddr(0);
ClearScreen(0);
}
//---------------------------------------------------------
//发送命令子函数
//---------------------------------------------------------
void sendorder(void)
{
char c;
c=(C_AOP_Pin|C_EP_Pin|C_RWP_Pin);
c^=0xff;
P_IO_Control_Data=c;
delay_nus(1);
P_IO_Control_Data=c|C_EP_Pin;
delay_nus(2);
P_IO_Control_Data=c;
delay_nus(10);
}
//---------------------------------------------------------
//写入数据子函数
//---------------------------------------------------------
void senddata(void)
{
char c;
c=(C_AOP_Pin|C_EP_Pin|C_RWP_Pin);
c^=0xff;
P_IO_Control_Data=c;
delay_nus(1);
P_IO_Control_Data=c|C_AOP_Pin|C_EP_Pin;
delay_nus(2);
P_IO_Control_Data=c;
delay_nus(10);
}
//---------------------------------------------------------
//页设置子函数
//---------------------------------------------------------
void setpage( int a)
{
a|=0xb0;
P_IO_Data_Data =a;
sendorder();
}
//---------------------------------------------------------
//列设置子函数
//---------------------------------------------------------
void setaddr( int addr)
{
int b;
b=addr>>4;
b&=0x1f;
b|=0x10;
addr&=0x0f;
P_IO_Data_Data =addr;
sendorder();
P_IO_Data_Data =b;
sendorder();
}
//---------------------------------------------------------
//送数子函数
//---------------------------------------------------------
void x(char n)
{
P_IO_Data_Data =n;
senddata();
}
//---------------------------------------------------------
//清屏子函数 fill ROM with 0 or 1
//---------------------------------------------------------
void ClearScreen( int a)
{
int z1,z2;
if(a!=0) a=0xff;
for(z1=0;z1<8;z1++)
{
setpage(z1);
setaddr(0);
for(z2=0;z2<128;z2++)
{
P_IO_Data_Data =a;
senddata();
}
}
}
//----------------------------------------------------------
//------------END LCD.C--------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -