完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
OLED模块(0.96inch)
驱动方式 OLED模块的外形大家都很清除了,能够找到这里的小伙伴,手上应该都有这样的一个模块。 本文用的通信方式是软件模拟4线SPI方式,优点就是可以随意选择IO口连接,特方便。 以上两篇博文里面提到的工程都是以stm32为例的,可以下载把看看里面的oled.c和oled.h文件 工程创建 工程模板 oled文件添加 如果感觉下面步骤麻烦的小伙伴,请移步到文末,那里有完整的工程链接,下载即可用。 右键点击工程列表里的工程文件、在弹出框点击Manager Project Items、如下图添加oled文件项目。 出现如上图所示的OLED项目文件项就可以往里面添加oled.c 文件了。在模板2_链接1下载里面的文件之后,打开 “HARDWARE” 复制里面的OLED文件夹到模板1的 Hardware 里面,注意!是整个文件夹一起复制! 复制完成之后,在Keil的工程列表里面双击OLED,往里面添加oled.c文件,出现如下图所示即可。 最后点击“魔术棒”,选择“C/C++”在"Include Paths"里面添加刚刚复制过来的oled文件夹路径,点击“OK”即可。 代码实现 在oled.h文件下面修改oled链接的IO口,然后在oled.c里面修改oled的初始化函数,把它修改成符合合泰芯片IO初始化即可。其实和stm32的大同小异,一样的都需要启动时钟、IO输出/输入定义。 哦,对了,模板1里面是没有延时函数的,需要自己添加。 oled.h #ifndef __OLED_H #define __OLED_H //#include "ht32.h" #include "sys.h" #include "stdlib.h" #include "ht32f5xxxx_ckcu.h" #include "ht32f5xxxx_gpio.h" //-----------------OLED端口定义---------------- #define OLED_SCLK_Clr() GPIO_ClearOutBits(HT_GPIOC,GPIO_PIN_2);//SCL #define OLED_SCLK_Set() GPIO_SetOutBits(HT_GPIOC,GPIO_PIN_2); #define OLED_SDIN_Clr() GPIO_ClearOutBits(HT_GPIOC,GPIO_PIN_9);//SDA #define OLED_SDIN_Set() GPIO_SetOutBits(HT_GPIOC,GPIO_PIN_9); #define OLED_RES_Clr() GPIO_ClearOutBits(HT_GPIOC,GPIO_PIN_5);//RES #define OLED_RES_Set() GPIO_SetOutBits(HT_GPIOC,GPIO_PIN_5); #define OLED_DC_Clr() GPIO_ClearOutBits(HT_GPIOC,GPIO_PIN_8);//DC #define OLED_DC_Set() GPIO_SetOutBits(HT_GPIOC,GPIO_PIN_8); #define OLED_CS_Clr() GPIO_ClearOutBits(HT_GPIOC,GPIO_PIN_0);//CS #define OLED_CS_Set() GPIO_SetOutBits(HT_GPIOC,GPIO_PIN_0); #define OLED_IO GPIO_PIN_0|GPIO_PIN_2|GPIO_PIN_5|GPIO_PIN_8|GPIO_PIN_9 #define AFIO_OLED_IO AFIO_PIN_0|AFIO_PIN_2|AFIO_PIN_5|AFIO_PIN_8|AFIO_PIN_9 #define OLED_CMD 0 //写命令 #define OLED_DATA 1 //写数据 #define u8 unsigned char #define u32 unsigned int void OLED_ClearPoint(u8 x,u8 y); void OLED_ColorTurn(u8 i); void OLED_DisplayTurn(u8 i); void OLED_WR_Byte(u8 dat,u8 cmd); void OLED_DisPlay_On(void); void OLED_DisPlay_Off(void); void OLED_Refresh(void); void OLED_Clear(void); void OLED_DrawPoint(u8 x,u8 y); void OLED_DrawLine(u8 x1,u8 y1,u8 x2,u8 y2); void OLED_DrawCircle(u8 x,u8 y,u8 r); void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 size1); void OLED_ShowString(u8 x,u8 y,u8 *chr,u8 size1); void OLED_ShowNum(u8 x,u8 y,u32 num,u8 len,u8 size1); void OLED_ShowChinese(u8 x,u8 y,u8 num,u8 size1); void OLED_ScrollDisplay(u8 num,u8 space); void OLED_WR_BP(u8 x,u8 y); void OLED_ShowPicture(u8 x0,u8 y0,u8 x1,u8 y1,u8 BMP[]); void OLED_Init(void); #endif oled初始化函数 void OLED_Init(void) { //GPIO_InitTypeDef GPIO_InitStructure; //HT_GPIO_TypeDef GPIO_InitStructure; CKCU_PeripClockConfig_TypeDef CLOCK={{0}}; CLOCK.Bit.PC=1; //CLOCK.Bit.AFIO=1; CKCU_PeripClockConfig(CLOCK,ENABLE); //AFIO_GPxConfig(GPIO_PC,AFIO_WIFI_IO,AFIO_MODE_DEFAULT); GPIO_PullResistorConfig(HT_GPIOC,OLED_IO,GPIO_PR_UP); // GPIO_DriveConfig(HT_GPIOC,OLED_IO,GPIO_DV_8MA); GPIO_DirectionConfig(HT_GPIOC,OLED_IO,GPIO_DIR_OUT); OLED_RES_Clr(); delay_ms(200); OLED_RES_Set(); OLED_WR_Byte(0xAE,OLED_CMD);//--turn off oled panel OLED_WR_Byte(0x00,OLED_CMD);//---set low column address OLED_WR_Byte(0x10,OLED_CMD);//---set high column address OLED_WR_Byte(0x40,OLED_CMD);//--set start line address Set Mapping RAM Display Start Line (0x00~0x3F) OLED_WR_Byte(0x81,OLED_CMD);//--set contrast control register OLED_WR_Byte(0xCF,OLED_CMD);// Set SEG Output Current Brightness OLED_WR_Byte(0xA1,OLED_CMD);//--Set SEG/Column Mapping 0xa0左右反置 0xa1正常 OLED_WR_Byte(0xC8,OLED_CMD);//Set COM/Row Scan Direction 0xc0上下反置 0xc8正常 OLED_WR_Byte(0xA6,OLED_CMD);//--set normal display OLED_WR_Byte(0xA8,OLED_CMD);//--set multiplex ratio(1 to 64) OLED_WR_Byte(0x3f,OLED_CMD);//--1/64 duty OLED_WR_Byte(0xD3,OLED_CMD);//-set display offset Shift Mapping RAM Counter (0x00~0x3F) OLED_WR_Byte(0x00,OLED_CMD);//-not offset OLED_WR_Byte(0xd5,OLED_CMD);//--set display clock divide ratio/oscillator frequency OLED_WR_Byte(0x80,OLED_CMD);//--set divide ratio, Set Clock as 100 Frames/Sec OLED_WR_Byte(0xD9,OLED_CMD);//--set pre-charge period OLED_WR_Byte(0xF1,OLED_CMD);//Set Pre-Charge as 15 Clocks & Discharge as 1 Clock OLED_WR_Byte(0xDA,OLED_CMD);//--set com pins hardware configuration OLED_WR_Byte(0x12,OLED_CMD); OLED_WR_Byte(0xDB,OLED_CMD);//--set vcomh OLED_WR_Byte(0x40,OLED_CMD);//Set VCOM Deselect Level OLED_WR_Byte(0x20,OLED_CMD);//-Set Page Addressing Mode (0x00/0x01/0x02) OLED_WR_Byte(0x02,OLED_CMD);// OLED_WR_Byte(0x8D,OLED_CMD);//--set Charge Pump enable/disable OLED_WR_Byte(0x14,OLED_CMD);//--set(0x10) disable OLED_WR_Byte(0xA4,OLED_CMD);// Entire Display On (0xa4/0xa5) OLED_WR_Byte(0xA6,OLED_CMD);// Disable Inverse Display On (0xa6/a7) OLED_WR_Byte(0xAF,OLED_CMD); OLED_Clear(); } 图片取模 取模软件&字符码 在“模式”里面我们可以选择,是图片取模还是字符取模; 然后在“设置”里面按照下图2的一样的设置就行; 设置完成之后,选择一张bmp图片,点击生成字模; 复制字模数据到工程里的bmp.h文件里面就行。 |
|
|
|
只有小组成员才能发言,加入小组>>
3278 浏览 9 评论
2955 浏览 16 评论
3455 浏览 1 评论
8987 浏览 16 评论
4050 浏览 18 评论
1102浏览 3评论
570浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
568浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2301浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1857浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 10:27 , Processed in 1.304098 second(s), Total 79, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号