ARM之SPI協議
阿新 • • 發佈:2018-12-29
SPI是全雙工通訊,由SCL,DI,DO,CS訊號線實現通訊。
寫資料==>資料在SCL上升沿讀取:
以傳送0X56,二進位制0b01010110.(CS:低電平有效)
資料從高位開始傳,也就是bit7開始傳輸。
使用GPIO模擬SPI協議操控OLED:
- OLED_CSn:SPi片選 output
- FLASH_CSn:FLASH片選 output
- OLED_DC:OLED命令資料引腳,表示當前傳輸的是命令還是資料 output
- SPIMISO:input(DI)
- SPIMOSI:output(DO)
- SPICLK:output
MOSI:主機輸出,從機輸入 //M===>master主機
MISO:主機輸入,從機輸出
void oled_write_cmd(char cmd) { oled_DC(0); oled_CS(0); oled_data(cmd); oled_CS(1); oled_DC(1); } void oled_data_byte(char data) { for(int i=0;i<8;i++) oled_SCLK(0); oled_data_bit(data&0x80); //取最高位 data<<1; oled_SCLK(1); }
OLED地址:64*128位。64行分成8頁,每頁8行。每個畫素是一位,1byte是1列的8位資料。
col0 | col1 | col2 | ... | col127 |
page0 | ||||
page1 | ||||
page2 | ||||
page3 | ||||
page4 | ||||
page5 | ||||
page6 | ||||
page7 |
怎麼把資料寫到視訊記憶體?
1.發頁地址和列地址
2.發出資料
/*
* 字元的特點:高=寬*2,此處選澤8*16
*/
void oled_printf(int page,int col,char* str)//
{
while(str!='\0')
{
oled_pritnf_byte(page,col,str);
col+=8;
if(col>127)
{
col=0;
page+=2;
}
}
}
void oled_printf_byte()
{
/*得到字模*/
}