新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 基于Zynq的OLED驅動設計

        基于Zynq的OLED驅動設計

        作者: 時間:2014-10-02 來源:網絡 收藏

          (5)在系統生成的user_logic.v文件中,用Verilog語言進行邏輯設計,實現寄存器和SPI對應端口連接并實時讀取,主要代碼如下。其中slv_reg0為IP核寄存器,tmp為用戶定義臨時寄存器,tmp的每一位和IP端口一一對應。實現把slv_reg0寄存器低6位實時傳給tmp寄存器,通過對寄存器slv_reg0的寫操作達到控制6個引腳的時序。

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

          always@(posedgeBus2IP_Clk)

          begin

          tmp<=slv_reg0[5:0];

          end

          4 驅動程序設計

          由于ZedBoard開發板上的使用的是SPI協議,并且只支持寫,不支持讀,因此控制就是在SCLK的時鐘下,通過SDIN進行命令和數據的傳輸。OLED的控制需要經過初始化、傳數據和命令以及對顯存設置等操作實現。

          4.1 初始化

          驅動IC的初始化代碼,可以參考廠家推薦的設置,但需要根據開發板上OLED實際參數進行一些修改。

          根據SSD1306數據手冊的初始化說明,具體步驟如圖4所示。初始化的實現就是對SSD1306進行寫命令。

          

         

          圖4 SSD1306初始化步驟

          4.2 寫數據和命令的實現

          在SCLK時鐘下,根據要寫入的數據或者命令,設置SDIN引腳的電平,一位一位地把數據寫入SSD1306.SSD1306每次傳送的命令和數據均為一個字節,傳送數據和命令的區別是通過Set_OLED_DC宏,設置該函數為寫數據,通過Clr_OLED_DC宏,設置該函數為寫命令。實現一個字節的數據傳輸代碼如下:

          for(i=0;i<8;i++)

          {

          Clr_OLED_SCLK;

          if(data&0x80)

          Set_OLED_SDIN;

          else

          Clr_OLED_SDIN;

          Set_OLED_SCLK;

          data《=1;

          }

          4.3 顯存數據寫入SSD1306存儲器

          我們采用的辦法是在PS的內部建立一個OLED的GRAM(共128個字節),在每次修改的時候,只是修改PS上的GRAM(實際上就是SRAM),在修改完之后,一次性把PS上的GRAM寫入到OLED的GRAM.具體代碼如下:

          voidOLED_Refresh_Gram(void)

          {

          u8i,n;

          for(i=0;i<4;i++)

          {

          write_cmd(0xb0+i);//設置頁地址

          write_cmd(0x00);//設置顯示位置-列低地址,偏移了2列

          write_cmd(0x10);//設置顯示位置-列高地址

          for(n=0;n<128;n++)write_data(OLED_GRAM[n][i]);

          }

          }

          4.4 顯示結果

          系統實現了OLED的字母、數字和點陣圖形實時顯示,如圖5所示。

          

         

          圖5 OLED運行結果

          5 結論

          系統采用可軟硬件協同設計的器件,定制硬件IP核,采用傳統ARM程序設計方法設計OLED驅動程序和測試程序,實現了實時顯示。解決了基于器件在廣電儀器和電力儀表儀器中人機交互的工程技術,具有集成度高、可移植性強和通用性好等優點。


        上一頁 1 2 下一頁

        關鍵詞: Zynq OLED STM

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 湘潭市| 高阳县| 津南区| 林周县| 高唐县| 翁牛特旗| 揭东县| 白沙| 岚皋县| 依兰县| 福州市| 敦化市| 乳山市| 万年县| 天全县| 临沂市| 阳曲县| 石柱| 隆回县| 镇赉县| 江孜县| 鹤壁市| 海晏县| 大悟县| 温泉县| 枞阳县| 汶川县| 油尖旺区| 星子县| 马龙县| 湟中县| 句容市| 上蔡县| 赤水市| 明溪县| 吕梁市| 黎城县| 定襄县| 三都| 曲靖市| 刚察县|