lisaro

    1. msp430 怎么驱动0.96寸的OLED显示屏(iic) 5/3978 微控制器 MCU 2023-03-27
      #ifndef __OLED_FONT_H #define __OLED_FONT_H #include "stdint.h" /*OLED字模库,宽8像素,高16像素*/ const uint8_t OLED_F8x16[][16]= {     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//  0     0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,     0x00,0x00,0x00,0x33,0x30,0x00,0x00,0x00,//! 1     0x00,0x10,0x0C,0x06,0x10,0x0C,0x06,0x00,     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//" 2     0x40,0xC0,0x78,0x40,0xC0,0x78,0x40,0x00,     0x04,0x3F,0x04,0x04,0x3F,0x04,0x04,0x00,//# 3     0x00,0x70,0x88,0xFC,0x08,0x30,0x00,0x00,     0x00,0x18,0x20,0xFF,0x21,0x1E,0x00,0x00,//$ 4     0xF0,0x08,0xF0,0x00,0xE0,0x18,0x00,0x00,     0x00,0x21,0x1C,0x03,0x1E,0x21,0x1E,0x00,//% 5     0x00,0xF0,0x08,0x88,0x70,0x00,0x00,0x00,     0x1E,0x21,0x23,0x24,0x19,0x27,0x21,0x10,//& 6     0x10,0x16,0x0E,0x00,0x00,0x00,0x00,0x00,     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//' 7     0x00,0x00,0x00,0xE0,0x18,0x04,0x02,0x00,     0x00,0x00,0x00,0x07,0x18,0x20,0x40,0x00,//( 8     0x00,0x02,0x04,0x18,0xE0,0x00,0x00,0x00,     0x00,0x40,0x20,0x18,0x07,0x00,0x00,0x00,//) 9     0x40,0x40,0x80,0xF0,0x80,0x40,0x40,0x00,     0x02,0x02,0x01,0x0F,0x01,0x02,0x02,0x00,//* 10     0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x00,     0x01,0x01,0x01,0x1F,0x01,0x01,0x01,0x00,//+ 11     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,     0x80,0xB0,0x70,0x00,0x00,0x00,0x00,0x00,//, 12     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,     0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,//- 13     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,     0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00,//. 14     0x00,0x00,0x00,0x00,0x80,0x60,0x18,0x04,     0x00,0x60,0x18,0x06,0x01,0x00,0x00,0x00,/// 15     0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,     0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,//0 16     0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,     0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//1 17     0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,     0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,//2 18     0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,     0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,//3 19     0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,     0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,//4 20     0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,     0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,//5 21     0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,     0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,//6 22     0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,     0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,//7 23     0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,     0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,//8 24     0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,     0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00,//9 25     0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,     0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,//: 26     0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,     0x00,0x00,0x80,0x60,0x00,0x00,0x00,0x00,//; 27     0x00,0x00,0x80,0x40,0x20,0x10,0x08,0x00,     0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x00,//< 28     0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,     0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,//= 29     0x00,0x08,0x10,0x20,0x40,0x80,0x00,0x00,     0x00,0x20,0x10,0x08,0x04,0x02,0x01,0x00,//> 30     0x00,0x70,0x48,0x08,0x08,0x08,0xF0,0x00,     0x00,0x00,0x00,0x30,0x36,0x01,0x00,0x00,//? 31     0xC0,0x30,0xC8,0x28,0xE8,0x10,0xE0,0x00,     0x07,0x18,0x27,0x24,0x23,0x14,0x0B,0x00,//@ 32     0x00,0x00,0xC0,0x38,0xE0,0x00,0x00,0x00,     0x20,0x3C,0x23,0x02,0x02,0x27,0x38,0x20,//A 33     0x08,0xF8,0x88,0x88,0x88,0x70,0x00,0x00,     0x20,0x3F,0x20,0x20,0x20,0x11,0x0E,0x00,//B 34     0xC0,0x30,0x08,0x08,0x08,0x08,0x38,0x00,     0x07,0x18,0x20,0x20,0x20,0x10,0x08,0x00,//C 35     0x08,0xF8,0x08,0x08,0x08,0x10,0xE0,0x00,     0x20,0x3F,0x20,0x20,0x20,0x10,0x0F,0x00,//D 36     0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,     0x20,0x3F,0x20,0x20,0x23,0x20,0x18,0x00,//E 37     0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,     0x20,0x3F,0x20,0x00,0x03,0x00,0x00,0x00,//F 38     0xC0,0x30,0x08,0x08,0x08,0x38,0x00,0x00,     0x07,0x18,0x20,0x20,0x22,0x1E,0x02,0x00,//G 39     0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,     0x20,0x3F,0x21,0x01,0x01,0x21,0x3F,0x20,//H 40     0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0x00,     0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//I 41     0x00,0x00,0x08,0x08,0xF8,0x08,0x08,0x00,     0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,0x00,//J 42     0x08,0xF8,0x88,0xC0,0x28,0x18,0x08,0x00,     0x20,0x3F,0x20,0x01,0x26,0x38,0x20,0x00,//K 43     0x08,0xF8,0x08,0x00,0x00,0x00,0x00,0x00,     0x20,0x3F,0x20,0x20,0x20,0x20,0x30,0x00,//L 44     0x08,0xF8,0xF8,0x00,0xF8,0xF8,0x08,0x00,     0x20,0x3F,0x00,0x3F,0x00,0x3F,0x20,0x00,//M 45     0x08,0xF8,0x30,0xC0,0x00,0x08,0xF8,0x08,     0x20,0x3F,0x20,0x00,0x07,0x18,0x3F,0x00,//N 46     0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,     0x0F,0x10,0x20,0x20,0x20,0x10,0x0F,0x00,//O 47     0x08,0xF8,0x08,0x08,0x08,0x08,0xF0,0x00,     0x20,0x3F,0x21,0x01,0x01,0x01,0x00,0x00,//P 48     0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,     0x0F,0x18,0x24,0x24,0x38,0x50,0x4F,0x00,//Q 49     0x08,0xF8,0x88,0x88,0x88,0x88,0x70,0x00,     0x20,0x3F,0x20,0x00,0x03,0x0C,0x30,0x20,//R 50     0x00,0x70,0x88,0x08,0x08,0x08,0x38,0x00,     0x00,0x38,0x20,0x21,0x21,0x22,0x1C,0x00,//S 51     0x18,0x08,0x08,0xF8,0x08,0x08,0x18,0x00,     0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,//T 52     0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,     0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,//U 53     0x08,0x78,0x88,0x00,0x00,0xC8,0x38,0x08,     0x00,0x00,0x07,0x38,0x0E,0x01,0x00,0x00,//V 54     0xF8,0x08,0x00,0xF8,0x00,0x08,0xF8,0x00,     0x03,0x3C,0x07,0x00,0x07,0x3C,0x03,0x00,//W 55     0x08,0x18,0x68,0x80,0x80,0x68,0x18,0x08,     0x20,0x30,0x2C,0x03,0x03,0x2C,0x30,0x20,//X 56     0x08,0x38,0xC8,0x00,0xC8,0x38,0x08,0x00,     0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,//Y 57     0x10,0x08,0x08,0x08,0xC8,0x38,0x08,0x00,     0x20,0x38,0x26,0x21,0x20,0x20,0x18,0x00,//Z 58     0x00,0x00,0x00,0xFE,0x02,0x02,0x02,0x00,     0x00,0x00,0x00,0x7F,0x40,0x40,0x40,0x00,//[ 59     0x00,0x0C,0x30,0xC0,0x00,0x00,0x00,0x00,     0x00,0x00,0x00,0x01,0x06,0x38,0xC0,0x00,//\ 60     0x00,0x02,0x02,0x02,0xFE,0x00,0x00,0x00,     0x00,0x40,0x40,0x40,0x7F,0x00,0x00,0x00,//] 61     0x00,0x00,0x04,0x02,0x02,0x02,0x04,0x00,     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//^ 62     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,     0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,//_ 63     0x00,0x02,0x02,0x04,0x00,0x00,0x00,0x00,     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//` 64     0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,     0x00,0x19,0x24,0x22,0x22,0x22,0x3F,0x20,//a 65     0x08,0xF8,0x00,0x80,0x80,0x00,0x00,0x00,     0x00,0x3F,0x11,0x20,0x20,0x11,0x0E,0x00,//b 66     0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,     0x00,0x0E,0x11,0x20,0x20,0x20,0x11,0x00,//c 67     0x00,0x00,0x00,0x80,0x80,0x88,0xF8,0x00,     0x00,0x0E,0x11,0x20,0x20,0x10,0x3F,0x20,//d 68     0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,     0x00,0x1F,0x22,0x22,0x22,0x22,0x13,0x00,//e 69     0x00,0x80,0x80,0xF0,0x88,0x88,0x88,0x18,     0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//f 70     0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,     0x00,0x6B,0x94,0x94,0x94,0x93,0x60,0x00,//g 71     0x08,0xF8,0x00,0x80,0x80,0x80,0x00,0x00,     0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,//h 72     0x00,0x80,0x98,0x98,0x00,0x00,0x00,0x00,     0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//i 73     0x00,0x00,0x00,0x80,0x98,0x98,0x00,0x00,     0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,//j 74     0x08,0xF8,0x00,0x00,0x80,0x80,0x80,0x00,     0x20,0x3F,0x24,0x02,0x2D,0x30,0x20,0x00,//k 75     0x00,0x08,0x08,0xF8,0x00,0x00,0x00,0x00,     0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//l 76     0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,     0x20,0x3F,0x20,0x00,0x3F,0x20,0x00,0x3F,//m 77     0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,     0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,//n 78     0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,     0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,//o 79     0x80,0x80,0x00,0x80,0x80,0x00,0x00,0x00,     0x80,0xFF,0xA1,0x20,0x20,0x11,0x0E,0x00,//p 80     0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x00,     0x00,0x0E,0x11,0x20,0x20,0xA0,0xFF,0x80,//q 81     0x80,0x80,0x80,0x00,0x80,0x80,0x80,0x00,     0x20,0x20,0x3F,0x21,0x20,0x00,0x01,0x00,//r 82     0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,     0x00,0x33,0x24,0x24,0x24,0x24,0x19,0x00,//s 83     0x00,0x80,0x80,0xE0,0x80,0x80,0x00,0x00,     0x00,0x00,0x00,0x1F,0x20,0x20,0x00,0x00,//t 84     0x80,0x80,0x00,0x00,0x00,0x80,0x80,0x00,     0x00,0x1F,0x20,0x20,0x20,0x10,0x3F,0x20,//u 85     0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,     0x00,0x01,0x0E,0x30,0x08,0x06,0x01,0x00,//v 86     0x80,0x80,0x00,0x80,0x00,0x80,0x80,0x80,     0x0F,0x30,0x0C,0x03,0x0C,0x30,0x0F,0x00,//w 87     0x00,0x80,0x80,0x00,0x80,0x80,0x80,0x00,     0x00,0x20,0x31,0x2E,0x0E,0x31,0x20,0x00,//x 88     0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,     0x80,0x81,0x8E,0x70,0x18,0x06,0x01,0x00,//y 89     0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x00,     0x00,0x21,0x30,0x2C,0x22,0x21,0x30,0x00,//z 90     0x00,0x00,0x00,0x00,0x80,0x7C,0x02,0x02,     0x00,0x00,0x00,0x00,0x00,0x3F,0x40,0x40,//{ 91     0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,     0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,//| 92     0x00,0x02,0x02,0x7C,0x80,0x00,0x00,0x00,     0x00,0x40,0x40,0x3F,0x00,0x00,0x00,0x00,//} 93     0x00,0x06,0x01,0x01,0x02,0x02,0x04,0x04,     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//~ 94 }; char Hzk[][32]={ {0x00,0x00,0xF0,0x10,0x10,0x10,0x10,0xFF,0x10,0x10,0x10,0x10,0xF0,0x00,0x00,0x00}, {0x00,0x00,0x0F,0x04,0x04,0x04,0x04,0xFF,0x04,0x04,0x04,0x04,0x0F,0x00,0x00,0x00},/*"中",0*/ }; #endif  
    2. msp430 怎么驱动0.96寸的OLED显示屏(iic) 5/3978 微控制器 MCU 2023-03-27
      #include <msp430.h> #include <stdint.h> #include <stdbool.h> #include "OLED_Font.h" //****************************************************************************** // Example Commands ************************************************************ //****************************************************************************** #define X_WIDTH         128 #define Y_WIDTH         64 #define OLED_CMD  0        //写命令 #define OLED_CMD 0 //写命令 #define OLED_DATA 1        //写数据 #define OLED_DATA 1 //写数据 #define SLAVE_ADDR  0x3C #define CMD_TYPE_0_SLAVE      0 #define CMD_TYPE_1_SLAVE      1 #define CMD_TYPE_2_SLAVE      2 #define CMD_TYPE_0_MASTER      3 #define CMD_TYPE_1_MASTER      4 #define CMD_TYPE_2_MASTER      5 #define TYPE_0_LENGTH   1 #define TYPE_1_LENGTH   2 #define TYPE_2_LENGTH   6 #define MAX_BUFFER_SIZE     20 uint8_t MasterType2 [TYPE_2_LENGTH] = {'F', '4', '1', '9', '2', 'B'}; uint8_t MasterType1 [28] = {0xae,0x00,0x10,0x40,0x81,0xcf,0xa1,0xc8,0xa6,0xa8,0x3f,0xd3,0x00,0xd5,0x80,0xd9,0xf1,0xda,0x12,0xdb,0x40,0x20,0x02,0x8d,0x14,0xa4,0xa6,0xaf}; uint8_t MasterType0 [1] = {0}; uint8_t SlaveType2 [TYPE_2_LENGTH] = {0}; uint8_t SlaveType1 [TYPE_1_LENGTH] = {0}; uint8_t SlaveType0 [TYPE_0_LENGTH] = {0}; void delay(unsigned int z) {   unsigned int x,y;   for(x=z;x>0;x--)     for(y=5000;y>0;y--); } typedef enum I2C_ModeEnum{     IDLE_MODE,     NACK_MODE,     TX_REG_ADDRESS_MODE,     RX_REG_ADDRESS_MODE,     TX_DATA_MODE,     RX_DATA_MODE,     SWITCH_TO_RX_MODE,     SWITHC_TO_TX_MODE,     TIMEOUT_MODE } I2C_Mode; /* Used to track the state of the software state machine*/ I2C_Mode MasterMode = IDLE_MODE; /* The Register Address/Command to use*/ uint8_t TransmitRegAddr = 0; /* ReceiveBuffer: Buffer used to receive data in the ISR  * RXByteCtr: Number of bytes left to receive  * ReceiveIndex: The index of the next byte to be received in ReceiveBuffer  * TransmitBuffer: Buffer used to transmit data in the ISR  * TXByteCtr: Number of bytes left to transfer  * TransmitIndex: The index of the next byte to be transmitted in TransmitBuffer  * */ uint8_t ReceiveBuffer[MAX_BUFFER_SIZE] = {0}; uint8_t RXByteCtr = 0; uint8_t ReceiveIndex = 0; uint8_t TransmitBuffer[MAX_BUFFER_SIZE] = {0}; uint8_t TXByteCtr = 0; uint8_t TransmitIndex = 0; I2C_Mode I2C_Master_WriteReg(uint8_t dev_addr, uint8_t reg_addr, uint8_t *reg_data, uint8_t count); I2C_Mode I2C_Master_ReadReg(uint8_t dev_addr, uint8_t reg_addr, uint8_t count); void CopyArray(uint8_t *source, uint8_t *dest, uint8_t count); I2C_Mode I2C_Master_ReadReg(uint8_t dev_addr, uint8_t reg_addr, uint8_t count) {     /* Initialize state machine */     MasterMode = TX_REG_ADDRESS_MODE;     TransmitRegAddr = reg_addr;     RXByteCtr = count;     TXByteCtr = 0;     ReceiveIndex = 0;     TransmitIndex = 0;     /* Initialize slave address and interrupts */     UCB0I2CSA = dev_addr;     IFG2 &= ~(UCB0TXIFG + UCB0RXIFG);       // Clear any pending interrupts     IE2 &= ~UCB0RXIE;                       // Disable RX interrupt     IE2 |= UCB0TXIE;                        // Enable TX interrupt     UCB0CTL1 |= UCTR + UCTXSTT;             // I2C TX, start condition     __bis_SR_register(CPUOFF + GIE);              // Enter LPM0 w/ interrupts     return MasterMode; } I2C_Mode I2C_Master_WriteReg(uint8_t dev_addr, uint8_t reg_addr, uint8_t *reg_data, uint8_t count) {     /* Initialize state machine */     MasterMode = TX_REG_ADDRESS_MODE;     TransmitRegAddr = reg_addr;     //Copy register data to TransmitBuffer     CopyArray(reg_data, TransmitBuffer, count);     TXByteCtr = count;     RXByteCtr = 0;     ReceiveIndex = 0;     TransmitIndex = 0;     /* Initialize slave address and interrupts */     UCB0I2CSA = dev_addr;     IFG2 &= ~(UCB0TXIFG + UCB0RXIFG);       // Clear any pending interrupts     IE2 &= ~UCB0RXIE;                       // Disable RX interrupt     IE2 |= UCB0TXIE;                        // Enable TX interrupt     UCB0CTL1 |= UCTR + UCTXSTT;             // I2C TX, start condition     __bis_SR_register(CPUOFF + GIE);              // Enter LPM0 w/ interrupts     return MasterMode; } void CopyArray(uint8_t *source, uint8_t *dest, uint8_t count) {     uint8_t copyIndex = 0;     for (copyIndex = 0; copyIndex < count; copyIndex++)     {         dest[copyIndex] = source[copyIndex];     } } void initClockTo16MHz() {     if (CALBC1_16MHZ==0xFF)                  // If calibration constant erased     {         while(1);                               // do not load, trap CPU!!     }     DCOCTL = 0;                               // Select lowest DCOx and MODx settings     BCSCTL1 = CALBC1_16MHZ;                    // Set DCO     DCOCTL = CALDCO_16MHZ; } void initGPIO() {     P1DIR |= BIT0 + BIT1 + BIT2 + BIT3 + BIT4;     P1OUT &= ~(BIT0 + BIT1 + BIT2 + BIT3 + BIT4);     P1SEL |= BIT6 + BIT7;                     // Assign I2C pins to USCI_B0     P1SEL2|= BIT6 + BIT7;                     // Assign I2C pins to USCI_B0 } void initI2C() {     UCB0CTL1 |= UCSWRST;                      // Enable SW reset     UCB0CTL0 = UCMST + UCMODE_3 + UCSYNC;     // I2C Master, synchronous mode     UCB0CTL1 = UCSSEL_2 + UCSWRST;            // Use SMCLK, keep SW reset     UCB0BR0 = 160;                            // fSCL = SMCLK/160 = ~100kHz     UCB0BR1 = 0;     UCB0I2CSA = SLAVE_ADDR;                   // Slave Address     UCB0CTL1 &= ~UCSWRST;                     // Clear SW reset, resume operation     UCB0I2CIE |= UCNACKIE; } void OLED_WriteCommand(unsigned char IIC_Command) {         MasterType0[0]=IIC_Command;       I2C_Master_WriteReg(SLAVE_ADDR, 0x00,MasterType0, 1); } void OLED_WriteData(unsigned char IIC_Data) {         MasterType0[0]=IIC_Data;       I2C_Master_WriteReg(SLAVE_ADDR, 0x40,MasterType0, 1); } //****************************************************************************** // Main ************************************************************************ // Send and receive three messages containing the example commands ************* //****************************************************************************** void OLED_Fill(unsigned char bmp_dat) {         unsigned char y,x;         for(y=0;y<8;y++)         {             OLED_WriteCommand(0xb0+y);             OLED_WriteCommand(0x01);             OLED_WriteCommand(0x10);                 for(x=0;x<128;x++)             OLED_WriteData(bmp_dat);         } } void OLED_SetCursor(uint8_t Y, uint8_t X) {     OLED_WriteCommand(0xB0 | Y);                    //设置Y位置     OLED_WriteCommand(0x10 | ((X & 0xF0) >> 4));    //设置X位置高4位     OLED_WriteCommand(0x00 | (X & 0x0F));           //设置X位置低4位 } void OLED_Init(void) {         unsigned char i=0;         for(;i<28;i++)         {           MasterType0[0]=MasterType1;           I2C_Master_WriteReg(SLAVE_ADDR, 0x00,MasterType0, 1);         }         OLED_Fill(0x00); //初始清屏         OLED_SetCursor(0,0); } void OLED_ShowChar(uint8_t Line, uint8_t Column, char Char) {     uint8_t i;     OLED_SetCursor((Line - 1) * 2, (Column - 1) * 8);       //设置光标位置在上半部分     for (i = 0; i < 8; i++)     {         OLED_WriteData(OLED_F8x16[Char - ' ']);          //显示上半部分内容     }     OLED_SetCursor((Line - 1) * 2 + 1, (Column - 1) * 8);   //设置光标位置在下半部分     for (i = 0; i < 8; i++)     {         OLED_WriteData(OLED_F8x16[Char - ' '][i + 8]);      //显示下半部分内容     } } /**   * @brief  OLED显示字符串   * @param  Line 起始行位置,范围:1~4   * @param  Column 起始列位置,范围:1~16   * @param  String 要显示的字符串,范围:ASCII可见字符   * @retval 无   */ void OLED_ShowString(uint8_t Line, uint8_t Column, char *String) {     uint8_t i;     for (i = 0; String != '\0'; i++)     {         OLED_ShowChar(Line, Column + i, String);     } } /**   * @brief  OLED次方函数   * @retval 返回值等于X的Y次方   */ uint32_t OLED_Pow(uint32_t X, uint32_t Y) {     uint32_t Result = 1;     while (Y--)     {         Result *= X;     }     return Result; } /**   * @brief  OLED显示数字(十进制,正数)   * @param  Line 起始行位置,范围:1~4   * @param  Column 起始列位置,范围:1~16   * @param  Number 要显示的数字,范围:0~4294967295   * @param  Length 要显示数字的长度,范围:1~10   * @retval 无   */ void OLED_ShowNum(uint8_t Line, uint8_t Column, uint32_t Number, uint8_t Length) {     uint8_t i;     for (i = 0; i < Length; i++)     {         OLED_ShowChar(Line, Column + i, Number / OLED_Pow(10, Length - i - 1) % 10 + '0');     } } /**   * @brief  OLED显示数字(十进制,带符号数)   * @param  Line 起始行位置,范围:1~4   * @param  Column 起始列位置,范围:1~16   * @param  Number 要显示的数字,范围:-2147483648~2147483647   * @param  Length 要显示数字的长度,范围:1~10   * @retval 无   */ void OLED_ShowSignedNum(uint8_t Line, uint8_t Column, int32_t Number, uint8_t Length) {     uint8_t i;     uint32_t Number1;     if (Number >= 0)     {         OLED_ShowChar(Line, Column, '+');         Number1 = Number;     }     else     {         OLED_ShowChar(Line, Column, '-');         Number1 = -Number;     }     for (i = 0; i < Length; i++)     {         OLED_ShowChar(Line, Column + i + 1, Number1 / OLED_Pow(10, Length - i - 1) % 10 + '0');     } } /**   * @brief  OLED显示数字(十六进制,正数)   * @param  Line 起始行位置,范围:1~4   * @param  Column 起始列位置,范围:1~16   * @param  Number 要显示的数字,范围:0~0xFFFFFFFF   * @param  Length 要显示数字的长度,范围:1~8   * @retval 无   */ void OLED_ShowHexNum(uint8_t Line, uint8_t Column, uint32_t Number, uint8_t Length) {     uint8_t i, SingleNumber;     for (i = 0; i < Length; i++)     {         SingleNumber = Number / OLED_Pow(16, Length - i - 1) % 16;         if (SingleNumber < 10)         {             OLED_ShowChar(Line, Column + i, SingleNumber + '0');         }         else         {             OLED_ShowChar(Line, Column + i, SingleNumber - 10 + 'A');         }     } } /**   * @brief  OLED显示数字(二进制,正数)   * @param  Line 起始行位置,范围:1~4   * @param  Column 起始列位置,范围:1~16   * @param  Number 要显示的数字,范围:0~1111 1111 1111 1111   * @param  Length 要显示数字的长度,范围:1~16   * @retval 无   */ void OLED_ShowBinNum(uint8_t Line, uint8_t Column, uint32_t Number, uint8_t Length) {     uint8_t i;     for (i = 0; i < Length; i++)     {         OLED_ShowChar(Line, Column + i, Number / OLED_Pow(2, Length - i - 1) % 2 + '0');     } } //****************************************************************************** // Main ************************************************************************ // Send and receive three messages containing the example commands ************* //****************************************************************************** int main(void) {     WDTCTL = WDTPW | WDTHOLD;                 // Stop watchdog timer     initClockTo16MHz();     initGPIO();     initI2C();     delay(500);     OLED_Init();     OLED_ShowNum(1,1,500,3);     __bis_SR_register(LPM0_bits + GIE);     return 0; } //****************************************************************************** // I2C Interrupt For Received and Transmitted Data****************************** //****************************************************************************** #if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__) #pragma vector = USCIAB0TX_VECTOR __interrupt void USCIAB0TX_ISR(void) #elif defined(__GNUC__) void __attribute__ ((interrupt(USCIAB0TX_VECTOR))) USCIAB0TX_ISR (void) #else #error Compiler not supported! #endif {   if (IFG2 & UCB0RXIFG)                 // Receive Data Interrupt   {       //Must read from UCB0RXBUF       uint8_t rx_val = UCB0RXBUF;       if (RXByteCtr)       {           ReceiveBuffer[ReceiveIndex++] = rx_val;           RXByteCtr--;       }       if (RXByteCtr == 1)       {           UCB0CTL1 |= UCTXSTP;       }       else if (RXByteCtr == 0)       {           IE2 &= ~UCB0RXIE;           MasterMode = IDLE_MODE;           __bic_SR_register_on_exit(CPUOFF);      // Exit LPM0       }   }   else if (IFG2 & UCB0TXIFG)            // Transmit Data Interrupt   {       switch (MasterMode)       {           case TX_REG_ADDRESS_MODE:               UCB0TXBUF = TransmitRegAddr;               if (RXByteCtr)                   MasterMode = SWITCH_TO_RX_MODE;   // Need to start receiving now               else                   MasterMode = TX_DATA_MODE;        // Continue to transmision with the data in Transmit Buffer               break;           case SWITCH_TO_RX_MODE:               IE2 |= UCB0RXIE;              // Enable RX interrupt               IE2 &= ~UCB0TXIE;             // Disable TX interrupt               UCB0CTL1 &= ~UCTR;            // Switch to receiver               MasterMode = RX_DATA_MODE;    // State state is to receive data               UCB0CTL1 |= UCTXSTT;          // Send repeated start               if (RXByteCtr == 1)               {                   //Must send stop since this is the N-1 byte                   while((UCB0CTL1 & UCTXSTT));                   UCB0CTL1 |= UCTXSTP;      // Send stop condition               }               break;           case TX_DATA_MODE:               if (TXByteCtr)               {                   UCB0TXBUF = TransmitBuffer[TransmitIndex++];                   TXByteCtr--;               }               else               {                   //Done with transmission                   UCB0CTL1 |= UCTXSTP;     // Send stop condition                   MasterMode = IDLE_MODE;                   IE2 &= ~UCB0TXIE;                       // disable TX interrupt                   __bic_SR_register_on_exit(CPUOFF);      // Exit LPM0               }               break;           default:               __no_operation();               break;       }   } } //****************************************************************************** // I2C Interrupt For Start, Restart, Nack, Stop ******************************** //****************************************************************************** #if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__) #pragma vector = USCIAB0RX_VECTOR __interrupt void USCIAB0RX_ISR(void) #elif defined(__GNUC__) void __attribute__ ((interrupt(USCIAB0RX_VECTOR))) USCIAB0RX_ISR (void) #else #error Compiler not supported! #endif {     if (UCB0STAT & UCNACKIFG)     {         UCB0STAT &= ~UCNACKIFG;             // Clear NACK Flags     }     if (UCB0STAT & UCSTPIFG)                        //Stop or NACK Interrupt     {         UCB0STAT &=             ~(UCSTTIFG + UCSTPIFG + UCNACKIFG);     //Clear START/STOP/NACK Flags     }     if (UCB0STAT & UCSTTIFG)     {         UCB0STAT &= ~(UCSTTIFG);                    //Clear START Flags     } }    
    3. msp430 怎么驱动0.96寸的OLED显示屏(iic) 5/3978 微控制器 MCU 2023-03-27
      搞定了!!!!!                                  /|\ /|\ //                   MSP430F5529       4.7k | //                 -----------------    |  4.7k //            /|\ |             P3.1|---+---|-- I2C Clock (UCB0SCL) //             |  |                 |       | //             ---|RST          P3.0|-------+-- I2C Data (UCB0SDA) 记得这两个上拉电阻  
    4. msp430 怎么驱动0.96寸的OLED显示屏(iic) 5/3978 微控制器 MCU 2023-03-27
      +1模拟i2c可以跑,硬件i2c调不通

最近访客

现在还没有访客

< 1/0 >

统计信息

已有--人来访过

  • 芯积分:13
  • 好友:--
  • 主题:--
  • 回复:4

留言

你需要登录后才可以留言 登录 | 注册


现在还没有留言