1. oled屏幕的接口IIC
應用場合:
2.IIC通信原理
概念:
IIC(Inter-Integrated Circuit)其實是IICBus簡稱,所以中文應該叫集成電路總線,它是一種串行通信總線,使用多主從架構,由飛利浦公司在1980年代為了讓嵌入式系統或手機用以連接低速周邊設備而發展。I2C的正確讀法為“I平方C”("I-squared-C"),而“I二C”("I-two-C")則是另一種錯誤但被廣泛使用的讀法。自2006年10月1日起,使用I2C協議已經不需要支付專利費,但制造商仍然需要付費以獲取I2C從屬設備地址。
IIC:也是一種串行總線,半雙工。
IIC是一種主從結構
主從結構的通信,必須有主機發送起始信號,才可以開始進行通信。
IIC總線對工程師的好處:
?專有名詞:
IIC收發過程:
1 假設微控制器 A 要發送信息到微控制器 B
? 微控制器 A 主機 尋址(包含了讀寫標志)微控制器 B 從機 (從機要給應答信號)
? 微控制器 A 主機 發送器 發送數據到微控制器 B 從機 接收器
? 微控制器 A 終止傳輸(終止信號)
2 如果微控制器 A 想從微控制器 B 接收信息
? 微控制器 A 主機 尋址(包含了讀寫標志)微控制器 B 從機
? 微控制器 A 主機 接收器 從微控制器 B 從機 發送器 接收數據
? 微控制器 A 終止傳輸
IIC總線時序
IIC總線時序
硬件組成:
SDA 和 SCL 都是雙向線路
SDA:根據數據傳輸配置輸入或者輸出---開漏輸出
SCK:復用推挽輸出(硬件IIC)
SCK:通用推挽輸出(軟件(模擬)IIC)
傳輸速率:
I2C 總線上數據的傳輸速率在標準模式下可達 100kbit/s 在快速模式下可達 400kbit/s 在高速模式下可達 3.4Mbit/s 。
傳輸方式:按位傳輸(內部傳輸,主機或者從機內部)
數據的有效性:
SDA 線上的數據必須在時鐘的高電平周期保持穩定 數據線的高或低電平狀態只有在 SCL 線的時鐘信號是低電平時才能改變
時鐘為高電平,只能傳輸數據
時鐘線為低電平,只能切換要傳輸的數據
起始信號和停止信號:
起始信號的狀態:
時鐘線為高電平的時候,數據線由高拉低
停止信號的狀態:
時鐘線為高電平的時候,數據線由低拉高
傳輸數據
發送到 SDA 線上的每個字節必須為 8 位 每次傳輸可以發送的字節數量不受限制 每個字節后必須跟一個響應位 首先傳輸的是數據的最高位 MSB
數據寬度:8bit
響應位:是否正確應答
響應:
時鐘為高電平的時候,數據線輸出穩定的低電平
單個數據發送的應答信號:
仲裁機制:
所有主機在 SCL 線上產生它們自己的時鐘來傳輸 I2C 總線上的報文 數據只在時鐘的高電平周期有效因此 需要一個確定的時鐘進行逐位仲裁
從設備的地址格式:
7bit+讀寫標志位=8位
寫操作:低電平
讀操作:高電平
數據傳輸幀格式:
主機 發送器發送到從機 接收器 傳輸的方向不會改變
在第一個字節后 主機立即讀從機
OLED屏幕介紹:
OLED屏幕的基本特性:
大小:0.96寸(對角線)
分辨率:128*64(0.96寸的屏幕上總共有128*64個像素點)
像素點:成像的最小單位
單色屏:由兩種顏色組成,背景色和前景色都是只有一種,黑白 黑和藍......
像素點大小:1bit 0或者1
多色屏幕中像素點的顏色顯示格式:RGB565 RGB888
RGB565的顏色顯示格式:一個像素點大小就是2字節
OLED屏幕的IO口:
寫操作:
?保存的圖像或者字符在OLED屏幕中保存方式:
128*64---像素點個數
長度128個像素點(128列)
高度64像素點(64行)
PAGE0(com0--com7)--第0頁(0--7行)
因此我們的屏幕中就有8頁。
指令部分:數據手冊27頁
IIC通信接口,只負責發送或者接收數據
比如:我需要在屏幕的第二行去顯示字符,首先設置顯示起始位置,因此我們在操作顯示屏幕的時候,需要先發送指令,告訴從設備,主機先要執行那些操作。
代碼編寫部分:
軟件IIC編寫代碼:
IIC通信連接在單片機的哪些IO口上:
PA6--CLK---通用推挽輸出
PA7--SDA--開漏輸出(只能輸出低電平,無法輸出高電平(是一個高阻態))
為什么不用推挽???
1.我們使用開漏輸出,需要外界上拉電阻,IO內部結構中有上拉
2.選擇開漏是因為,SDA數據線,還需要去接收從設備數據(輸入)
這時如果設置成推挽,從設備給主機發送數據,此時主機還在輸出,有可能產生短路
如果設置成開漏,當設備輸入的時候,就可以直接檢測外界的電平狀態
內部上拉能力不夠???這個時候就需要外接上拉電阻。
以上兩個IO口為例,進行代碼編寫
1.參考官方提供的例程代碼
?參考文件內容:
將以上OLED驅動和字體內容添加到工程
有一個錯誤需要修改:
顯示字符串:
?
因為font.c中已經將全部的英文字符取模
全部是根據ASCII表格進行取模處理
直接網頁搜索取模工具,也可以在線取模?