標(biāo)題: stm32用spi方式控制oled [打印本頁]

作者: 13958988573    時間: 2019-7-24 10:40
標(biāo)題: stm32用spi方式控制oled
  1. SPI.h
復(fù)制代碼
  1. SPI.c
  2. /*函數(shù)功能: GPIO模擬SPI端口初始化                                         */
  3. /*************************************************************************/
  4. void OLED_SPI_Init(void)
  5. {
  6.         GPIO_InitTypeDef GPIO_InitStructure;
  7.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA ,ENABLE);//使能PA端口時鐘
  8.         GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4; //端口配置
  9.         GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//推挽輸出
  10.         GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//IO口速度為50MHz
  11.         GPIO_Init(GPIOA,&GPIO_InitStructure);//根據(jù)設(shè)定參數(shù)初始化GPIOA
  12. }

  13. /*************************************************************************/
  14. /*函數(shù)功能: 通過SPIO軟件模擬SPI通信協(xié)議,向模塊(SSD1306)寫入一個字節(jié)                                  */
  15. /*入口參數(shù):                                                                                                                                                                                                                                                         */       
  16. /*                                                data:要寫入的數(shù)據(jù)/命令                                                                                                                                                 */                               
  17. /*                                                cmd :數(shù)據(jù)/命令標(biāo)志 0,表示命令;1,表示數(shù)據(jù);                   */
  18. /*************************************************************************/
  19. void SPI_WriteByte(unsigned char data,unsigned char cmd)
  20. {
  21.         unsigned char i=0;
  22.         OLED_DC =cmd;
  23.         OLED_CLK=0;
  24.         for(i=0;i<8;i++)
  25.         {
  26.                 OLED_CLK=0;
  27.                 if(data&0x80)OLED_MOSI=1; //從高位到低位
  28.                 else OLED_MOSI=0;
  29.                 OLED_CLK=1;
  30.                 data<<=1;
  31.         }
  32.         OLED_CLK=1;
  33.         OLED_DC=1;
  34. }
  35. /*************************************************************************/
  36. /*函數(shù)功能: 寫命令                                                        */
  37. /*************************************************************************/
  38. void WriteCmd(unsigned char cmd)
  39. {
  40.         SPI_WriteByte(cmd,OLED_CMD);
  41. }
  42. /*************************************************************************/
  43. /*函數(shù)功能: 寫數(shù)據(jù)                                                        */
  44. /*************************************************************************/
  45. void WriteData(unsigned char data)
  46. {
  47.         SPI_WriteByte(data,OLED_DATA);
  48. }
復(fù)制代碼



20170607180030742.jpg (42.1 KB, 下載次數(shù): 119)

20170607180030742.jpg

OLED.rar

9.34 KB, 下載次數(shù): 14, 下載積分: 黑幣 -5


作者: 13958988573    時間: 2019-7-24 10:41
Spi.h
#define OLED_CMD 0   //命令聲明
#define OLED_DATA 1 //數(shù)據(jù)聲明

#define OLED_CLK         PAout(4)        // CLK時鐘         d0
#define OLED_MOSI         PAout(3)        // MOSI                d1
#define OLED_RST         PAout(2)        // RET復(fù)位        ret
#define OLED_DC          PAout(1)        // 命令|數(shù)據(jù)        dc        (0表傳輸命令1表傳輸數(shù)據(jù))

void OLED_SPI_Init(void); //配置MCU的SPI
void SPI_WriteByte(uint8_t addr,uint8_t data); //向寄存器地址寫一個byte的數(shù)據(jù)
void WriteCmd(unsigned char cmd); //寫命令
void WriteDat(unsigned char data); //寫數(shù)據(jù)






歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1