msp432使用硬件i2c使用0.96寸oled屏的示例代码

时间: 2023-07-30 16:07:04 浏览: 52
下面是使用MSP432的硬件I2C控制0.96寸OLED屏幕的示例代码,需要使用MSP432P401R LaunchPad进行测试。 ```c #include <stdbool.h> #include <stdint.h> #include <string.h> #include <stdio.h> #include "driverlib.h" #define I2C_MASTER_BASE EUSCI_B0_BASE #define I2C_SLAVE_ADDRESS 0x3C #define OLED_WIDTH 128 #define OLED_HEIGHT 64 static const uint8_t init_sequence[] = { 0xAE, // Display OFF 0xD5, 0x80, // Set Display Clock Divide Ratio/Oscillator Frequency 0xA8, 0x3F, // Set Multiplex Ratio(1 to 64) 0xD3, 0x00, // Set Display Offset 0x40, // Set Display Start Line 0x8D, 0x14, // Enable charge pump regulator 0x20, 0x00, // Set Memory Addressing Mode to Horizontal 0xA0 | 0x01,// Set Segment Re-map 0xC8, // Set COM Output Scan Direction 0xDA, 0x12, // Set COM Pins Hardware Configuration 0x81, 0xCF, // Set Contrast Control 0xD9, 0xF1, // Set Precharge Period 0xDB, 0x30, // Set VCOMH Deselect Level 0xA4, // Entire Display ON 0xA6, // Set Normal Display 0xAF // Display ON }; void oled_write_cmd(uint8_t cmd) { uint8_t tx_data[2] = { 0x00, cmd }; I2C_masterSendMultiByteStart(I2C_MASTER_BASE, I2C_SLAVE_ADDRESS); I2C_masterSendMultiByteNext(I2C_MASTER_BASE, tx_data[0]); I2C_masterSendMultiByteFinish(I2C_MASTER_BASE, tx_data[1]); while (I2C_masterIsStopSent(I2C_MASTER_BASE)) ; } void oled_write_data(const uint8_t *data, size_t len) { I2C_masterSendMultiByteStart(I2C_MASTER_BASE, I2C_SLAVE_ADDRESS); for (size_t i = 0; i < len; ++i) { I2C_masterSendMultiByteNext(I2C_MASTER_BASE, data[i]); } I2C_masterSendMultiByteFinish(I2C_MASTER_BASE, 0x00); while (I2C_masterIsStopSent(I2C_MASTER_BASE)) ; } void oled_init() { oled_write_cmd(0xAE); // Display OFF for (size_t i = 0; i < sizeof(init_sequence); ++i) { oled_write_cmd(init_sequence[i]); } } void oled_clear() { uint8_t data[OLED_WIDTH / 8] = { 0 }; for (int page = 0; page < OLED_HEIGHT / 8; ++page) { oled_set_page_address(page); oled_set_col_address(0); oled_write_data(data, sizeof(data)); } } void oled_set_page_address(uint8_t page) { oled_write_cmd(0xB0 | page); } void oled_set_col_address(uint8_t col) { uint8_t high_nibble = col >> 4; uint8_t low_nibble = col & 0x0F; oled_write_cmd(0x10 | high_nibble); oled_write_cmd(0x00 | low_nibble); } void oled_set_pixel(uint8_t x, uint8_t y, bool value) { uint8_t page = y / 8; uint8_t bit_mask = 1 << (y % 8); uint8_t data[1] = { value ? bit_mask : 0 }; oled_set_page_address(page); oled_set_col_address(x); oled_write_data(data, sizeof(data)); } void oled_draw_bitmap(const uint8_t *bitmap, uint8_t x, uint8_t y, uint8_t width, uint8_t height) { for (int i = 0; i < height; ++i) { for (int j = 0; j < width; ++j) { uint8_t byte_index = (i * width + j) / 8; uint8_t bit_mask = 1 << ((i * width + j) % 8); bool value = bitmap[byte_index] & bit_mask; oled_set_pixel(x + j, y + i, value); } } } int main(void) { WDT_A_hold(WDT_A_BASE); GPIO_setAsPeripheralModuleFunctionOutputPin(GPIO_PORT_P1, GPIO_PIN3 | GPIO_PIN2, GPIO_PRIMARY_MODULE_FUNCTION); I2C_initMaster(I2C_MASTER_BASE, &eUSCI_B_I2C_initMasterParam); I2C_setMode(I2C_MASTER_BASE, EUSCI_B_I2C_TRANSMIT_MODE); I2C_masterEnable(I2C_MASTER_BASE); oled_init(); oled_clear(); const uint8_t bitmap[] = { // Bitmap data goes here }; oled_draw_bitmap(bitmap, 0, 0, OLED_WIDTH, OLED_HEIGHT); while (1) ; } ``` 注意,这只是一个示例代码,并不保证能够直接运行。您需要根据自己的硬件和需求进行修改和调整。

相关推荐

最新推荐

recommend-type

MSP430硬件I2C使用方法——以BH1710和AT24C02为例

硬件的I2C控制器终于调出来了,这些天一直在钻死胡同,其实最好的参考资料还是TI官方提供的。代码参考了MSP430的User’s Guide和Application Note,下面提供IAR工程并做简要解释。
recommend-type

02_0 KeilMDK搭建MSP432开发环境.pdf

一个非常值得推荐的PPT,分步骤详细阐述说明了如何在Keil MDK下搭建MSP432的开发环境,内容非常详细,很具操作性。
recommend-type

msp432p401r数据手册.pdf

内含MSP432P0R数据手册正版清晰 数据手册有关于MSP432的相关评测数据;包含MSP432的封装信息,引脚信息,本芯片的优势介绍,本芯片的规格介绍以及一些关于本芯片细节的描述
recommend-type

MSP430单片机I2C应用笔记

这些天使用LaunchPad做的试验,是通过MSP430G2553的硬件I2C访问挂在同一I2C接口上的EEPROM和MFRC522,EEPROM使用模拟I2C接口、MFRC522使用模拟SPI接口的资料网上不难得到,针对430的硬件I2C接口的可能稍微少些,至少...
recommend-type

【官方英文版文档高质量翻译】MSP432P401数据手册【翻译】【中文版】.pdf

【官方英文版文档高质量翻译】MSP432P401数据手册【翻译】【中文版】.pdf
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

可见光定位LED及其供电硬件具体型号,广角镜头和探测器,实验设计具体流程步骤,

1. 可见光定位LED型号:一般可使用5mm或3mm的普通白色LED,也可以选择专门用于定位的LED,例如OSRAM公司的SFH 4715AS或Vishay公司的VLMU3500-385-120。 2. 供电硬件型号:可以使用常见的直流电源供电,也可以选择专门的LED驱动器,例如Meanwell公司的ELG-75-C或ELG-150-C系列。 3. 广角镜头和探测器型号:一般可采用广角透镜和CMOS摄像头或光电二极管探测器,例如Omron公司的B5W-LA或Murata公司的IRS-B210ST01。 4. 实验设计流程步骤: 1)确定实验目的和研究对象,例如车辆或机器人的定位和导航。
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。