#include "oled.h"
#include "oledfont.h"
#include "i2c.h"
#include "main.h"
//OLED???
//??????.
//[0]0 1 2 3 ... 127
//[1]0 1 2 3 ... 127
//[2]0 1 2 3 ... 127
//[3]0 1 2 3 ... 127
//[4]0 1 2 3 ... 127
//[5]0 1 2 3 ... 127
//[6]0 1 2 3 ... 127
//[7]0 1 2 3 ... 127
/**
* @brief OLED????
* @param cmd - ?????
* @note ???,????????API??
*/
static void OLED_Write_Cmd(uint8_t cmd)
{
uint8_t buf[2];
buf[0] = 0x00; //control byte
buf[1] = cmd;
//??HAL??API??
HAL_I2C_Master_Transmit(&hi2c1, 0x78, buf, 2, 0xFFFF);
}
/**
* @brief OLED????
* @param cmd - ?????
* @note ???,????????API??
*/
static void OLED_Write_Dat(uint8_t dat)
{
uint8_t buf[2];
buf[0] = 0x40; //control byte
buf[1] = dat;
//??HAL??API??
HAL_I2C_Master_Transmit(&hi2c1, 0x78, buf, 2, 0xFFFF);
}
/**
* @brief OLED??????
* @param x - X????
* @param y - Y????
*/
void OLED_Set_Pos(uint8_t x, uint8_t y)
{
OLED_Write_Cmd(0xb0+y);
OLED_Write_Cmd(((x&0xf0)>>4)|0x10);
OLED_Write_Cmd((x&0x0f)|0x01);
}
/**
* @brief OLED????
*/
void OLED_Display_On(void)
{
OLED_Write_Cmd(0X8D); //SET DCDC??
OLED_Write_Cmd(0X14); //DCDC ON
OLED_Write_Cmd(0XAF); //DISPLAY ON
}
/**
* @brief OLED????
*/
void OLED_Display_Off(void)
{
OLED_Write_Cmd(0X8D); //SET DCDC??
OLED_Write_Cmd(0X10); //DCDC OFF
OLED_Write_Cmd(0XAE); //DISPLAY OFF
}
/**
* @brief OLED????(??????????)
*/
void OLED_Clear(void)
{
uint8_t i,n;
for(i=0;i<8;i++)
{
OLED_Write_Cmd(0xb0+i); //?????(0~7)
OLED_Write_Cmd(0x00); //??????—????
OLED_Write_Cmd(0x10); //??????—????
for(n=0;n<128;n++)
{
OLED_Write_Dat(0);
}
}
}
/**
* @brief OLED????(???????)
*/
void OLED_On(void)
{
uint8_t i,n;
for(i=0;i<8;i++)
{
OLED_Write_Cmd(0xb0+i); //?????(0~7)
OLED_Write_Cmd(0x00); //??????—????
OLED_Write_Cmd(0x10); //??????—????
for(n=0;n<128;n++)
{
OLED_Write_Dat(1);
}
}
}
/**
* @brief ?????????ASCII??
* @param x - 0 - 127
* @param y - 0 - 7
* @param chr - ????ASCII??
* @param size - ASCII????
* ?????12(6*8)/16(8*16)????
*/
void OLED_ShowChar(uint8_t x,uint8_t y,uint8_t chr,uint8_t size)
{
uint8_t c=0,i=0;
c = chr-' ';
if(x > 128-1)
{
x=0;
y++;
}
if(size ==16)
{
OLED_Set_Pos(x,y);
for(i=0;i<8;i++)
{
OLED_Write_Dat(F8X16[c*16+i]);
}
OLED_Set_Pos(x,y+1);
for(i=0;i<8;i++)
{
OLED_Write_Dat(F8X16[c*16+i+8]);
}
}
else
{
OLED_Set_Pos(x,y);
for(i=0;i<6;i++)
{
OLED_Write_Dat(F6x8[c][i]);
}
}
}
/**
* @brief OLED ??pow??
* @param m - ??
* @param n - ??
*/
static uint32_t oled_pow(uint8_t m,uint8_t n)
{
uint32_t result=1;
while(n--)result*=m;
return result;
}
/**
* @brief ???????????
* @param x - 0 - 127
* @param y - 0 - 7
* @param num - ??????(0-4294967295)
* @param len - ?????
* @param size - ASCII????
* ?????12(6*8)/16(8*16)????
*/
void OLED_ShowNum(uint8_t x,uint8_t y,uint32_t num,uint8_t len,uint8_t size)
{
uint8_t t,temp;
uint8_t enshow=0;
for(t=0;t<len;t++)
{
temp=(num/oled_pow(10,len-t-1))%10;
if(enshow==0&&t<(len-1))
{
if(temp==0)
{
OLED_ShowChar(x+(size/2)*t,y,' ',size);
continue;
}else enshow=1;
}
OLED_ShowChar(x+(size/2)*t,y,temp+'0',size);
}
}
/**
* @brief ????????????
* @param x - 0 - 127
* @param y - 0 - 7
* @param chr - ?????????
* @param size - ASCII????
* ?????12(6*8)/16(8*16)????
*/
void OLED_ShowString(uint8_t x,uint8_t y,char *chr,uint8_t size)
{
uint8_t j=0;
while (chr[j]!='\0')
{ OLED_ShowChar(x,y,chr[j],size);
x+=8;
if(x>120){x=0;y+=2;}
j++;
}
}
/**
* @brief ???????????
* @param x - 0 - 127
* @param y - 0 - 7
* @param no - ?????????????(??)
* @note ?????oledfont.h????Hzk???,?????????????
*/
void OLED_ShowCHinese(uint8_t x,uint8_t y,uint8_t no)
{
uint8_t t,adder=0;
OLED_Set_Pos(x,y);
for(t=0;t<16;t++)
{
OLED_Write_Dat(Hzk[2*no][t]);
adder+=1;
}
OLED_Set_Pos(x,y+1);
for(t=0;t<16;t++)
{
OLED_Write_Dat(Hzk[2*no+1][t]);
adder+=1;
}
}
/**
* @brief ???????????
* @param x1,x2 - 0 - 127
* @param y1,y2 - 0 - 7(8??????)
* @param BMP - ??????
* @note ????BMP???bmp.h???
*/
void OLED_DrawBMP(uint8_t x0, uint8_t y0,uint8_t x1, uint8_t y1,uint8_t BMP[])
{
uint16_t j=0;
uint8_t x,y;
if(y1%8==0)
{
y=y1/8;
}
else
{
y=y1/8+1;
}
for(y=y0;y<y1;y++)
{
OLED_Set_Pos(x0,y);
for(x=x0;x<x1;x++)
{
OLED_Write_Dat(BMP[j++]);
}
}
}
/**
* @brief OLED???
*/
void OLED_Init(void)
{
HAL_Delay(500);
OLED_Write_Cmd(0xAE);//--display off
OLED_Write_Cmd(0x00);//---set low column address
OLED_Write_Cmd(0x10);//---set high column address
OLED_Write_Cmd(0x40);//--set start line address
OLED_Write_Cmd(0x81); // contract control
OLED_Write_Cmd(0xFF);//--128
OLED_Write_Cmd(0xA1);//set segment remap
OLED_Write_Cmd(0xC8);//Com scan direction
OLED_Write_Cmd(0xA6);//--normal / reverse
OLED_Write_Cmd(0xA8);//--set multiplex ratio(1 to 64)
OLED_Write_Cmd(0x3F);//--1/32 duty
OLED_Write_Cmd(0xD3);//-set display offset
OLED_Write_Cmd(0x00);//
OLED_Write_Cmd(0xD5);//set osc division
OLED_Write_Cmd(0x80);
OLED_Write_Cmd(0xD9);//Set Pre-Charge Period
OLED_Write_Cmd(0xF1);//
OLED_Write_Cmd(0xDA);//set com pin configuartion
OLED_Write_Cmd(0x12);//
OLED_Write_Cmd(0xDB);//set Vcomh
OLED_Write_Cmd(0x40);//
OLED_Write_Cmd(0x20);
OLED_Write_Cmd(0x02);
OLED_Write_Cmd(0x8D);//set charge pump enable
OLED_Write_Cmd(0x14);//
OLED_Write_Cmd(0xA4);
OLED_Write_Cmd(0xA6);
OLED_Write_Cmd(0xAF);//--turn on oled panel
OLED_Clear();
OLED_Set_Pos(0,0);
}
*** Using Compiler 'V6.9', folder: 'F:\Keil_v5\ARM\ARMCLANG\Bin'
Build target 'OLED'
../Core/Src/stm32f4xx_it.c(25): warning: In file included from...
../Core/Inc\oled.h(4): warning: In file included from...
../Core/Inc/i2c.h(34): error: unknown type name 'I2C_HandleTypeDef'
extern I2C_HandleTypeDef hi2c1;
^
1 error generated.
compiling stm32f4xx_it.c...
../Core/Src/oled.c(1): warning: In file included from...
../Core/Inc\oled.h(4): warning: In file included from...
../Core/Inc/i2c.h(34): error: unknown type name 'I2C_HandleTypeDef'
extern I2C_HandleTypeDef hi2c1;
^
../Core/Src/oled.c(30): warning: implicit declaration of function 'HAL_I2C_Master_Transmit' is invalid in C99 [-Wimplicit-function-declaration]
HAL_I2C_Master_Transmit(&hi2c1, 0x78, buf, 2, 0xFFFF);
^
../Core/Src/oled.c(44): warning: implicit declaration of function 'HAL_I2C_Master_Transmit' is invalid in C99 [-Wimplicit-function-declaration]
HAL_I2C_Master_Transmit(&hi2c1, 0x78, buf, 2, 0xFFFF);
^
2 warnings and 1 error generated.
compiling oled.c...
i2c.c(21): warning: In file included from...
../Core/Inc\i2c.h(34): error: unknown type name 'I2C_HandleTypeDef'
extern I2C_HandleTypeDef hi2c1;
^
i2c.c(27): error: unknown type name 'I2C_HandleTypeDef'
I2C_HandleTypeDef hi2c1;
^
i2c.c(35): error: use of undeclared identifier 'I2C_DUTYCYCLE_2'
hi2c1.Init.DutyCycle = I2C_DUTYCYCLE_2;
^
i2c.c(37): error: use of undeclared identifier 'I2C_ADDRESSINGMODE_7BIT'
hi2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
^
i2c.c(38): error: use of undeclared identifier 'I2C_DUALADDRESS_DISABLE'
hi2c1.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
^
i2c.c(40): error: use of undeclared identifier 'I2C_GENERALCALL_DISABLE'
hi2c1.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
^
i2c.c(41): error: use of undeclared identifier 'I2C_NOSTRETCH_DISABLE'
hi2c1.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;
^
i2c.c(42): warning: implicit declaration of function 'HAL_I2C_Init' is invalid in C99 [-Wimplicit-function-declaration]
if (HAL_I2C_Init(&hi2c1) != HAL_OK)
^
i2c.c(110): error: unknown type name 'I2C_HandleTypeDef'
void HAL_I2C_MspInit(I2C_HandleTypeDef* i2cHandle)
^
i2c.c(136): error: unknown type name 'I2C_HandleTypeDef'
void HAL_I2C_MspDeInit(I2C_HandleTypeDef* i2cHandle)
^
1 warning and 9 errors generated.
compiling i2c.c...
../Core/Src/main.c(30): warning: In file included from...
../Core/Inc\oled.h(4): warning: In file included from...
../Core/Inc/i2c.h(34): error: unknown type name 'I2C_HandleTypeDef'
extern I2C_HandleTypeDef hi2c1;
^
../Core/Src/main.c(378): warning: implicit declaration of function 'OLED_Showdecimal' is invalid in C99 [-Wimplicit-function-declaration]
if(Res_1 <= 15000) OLED_Showdecimal(0,4,Res_1,7,1,16);
^
../Core/Src/main.c(418): warning: implicit declaration of function 'OLED_Showdecimal' is invalid in C99 [-Wimplicit-function-declaration]
OLED_Showdecimal(0,4,Res/1000,4,2,16);
^
../Core/Src/main.c(419): error: too few arguments to function call, expected 4, have 3
OLED_ShowString(80,4,"uF");
~~~~~~~~~~~~~~~ ^
../Core/Inc\oled.h(16): note: 'OLED_ShowString' declared here
void OLED_ShowString(uint8_t x,uint8_t y, char *chr,uint8_t size);
^
../Core/Src/main.c(442): warning: implicit declaration of function 'OLED_Showdecimal' is invalid in C99 [-Wimplicit-function-declaration]
OLED_Showdecimal(0,4,Res,4,2,16);
^
../Core/Src/main.c(443): error: too few arguments to function call, expected 4, have 3
OLED_ShowString(80,4,"nF");
~~~~~~~~~~~~~~~ ^
../Core/Inc\oled.h(16): note: 'OLED_ShowString' declared here
void OLED_ShowString(uint8_t x,uint8_t y, char *chr,uint8_t size);
^
../Core/Src/main.c(470): warning: implicit declaration of function 'OLED_Showdecimal' is invalid in C99 [-Wimplicit-function-declaration]
OLED_Showdecimal(0,4,Res,4,2,16);
^
../Core/Src/main.c(471): error: too few arguments to function call, expected 4, have 3
OLED_ShowString(80,4,"pF");
~~~~~~~~~~~~~~~ ^
../Core/Inc\oled.h(16): note: 'OLED_ShowString' declared here
void OLED_ShowString(uint8_t x,uint8_t y, char *chr,uint8_t size);
^
../Core/Src/main.c(504): error: too few arguments to function call, expected 4, have 3
OLED_ShowString(0,6,"ESR=");
~~~~~~~~~~~~~~~ ^
../Core/Inc\oled.h(16): note: 'OLED_ShowString' declared here
void OLED_ShowString(uint8_t x,uint8_t y, char *chr,uint8_t size);
^
../Core/Src/main.c(505): warning: implicit declaration of function 'OLED_Showdecimal' is invalid in C99 [-Wimplicit-function-declaration]
OLED_Showdecimal(32,6,Esr,2,2,16);
^
../Core/Src/main.c(527): error: too few arguments to function call, expected 4, have 3
OLED_ShowString(0,4,"Vd=");
~~~~~~~~~~~~~~~ ^
../Core/Inc\oled.h(16): note: 'OLED_ShowString' declared here
void OLED_ShowString(uint8_t x,uint8_t y, char *chr,uint8_t size);
^
../Core/Src/main.c(528): warning: implicit declaration of function 'OLED_Showdecimal' is invalid in C99 [-Wimplicit-function-declaration]
OLED_Showdecimal(32,4,adcget/1000.0,1,2,16);
^
../Core/Src/main.c(529): error: too few arguments to function call, expected 4, have 3
OLED_ShowString(64,4,"V");
~~~~~~~~~~~~~~~ ^
../Core/Inc\oled.h(16): note: 'OLED_ShowString' declared here
void OLED_ShowString(uint8_t x,uint8_t y, char *chr,uint8_t size);
^
../Core/Src/main.c(541): error: too few arguments to function call, expected 4, have 3
OLED_ShowString(0,4,"Vd=");
~~~~~~~~~~~~~~~ ^
../Core/Inc\oled.h(16): note: 'OLED_ShowString' declared here
void OLED_ShowString(uint8_t x,uint8_t y, char *chr,uint8_t size);
^
../Core/Src/main.c(542): warning: implicit declaration of function 'OLED_Showdecimal' is invalid in C99 [-Wimplicit-function-declaration]
OLED_Showdecimal(32,4,adcget,1,2,16);
^
../Core/Src/main.c(543): error: too few arguments to function call, expected 4, have 3
OLED_ShowString(64,4,"V");
~~~~~~~~~~~~~~~ ^
../Core/Inc\oled.h(16): note: 'OLED_ShowString' declared here
void OLED_ShowString(uint8_t x,uint8_t y, char *chr,uint8_t size);
^
7 warnings and 9 errors generated.
compiling main.c...
"OLED\OLED.axf" - 20 Error(s), 10 Warning(s).
Target not created.
Build Time Elapsed: 00:00:00分析一下错误