新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > LCD12864指定位置反白顯示程序

        LCD12864指定位置反白顯示程序

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


        void main()
        {
        uchar i = 0;
        PORTB = 0XFF; //
        DDRB = 0XFF; //PB口全部設為輸出模式
        Clr_CS();
        Clr_SID();
        Clr_SCLK();
        LCD_Init();
        Delay(50);
        LCD_Init(); //初始化兩邊是關鍵,否則液晶上電重起將不能顯示
        while(1)
        {
        nop();
        nop();
        Delay(500);
        Char_Set_XY(0,0,"ST7920_3_wires");
        Char_Set_XY(2,1,"反白練習");
        Char_Set_XY(0,2,"可以單字反白或不");
        Char_Set_XY(3,3,"反白");
        Delay(2000);
        Delay(2000);
        Set_Draw();
        Delay(100);
        Set_White(1,1,7,0); //第1行,第1個漢字位置到第8漢字位置反白
        Set_White(3,2,6,0); //第2行,第3個漢字位置到第6漢字位置反白
        Set_White(1,3,8,0); //第3行,第1個漢字位置到第8漢字位置反白
        Set_White(4,4,5,0); //第4行,第4個漢字位置到第5漢字位置反白
        Delay(2000);
        Delay(2000);
        Set_White(4,1,4,1); //第1行,第4個漢字位置等取消反白
        Set_White(5,2,5,1); //第2行,第5個漢字位置等取消反白
        Set_White(6,3,6,1); //第3行,第6個漢字位置等取消反白
        Set_White(4,4,4,1); //第4行,第4個漢字位置等取消反白
        Delay(2000);
        Delay(2000);
        Set_White(1,1,1,1); //
        Set_White(3,2,3,1); //
        Set_White(2,3,2,1); //
        Set_White(5,4,5,1); //
        Delay(2000);
        Delay(2000);
        Set_White(1,1,8,1); //第1行,第1個漢字位置到第8漢字位置取消反白
        Set_White(1,2,8,1); //第2行,第1個漢字位置到第8漢字位置取消反白
        Set_White(1,3,8,1); //第3行,第1個漢字位置到第8漢字位置取消反白
        Set_White(1,4,8,1); //第4行,第1個漢字位置到第8漢字位置取消反白

        Delay(2000);
        Delay(2000);
        W_1byte(0,0,0x30); //基本指令集,,繪圖顯示OFF
        W_1byte(0,0,0x01); //清除顯示
        W_1byte(0,0,0x01); //清除顯示
        W_1byte(0,0,0x01); //清除顯示
        Set_Draw();
        Delay(100);
        Draw_Pic(0,0,*PIC1); //先替換液晶內部RAM中的數據,再開顯示
        W_1byte(0,0,0x36); //8BIT控制界面,擴充指令集,,繪圖顯示ON
        Delay(5000);
        W_1byte(0,0,0x34); //繪圖顯示OFF,主要解決畫圖時拖尾的現象,即先
        //替換好液晶內部RAM中的數據在開顯示。
        Draw_Pic(0,0,*PIC2);
        W_1byte(0,0,0x36); //8BIT控制界面,擴充指令集,繪圖顯示ON
        Delay(5000);
        //畫完圖后要顯示文字要重新設置成普通模式
        W_1byte(0,0,0x30); //基本指令集,,繪圖顯示OFF
        W_1byte(0,0,0x01); //清除顯示

        }
        }
        /******************************************************************/
        void LCD_Init(void)
        {
        uchar cmd;
        cmd=0x30; //功能設置 8位數據,基本指令
        W_1byte(0,0,cmd);
        Delay(2);
        cmd=0x0C; //顯示狀態 ON,游標OFF,反白OFF
        W_1byte(0,0,cmd); //寫指令
        Delay(2);
        cmd=0x01; //清除顯示
        W_1byte(0,0,cmd); //寫指令
        Delay(2);
        cmd=0x02; //地址歸位
        W_1byte(0,0,cmd); //寫指令
        Delay(2);
        cmd=0x80; //設置DDRAM地址
        W_1byte(0,0,cmd); //寫指令
        Delay(2); //延時
        }
        /*******************************************************************
        函 數 名:W_1byte
        入口參數:RW、RS、W_data
        出口參數:無
        建立日期:2007年3月3日
        修改日期:
        函數作用:寫一個字節的數據到12864液晶,包括指令和數據
        說 明:RW=1,從液晶讀數據到MCU;RW=0,寫一個數據到液晶;
        (一般RW都設為0,即只向液晶寫數據,不讀數據)
        RS=1,寫入的是數據;RS=0,寫入的是指令;
        一般模式:RW=0,RS=1;寫數據
        RW=0,RS=0;寫指令
        ********************************************************************/
        void W_1byte(uchar RW, uchar RS, uchar W_data)
        {
        uint H_data,L_data,S_ID = 0xf8; //11111RWRS0
        if(RW == 0)
        {
        S_ID &=~ 0x04;
        }
        else //if(RW==1)
        {
        S_ID |= 0X04;
        }
        if(RS == 0)
        {
        S_ID &=~ 0x02;
        }
        else //if(RS==1)
        {
        S_ID |= 0X02;
        }
        H_data = W_data;
        H_data &= 0xf0; //屏蔽低4位的數據
        L_data = W_data; //xxxx0000格式
        L_data &= 0x0f; //屏蔽高4位的數據
        L_data <<= 4; //xxxx0000格式
        Set_CS();
        Write_8bits(S_ID); //發送S_ID
        Write_8bits(H_data); //發送H_data
        Write_8bits(L_data); //發送L_data
        Clr_CS();
        }
        /********************************************************************
        函 數 名:Write_8bits
        入口參數:W_bits
        出口參數:無
        建立日期:2007年3月3日
        修改日期:
        函數作用:負責串行輸出8個bit位
        說 明:
        ********************************************************************/
        void Write_8bits(uint W_bits)
        {
        uint i,Temp_data;
        for(i=0; i<8; i++)
        {
        Temp_data = W_bits;
        Temp_data <<= i;
        if((Temp_data&0x80)==0)
        {
        Clr_SID();
        }
        else
        {
        Set_SID();
        }
        nop();
        Set_SCLK();
        nop();
        nop();
        Clr_SCLK();
        nop();
        Clr_SID();
        }
        }


        評論


        技術專區

        關閉
        主站蜘蛛池模板: 呼玛县| 秦安县| 牡丹江市| 西平县| 宁阳县| 丰台区| 玛曲县| 桓台县| 江川县| 开平市| 宁南县| 赫章县| 华亭县| 囊谦县| 桃源县| 项城市| 磐石市| 天津市| 麦盖提县| 眉山市| 乐安县| 七台河市| 读书| 新安县| 锡林浩特市| 柳州市| 屯留县| 天水市| 金寨县| 酒泉市| 清徐县| 乐都县| 聊城市| 华阴市| 朝阳县| 茂名市| 雷波县| 罗江县| 桑日县| 科尔| 台湾省|