📄 lcd12864.c
字号:
/***************************************
使用资源: P4
P3
**************************************/
#include "common.h"
#include "lcd12864.h"
#include "ziku.h"
//*****************状态检查*********************************
void StateCheck(void)
{ uchar cradd1;
LCD_RS_LO;
LCD_RW_HI;
LCD_DATA_DIR=0x00;
do
{
LCD_EN_HI;
cradd1=LCD_DATA_IN;
LCD_EN_LO;
}
while((cradd1&0x80)!=0);
}
//***************写指令代码子程序(左)*******************
void WriteCommand_L (uchar com1)
{ LCD_CS1_LO;
LCD_CS2_HI;
StateCheck(); //检查是否忙
LCD_RW_LO;
LCD_DATA_DIR=0xff;
LCD_DATA_OUT=com1;
LCD_EN_HI;
LCD_EN_LO;
}
//*****************写指令代码子程序(右)*******************
void WriteCommand_R (uchar com2)
{ LCD_CS1_HI;
LCD_CS2_LO;
StateCheck(); //检查是否忙
LCD_RW_LO;
LCD_DATA_DIR=0xff;
LCD_DATA_OUT=com2;
LCD_EN_HI;
LCD_EN_LO;
}
//****************写显示数据子程序(左)**********************
void WriteData_L (uchar dat1)
{
LCD_CS1_LO;
LCD_CS2_HI;
StateCheck(); //检查是否忙
LCD_RS_HI;
LCD_RW_LO;
LCD_DATA_DIR=0xff;
LCD_DATA_OUT=dat1;
LCD_EN_HI;
LCD_EN_LO;
}
//****************写显示数据子程序(右)**********************
void WriteData_R(uchar dat2)
{
LCD_CS1_HI;
LCD_CS2_LO;
StateCheck(); //检查是否忙
LCD_RS_HI;
LCD_RW_LO;
LCD_DATA_DIR=0xff;
LCD_DATA_OUT=dat2;
LCD_EN_HI;
LCD_EN_LO;
}
//******************清屏 ************************
void ClearScreen(void)
{ uchar i,j;
for(i=0;i<8;i++)
{ WriteCommand_L(i|0xb8); //设置页地址
WriteCommand_R(i|0xb8);
WriteCommand_L(0x40); //设置列地址
WriteCommand_R(0x40);
for(j=0;j<64;j++) //写0x00
{ WriteData_L(0x00);
WriteData_R(0x00);
}
}
}
//******************满屏 ************************
//====通过设置不同的内容可以使屏幕显示得另类
void AllScreen(void)
{ uchar i,j;
for(i=0;i<8;i++)
{ WriteCommand_L(i|0xb8); //设置页地址
WriteCommand_R(i|0xb8);
WriteCommand_L(0x40); //设置列地址
WriteCommand_R(0x40);
for(j=0;j<64;j++) //写0xff
{ WriteData_L(0x01);
WriteData_R(0x01);
}
}
}
//****************LCD初始化******************************
void Init_LCD (void)
{
LCD_RST_DIR |=LCD_RST;
LCD_RST_HI;
LCD_RST_L0;
LCD_CS1_DIR |= LCD_CS1;
LCD_CS1_LO;
LCD_CS2_DIR |= LCD_CS2;
LCD_CS2_LO;
LCD_RS_DIR |= LCD_RS;
LCD_RS_LO;
LCD_RW_DIR |= LCD_RW;
LCD_RW_LO;
LCD_EN_DIR |= LCD_EN;
LCD_EN_LO;
WriteCommand_L(0xc0);
WriteCommand_R(0xc0); //显示开始行
WriteCommand_L(0x3f);
WriteCommand_R(0x3f); //开显示
ClearScreen();//清屏
}
//===============形式=========
//16*16的字符:利用这些参数改变,可以以不同大小来显示
void WriteWord (uchar colu,uchar page, const uchar code)//page:页 colum:列 code:字代码
{
uchar i,j,colum0;
uchar flag;
uchar colum;
uchar dis_count=0;//显示计数
colum=colu*16;//显示内容的宽度
for(j=0;j<2;j++)
{ WriteCommand_L(page|0xb8); //页
WriteCommand_R(page|0xb8);
colum0=colum;
if(colum0>63) //右屏
{ colum0=colum0-64;
WriteCommand_R(colum0|0x40);
flag=1;
}
else //左屏
{
WriteCommand_L(colum0|0x40);
flag=0;
}
//*********************
for(i=0;i<16;i++) //每页占的字节数
{
if(flag==0)
{
WriteData_L(dis_table[32*code+dis_count]);
}
else
{
WriteData_R(dis_table[32*code+dis_count]);
}
dis_count++; //显示计数
if(colum0==64) //列=64
{
colum0=0;
if(flag==0)
{
flag=1;
WriteCommand_R(colum0|0x40);
}
else
{
break;
}
}
}
page++;
}
}
//=================显示字符=======================
//=======8*16的字符:
void Writechar (uchar colu,uchar page, const uchar code)//page:页 colum:列 code:字代码
{
uchar i,j,colum0;
uchar flag;
uchar colum;
uchar dis_count=0;//显示计数
colum=colu*8;//显示内容的宽度
for(j=0;j<2;j++)
{ WriteCommand_L(page|0xb8); //页
WriteCommand_R(page|0xb8);
colum0=colum;
if(colum0>63) //右屏
{ colum0=colum0-64;
WriteCommand_R(colum0|0x40);
flag=1;
}
else //左屏
{
WriteCommand_L(colum0|0x40);
flag=0;
}
//*********************
for(i=0;i<8;i++) //每页占的字节数
{
if(flag==0)
{
WriteData_L(dis_char[16*code+dis_count]);
}
else
{
WriteData_R(dis_char[16*code+dis_count]);
}
dis_count++; //显示计数
if(colum0==64) //列=64
{
colum0=0;
if(flag==0)
{
flag=1;
WriteCommand_R(colum0|0x40);
}
else
{
break;
}
}
}
page++;
}
}
//==========显示字符串
void Writestring(uchar colu,uchar page, uchar *code)//page:页 colum:列 code:字代码
{
uchar code0=0,colu0=0,page0=0;
colu0=colu;
page0=page;
uchar i;
while(code[i]!='\0')
{
code0=code[i]-48;
Writechar(colu0,page0,code0);
i++;
colu0++;
if(colu0==16)
{
colu0=0;
page0++;
}
}
}
void Writenumber(float m,int n,int k,int r) //显示常数 m为数字 n为小数位数 k为列 r为页数
{
int i,x=99,s=99;
int a[8],w;
m= m*pow(10,n);
if(m<0)
{
m=-m;
Writechar(k-1,r, 77);
}
else Writechar(k-1,r, 76);
x=7-k-n;
w=k;
for(i=7-k;i>=0;i--)
{
if(x==i&&x!=0) a[i]=75;
else {
a[i] = (int)m%10;
m=m/10;
}
}
for(i=0;i<=7-k;i++)
{
if(a[i]==0&&s==99)
{
if(a[i+1]==75)Writechar(w++,r,a[i]);
else _NOP();
}
else
{
if(w<8)Writechar(w++,r,a[i]);
s=0;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -