完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我是从零开始学习stm32单片机的,写这篇记录学习过程,也希望可以帮助正在学习的小伙伴们。
淘宝买的stm32核心板,0.96寸I2C通信的oled屏幕,下载程序是用的st-link,这个比串口下载好用。 存放字符串,图片16进制的头文件 codetab.h #ifndef __CODETAB_H #define __CODETAB_H /1616µÄµãÕó×ÖÌåÈ¡Ä£·½Ê½£º¹²Òõ¡ª¡ªÁÐÐÐʽ¡ª¡ªÄæÏòÊä³ö/ //unsigned char F16x16[] =//{ 0x00,0xFE,0x92,0x92,0xFE,0x92,0x92,0xFE,0x00,0x42,0x4A,0xD2,0x6A,0x46,0xC0,0x00, // 0x40,0xC4,0x44,0x44,0x3F,0x24,0x24,0x24,0x00,0x40,0x80,0x7F,0x00,0x01,0x00,0x00,/“Ò°”,0/// 0x00,0x00,0xC0,0x38,0x00,0x00,0x00,0xFF,0x00,0x00,0x40,0x20,0x18,0x00,0x00,0x00, // 0x80,0x81,0x40,0x20,0x10,0x0C,0x03,0x00,0x03,0x0C,0x10,0x20,0x40,0x80,0x80,0x00,/"»ð",1/// 0x24,0x24,0xA4,0xFE,0xA3,0x22,0x00,0x22,0xCC,0x00,0x00,0xFF,0x00,0x00,0x00,0x00, // 0x08,0x06,0x01,0xFF,0x00,0x01,0x04,0x04,0x04,0x04,0x04,0xFF,0x02,0x02,0x02,0x00,/"¿Æ",2/// 0x10,0x10,0x10,0xFF,0x10,0x90,0x08,0x88,0x88,0x88,0xFF,0x88,0x88,0x88,0x08,0x00, // 0x04,0x44,0x82,0x7F,0x01,0x80,0x80,0x40,0x43,0x2C,0x10,0x28,0x46,0x81,0x80,0x00/“¼¼”,3/ //}; unsigned char F16x16[] = {0x00,0x00,0x00,0x00,0xFC,0x00,0x00,0x00,0x00,0xC0,0xFE,0x00,0x00,0x00,0x00,0x00, 0x00,0x60,0x30,0x0C,0x03,0x43,0x4E,0x34,0x1C,0x07,0x01,0x0E,0x18,0x70,0x40,0x00,/“´Ó”,0/0x00,0x00,0x00,0x00,0x00,0x06,0x8C,0xF8,0x70,0xC0,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x60,0x60,0x30,0x1C,0x06,0x03,0x00,0x00,0x01,0x07,0x1C,0x38,0x30,0x20,0x00,/“Èë”,1/0x00,0x00,0xF0,0x06,0x0C,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0xFC,0x00,0x00, 0x00,0x00,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x40,0x7F,0x00,0x00,/“ÃÅ”,2/0x00,0xC4,0xC4,0xB4,0x9C,0xC4,0x44,0x74,0xC4,0x80,0xF8,0x00,0x00,0xFE,0xFE,0x00, 0x00,0x64,0x64,0x24,0x3F,0x3F,0x24,0x24,0x24,0x00,0x0F,0x40,0xC0,0x7F,0x3F,0x00,/“µ½”,3/0x00,0x10,0x10,0xF6,0x9C,0x90,0x90,0x90,0xC0,0xF8,0x16,0x10,0xF0,0x70,0x10,0x00, 0x00,0x60,0x38,0x0F,0x40,0x40,0x7F,0x40,0x40,0x61,0x3E,0x18,0x27,0x40,0xC0,0x00,/"·Å",4*/0x00,0x08,0x08,0xC8,0x48,0x68,0x58,0x4E,0x4E,0x48,0x78,0x68,0xC8,0x08,0x08,0x00, 0x00,0x04,0x44,0x44,0x24,0x1F,0x05,0x04,0x04,0x04,0x7F,0x04,0x04,0x04,0x04,0x00,/“Æú”,5/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x30,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/",",6/ 0x00,0x04,0x04,0xE4,0x24,0x24,0x24,0xFC,0xFC,0x24,0x24,0x24,0xE4,0x04,0x00,0x00, 0x00,0x08,0x08,0xFF,0x09,0x09,0x09,0x0F,0x0F,0x09,0x49,0xC9,0x7F,0x08,0x08,0x08,/“ÔÙ”,7/0x00,0xC4,0xC4,0xB4,0x9C,0xC4,0x44,0x74,0xC4,0x80,0xF8,0x00,0x00,0xFE,0xFE,0x00, 0x00,0x64,0x64,0x24,0x3F,0x3F,0x24,0x24,0x24,0x00,0x0F,0x40,0xC0,0x7F,0x3F,0x00,/“µ½”,8/0x00,0x00,0x00,0x00,0x00,0x06,0x8C,0xF8,0x70,0xC0,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x60,0x60,0x30,0x1C,0x06,0x03,0x00,0x00,0x01,0x07,0x1C,0x38,0x30,0x20,0x00,/“Èë”,9/0x00,0x00,0x40,0x40,0x40,0x40,0x40,0xFE,0xFE,0x40,0x40,0x40,0x40,0x40,0x00,0x00, 0x00,0x60,0x60,0x60,0x60,0x60,0x60,0x7F,0x7F,0x60,0x60,0x60,0x60,0x60,0x60,0x00,/“ÍÁ”,10/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x38,0x28,0x28,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/".",11/ };/68µÄµãÕó*/ unsigned char F6x8[][6] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,// sp 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00,// ! 0x00, 0x00, 0x07, 0x00, 0x07, 0x00,// " 0x00, 0x14, 0x7f, 0x14, 0x7f, 0x14,// # 0x00, 0x24, 0x2a, 0x7f, 0x2a, 0x12,// $ 0x00, 0x62, 0x64, 0x08, 0x13, 0x23,// % 0x00, 0x36, 0x49, 0x55, 0x22, 0x50,// & 0x00, 0x00, 0x05, 0x03, 0x00, 0x00,// ’ 0x00, 0x00, 0x1c, 0x22, 0x41, 0x00,// ( 0x00, 0x00, 0x41, 0x22, 0x1c, 0x00,// ) 0x00, 0x14, 0x08, 0x3E, 0x08, 0x14,// * 0x00, 0x08, 0x08, 0x3E, 0x08, 0x08,// + 0x00, 0x00, 0x00, 0xA0, 0x60, 0x00,// , 0x00, 0x08, 0x08, 0x08, 0x08, 0x08,// - 0x00, 0x00, 0x60, 0x60, 0x00, 0x00,// . 0x00, 0x20, 0x10, 0x08, 0x04, 0x02,// / 0x00, 0x3E, 0x51, 0x49, 0x45, 0x3E,// 0 0x00, 0x00, 0x42, 0x7F, 0x40, 0x00,// 1 0x00, 0x42, 0x61, 0x51, 0x49, 0x46,// 2 0x00, 0x21, 0x41, 0x45, 0x4B, 0x31,// 3 0x00, 0x18, 0x14, 0x12, 0x7F, 0x10,// 4 0x00, 0x27, 0x45, 0x45, 0x45, 0x39,// 5 0x00, 0x3C, 0x4A, 0x49, 0x49, 0x30,// 6 0x00, 0x01, 0x71, 0x09, 0x05, 0x03,// 7 0x00, 0x36, 0x49, 0x49, 0x49, 0x36,// 8 0x00, 0x06, 0x49, 0x49, 0x29, 0x1E,// 9 0x00, 0x00, 0x36, 0x36, 0x00, 0x00,// : 0x00, 0x00, 0x56, 0x36, 0x00, 0x00,// ; 0x00, 0x08, 0x14, 0x22, 0x41, 0x00,// < 0x00, 0x14, 0x14, 0x14, 0x14, 0x14,// = 0x00, 0x00, 0x41, 0x22, 0x14, 0x08,// > 0x00, 0x02, 0x01, 0x51, 0x09, 0x06,// ? 0x00, 0x32, 0x49, 0x59, 0x51, 0x3E,// @ 0x00, 0x7C, 0x12, 0x11, 0x12, 0x7C,// A 0x00, 0x7F, 0x49, 0x49, 0x49, 0x36,// B 0x00, 0x3E, 0x41, 0x41, 0x41, 0x22,// C 0x00, 0x7F, 0x41, 0x41, 0x22, 0x1C,// D 0x00, 0x7F, 0x49, 0x49, 0x49, 0x41,// E 0x00, 0x7F, 0x09, 0x09, 0x09, 0x01,// F 0x00, 0x3E, 0x41, 0x49, 0x49, 0x7A,// G 0x00, 0x7F, 0x08, 0x08, 0x08, 0x7F,// H 0x00, 0x00, 0x41, 0x7F, 0x41, 0x00,// I 0x00, 0x20, 0x40, 0x41, 0x3F, 0x01,// J 0x00, 0x7F, 0x08, 0x14, 0x22, 0x41,// K 0x00, 0x7F, 0x40, 0x40, 0x40, 0x40,// L 0x00, 0x7F, 0x02, 0x0C, 0x02, 0x7F,// M 0x00, 0x7F, 0x04, 0x08, 0x10, 0x7F,// N 0x00, 0x3E, 0x41, 0x41, 0x41, 0x3E,// O 0x00, 0x7F, 0x09, 0x09, 0x09, 0x06,// P 0x00, 0x3E, 0x41, 0x51, 0x21, 0x5E,// Q 0x00, 0x7F, 0x09, 0x19, 0x29, 0x46,// R 0x00, 0x46, 0x49, 0x49, 0x49, 0x31,// S 0x00, 0x01, 0x01, 0x7F, 0x01, 0x01,// T 0x00, 0x3F, 0x40, 0x40, 0x40, 0x3F,// U 0x00, 0x1F, 0x20, 0x40, 0x20, 0x1F,// V 0x00, 0x3F, 0x40, 0x38, 0x40, 0x3F,// W 0x00, 0x63, 0x14, 0x08, 0x14, 0x63,// X 0x00, 0x07, 0x08, 0x70, 0x08, 0x07,// Y 0x00, 0x61, 0x51, 0x49, 0x45, 0x43,// Z 0x00, 0x00, 0x7F, 0x41, 0x41, 0x00,// [ 0x00, 0x55, 0x2A, 0x55, 0x2A, 0x55,// 55 0x00, 0x00, 0x41, 0x41, 0x7F, 0x00,// ] 0x00, 0x04, 0x02, 0x01, 0x02, 0x04,// ^ 0x00, 0x40, 0x40, 0x40, 0x40, 0x40,// _ 0x00, 0x00, 0x01, 0x02, 0x04, 0x00,// ’ 0x00, 0x20, 0x54, 0x54, 0x54, 0x78,// a 0x00, 0x7F, 0x48, 0x44, 0x44, 0x38,// b 0x00, 0x38, 0x44, 0x44, 0x44, 0x20,// c 0x00, 0x38, 0x44, 0x44, 0x48, 0x7F,// d 0x00, 0x38, 0x54, 0x54, 0x54, 0x18,// e 0x00, 0x08, 0x7E, 0x09, 0x01, 0x02,// f 0x00, 0x18, 0xA4, 0xA4, 0xA4, 0x7C,// g 0x00, 0x7F, 0x08, 0x04, 0x04, 0x78,// h 0x00, 0x00, 0x44, 0x7D, 0x40, 0x00,// i 0x00, 0x40, 0x80, 0x84, 0x7D, 0x00,// j 0x00, 0x7F, 0x10, 0x28, 0x44, 0x00,// k 0x00, 0x00, 0x41, 0x7F, 0x40, 0x00,// l 0x00, 0x7C, 0x04, 0x18, 0x04, 0x78,// m 0x00, 0x7C, 0x08, 0x04, 0x04, 0x78,// n 0x00, 0x38, 0x44, 0x44, 0x44, 0x38,// o 0x00, 0xFC, 0x24, 0x24, 0x24, 0x18,// p 0x00, 0x18, 0x24, 0x24, 0x18, 0xFC,// q 0x00, 0x7C, 0x08, 0x04, 0x04, 0x08,// r 0x00, 0x48, 0x54, 0x54, 0x54, 0x20,// s 0x00, 0x04, 0x3F, 0x44, 0x40, 0x20,// t 0x00, 0x3C, 0x40, 0x40, 0x20, 0x7C,// u 0x00, 0x1C, 0x20, 0x40, 0x20, 0x1C,// v 0x00, 0x3C, 0x40, 0x30, 0x40, 0x3C,// w 0x00, 0x44, 0x28, 0x10, 0x28, 0x44,// x 0x00, 0x1C, 0xA0, 0xA0, 0xA0, 0x7C,// y 0x00, 0x44, 0x64, 0x54, 0x4C, 0x44,// z 0x14, 0x14, 0x14, 0x14, 0x14, 0x14,// horiz lines }; |
|
|
|
main.c
#include “stm32f10x.h” #include “i2c_gpio.h” #include “oled_i2c.h” #include “delay.h” extern unsigned char BMP[]; int main () { unsigned char i; systick_init (); i2c_CfgGpio(); OLED_Init(); while(1) { OLED_Fill(0xFF);//È«ÆÁµãÁÁ delay_ms(200); OLED_Fill(0x00);//È«ÆÁÃð delay_ms(200); for(i=0;i<8;i++) { OLED_ShowCN(0+i16,0,i); } for(i=8;i<12;i++) { OLED_ShowCN(0+i16,3,i); } delay_ms(2000); OLED_CLS();//ÇåÆÁ OLED_OFF();//²âÊÔOLEDÐÝÃß delay_ms(1000); OLED_ON();//²âÊÔOLEDÐÝÃߺó»½ÐÑ OLED_ShowStr(0,3,(unsigned char*)“never give up”,1); OLED_ShowStr(0,5,(unsigned char*)“Hello world”,2); delay_ms(2000); OLED_CLS(); OLED_OFF(); delay_ms(1000); OLED_ON(); OLED_DrawBMP(0,0,128,8,(unsigned char*)BMP); delay_ms(2000); }} i2c_gpio.h #ifndef __I2C_GPIO_H #define __I2C_GPIO_H #include “stm32f10x.h” #define OLED_I2C_WR 0 #define OLED_I2C_RD 1 #define OLED_GPIO_PORT_I2C GPIOB #define OLED_RCC_I2C_PORT RCC_APB2Periph_GPIOB #define OLED_I2C_SCL_PIN GPIO_Pin_6 #define OLED_I2C_SDA_PIN GPIO_Pin_7 #if 0 #define OLED_I2C_SCL_1() GPIO_SetBits(OLED_GPIO_PORT_I2C, OLED_I2C_SCL_PIN) /* SCL = 1 / #define OLED_I2C_SCL_0() GPIO_ResetBits(OLED_GPIO_PORT_I2C, OLED_I2C_SCL_PIN) / SCL = 0 */ #define OLED_I2C_SDA_1() GPIO_SetBits(OLED_GPIO_PORT_I2C, OLED_I2C_SDA_PIN) /* SDA = 1 / #define OLED_I2C_SDA_0() GPIO_ResetBits(OLED_GPIO_PORT_I2C, OLED_I2C_SDA_PIN) / SDA = 0 */ #define OLED_I2C_SDA_READ() GPIO_ReadInputDataBit(OLED_GPIO_PORT_I2C, OLED_I2C_SDA_PIN) #else #define OLED_I2C_SCL_1() OLED_GPIO_PORT_I2C->BSRR = OLED_I2C_SCL_PIN /* SCL = 1 / #define OLED_I2C_SCL_0() OLED_GPIO_PORT_I2C->BRR = OLED_I2C_SCL_PIN / SCL = 0 */ #define OLED_I2C_SDA_1() OLED_GPIO_PORT_I2C->BSRR = OLED_I2C_SDA_PIN /* SDA = 1 / #define OLED_I2C_SDA_0() OLED_GPIO_PORT_I2C->BRR = OLED_I2C_SDA_PIN / SDA = 0 */ #define OLED_I2C_SDA_READ() ((OLED_GPIO_PORT_I2C->IDR & OLED_I2C_SDA_PIN) != 0) #endif void i2c_Start(void); void i2c_Stop(void); void i2c_SendByte(uint8_t _ucByte); uint8_t i2c_ReadByte(void); uint8_t i2c_WaitAck(void); void i2c_Ack(void); void i2c_NAck(void);void i2c_CfgGpio(void); #endif i2c_gpio.C #include “i2c_gpio.h” void i2c_Start(void) { OLED_I2C_SDA_1(); OLED_I2C_SCL_1(); delay_us (2); OLED_I2C_SDA_0(); delay_us (2); OLED_I2C_SCL_0(); delay_us (2); } void i2c_Stop(void) { OLED_I2C_SDA_0(); OLED_I2C_SCL_1(); delay_us (2); OLED_I2C_SDA_1(); } void i2c_SendByte(uint8_t _ucByte) { uint8_t i; for (i = 0; i < 8; i++) { if (_ucByte & 0x80) { OLED_I2C_SDA_1(); } else { OLED_I2C_SDA_0(); } delay_us (2); OLED_I2C_SCL_1(); delay_us (2); OLED_I2C_SCL_0(); if (i == 7) { OLED_I2C_SDA_1(); } _ucByte <<= 1; delay_us (2); } } uint8_t i2c_ReadByte(void) { uint8_t i; uint8_t value; value = 0; for (i = 0; i < 8; i++) { value <<= 1; OLED_I2C_SCL_1(); delay_us (2); if (OLED_I2C_SDA_READ()) { value++; } OLED_I2C_SCL_0(); delay_us (2); } return value; } uint8_t i2c_WaitAck(void) { uint8_t re; OLED_I2C_SDA_1(); delay_us (2); OLED_I2C_SCL_1(); delay_us (2); if (OLED_I2C_SDA_READ()) { re = 1; } else { re = 0; } OLED_I2C_SCL_0(); delay_us (2); return re; } void i2c_Ack(void) { OLED_I2C_SDA_0(); delay_us (2); OLED_I2C_SCL_1(); delay_us (2); OLED_I2C_SCL_0(); delay_us (2); OLED_I2C_SDA_1(); } void i2c_NAck(void) { OLED_I2C_SDA_1(); delay_us (2); OLED_I2C_SCL_1(); delay_us (2); OLED_I2C_SCL_0(); delay_us (2); } void i2c_CfgGpio(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(OLED_RCC_I2C_PORT, ENABLE); GPIO_InitStructure.GPIO_Pin = OLED_I2C_SCL_PIN | OLED_I2C_SDA_PIN; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(OLED_GPIO_PORT_I2C, &GPIO_InitStructure); i2c_Stop(); } oled_i2c.h #ifndef __OLED_I2C_H #define __OLED_I2C_H #include “stm32f10x.h” #define OLED_ADDRESS 0x78 uint8_t OLED_CheckDevice(uint8_t _Address); void I2C_WriteByte(uint8_t addr,uint8_t data); void WriteCmd(unsigned char I2C_Command); void WriteDat(unsigned char I2C_Data); void OLED_Init(void); void OLED_SetPos(unsigned char x, unsigned char y); void OLED_Fill(unsigned char fill_Data); void OLED_CLS(void); void OLED_ON(void); void OLED_OFF(void); void OLED_ShowStr(unsigned char x, unsigned char y, unsigned char ch[], unsigned char TextSize); void OLED_ShowCN(unsigned char x, unsigned char y, unsigned char N); void OLED_DrawBMP(unsigned char x0,unsigned char y0,unsigned char x1,unsigned char y1,unsigned char BMP[]); uint8_t OLED_Test(void) ; #endif oled_i2c.h #include “oled_i2c.h” #include “delay.h” #include “i2c_gpio.h” #include “codetab.h” uint8_t OLED_CheckDevice(uint8_t _Address) { uint8_t ucAck; i2c_Start(); i2c_SendByte(_Address|OLED_I2C_WR); ucAck = i2c_WaitAck(); i2c_Stop(); return ucAck; } void I2C_WriteByte(uint8_t addr,uint8_t data) { i2c_Start(); i2c_SendByte(OLED_ADDRESS|OLED_I2C_WR); if (i2c_WaitAck() != 0) { goto cmd_fail; } i2c_SendByte(addr); if (i2c_WaitAck() != 0) { goto cmd_fail; } i2c_SendByte(data); if (i2c_WaitAck() != 0) { goto cmd_fail; } i2c_Stop(); cmd_fail: i2c_Stop(); } void WriteCmd(unsigned char I2C_Command) { I2C_WriteByte(0x00, I2C_Command); } void WriteDat(unsigned char I2C_Data) { I2C_WriteByte(0x40, I2C_Data); } void OLED_Init(void) { delay_ms(1000); WriteCmd(0xAE); //display off WriteCmd(0x20); //Set Memory Addressing Mode WriteCmd(0x10); //00,Horizontal Addressing Mode;01,Vertical Addressing Mode;10,Page Addressing Mode (RESET);11,Invalid WriteCmd(0xb0); //Set Page Start Address for Page Addressing Mode,0-7 WriteCmd(0xc8); //Set COM Output Scan Direction WriteCmd(0x00); //—set low column address WriteCmd(0x10); //—set high column address WriteCmd(0x40); //–set start line address WriteCmd(0x81); //–set contrast control register WriteCmd(0xff); WriteCmd(0xa1); //–set segment re-map 0 to 127 WriteCmd(0xa6); //–set normal display WriteCmd(0xa8); //–set multiplex ratio(1 to 64) WriteCmd(0x3F); // WriteCmd(0xa4); //0xa4,Output follows RAM content;0xa5,Output ignores RAM content WriteCmd(0xd3); //-set display offset WriteCmd(0x00); //-not offset WriteCmd(0xd5); //–set display clock divide ratio/oscillator frequency WriteCmd(0xf0); //–set divide ratio WriteCmd(0xd9); //–set pre-charge period WriteCmd(0x22); // WriteCmd(0xda); //–set com pins hardware configuration WriteCmd(0x12); WriteCmd(0xdb); //–set vcomh WriteCmd(0x20); //0x20,0.77xVcc WriteCmd(0x8d); //–set DC-DC enable WriteCmd(0x14); // WriteCmd(0xaf); //–turn on oled panel } void OLED_SetPos(unsigned char x, unsigned char y) { WriteCmd(0xb0+y); WriteCmd(((x&0xf0)>>4)|0x10); WriteCmd((x&0x0f)|0x01); } void OLED_Fill(unsigned char fill_Data) { unsigned char m,n; for(m=0;m<8;m++) { WriteCmd(0xb0+m); //page0-page1 WriteCmd(0x00); //low column start address WriteCmd(0x10); //high column start address for(n=0;n<128;n++) { WriteDat(fill_Data); } } } void OLED_CLS(void) { OLED_Fill(0x00); }void OLED_ON(void) { WriteCmd(0X8D); WriteCmd(0X14); WriteCmd(0XAF); }void OLED_OFF(void) { WriteCmd(0X8D); WriteCmd(0X10); WriteCmd(0XAE); }void OLED_ShowStr(unsigned char x, unsigned char y, unsigned char ch[], unsigned char TextSize) { unsigned char c = 0,i = 0,j = 0; switch(TextSize) { case 1: { while(ch[j] != ‘ ’) { c = ch[j] - 32; if(x > 126) { x = 0; y++; } OLED_SetPos(x,y); for(i=0;i<6;i++) WriteDat(F6x8[c]); x += 6; j++; } }break; case 2: { while(ch[j] != ‘ ’) { c = ch[j] - 32; if(x > 120) { x = 0; y++; } OLED_SetPos(x,y); for(i=0;i<8;i++) WriteDat(F8X16[c16+i]); OLED_SetPos(x,y+1); for(i=0;i<8;i++) WriteDat(F8X16[c16+i+8]); x += 8; j++; } }break; } } void OLED_ShowCN(unsigned char x, unsigned char y, unsigned char N) { unsigned char wm=0; unsigned int adder=32*N; OLED_SetPos(x , y); for(wm = 0;wm < 16;wm++) { WriteDat(F16x16[adder]); adder += 1; } OLED_SetPos(x,y + 1); for(wm = 0;wm < 16;wm++) { WriteDat(F16x16[adder]); adder += 1; } } void OLED_DrawBMP(unsigned char x0,unsigned char y0,unsigned char x1,unsigned char y1,unsigned char BMP[]) { unsigned int j=0; unsigned char x,y; if(y1%8==0) y = y1/8; else y = y1/8 + 1; for(y=y0;y OLED_SetPos(x0,y); for(x=x0;x WriteDat(BMP[j++]); } } } uint8_t OLED_Test(void) { if (OLED_CheckDevice(OLED_ADDRESS) == 1) { return 0; } else { return 1; } } delay.h #ifndef __DELAY_H #define __DELAY_H #include “stm32f10x.h” void systick_init (void); void TimingDelay_Decrement(void); void SysTick_Handler(void); void delay_ms(__IO uint32_t nTime); void delay_ms(unsigned int us); #endif delay.c #include “delay.h” __IO uint32_t TimingDelay; void systick_init (void) { if( SysTick_Config (72) == 1) { while(1); } } void TimingDelay_Decrement(void) { if (TimingDelay != 0x00) { TimingDelay–; } } void SysTick_Handler(void) { TimingDelay_Decrement( ); } void delay_us(__IO uint32_t nTime) { TimingDelay = nTime ; while(TimingDelay != 0); } void delay_ms(unsigned int us) { unsigned char i; for(i=0;i delay_us(1000); } } 通过以上几个文件就能驱动oled显示了,具体显示什么可以改改参数就行。 我是移植野火版本的代码,并不能完全套用他们的代码,还是要改改参数,一开始我也不懂,想得太简单了,直接复制过来完全没用。 oled淘宝那边的代码是完全不能用,可以用他的取自模软件。 |
|
|
|
只有小组成员才能发言,加入小组>>
2981 浏览 9 评论
2695 浏览 16 评论
3220 浏览 1 评论
8456 浏览 16 评论
3785 浏览 18 评论
6965浏览 6评论
求助,请问MS51FB9AE带隙电压能作为侦测的基准电压吗?
7461浏览 3评论
6962浏览 3评论
支持UART-to-BLE透传的新唐NuTool – BLE ATCMD开发工具推荐
5808浏览 3评论
9379浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-4-27 19:38 , Processed in 0.768399 second(s), Total 76, Slave 57 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号