?? 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 + -