⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sed1335_portone.c

📁 周立功GUI在avr单片机上的移植 开发环境为IAR
💻 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 + -