新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > LCD 240*128 T6963C C51程序

        LCD 240*128 T6963C C51程序

        作者: 時間:2016-12-02 來源:網絡 收藏

        /**********************************
        //= 函數原型: Clr_char_Scr(void)
        //= 功 能: 清除當前文本屏幕
        //= 參 數:
        //= 返 回 值:
        //= 函數性質:公有函數
        **********************************/
        void Clr_char_Scr(void)//文本屏可以在內存中保持很多屏
        {
        uint i;
        // char_addr_Pointer_Set(0,0);//從0行0列開始
        char_addr_Pointer_Set(2,0);//從0行0列開始
        wr_cmd_0(LC_AUT_WR); // 自動寫
        // for(i=0;i<16*30;i++) //16行30列字符
        for(i=0;i<14*30;i++) //16行30列字符
        {
        awr_data(0x00); // 寫數據空白
        }
        wr_cmd_0(LC_AUT_OVR); // 自動寫結束
        char_addr_Pointer_Set(0,0); // 重置地址指針
        }

        /**********************************
        //= 函數原型: Clr_lcdram(void)
        //= 功 能: 清除所有的顯示內存
        //= 參 數:
        //= 返 回 值:
        //= 函數性質:私有函數
        **********************************/
        void Clr_lcdram(void)
        {
        uint i;
        wr_cmd_2(LC_ADD_POS,0x0000); // 設置地址指針0
        wr_cmd_0(LC_AUT_WR); // 自動寫
        for(i=0;i<=DISRAM_SIZE;i++)
        {
        awr_data(0x00); // 寫數據
        }
        wr_cmd_0(LC_AUT_OVR); // 自動寫結束
        wr_cmd_2(LC_ADD_POS,0x0000); // 重置地址指針
        }


        /**********************************
        //= 函數原型: reset_lcm(void)
        //= 功 能: 復位液晶模塊
        //= 參 數:
        //= 返 回 值:
        //= 函數性質:私有函數
        **********************************/
        void reset_lcm(void)
        {
        LCMRESET = 0;
        _nop_();
        _nop_();
        LCMRESET=0XFF;
        }

        /**********************************
        //= 函數原型: void lcm_init(void)
        //= 功 能: 初始化液晶模塊
        //= 參 數:
        //= 返 回 值:
        //= 函數性質:公有函數
        **********************************/
        void lcm_init(void)
        {
        reset_lcm();//復位

        wr_cmd_2(LC_TXT_HOME,TXTSTART); // 文本顯示區首地址
        wr_cmd_2(LC_TXT_AREA,30); // 文本顯示區寬度30列
        txthome = TXTSTART;

        wr_cmd_2(LC_GRH_HOME,GRSTART); // 圖形顯示區首地址
        wr_cmd_2(LC_GRH_AREA,30); // 圖形顯示區寬度30列
        grhome = GRSTART;

        wr_cmd_2(LC_CGR_OFFSET,CGRAMSTART >> 11);//CGRAM 偏移地址設置

        wr_cmd_0(LC_MOD_XOR|0x08); // 顯示方式設置,異或,字符全部用RAM區域生成
        wr_cmd_0(LC_DIS_SW |0x0c); // 顯示開關設置,圖文混和模式

        Clr_lcdram();//清除內存

        }

        /**********************************
        //= 函數原型: Pixel(unsigned char PointX,unsigned char PointY, bit Mode)
        //= 功 能: 在指定坐標位置顯示一個點
        //= 參 數: 坐標,顯示點或清除點
        //= 返 回 值:
        //= 函數性質:私有函數
        //= 如果顯示屏超過了256*256,請修改這個函數 PointX,PointY的類型
        //= Mode 1:顯示 0:清除該點
        **********************************/
        Pixel(unsigned char PointX,unsigned char PointY, bit Mode)
        {
        unsigned int StartAddr;
        unsigned char dat;
        StartAddr=(uint)PointX*30 + PointY/8 + grhome;
        dat=LC_BIT_OP+7-PointY%8; //生產位操作命令畫點的數據
        if(Mode) dat=dat|0x08;
        wr_cmd_2(LC_ADD_POS,StartAddr);//設置該點所在單元地址
        wr_cmd_0(dat); // 利用位操作命令畫點
        }


        /**********************************
        //= 函數原型: void line( unsigned char x1, unsigned char y1, unsigned char x2, unsigned char y2, bit Mode)
        //= 功 能: 劃線函數
        //= 參 數: 坐標1,坐標2,顯示點或清除點
        //= 返 回 值:
        //= 函數性質:私有函數
        //= 其它:顯示點陣不超過255*255
        /**********************************/

        void line( unsigned char y1,unsigned char x1, unsigned char y2,unsigned char x2, bit Mode)
        {
        unsigned char x,y;
        float k,b;
        if( abs(y1-y2) <= abs(x1-x2) ) // |k|<=1
        {
        k=((float)y2-y1) / ((float)x2-x1) ;
        b=y1-k*x1;
        if( x1 <= x2 )
        {
        for(x=x1;x<=x2;x++)
        {
        y=(uchar)(k*x+b);
        Pixel(x, y, Mode);
        }
        }
        else
        {
        for(x=x2;x<=x1;x++)
        {
        y=(uchar)(k*x+b);
        Pixel(x, y, Mode);
        }
        }
        }
        else // abs(y1-y2) > abs(x1-x2) |K|>1
        {
        k=((float)x2-x1) / ((float)y2-y1) ;
        b=x1-k*y1;
        if( y1 <= y2 )
        {
        for(y=y1;y<=y2;y++)
        {
        x=(uchar)(k*y+b);
        Pixel( x , y,Mode );
        }
        }
        else
        {
        for(y=y2;y<=y1;y++)
        {
        x=(uchar)(k*y+b);
        Pixel( x , y,Mode );
        }
        }
        }
        }

        /**********************************
        //= 函數原型: void ShowChar(uchar row,uchar col,uchar ch)
        //= 功 能: 在指定行列顯示8*16字符
        //= 參 數: 坐標行,坐標列,字符串指針
        //= 返 回 值:
        //= 函數性質:公有函數
        //=其它:所有可顯示字符不超過128個,否則本函數有溢出的可能
        **********************************/
        void showchar(uchar col,uchar row,uchar *chp)
        {
        #define hzp chp
        uchar char_sequence_number;
        uchar ascii_num;
        row/=8;col/=8;
        while (*chp !=

        主站蜘蛛池模板: 肇东市| 大宁县| 顺平县| 滨海县| 肇庆市| 北京市| 安塞县| 盐城市| 郧西县| 泗水县| 黄平县| 万山特区| 格尔木市| 马边| 台南县| 金秀| 佛学| 松桃| 攀枝花市| 大新县| 泰安市| 吉林市| 太保市| 资兴市| 昌平区| 沅陵县| 孝义市| 鲁甸县| 含山县| 出国| 淅川县| 东乡| 宁津县| 禄丰县| 武乡县| 桦南县| 仙桃市| 全州县| 茂名市| 三门峡市| 雅安市|