📄 lcd240128.c
字号:
/*
*********************************************************************************************************
* File Name: LCD240128.c
*
* Last Modified Data: 2006-08-10
*
* Last Version:V1.0
*
* Description:对LCD240*128进行读写控制
*
*********************************************************************************************************
*/
#define _LCD240128_
#include "..\Inc\Include.h"
uchar status; // 液晶状态变量定义
/*
********************************************************************************************************
* Function:R_ST 关
*
* Descriptions:读状态值
*
* Input:无
*
* OutPut:无
*******************************************************************************************************
*/
void R_ST(void)
{
cd=1;
wr=1;
P0=0xff;
rd=0;
status=P0;
rd=1;
}
/*
********************************************************************************************************
* Function:RWCheck
*
* Descriptions:指令/数据读写状态检测
*
* Input:无
*
* OutPut:无
*******************************************************************************************************
*/
void RWCheck(void)
{
do{
R_ST();
}while((status&0x03)==0);
}
/*
********************************************************************************************************
* Function:AutoWCheck
*
* Descriptions:自动写状态检测
*
* Input:无
*
* OutPut:无
*******************************************************************************************************
*/
void AutoWCheck(void)
{
do
{
R_ST();
}
while((status&0x08)==0);
}
/*
********************************************************************************************************
* Function:DataWrite
*
* Descriptions:写数据函数
*
* Input:无
*
* OutPut:无
*******************************************************************************************************
*/
void DataWrite(uchar data1)
{
RWCheck();
cd=0;//
rd=1;
wr=0;
P0 = data1;
wr=1;
}
/*
********************************************************************************************************
* Function:ComWrite
*
* Descriptions:写指令函数
*
* Input:无
*
* OutPut:无
*******************************************************************************************************
*/
void ComWrite(uchar command)
{
RWCheck();
cd=1;//
rd=1;
wr=0;
P0=command;
wr=1;
}
/*
********************************************************************************************************
* Function:Data1ComWrite
*
* Descriptions:写带一个参数指令
*
* Input:无
*
* OutPut:无
*******************************************************************************************************
*/
void Data1ComWrite(data1,comand) //写带一个参数指令
{
DataWrite(data1);
ComWrite(comand);
}
/*
********************************************************************************************************
* Function:Data2ComWrite
*
* Descriptions:写带两个参数指令
*
* Input:
*
* OutPut:
*******************************************************************************************************
*/
void Data2ComWrite(data1,data2,comand) //写带两个参数指令
{
DataWrite(data1);
DataWrite(data2);
ComWrite(comand);
}
/*
********************************************************************************************************
* Function: CLEAR
*
* Descriptions:清屏子函数,将液晶显示区全部清掉
*
* Input:
*
* OutPut:
*******************************************************************************************************
*/
void CLEAR(void)
{
uchar i=0, j=0x0f;
Data2ComWrite(GrahomeAddr,GrahomeAddr>>8,0x24);
ComWrite(0xB0);
do
{
do
{
AutoWCheck();
DataWrite(0x00);
}while((--i)!=0);
}while((--j)!=0);
ComWrite(0xB2);
}
/*
********************************************************************************************************
* Function:InitLcd
*
* Descriptions:对LCD240*128初始化
*
* Input:无
*
* OutPut:无
*******************************************************************************************************
*/
void InitLcd(void)
{
uchar i=0xe0, j=0x11;
GrahomeAddr = 0x01E0;//MenuHomeAddr[0];
ComWrite(0x90);
Data2ComWrite(0x25,0x20,0x21);
Data2ComWrite(0x00,0x00,0x40);
Data2ComWrite(0x1e,0x00,0x41);
Data2ComWrite(GrahomeAddr,GrahomeAddr>>8,0x42);
Data2ComWrite(0x1e,0x00,0x43);
ComWrite(0xA7);
Data2ComWrite(0x0f,0x00,0x22);
ComWrite(0x81);
Data2ComWrite(0x00,0x00,0x24);
ComWrite(0xB0);
do{
do{
AutoWCheck();
DataWrite(0x00);
}while((--i)!=0);
}while((--j)!=0);
ComWrite(0xB2);
Data2ComWrite(0x0,0x0,0x21);
ComWrite(0x9c);
}
/*
********************************************************************************************************
* Function:
*
* Descriptions:液晶汉字写入子函数,X,Y为坐标,M,N为宽度,P是数据指针
*
* Input:
*
* OutPut:
*******************************************************************************************************
*/
void WRI_CC(uchar x, uchar y, uchar m, uchar n, uchar p[])
{
uchar k,temp;
uint z;
z = y * 0x1e + x + GrahomeAddr;
x = z & 0x00ff;
y = (z & 0xff00)>>8;
m = m / 8;
do
{
Data2ComWrite(x, y, 0x24);
for(k=0; k<m; k++)
{
temp =*p;
if(fb==1) temp = ~temp;
p++;
Data1ComWrite(temp,0xC0);
}
z = (0x1e+x+(y<<8));
x = (uchar)(z&0x00ff);
y = (uchar)((z&0xff00)>>8);
}while((--n)!=0);
fb = 0;
}
/*
********************************************************************************************************
* Function:
*
* Descriptions:液晶汉字写入子函数,X,Y为坐标,M,N为宽度,P是数据指针
*
* Input:
*
* OutPut:
*******************************************************************************************************
*/
void WRI_CC_Black(uchar x, uchar y, uchar m, uchar n, uchar p[])
{
uchar k,temp;
uint z;
z = y * 0x1e + x + GrahomeAddr;
x = z & 0x00ff;
y = (z & 0xff00)>>8;
m = m / 8;
do
{
Data2ComWrite(x, y, 0x24);
for(k=0; k<m; k++)
{
temp =*p;
temp = ~temp;
p++;
Data1ComWrite(temp,0xC0);
}
z = (0x1e+x+(y<<8));
x = (uchar)(z&0x00ff);
y = (uchar)((z&0xff00)>>8);
}while((--n)!=0);
}
/*
********************************************************************************************************
* Function:
*
* Descriptions: 液晶描点子程序,X,Y为坐标点,Y的最高位为1时,描,0时,清
*
* Input:
*
* OutPut:
*******************************************************************************************************
*/
void WRI_D(uchar x, uchar y)
{
uint temp1,temp2,temp3;
uchar i, j;
//绘点子程序
temp1=(y&0x7f)*0x1e+GrahomeAddr;
temp2=temp1&0x00ff;
temp3=(temp1&0xff00)>>8;
temp1=temp2+x/0x08;
temp2=temp1&0x00ff;
if(temp1>255) j=1;
else j=0;
temp3=temp3+j;
Data2ComWrite(temp2,temp3,0x24);
i=x%0x08;
i=~i;
i=i&0x07;
j=y;
y=i;
i=((j&0x0f)<<4)+((j&0xf0)>>4);
i=i&0x08|0xf0;
ComWrite(i|y);
}
/*
********************************************************************************************************
* Function:
*
* Descriptions: 液晶画线子程序,点到点,画线还是清线由M决定,为1时清;
*
* Input:
*
* OutPut:
*******************************************************************************************************
*/
void ONLINE(uchar x1, uchar y1, uchar x2, uchar y2, uchar m)
{
uchar k; //画线程序调用绘点子程序//
uchar x;
if(m==3||m==4)
{
k=(y2-y1)/2;
do
{
y1=(m==3) ? (y1|0x80):y1;
WRI_D(x1, y1);
y1=y1+2; // 竖线 //
}while((--k)!=0);
return ;
}
if(x1==x2)
{
k=y2-y1;
do{
y1=(m==0) ? (y1|0x80):(y1&0x7f);
WRI_D(x1, y1);
y1++; //竖线 //
}while((--k)!=0);
}
else if(y1==y2)
{
k=x2-x1;
do
{
y1=(m==0) ? (y1|0x80):(y1&0x7f);
WRI_D(x1, y1); // 横线 //
x1++;
}while((--k)!=0);
}
else
{
k=x2-x1;
if(y1<y2)x=1;else x=0;
do
{
y1=(m==0) ? (y1|0x80):(y1&0x7f);
WRI_D(x1, y1); // 45度角的直线//
x1++;
if(x) y1++; else y1--;
} while((--k)!=0);
}
}
/*
********************************************************************************************************
* Function:
*
* Descriptions:画矩形
*
* Input:
*
* OutPut:
*******************************************************************************************************
*/
void Print_Box(uchar x1, uchar y1,uchar x2,uchar y2,m) //画矩形
{
ONLINE(x1,y1,x1,y2,m);
ONLINE(x1,y1,x2,y1,m);
ONLINE(x1,y2,x2,y2,m);
ONLINE(x2,y1,x2,y2+1,m);
}
/*
********************************************************************************************************
* Function:
*
* Descriptions: 清汉字
*
* Input:
*
* OutPut:
*******************************************************************************************************
*/
void CLEAR_ICC(uchar x, uchar y, uchar m, uchar n)
{
uchar k;
uint z;
z=y*0x1e+x+GrahomeAddr;
x=z&0x00ff;
y=(z&0xff00)>>8;
m=m/8;
do{
Data2ComWrite(x,y,0x24);
for(k=0;k<m;k++)
{
Data1ComWrite(0,0xc0);
}
z=(0x1e+x+(y<<8));
x=(uchar)(z&0x00ff);
y=(uchar)((z&0xff00)>>8);
}while((--n)!=0);
}
/*
********************************************************************************************************
* Function:
*
* Descriptions:西文字符显示子程序
*
* Input:
*
* OutPut:
*******************************************************************************************************
*/
void WRI_N(uchar x, uchar y, uchar p)
{
uint z;
z = y*0x1e+x;
x = z&0x00ff;
y = z>>8;
Data2ComWrite(x, y, 0x24);
Data1ComWrite(p-0x20, 0xC4);
}
/*
********************************************************************************************************
* Function:
*
* Descriptions:
*
* Input:
*
* OutPut:
*******************************************************************************************************
*/
void WRI_CGRAM(uchar *p)
{
uchar i=0;
Data2ComWrite(0x00,0x7c,0x24);
ComWrite(0xB0);
for(i=0; i<120; i++)
{
AutoWCheck();
DataWrite(*p++);
}
ComWrite(0xB2);
}
/*********************************************************************************************************
* Function:
*
* Descriptions:数值显示函数 ,x、y 地址,value 显示值,小数点n 数字位数
*
* Input:
*
* OutPut:
*******************************************************************************************************
*/
void WRI_VALUE(uchar x, uchar y, ulong value, uchar n)
{
uchar cnt, m,xs;
xs=(n - 1);
if(value >= 1000000) m = 7;
else if(value >= 100000) m = 6;
else if(value >= 10000) m = 5;
else if(value >= 1000) m = 4;
else if(value >= 100) m = 3;
else if(value >= 10) m = 2;
else{
if(n == 0) m = 1;else m = 2;
}
cnt = 0;
WRI_String(x-6, y, " ");
if(n < m)
{
for(; m>0; m--)
{
WRI_N(x-cnt, y, value%10+0x30);
value /= 10;
cnt += 1;
if (cnt == n)
{
WRI_String(x-cnt, y ,".");
cnt += 1;
}
}
}
else
{
for(;n>0;n--)
{
WRI_N(x-cnt, y, value%10+0x30);
value /=10;
cnt += 1;
if (cnt == xs)
{
WRI_String(x-cnt, y, ".");
cnt += 1;
}
}
}
}
// 起点X坐标
void WRI_CC_VALUE(uchar x, uchar y, uint value, uchar m, uchar n)
{
uchar i;
if(n != 0) m += 1;
x = x + m -1;
for(i=0; i<m; i++)
{
if(n&&i==n)
{
WRI_CC(x-i, y, 8, 8, Number[10]);
continue;
}
WRI_CC(x-i, y, 8, 8, Number[value%10]);
value /= 10;
}
}
void WRI_CC_VALUE_Black(uchar x, uchar y, uint value, uchar m, uchar n)
{
uchar i;
if(n!=0) m += 1;
x = x + m - 1;
for(i=0; i<m; i++)
{
if(n&&i==n)
{
WRI_CC_Black(x-i, y, 8, 8, Number[10]);
continue;
}
WRI_CC_Black(x-i, y, 8, 8, Number[value%10]);
value /= 10;
}
}
/*
********************************************************************************************************
* Function:
*
* Descriptions:字符串显示函数 ,x、y 地址,p 字符串首地址
*
* Input:
*
* OutPut:
*******************************************************************************************************
*/
void WRI_String(uchar x, uchar y, uchar p[])
{
uchar temp = '@';
while(*p != '\0')
{
temp = *p;
WRI_N(x, y, temp);
x += 1; p++;
if(x>=30) {x -= 30,y += 1;};
}
}
uchar WRI_Number(uchar x, uchar y, uint value, uchar n)
{
uchar i, cnt, m;
for(i=0; i<6; i++)
{
WRI_CC(x+i, y, 8, 8, Blank);
}
if(value >= 10000) m = 5;
else if(value >= 1000) m = 4;
else if(value >= 100) m = 3;
else if(value >= 10) m = 2;
else{if(n == 0) m = 1;else m = 2;}
x = x + m; if(n == 0) x -= 1;
cnt = 0;
for(; m>0; m--)
{
WRI_CC(x-cnt, y, 8, 8, Number[value%10]);
value /= 10;
cnt += 1;
if (cnt == n)
{
WRI_CC(x-cnt, y, 8, 8, Number[10]);
cnt += 1;
}
}
return x + 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -