[mw_shl_code=c,true]
#include "spi.h"
#include "oled_library.h"
/**
**********************************
* @brief SPI2¶áD′êy¾Y
* @param TxData
* @retval None
**********************************
*/
uint8_t SPI2_ReadWriteByte(uint8_t TxData)
{
uint8_t retry = 0;
while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET) //¼ì2éÖ¸¶¨μÄSPI±ê־λéèÖÃóë·ñ:·¢Ëí»o′æ¿Õ±ê־λ
{
retry++;
if(retry>200) return 0;
}
SPI_I2S_SendData(SPI2, TxData); //í¨1yíaéèSPIx·¢Ëíò»¸öêy¾Y
retry = 0;
while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET) //¼ì2éÖ¸¶¨μÄSPI±ê־λéèÖÃóë·ñ:½óêü»o′æ·Ç¿Õ±ê־λ
{
retry++;
if(retry>200) return 0;
}
return SPI_I2S_ReceiveData(SPI2); //·μ»Øí¨1ySPIx×î½ü½óêÕμÄêy¾Y
}
/**
**********************************
* @brief OLEDD′Ãüáî
* @param cmd
* @retval None
**********************************
*/
uint8_t LCD_SPI2_WrCmd(uint8_t cmd)
{
uint8_t read = 0;
GPIO_ResetBits(GPIOD, GPIO_Pin_8);
read = SPI2_ReadWriteByte(cmd);
return read;
}
/**
**********************************
* @brief OLEDD′êy¾Y
* @param data
* @retval None
**********************************
*/
uint8_t LCD_SPI2_WrData(uint8_t data)
{
uint8_t read = 0;
GPIO_SetBits(GPIOD, GPIO_Pin_8);
read = SPI2_ReadWriteByte(data);
return read;
}
/**
**********************************
* @brief OLEDéèÖÃ×ø±ê
* @param x£o0~127 y:0~7
* @retval None
**********************************
*/
void LCD_SPI2_Set_Pos(uint8_t x, uint8_t y)
{
LCD_SPI2_WrCmd(0xb0+y);
LCD_SPI2_WrCmd(((x&0xf0)>>4)|0x10);
LCD_SPI2_WrCmd((x&0x0f)|0x01);
}
/**
**********************************
* @brief OLEDÇåÆá
* @param bmp_dat: D′0x00′ïμ½ÇåÆá
* @retval None
**********************************
*/
void LCD_SPI2_Fill(uint8_t bmp_dat)
{
uint8_t x,y;
LCD_SPI2_Set_Pos(0,0);
for(y=0; y<8; y++)
{
LCD_SPI2_Set_Pos(0,y);
for(x=0; x<128;x++)
LCD_SPI2_WrData(0x00);
}
}
/**
**********************************
* @brief SPI23õê¼»ˉ
* @param None
* @retval None
**********************************
*/
void SPI2_Init(void)
{
SPI_InitTypeDef SPI_InitStruct;
GPIO_InitTypeDef GPIO_InitStruct;
//ê1Äüê±Öó
RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);//¿aÆôSPI2ê±Öó
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);//¿aÆôGPIOBê±Öó
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);//¿aÆôGPIODê±Öó
//3õê¼»ˉGPIO¿ú
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStruct);
GPIO_SetBits(GPIOB, GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15);//à-¸ßμçÆ½
//3õê¼»ˉRST DC
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOD, &GPIO_InitStruct);
GPIO_SetBits(GPIOD, GPIO_Pin_8 | GPIO_Pin_9);//à-¸ßμçÆ½
//3õê¼»ˉSPI2
SPI_InitStruct.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;//ê1óÃ2·ÖÆμ
SPI_InitStruct.SPI_CPHA = SPI_CPHA_1Edge;//Ôúμúò»¸öìø±äÑØ±»2é¼ˉ
SPI_InitStruct.SPI_CPOL = SPI_CPOL_Low;//¿ÕÏD¼«DÔÎaμíμçÆ½
SPI_InitStruct.SPI_CRCPolynomial = 7;//CRCD£¼ì
SPI_InitStruct.SPI_DataSize = SPI_DataSize_8b;//′«êäêy¾Y3¤¶è
SPI_InitStruct.SPI_Direction = SPI_Direction_2Lines_FullDuplex;//Ë«Ïßè«Ë«1¤
SPI_InitStruct.SPI_FirstBit = SPI_FirstBit_MSB;//Ïè′«¸ß×Ö½ú
SPI_InitStruct.SPI_Mode = SPI_Mode_Master;//Ö÷»úÄ£ê½
SPI_InitStruct.SPI_NSS = SPI_NSS_Soft;//Ƭѡ·½ê½Îaèí¼t
SPI_Init(SPI2, &SPI_InitStruct);
SPI_Cmd(SPI2, ENABLE);//ê1ÄüSPI2
}
void LCD_SPI2_Init(void)
{
SPI2_Init();
//3õê¼»ˉOLED
RST_SPI2 = 0;//RSTà-μí
delay_ms(1);
RST_SPI2 = 1;//RSTà-¸ß
delay_ms(1);
//D′èë3õê¼»ˉÃüáî
LCD_SPI2_WrCmd(0xae);//--turn off oled panel
LCD_SPI2_WrCmd(0x00);//---set low column address
LCD_SPI2_WrCmd(0x10);//---set high column address
LCD_SPI2_WrCmd(0x40);//--set start line address Set Mapping RAM Display Start Line (0x00~0x3F)
LCD_SPI2_WrCmd(0x81);//--set contrast control register
LCD_SPI2_WrCmd(0xcf); // Set SEG Output Current Brightness
LCD_SPI2_WrCmd(0xa1);//--Set SEG/Column Mapping 0xa0???? 0xa1??
LCD_SPI2_WrCmd(0xc8);//Set COM/Row Scan Direction 0xc0???? 0xc8??
LCD_SPI2_WrCmd(0xa6);//--set normal display
LCD_SPI2_WrCmd(0xa8);//--set multiplex ratio(1 to 64)
LCD_SPI2_WrCmd(0x3f);//--1/64 duty
LCD_SPI2_WrCmd(0xd3);//-set display offset Shift Mapping RAM Counter (0x00~0x3F)
LCD_SPI2_WrCmd(0x00);//-not offset
LCD_SPI2_WrCmd(0xd5);//--set display clock divide ratio/oscillator frequency
LCD_SPI2_WrCmd(0x80);//--set divide ratio, Set Clock as 100 Frames/Sec
LCD_SPI2_WrCmd(0xd9);//--set pre-charge period
LCD_SPI2_WrCmd(0xf1);//Set Pre-Charge as 15 Clocks & Discharge as 1 Clock
LCD_SPI2_WrCmd(0xda);//--set com pins hardware configuration
LCD_SPI2_WrCmd(0x12);
LCD_SPI2_WrCmd(0xdb);//--set vcomh
LCD_SPI2_WrCmd(0x40);//Set VCOM Deselect Level
LCD_SPI2_WrCmd(0x20);//-Set Page Addressing Mode (0x00/0x01/0x02)
LCD_SPI2_WrCmd(0x02);//
LCD_SPI2_WrCmd(0x8d);//--set Charge Pump enable/disable
LCD_SPI2_WrCmd(0x14);//--set(0x10) disable
LCD_SPI2_WrCmd(0xa4);// Disable Entire Display On (0xa4/0xa5)
LCD_SPI2_WrCmd(0xa6);// Disable Inverse Display On (0xa6/a7)
LCD_SPI2_WrCmd(0xaf);//--turn on oled panel
LCD_SPI2_Fill(0x00); //--clear
LCD_SPI2_Set_Pos(0,0);
}
/**
**********************************
* @brief ÏÔê¾6x8êy×Ö
* @param x£o0~128 y:0~7 data:0~9999
* @retval LCD_SPI2_P6x8Num(32, 2, 1234)
**********************************
*/
void LCD_SPI2_P6x8Num(uint8_t x, uint8_t y, uint16_t data)
{
uint8_t k=0;
for(uint8_t j=0; j<4; j++)
{
switch (j)
{
case 0:{k = data/1000;} break;
case 1:{k = data%1000/100;} break;
case 2:{k = data%100/10;} break;
case 3:{k = data%10;} break;
}
LCD_SPI2_Set_Pos(x,y);
for(uint8_t i=0; i<6; i++)
LCD_SPI2_WrData(F6x8_num[k]);
x += 6;
}
}
/**
**********************************
* @brief ÏÔê¾8x16μÄ×Ö·û′®
* @param x£o0~128 y:0~7
* @retval LCD_SPI2_P8x16Str(32, 2, "OLED")
**********************************
*/
void LCD_SPI2_P8x16Str(uint8_t x,uint8_t y,char ch[])
{
uint8_t c=0,i=0,j=0;
while (ch[j]!='\0')
{
c =ch[j]-32;
if(x>120){x=0;y++;}
LCD_SPI2_Set_Pos(x,y);
for(i=0;i<8;i++)
LCD_SPI2_WrData(F8X16[c*16+i]);
LCD_SPI2_Set_Pos(x,y+1);
for(i=0;i<8;i++)
LCD_SPI2_WrData(F8X16[c*16+i+8]);
x += 8;
j++;
}
}
[/mw_shl_code]
字库
[mw_shl_code=c,true]static const unsigned char F6x8_num[][6] =
{
{ 0x00, 0x3E, 0x51, 0x49, 0x45, 0x3E }, // 0 0
{ 0x00, 0x00, 0x42, 0x7F, 0x40, 0x00 }, // 1 1
{ 0x00, 0x42, 0x61, 0x51, 0x49, 0x46 }, // 2 2
{ 0x00, 0x21, 0x41, 0x45, 0x4B, 0x31 }, // 3 3
{ 0x00, 0x18, 0x14, 0x12, 0x7F, 0x10 }, // 4 4
{ 0x00, 0x27, 0x45, 0x45, 0x45, 0x39 }, // 5 5
{ 0x00, 0x3C, 0x4A, 0x49, 0x49, 0x30 }, // 6 6
{ 0x00, 0x01, 0x71, 0x09, 0x05, 0x03 }, // 7 7
{ 0x00, 0x36, 0x49, 0x49, 0x49, 0x36 }, // 8 8
{ 0x00, 0x06, 0x49, 0x49, 0x29, 0x1E }, // 9 9
{ 0x00, 0x00, 0x36, 0x36, 0x00, 0x00 }, // : 10
{ 0x00, 0x00, 0x56, 0x36, 0x00, 0x00 }, // ; 11
{ 0x00, 0x08, 0x14, 0x22, 0x41, 0x00 }, // < 12
{ 0x00, 0x14, 0x14, 0x14, 0x14, 0x14 }, // = 13
{ 0x00, 0x00, 0x41, 0x22, 0x14, 0x08 }, // > 14
{ 0x00, 0x02, 0x01, 0x51, 0x09, 0x06 }, // ? 15
{ 0x00, 0x32, 0x49, 0x59, 0x51, 0x3E }, // @ 16
{ 0x00, 0x7C, 0x12, 0x11, 0x12, 0x7C }, // A 17
{ 0x00, 0x7F, 0x49, 0x49, 0x49, 0x36 }, // B 18
{ 0x00, 0x3E, 0x41, 0x41, 0x41, 0x22 }, // C 19
{ 0x00, 0x7F, 0x41, 0x41, 0x22, 0x1C }, // D 20
{ 0x00, 0x7F, 0x49, 0x49, 0x49, 0x41 }, // E 21
{ 0x00, 0x7F, 0x09, 0x09, 0x09, 0x01 }, // F 22
{ 0x00, 0x3E, 0x41, 0x49, 0x49, 0x7A }, // G 23
{ 0x00, 0x7F, 0x08, 0x08, 0x08, 0x7F }, // H 24
{ 0x00, 0x00, 0x41, 0x7F, 0x41, 0x00 }, // I 25
{ 0x00, 0x20, 0x40, 0x41, 0x3F, 0x01 }, // J 26
{ 0x00, 0x7F, 0x08, 0x14, 0x22, 0x41 }, // K 27
{ 0x00, 0x7F, 0x40, 0x40, 0x40, 0x40 }, // L 28
{ 0x00, 0x7F, 0x02, 0x0C, 0x02, 0x7F }, // M 29
{ 0x00, 0x7F, 0x04, 0x08, 0x10, 0x7F }, // N 30
{ 0x00, 0x3E, 0x41, 0x41, 0x41, 0x3E }, // O 31
{ 0x00, 0x7F, 0x09, 0x09, 0x09, 0x06 }, // P 32
{ 0x00, 0x3E, 0x41, 0x51, 0x21, 0x5E }, // Q 33
{ 0x00, 0x7F, 0x09, 0x19, 0x29, 0x46 }, // R 34
{ 0x00, 0x46, 0x49, 0x49, 0x49, 0x31 }, // S 35
{ 0x00, 0x01, 0x01, 0x7F, 0x01, 0x01 }, // T 36
{ 0x00, 0x3F, 0x40, 0x40, 0x40, 0x3F }, // U 37
{ 0x00, 0x1F, 0x20, 0x40, 0x20, 0x1F }, // V 38
{ 0x00, 0x3F, 0x40, 0x38, 0x40, 0x3F }, // W 39
{ 0x00, 0x63, 0x14, 0x08, 0x14, 0x63 }, // X 40
{ 0x00, 0x07, 0x08, 0x70, 0x08, 0x07 }, // Y 41
{ 0x00, 0x61, 0x51, 0x49, 0x45, 0x43 }, // Z 42
{ 0x00, 0x00, 0x7F, 0x41, 0x41, 0x00 }, // [ 43
{ 0x00, 0x55, 0x2A, 0x55, 0x2A, 0x55 }, // 55 44
{ 0x00, 0x00, 0x41, 0x41, 0x7F, 0x00 }, // ] 45
{ 0x00, 0x04, 0x02, 0x01, 0x02, 0x04 }, // ^ 46
{ 0x00, 0x40, 0x40, 0x40, 0x40, 0x40 }, // _ 47
{ 0x00, 0x00, 0x01, 0x02, 0x04, 0x00 }, // ' 48
{ 0x00, 0x20, 0x54, 0x54, 0x54, 0x78 }, // a 49
{ 0x00, 0x7F, 0x48, 0x44, 0x44, 0x38 }, // b 50
{ 0x00, 0x38, 0x44, 0x44, 0x44, 0x20 }, // c 51
{ 0x00, 0x38, 0x44, 0x44, 0x48, 0x7F }, // d 52
{ 0x00, 0x38, 0x54, 0x54, 0x54, 0x18 }, // e 53
{ 0x00, 0x08, 0x7E, 0x09, 0x01, 0x02 }, // f 54
{ 0x00, 0x18, 0xA4, 0xA4, 0xA4, 0x7C }, // g 55
{ 0x00, 0x7F, 0x08, 0x04, 0x04, 0x78 }, // h 56
{ 0x00, 0x00, 0x44, 0x7D, 0x40, 0x00 }, // i 57
{ 0x00, 0x40, 0x80, 0x84, 0x7D, 0x00 }, // j 58
{ 0x00, 0x7F, 0x10, 0x28, 0x44, 0x00 }, // k 59
{ 0x00, 0x00, 0x41, 0x7F, 0x40, 0x00 }, // l 60
{ 0x00, 0x7C, 0x04, 0x18, 0x04, 0x78 }, // m 61
{ 0x00, 0x7C, 0x08, 0x04, 0x04, 0x78 }, // n 62
{ 0x00, 0x38, 0x44, 0x44, 0x44, 0x38 }, // o 63
{ 0x00, 0xFC, 0x24, 0x24, 0x24, 0x18 }, // p 64
{ 0x00, 0x18, 0x24, 0x24, 0x18, 0xFC }, // q 65
{ 0x00, 0x7C, 0x08, 0x04, 0x04, 0x08 }, // r 66
{ 0x00, 0x48, 0x54, 0x54, 0x54, 0x20 }, // s 67
{ 0x00, 0x04, 0x3F, 0x44, 0x40, 0x20 }, // t 68
{ 0x00, 0x3C, 0x40, 0x40, 0x20, 0x7C }, // u 69
{ 0x00, 0x1C, 0x20, 0x40, 0x20, 0x1C }, // v 70
{ 0x00, 0x3C, 0x40, 0x30, 0x40, 0x3C }, // w 71
{ 0x00, 0x44, 0x28, 0x10, 0x28, 0x44 }, // x 72
{ 0x00, 0x1C, 0xA0, 0xA0, 0xA0, 0x7C }, // y 73
{ 0x00, 0x44, 0x64, 0x54, 0x4C, 0x44 }, // z 74
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // sp 75
{ 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00 }, // ! 76
{ 0x00, 0x00, 0x07, 0x00, 0x07, 0x00 }, // " 77
{ 0x00, 0x14, 0x7f, 0x14, 0x7f, 0x14 }, // # 78
{ 0x00, 0x24, 0x2a, 0x7f, 0x2a, 0x12 }, // $ 79
{ 0x00, 0x62, 0x64, 0x08, 0x13, 0x23 }, // % 80
{ 0x00, 0x36, 0x49, 0x55, 0x22, 0x50 }, // & 81
{ 0x00, 0x00, 0x05, 0x03, 0x00, 0x00 }, // ' 82
{ 0x00, 0x00, 0x1c, 0x22, 0x41, 0x00 }, // ( 83
{ 0x00, 0x00, 0x41, 0x22, 0x1c, 0x00 }, // ) 84
{ 0x00, 0x14, 0x08, 0x3E, 0x08, 0x14 }, // * 85
{ 0x00, 0x08, 0x08, 0x3E, 0x08, 0x08 }, // + 86
{ 0x00, 0x00, 0x00, 0xA0, 0x60, 0x00 }, // , 87
{ 0x00, 0x08, 0x08, 0x08, 0x08, 0x08 }, // - 88
{ 0x00, 0x00, 0x60, 0x60, 0x00, 0x00 }, // . 89
{ 0x00, 0x20, 0x10, 0x08, 0x04, 0x02 }, // / 90
{ 0x14, 0x14, 0x14, 0x14, 0x14, 0x14 } // horiz lines 91
};[/mw_shl_code]
|