新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > ATmega128(12864帶字庫)

        ATmega128(12864帶字庫)

        作者: 時間:2016-11-10 來源:網絡 收藏
        //12864型LCD顯示驅動程序,簡單的顯示漢字和字符

        //編譯環境 AVR Studio 4.17/AVR GCC
        //系統時鐘7.3728MHZ,設置熔絲位為外部高頻石英晶體振蕩,啟動時間4.1ms

        本文引用地址:http://www.104case.com/article/201611/317440.htm

        //***********************************************************************
        //包含文件
        //***********************************************************************

        #include
        #include
        #define F_CPU7372800/* 單片機主頻為7.3728MHz,用于延時子程序 */
        #include
        #include
        #include
        //***********************************************************************
        //定義變量區
        //***********************************************************************
        #define uchar unsigned char
        #define uint unsigned int

        #define delay_us(x) _delay_us(x) //AVR GCC延時函數 x(us)
        #define delay_ms(x) _delay_ms(x) //AVR GCC延時函數 x(ms)

        #define RS_CLRPORTF &= ~(1 << PF1) //RS置低
        #define RS_SETPORTF |= (1 << PF1) //RS置高

        #define RW_CLRPORTF &= ~(1 << PF2) //RW置低
        #define RW_SETPORTF |= (1 << PF2) //RW置高

        #define EN_CLRPORTF &= ~(1 << PF3) //E置低
        #define EN_SETPORTF |= (1 << PF3) //E置高

        #define PSB_CLRPORTF &= ~(1 << PE2) //PSB置低,串口方式
        #define PSB_SETPORTF |= (1 << PE2) //PSB置高,并口方式

        #define LOW0
        #define HIGH 1

        //初始化指令
        #define CLEAR_SCREEN0x01//清屏指令:清屏且AC值為00H
        #define AC_INIT 0x02//將AC設置為00H。且游標移到原點位置
        #define CURSE_ADD0x06//設定游標移到方向及圖像整體移動方向(默認游標右移,圖像整體不動)
        #define FUN_MODE0x30//工作模式:8位基本指令集
        #define DISPLAY_ON0x0c//顯示開,顯示游標,且游標位置反白
        #define DISPLAY_OFF0x08//顯示關
        #define CURSE_DIR0x14//游標向右移動:AC=AC+1
        #define SET_CG_AC0x40//設置AC,范圍為:00H~3FH
        #define SET_DD_AC0x80

        #define Data_IO PORTA //液晶數據口
        #define Data_DDR DDRA //數據口方向寄存器
        #define D_LE0 PORTD &= ~(1 << PD4) //數碼管段控制位為0,鎖存端口數據
        #define D_LE1 PORTD |= (1 << PD4) //數碼管段控制位為1,鎖存器輸出與端口一致
        #define W_LE0 PORTD &= ~(1 << PD5) //數碼管位控制位為0
        #define W_LE1 PORTD |= (1 << PD5) //數碼管位控制位為1

        //*************************************************************************
        //初始化子程序
        //*************************************************************************
        void system_init()
        {

        Data_IO = 0xFF; //電平設置
        Data_DDR = 0xFF; //方向輸出
        PORTF = 0xFF; //電平設置
        DDRF = 0xFF; //方向輸出
        PORTD=0xFF;
        DDRD=0xFF;
        PORTE=0xFF; //PSB對應于PE2
        DDRE=0xFF;
        D_LE1; //關掉數碼管,以免顯示亂碼
        W_LE1;
        Data_IO=0xFF; //關數碼管
        W_LE0;

        PSB_SET; //液晶并口方式
        }

        //***********************************************************************
        //顯示屏命令寫入函數
        //***********************************************************************


        void LCD_write_com(unsigned char com)
        {
        RS_CLR;
        RW_CLR;
        EN_SET;
        Data_IO = com;
        delay_ms(5);
        EN_CLR;
        }
        //***********************************************************************
        //顯示屏數據寫入函數
        //***********************************************************************

        void LCD_write_data(unsigned char data)
        {
        RS_SET;
        RW_CLR;
        EN_SET;
        Data_IO = data;
        delay_ms(5);
        EN_CLR;
        }
        //***********************************************************************
        //顯示屏清空顯示
        //***********************************************************************

        void LCD_clear(void)
        {
        LCD_write_com(0x01);
        delay_ms(5);
        }

        //***********************************************************************
        //函數名稱:DisplayCgrom(uchar hz)顯示CGROM里的漢字
        //入口參數:無
        //返回參數:無
        //***********************************************************************
        void DisplayCgrom(uchar addr,uchar *hz)
        {
        LCD_write_com(addr);
        delay_ms(5);
        while(*hz !=

        主站蜘蛛池模板: 曲麻莱县| 平和县| 绩溪县| 浠水县| 大庆市| 湄潭县| 乐都县| 建昌县| 万源市| 迁安市| 荆州市| 平南县| 登封市| 白玉县| 普安县| 六枝特区| 峨边| 大足县| 柳江县| 江山市| 军事| 达州市| 惠州市| 庆安县| 龙陵县| 桓台县| 娱乐| 金乡县| 徐水县| 丰宁| 漳浦县| 四会市| 大化| 容城县| 修水县| 宁南县| 临夏县| 辽宁省| 饶河县| 阜宁县| 慈溪市|