📄 sed1335_portone.c
字号:
/****************************************************************************
* 文件名:SED1335.C
* 功能:SED1335图形液晶模块驱动程序。
用于ZLG/GUI用户图形界面。
* 作者:钱巍
* 日期:2006/5/20
****************************************************************************/
#include "all.h"
#ifdef SED1335
#define SED1335_C
/* 定义显示缓冲区 */
//TCOLOR gui_disp_buf[GUI_LCM_YMAX][GUI_LCM_XMAX/8];
void W_comm(uint8 COMMAND)
{
RD_H;
//DATAOUT=COMMAND;
if((COMMAND&0x01)==0) D0_L;
else D0_H;
if((COMMAND&0x02)==0) D1_L;
else D1_H;
if((COMMAND&0x04)==0) D2_L;
else D2_H;
if((COMMAND&0x08)==0) D3_L;
else D3_H;
if((COMMAND&0x10)==0) D4_L;
else D4_H;
if((COMMAND&0x20)==0) D5_L;
else D5_H;
if((COMMAND&0x40)==0) D6_L;
else D6_H;
if((COMMAND&0x80)==0) D7_L;
else D7_H;
A0_H;
CS_L;
WD_L;
NOP();
NOP();
NOP();
CS_H;
WD_H;
A0_L;
}
void W_code(uint8 code)
{
//DATAOUT=code;
if((code&0x01)==0) D0_L;
else D0_H;
if((code&0x02)==0) D1_L;
else D1_H;
if((code&0x04)==0) D2_L;
else D2_H;
if((code&0x08)==0) D3_L;
else D3_H;
if((code&0x10)==0) D4_L;
else D4_H;
if((code&0x20)==0) D5_L;
else D5_H;
if((code&0x40)==0) D6_L;
else D6_H;
if((code&0x80)==0) D7_L;
else D7_H;
A0_L;
RD_H;
CS_L;
WD_L;
for(int i=0;i<10;i++)
NOP();
CS_H;
WD_H;
}
void W_data(uint8 z)
{
W_comm(0X42);
W_code(z);
}
uint8 r_data(void)
{
uint8 a,b[8];
W_comm(0X43);
//DATABUS=0x00;
D0_D_I;
D1_D_I;
D2_D_I;
D3_D_I;
D4_D_I;
D5_D_I;
D6_D_I;
D7_D_I;
A0_H;
//DATAOUT=0xff;
D0_H;
D1_H;
D2_H;
D3_H;
D4_H;
D5_H;
D6_H;
D7_H;
WD_H;
CS_L;
//DATAOUT=0xff;
D0_H;
D1_H;
D2_H;
D3_H;
D4_H;
D5_H;
D6_H;
D7_H;
RD_L;
for(int i=0;i<10;i++)
NOP();
//a=DATAIN;
b[0]=D0_I;
b[1]=D1_I;
b[2]=D2_I;
b[3]=D3_I;
b[4]=D4_I;
b[5]=D5_I;
b[6]=D6_I;
b[7]=D7_I;
CS_H;
RD_H;
//DATAOUT=0x00;
D0_L;
D1_L;
D2_L;
D3_L;
D4_L;
D5_L;
D6_L;
D7_L;
//DATABUS=0xff;
D0_D_O;
D1_D_O;
D2_D_O;
D3_D_O;
D4_D_O;
D5_D_O;
D6_D_O;
D7_D_O;
b[0]=(b[0]>>D0);
b[1]=(b[1]>>D1)<<1;
b[2]=(b[2]>>D2)<<2;
b[3]=(b[3]>>D3)<<3;
b[4]=(b[4]>>D4)<<4;
b[5]=(b[5]>>D5)<<5;
b[6]=(b[6]>>D6)<<6;
b[7]=(b[7]>>D7)<<7;
a=b[0]|b[1]|b[2]|b[3]|b[4]|b[5]|b[6]|b[7];
return(a);
}
void set_pos(uint8 pos_x,uint8 pos_y)
{
uint16 addr;
if (pos_x>=40)
{
pos_x=0;
}
if(pos_y>=240)
{
pos_y=0;
}
addr=pos_x+pos_y*40;
W_comm(0x4c);
W_comm(0x46);
W_code(LOBYTE(addr));
W_code(HIBYTE(addr));
}
/****************************************************************************
* 名称:GUI_FillSCR()
* 功能:全屏填充。直接使用数据填充显示缓冲区。
* 入口参数:dat 填充的数据
* 出口参数:无
* 说明:用户根据LCM的实际情况编写此函数。
****************************************************************************/
void GUI_FillSCR(TCOLOR dat)
{
uint16 k;
//uint32 i,j;
//填充缓冲区
/*
for(i=0;i<(GUI_LCM_YMAX/8);i++)
{
for(j=0;j<GUI_LCM_XMAX;j++)
{
//gui_disp_buf[i][j]=dat;
}
}*/
//填充LCM
k=0x2580;
W_comm(0x4c);
W_comm(0x46);
W_code(0x00);
W_code(0x00);
W_comm(0x42);
do
{
W_code(dat);
k--;
}
while(k>0);
}
/****************************************************************************
* 名称:GUI_ClearSCR()
* 功能:清屏。
* 入口参数:无
* 出口参数:无
* 说明:用户根据LCM的实际情况编写此函数。
****************************************************************************/
void GUI_ClearSCR(void)
{
unsigned int i;
i=0x7080;
W_comm(0x4c);
W_comm(0x46);
W_code(0x00);
W_code(0x00);
W_comm(0x42);
do{
W_code(0x00);
i--;
}
while(i>0);
}
/****************************************************************************
* 名称:GUI_Initialize()
* 功能:初始化GUI,包括初始化显示缓冲区,初始化LCM并清屏。
* 入口参数:无
* 出口参数:无
* 说明:用户根据LCM的实际情况编写此函数。
****************************************************************************/
void GUI_Initialize(void)
{
//初始化IO
CTLINIT;
RES_L;
DATAINIT;
for(int i=0;i<10;i++)
NOP();
RES_H;//复位控制
CS_L;
W_comm(0x40);//SYSTEM SET
W_code(0x30);//P1
W_code(0x87);//P2
W_code(0x07);//P3
W_code(0x27);//p4
W_code(0x42);//p5
W_code(0xf0);//P6
W_code(0x28);//p7
W_code(0x00);//p8
W_comm(0x44);//SCROLL
W_code(0x00);//P1
W_code(0x00);//P2
W_code(0xf0);//P3
W_code(0x00);//P4
W_code(0x40);//P5
W_code(0xf0);//P6
W_code(0x00);//P7
W_code(0x80);//P8
W_code(0x00);//P9
W_code(0x00);//P10
W_comm(0x5d);//CSR FORM
W_code(0x07);
W_code(0x07);
W_comm(0x5a);//HDOT SCR
W_code(0x00);
W_comm(0x5b);//OVLAY
W_code(0x0d);//异或方式
//W_code(0x18);
W_comm(0x59);//DISP ON
W_code(0x54);//无光标
//W_code(0x56); //有光标
CS_H;
//GUI_FillSCR(0x00); // 初始化缓冲区为0x00,并输出屏幕(清屏)
GUI_ClearSCR();
}
/****************************************************************************
* 名称:GUI_Point()
* 功能:在指定位置上画点。
* 入口参数: x 指定点所在列的位置
* y 指定点所在行的位置
* color 显示颜色(对于黑白色LCM,为0时灭,为1时显示)
* 出口参数:返回值为1时表示操作成功,为0时表示操作失败。(操作失败原因是指定地址
* 超出有效范围)
* 说明:用户根据LCM的实际情况编写此函数。
****************************************************************************/
uint8 GUI_Point(uint16 x, uint8 y, uint8 color)
{
uint8 px1;
uint8 temp,temp1;
// 参数过滤
if(x>=GUI_LCM_XMAX) return(0);
if(y>=GUI_LCM_YMAX) return(0);
px1=x/8;
temp=x & 0x0007;
temp =(uint8)(7-temp);
temp = 1<<temp;
set_pos(px1,y);
temp1=r_data();
if(color==1)
temp|=temp1;
else if(color==0)
temp=(~temp)&temp1;
else
return(0);
set_pos(px1,y);
W_comm(0X42);
W_code(temp); //在屏上写一点
return(1);
}
/****************************************************************************
* 名称:GUI_ReadPoint()
* 功能:读取指定点的颜色。
* 入口参数:x 指定点所在列的位置
* y 指定点所在行的位置
* ret 保存颜色值的指针
* 出口参数:返回0表示指定地址超出缓冲区范围
* 说明:对于单色,设置ret的d0位为1或0,4级灰度则为d0、d1有效,8位RGB则d0--d7有效,
* RGB结构则R、G、B变量有效。
****************************************************************************/
uint8 GUI_ReadPoint(uint16 x, uint8 y, TCOLOR *ret)
{
uint8 px1;
uint8 temp,temp1;
// 参数过滤
if(x>=GUI_LCM_XMAX) return(0);
if(y>=GUI_LCM_YMAX) return(0);
px1=x/8;
temp=x & 0x0007;
temp =(uint8)(7-temp);
temp = 1<<temp;
set_pos(px1,y);
temp1 = r_data();
if(temp1&temp==0)
*ret = 0x00;
else
*ret = 0x01;
return(1);
}
/****************************************************************************
* 名称:GUI_HLine()
* 功能:画水平线。
* 入口参数:x0 水平线起点所在列的位置
* y0 水平线起点所在行的位置
* x1 水平线终点所在列的位置
* color 显示颜色(对于黑白色LCM,为0时灭,为1时显示)
* 出口参数:无
* 说明:操作失败原因是指定地址超出缓冲区范围。
****************************************************************************/
void GUI_HLine(uint16 x0, uint8 y0, uint16 x1, TCOLOR color)
{
uint8 bak;
if(x0>x1) // 对x0、x1大小进行排列,以便画图
{
bak = x1;
x1 = x0;
x0 = bak;
}
do
{
GUI_Point(x0, y0, color); // 逐点显示,描出垂直线
x0++;
}
while(x1>=x0);
}
/***********************************************************************
* 名称:GUI_RLine()
* 功能:画竖直线。根据硬件特点,实现加速。
* 入口参数:x0 垂直线起点所在列的位置
* y0 垂直线起点所在行的位置
* y1 垂直线终点所在行的位置
* color 显示颜色(对于黑白色LCM,为0时灭,为1时显示)
* 出口参数: 无
* 说明:操作失败原因是指定地址超出缓冲区范围。
***********************************************************************/
void GUI_RLine(uint16 x0, uint8 y0, uint8 y1, TCOLOR color)
{
uint8 bak;
if(y0>y1) // 对y0、y1大小进行排列,以便画图
{
bak = y1;
y1 = y0;
y0 = bak;
}
do
{
GUI_Point(x0, y0, color); // 逐点显示,描出垂直线
y0++;
}
while(y1>=y0);
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -