liuyuhe 发表于 2023-5-25 10:30:36

stc8H驱动ssd1315OLED屏怎么做啊,大佬们帮我看看

#include "STC8Hxxx.h"
#include <stdio.h>
#include <INTRINS.H>

#define Uchar unsigned char
#define Uintunsigned int
#define Ulong unsigned long
#define uchar unsigned char
#define uintunsigned int

#define LOG 1

sbit ENC_A = P1^5;
sbit ENC_B = P1^7;
sbit ENC_SW = P1^6;
sbit led = P3^4;

void GPIO_Init (void);
void Uart_Init(void);
void IIC_Init(void);
void ADC_Init(void);


code color13[]={
/*------------------------------------------------------------------------------
;???? / ???? : C:\Documents and Settings\Administrator\????\???????? (2)\logo.bmp???
;????????????: 128??64
------------------------------------------------------------------------------*/
//0x80,0x40,0x10,//??????????,????????????????????????????????
0xFF,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0xFF,
0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x20,0x44,0x08,0x00,0x18,0x48,0x28,0xC8,0x08,0x28,0x48,0x18,0x00,
0x40,0x40,0xFC,0x40,0x40,0xFC,0x00,0x00,0xF8,0x00,0x00,0xFC,0x00,0x40,0x40,0xA0,
0x90,0x88,0x84,0x88,0x90,0x20,0x40,0x40,0x00,0x00,0x40,0x44,0xD8,0x20,0xF0,0xAC,
0xA8,0xE8,0xB8,0xA8,0xE0,0x00,0x00,0x00,0xC0,0x7C,0x54,0x54,0x54,0x54,0x54,0x54,
0x7C,0x40,0x40,0x00,0x00,0xF0,0x90,0x90,0x90,0xFC,0x90,0x90,0x90,0xF0,0x00,0x00,
0x00,0x80,0x88,0x88,0x88,0x88,0x88,0xE8,0xA8,0x98,0x8C,0x88,0x80,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,
0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x04,0x3E,0x01,0x10,0x11,0x09,0x05,0x3F,0x05,0x09,0x11,0x11,0x00,
0x08,0x18,0x0F,0x24,0x14,0x0F,0x00,0x00,0x0F,0x00,0x00,0x3F,0x00,0x20,0x22,0x2A,
0x32,0x22,0x3F,0x22,0x32,0x2A,0x22,0x20,0x00,0x00,0x20,0x10,0x0F,0x10,0x28,0x24,
0x23,0x20,0x2F,0x28,0x2A,0x2C,0x00,0x30,0x0F,0x04,0x3D,0x25,0x15,0x15,0x0D,0x15,
0x2D,0x24,0x24,0x00,0x00,0x07,0x04,0x04,0x04,0x1F,0x24,0x24,0x24,0x27,0x20,0x38,
0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,
0xFF,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xFF,
0xFF,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
0x01,0x01,0x01,0x81,0x41,0x21,0x21,0x61,0x01,0x01,0x21,0xE1,0xE1,0x01,0xE1,0xE1,
0x21,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x21,0xE1,0x21,0x21,0x21,0x61,0x01,0x01,
0x21,0x21,0xE1,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
0x01,0x01,0x01,0x01,0x01,0x01,0xC1,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
0x01,0x01,0x01,0x21,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0xFF,
0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x0F,0x10,0x20,0x24,0x1C,0x04,0x00,0x20,0x3F,0x01,0x3E,0x01,0x3F,
0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x3F,0x22,0x22,0x27,0x30,0x00,0x00,
0x20,0x20,0x3F,0x20,0x20,0x00,0x00,0x1E,0x25,0x25,0x25,0x16,0x00,0x00,0x1E,0x21,
0x21,0x21,0x13,0x00,0x01,0x01,0x1F,0x21,0x21,0x00,0x00,0x00,0x21,0x3F,0x22,0x21,
0x01,0x00,0x00,0x1E,0x21,0x21,0x21,0x1E,0x00,0x21,0x3F,0x22,0x01,0x01,0x3E,0x20,
0x00,0x21,0x21,0x3F,0x20,0x20,0x00,0x00,0x1E,0x21,0x21,0x21,0x13,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,
0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0xF0,0x08,0x04,0x04,0x04,0x0C,0x00,0xF0,0x08,0x04,0x04,0x08,0xF0,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xFC,0x04,0x00,
0x00,0x00,0x00,0x00,0x0C,0x04,0xFC,0x04,0x0C,0x00,0x04,0xFC,0x04,0x04,0x08,0xF0,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,
0xFF,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
0x80,0x80,0x80,0x81,0x82,0x84,0x84,0x84,0x82,0x80,0x81,0x82,0x84,0x84,0x82,0x81,
0x80,0x80,0x86,0x86,0x80,0x80,0x80,0x80,0x80,0x85,0x83,0x80,0x80,0x80,0x80,0x80,
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x84,0x87,0x84,0x84,
0x84,0x86,0x80,0x80,0x80,0x84,0x87,0x84,0x80,0x80,0x84,0x87,0x84,0x84,0x82,0x81,
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xFF,
};

code color14[]={
/*--????????????F:\????\8051\OLED1\abcd.bmp--*/
/*--????x???=128x64--*/
0x00,0x00,0x00,0xF0,0x08,0x04,0x04,0x08,0xF0,0x00,0x04,0xFC,0x04,0x00,0x00,0x00,
0x00,0x04,0xFC,0x44,0x44,0xE4,0x0C,0x00,0x04,0xFC,0x04,0x04,0x08,0xF0,0x00,0xA8,
0xAE,0x98,0xFF,0xAC,0x8A,0x10,0xFC,0x0B,0x88,0x78,0x08,0x00,0x88,0x86,0x92,0x92,
0x92,0x92,0xD3,0xB2,0x92,0x82,0x8A,0x86,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x82,0x82,0xF2,0x92,0x97,0x92,0xFA,0x92,0x97,0xF2,
0x82,0x82,0x00,0x04,0x04,0x04,0x1C,0x64,0x85,0x06,0xC4,0x3C,0x04,0x04,0x04,0x00,
0x00,0x80,0x3E,0x2A,0xEA,0x2A,0x2A,0xEA,0x2A,0x3F,0x82,0x00,0x00,0x00,0x10,0x12,
0xD2,0x12,0x12,0xF2,0x12,0x52,0x93,0x1A,0x10,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,
0x00,0x00,0x00,0x01,0xC2,0x04,0xC4,0x02,0x81,0x40,0x44,0x47,0x84,0x04,0x04,0x06,
0x00,0x04,0x07,0x04,0x04,0x84,0xC6,0x00,0x04,0x07,0x84,0x44,0x42,0x41,0x80,0x08,
0x88,0x45,0x42,0x42,0x85,0x08,0x04,0x03,0x82,0xC4,0x08,0x00,0xC0,0x40,0x40,0x40,
0x40,0x08,0x8F,0x40,0x40,0xC0,0x00,0x00,0xC0,0x40,0x41,0xC2,0x46,0x00,0x80,0x40,
0x40,0x40,0x80,0x00,0x80,0x40,0x48,0x48,0x88,0x04,0x82,0x41,0x40,0x41,0x82,0x04,
0x08,0x08,0x00,0x08,0x08,0x08,0x44,0xC4,0x02,0x01,0x02,0x04,0x04,0x08,0x08,0x00,
0x08,0x08,0x09,0x0A,0x0F,0x48,0xC8,0x0F,0x0A,0x09,0xCC,0x08,0x00,0x04,0x42,0xC1,
0x40,0x40,0x88,0x0F,0x80,0x40,0x40,0x41,0xC6,0x00,0x40,0xC6,0x46,0x40,0x80,0x00,
0x00,0x00,0x09,0x3D,0x0B,0x3D,0x0B,0x09,0x03,0x34,0x24,0x24,0x1F,0x00,0x00,0x00,
0x21,0x00,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x31,0x28,0x24,0x22,0x21,0x00,
0x10,0x20,0x22,0x22,0x1D,0x00,0x04,0x0B,0x08,0x3F,0x28,0x00,0x13,0x22,0x22,0x22,
0x1C,0x00,0x1F,0x22,0x22,0x22,0x1C,0x00,0x00,0x00,0x3E,0x01,0x00,0x00,0x1D,0x22,
0x22,0x22,0x1D,0x00,0x03,0x34,0x24,0x24,0x1F,0x00,0x1F,0x20,0x20,0x20,0x1F,0x00,
0x00,0x14,0x2A,0x2A,0x3C,0x20,0x00,0x3F,0x22,0x22,0x1C,0x00,0x00,0x1C,0x22,0x22,
0x26,0x00,0x00,0x1C,0x22,0x22,0x3F,0x20,0x20,0x3E,0x09,0x0F,0x38,0x20,0x20,0x3F,
0x22,0x22,0x1D,0x00,0x1F,0x20,0x20,0x20,0x10,0x00,0x20,0x3F,0x20,0x20,0x1F,0x00,
0x00,0x00,0x88,0xE8,0x9E,0xC8,0xBE,0x88,0x00,0x00,0x00,0x04,0xFE,0x00,0x00,0x00,
0x00,0xFC,0x02,0x02,0x02,0xFC,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00,
0x04,0xFE,0x00,0x00,0x00,0x00,0x0C,0x82,0x42,0x22,0x1C,0x00,0x00,0x04,0x02,0x12,
0x12,0xEC,0x00,0x40,0xB0,0x88,0x84,0xFE,0x00,0x00,0x00,0xBE,0x12,0x12,0x12,0xE2,
0x00,0x00,0xF8,0x24,0x12,0x12,0xE6,0x00,0x00,0x20,0x90,0x50,0x50,0xE0,0x00,0x02,
0xFE,0x10,0x10,0x10,0xE0,0x00,0x00,0xE0,0x10,0x10,0x10,0x30,0x00,0x00,0xE0,0x10,
0x10,0x12,0xFE,0x00,0x00,0x80,0x78,0x46,0x78,0x80,0x00,0x02,0xFE,0x12,0x12,0x12,
0xEC,0x00,0xF8,0x04,0x02,0x02,0x02,0x06,0x00,0x02,0xFE,0x02,0x02,0x04,0xF8,0x00,
0x40,0xC0,0x78,0x43,0xC0,0x7B,0x40,0x00,0x00,0x10,0x10,0xFA,0x03,0x02,0x00,0x00,
0x00,0x71,0x0A,0x0A,0x0A,0x89,0x70,0x00,0x00,0x03,0x03,0xC0,0xC0,0x00,0x00,0x00,
0x02,0x13,0x12,0xF8,0x00,0x00,0x03,0x02,0x02,0x72,0x0A,0x08,0x08,0x89,0x72,0x02,
0x02,0x31,0x08,0x88,0x88,0x48,0x32,0x03,0x02,0x00,0xC0,0x21,0x12,0xFA,0x02,0x01,
0x00,0xF8,0x09,0x8A,0x8A,0x0A,0x09,0x00,0x00,0xE1,0x12,0x8A,0x8A,0x1B,0x02,0x00,
0x03,0x02,0x82,0x82,0x81,0x80,0x00,0x01,0x0A,0xFA,0x02,0x81,0x80,0x00,0x01,0x02,
0x02,0x02,0x03,0x82,0x82,0x83,0x02,0x00,0x02,0x03,0xC2,0x3A,0xE3,0x02,0x02,0x02,
0x09,0xF8,0x88,0x89,0x8A,0x72,0x02,0x01,0xC0,0x32,0x0B,0x0A,0x0A,0x09,0x38,0x00,
0x04,0x3F,0x04,0x04,0x3F,0x04,0x04,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,
0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,
0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,
0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,
0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,
0x00,0x19,0x24,0x22,0x22,0x22,0x3F,0x20,0x00,0x3F,0x11,0x20,0x20,0x11,0x0E,0x00,
0x00,0x0E,0x11,0x20,0x20,0x20,0x11,0x00,0x20,0x3C,0x23,0x02,0x02,0x27,0x38,0x20,
0x20,0x3F,0x20,0x20,0x20,0x11,0x0E,0x00,0x07,0x18,0x20,0x20,0x20,0x10,0x08,0x00,
0x10,0x90,0xFE,0x10,0x10,0x90,0xFE,0x10,0x00,0x00,0x00,0x04,0x04,0xFE,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0xC0,0x30,0x08,0x04,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x60,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0xFE,0x00,0x00,0x00,0x00,
0x00,0x00,0x1C,0x02,0x02,0x02,0x02,0xC2,0x3C,0x00,0x00,0x00,0x1C,0x02,0x42,0x42,
0x62,0x9C,0x00,0x00,0x00,0x00,0x80,0x40,0x40,0x40,0x40,0x40,0x80,0x00,0x00,0x00,
0x02,0xFE,0x80,0x40,0x40,0x40,0x80,0x00,0x00,0x00,0x00,0x80,0x40,0x40,0x40,0x80,
0x00,0x00,0x00,0x00,0x00,0x80,0x78,0x06,0x78,0x80,0x00,0x00,0x00,0x00,0x02,0xFE,
0x42,0x42,0x42,0x62,0x9C,0x00,0x00,0x00,0xF0,0x08,0x04,0x02,0x02,0x02,0x04,0x0E,
0x04,0x3F,0x04,0x04,0x04,0x3F,0x04,0x04,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,
0x00,0x00,0x00,0x00,0x03,0x02,0x02,0x22,0x22,0x3F,0x22,0x22,0x00,0x00,0x00,0x00,
0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,
0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x20,0x38,0x00,0x00,0x00,0x1C,0x20,0x20,0x20,
0x20,0x10,0x0F,0x00,0x00,0x00,0x19,0x24,0x24,0x22,0x22,0x22,0x3F,0x20,0x30,0x00,
0x00,0x3F,0x10,0x20,0x20,0x20,0x10,0x0F,0x00,0x00,0x0F,0x10,0x20,0x20,0x20,0x11,
0x08,0x00,0x00,0x20,0x38,0x27,0x02,0x02,0x02,0x27,0x38,0x20,0x00,0x00,0x20,0x3F,
0x20,0x20,0x20,0x20,0x10,0x0F,0x00,0x00,0x07,0x18,0x20,0x20,0x20,0x20,0x10,0x0C,
};

void Delay1000ms()                //@12.000MHz
{
        unsigned char data i, j, k;

        _nop_();
        _nop_();
        i = 61;
        j = 225;
        k = 62;
        do
        {
                do
                {
                        while (--k);
                } while (--j);
        } while (--i);
}

//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
//Pin Definition
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

//sbit SCL3        = P3^2;                                // Serial Clock Input
//sbit SDA3        = P3^3;                                // Serial Data Input

//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

void delay_ms(Uint t)
{
        Uchar i,j;
        while(--t)
        {
        i=50;       
        j=100;

                while(--j)
                        while(--i);
        }
}
void uDelay(Uchar l)
{
        while(l--);
}


//void Delay(Uchar n)
//{
//Uchar i,j,k;
//
//        for(k=0;k<n;k++)
//        {
//                for(i=0;i<131;i++)
//                {
//                        for(j=0;j<15;j++)
//                        {
//                                uDelay(203);       
//                        }
//                }
//        }
//}

//这是例程里的代码是可以用的
//****************************************************************************
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
//Read/Write Sequence
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
//void I2C_3(Uchar mcmd)
//{
//Uchar length = 8;                        // Send Command
//
//        while(length--)
//        {
//                if(mcmd & 0x80)
//                {
//                        SDA3=1;
//                }
//                else
//                {
//                        SDA3=0;
//                }
////                uDelay(3);
//                SCL3=1;
////                uDelay(3);
//                SCL3=0;
////                uDelay(3);
//                mcmd = mcmd << 1;
//        }
//}
//
//
//void I2C_Ack3()
//{
//        SDA3=1;
////        uDelay(3);
//        SCL3=1;
////        uDelay(3);
//        SCL3=0;
////        uDelay(3);
//}
//
//
//void I2C_NAck3()
//{
//        SDA3=0;
////        uDelay(3);
//        SCL3=1;
////        uDelay(3);
//        SCL3=0;
////        uDelay(3);
//}
//
//
//void I2C_Start3()
//{
//        SDA3=0;
////        uDelay(3);
//        SCL3=1;
////        uDelay(3);
//        SCL3=0;
////        uDelay(3);
//        I2C_3(0x78);
//        I2C_Ack3();
//}
//
//
//void I2C_Stop3()
//{
//        SCL3=1;
////        uDelay(5);
//        SDA3=0;
////        uDelay(5);
//        SDA3=1;
////        uDelay(5);
//}
//
//
//void Write_Command3(Uchar Data)
//{
//        I2C_Start3();
//        I2C_3(0x00);
//        I2C_Ack3();
//        I2C_3(Data);
//        I2C_Ack3();
//        I2C_Stop3();
//}
//
//
//void Write_Data3(Uchar Data)
//{
//        I2C_Start3();
//        I2C_3(0x40);
//        I2C_Ack3();
//        I2C_3(Data);
//        I2C_Ack3();
//        I2C_Stop3();
//}
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

bit busy;


void Start()
{
    busy = 1;
    I2CMSCR = 0x81;                           //����START����
    while (busy);
}

void SendData(char dat)
{
    I2CTXD = dat;                               //д���ݵ����ݻ�����
    busy = 1;
    I2CMSCR = 0x82;                           //����SEND����
    while (busy);
}

void RecvACK()
{
    busy = 1;
    I2CMSCR = 0x83;                           //����ACK����
    while (busy);
}

char RecvData()
{
    busy = 1;
    I2CMSCR = 0x84;                           //����RECV����
    while (busy);
    return I2CRXD;
}

void SendACK()
{
    I2CMSST = 0x00;                           //����ACK�ź�
    busy = 1;
    I2CMSCR = 0x85;                           //����ACK����
    while (busy);
}

void SendNAK()
{
    I2CMSST = 0x01;                           //����NAK�ź�
    busy = 1;
    I2CMSCR = 0x85;                           //����ACK����
    while (busy);
}

void Stop()
{
    busy = 1;
    I2CMSCR = 0x86;                           //����STOP����
    while (busy);
}

void Delay()
{
    int i;
    for (i=0; i<3000; i++)
    {
      _nop_();
      _nop_();
      _nop_();
      _nop_();
    }
}

void Write_Command3(Uchar Data)   //дָ��
{
        Start();
        SendData(0x00);
        RecvACK();
        SendData(Data);
        RecvACK();
        Stop();
}

void Write_Data3(u8 addr, u8 *p, u8 number)/*WordAddress,First Data Address,Byte lenth   */
{
        EAXSFR();                /* MOVX A,@DPTR/MOVX @DPTR,A???????????????SFR(XSFR) */
        Start();                              //???????????
        SendData(0x00);                         //?????��???+��????
        RecvACK();
        SendData(addr);                         //????��???
        RecvACK();
        do
        {
                SendData(*p++);
                RecvACK();
        }
        while(--number);
        Stop();                                 //??????????
        EAXRAM();                /* MOVX A,@DPTR/MOVX @DPTR,A???????????????RAM(XRAM) */
}

void LCD_Init3(void)
{

    Write_Command3(0xae);        //--turn off oled panel

    Write_Command3(0x00);        //--set low column address
    Write_Command3(0x10);        //--set high column address

    Write_Command3(0x40);        //--set start line address

    Write_Command3(0xb0);        //--set page address

    Write_Command3(0x81);        //--set contrast control register
    Write_Command3(0xff);

    Write_Command3(0xa1);        //--set segment re-map 127 to 0   a0:0 to seg127
    Write_Command3(0xa6);        //--set normal display

    Write_Command3(0xc9);        //--set com(N-1)to com0c0:com0 to com(N-1)

    Write_Command3(0xa8);        //--set multiples ratio(1to64)
    Write_Command3(0x3f);        //--1/64 duty

    Write_Command3(0xd3);        //--set display offset
    Write_Command3(0x00);        //--not offset

    Write_Command3(0xd5);        //--set display clock divide ratio/oscillator frequency
    Write_Command3(0x80);        //--set divide ratio

    Write_Command3(0xd9);        //--set pre-charge period
    Write_Command3(0xf1);

    Write_Command3(0xda);        //--set com pins hardware configuration
    Write_Command3(0x12);

    Write_Command3(0xdb);        //--set vcomh
    Write_Command3(0x40);

    Write_Command3(0x8d);        //--set chare pump enable/disable
    Write_Command3(0x14);        //--set(0x10) disable
    //Write_Command3(0x10);        //--set(0x10) disable
    Write_Command3(0xaf);        //--turn on oled panel
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=void         LCD_Init(void)
}


//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
void pic13(void)
{
        Uchar i,j;
        Uint k;
        k=0;
        for(j=0;j<8;j++)
        {
                Write_Command3(0x22);//--set page1
                Write_Command3(j);//--set start page
                Write_Command3(0x07);//--set end page

                for(i=0;i<128;i++)                                                  //???????????LCD
                {
                        Write_Data3(0,&color13,8);
                        k=k+1;
               
                }
        }
}
//
//
//void pic14(void)
//{
//        Uchar i,j;
//        Uint k;
//        k=0;
//        for(j=0;j<8;j++)
//        {
//                Write_Command3(0x22);//--set page1
//                Write_Command3(j);//--set start page
//                Write_Command3(0x07);//--set end page
//
//                 for(i=0;i<128;i++)                                                  //???????????LCD
//                {
//                        Write_Data3(color14);
//                        k=k+1;
//               
//                }
//        }
//}
               

void main (void)
{   
    GPIO_Init();
    Uart_Init();
    IIC_Init();
//    ADC_Init();
    LCD_Init3();

    led = 0;
    Delay1000ms();
    led = 1;
    Delay1000ms();
    led = 0;
    EA = 1;

//      TI = 1;
//      printf("��ʼ�����\n");
//      TI = 0;

    pic13();
      
    while (1)
    {
      /* code */
    }
   
       
}
       
void GPIO_Init (void)
{
    //����IO����ģʽ
    P0M0 = 0x00; P0M1 = 0x00;
    P1M0 = 0x14; P1M1 = 0x08;
    P2M0 = 0x00; P2M1 = 0x00;
    P3M0 = 0x10; P3M1 = 0x80;
    P4M0 = 0x00; P4M1 = 0x00;
    P5M0 = 0x00; P5M1 = 0x00;
    P6M0 = 0x00; P6M1 = 0x00;
    P7M0 = 0x00; P7M1 = 0x00;

    P1PU = 0xe0;
    P1NCS = 0x00;
    P1IE = 0xff;

    P_SW2 |= 0x80;                              //ʹ�ܷ���XFR
    P_SW2 |= 0x30;                               //�л�����SCL_4/P3.2, SDA_4/P3.3

}

void Uart_Init(void)                //115200bps@22.1184MHz
{
        SCON = 0x50;                //8λ����,�ɱ䲨����
        AUXR |= 0x40;                //��ʱ��ʱ��1Tģʽ
        AUXR &= 0xFE;                //����1ѡ��ʱ��1Ϊ�����ʷ�����
        TMOD &= 0x0F;                //���ö�ʱ��ģʽ
        TL1 = 0xD0;                        //���ö�ʱ��ʼֵ
        TH1 = 0xFF;                        //���ö�ʱ��ʼֵ
        ET1 = 0;                        //��ֹ��ʱ���ж�
    ES = 1;             //ʹ�ܴ����ж�
        TR1 = 1;                        //��ʱ��1��ʼ��ʱ
}

void IIC_Init(void)
{
    P_SW2 |= 0x80;                              //ʹ�ܷ���XFR
    I2CCFG |= 0x80;                           //����I2C����
    I2CCFG |= 0x40;                           //ʹ��I2C����ģʽ
    I2CCFG |= 0x3f;                           //���������ٶ�
    I2CMSCR = 0x80;                           //ʹ��I2C�ж�;
    I2CMSAUX = 0x00;                            //�����Զ�����

}

void ADC_Init(void)
{
    ADCTIM = 0x3f;                              //����ADC�ڲ�ʱ��
    P_SW2 &= 0x7f;
    ADCCFG = 0x00;
    ADC_CONTR = 0xc0;                           //ʹ�ܲ�����ADCģ��
    EADC = 1;                                 //ʹ��ADC�ж�
//    EA = 1;

}


//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

void UART1_Isr() interrupt 4
{
//   if (TI)
//{
//      TI = 0;                                 //���жϱ�־
//                                 //���ӷ��ʹ���
//
//}
    if (RI)
    {
      RI = 0;                                 //���жϱ�־
      

    }
}

void I2C_Isr() interrupt 24
{
    _push_(P_SW2);
    P_SW2 |= 0x80;
    if (I2CMSST & 0x40)
    {
      I2CMSST &= ~0x40;                     //���жϱ�־
      led = !led;                           //���Զ˿�
      busy = 0;
    }
    _pop_(P_SW2);
}

void ADC_Isr() interrupt 5
{
    ADC_CONTR &= ~0x20;                         //���жϱ�־
    P0 = ADC_RES;                               //���Զ˿�
    P2 = ADC_RESL;                              //���Զ˿�
}


MCU:STC8H1K08

liuyuhe 发表于 2023-5-25 10:36:26

本帖最后由 liuyuhe 于 2023-5-25 10:38 编辑

MCU:STC8H1K08
屏幕:ssd1315
屏幕例程给的是软件模拟I2C,我想改成用硬件中断做的,好久没搞了不知道这个有啥问题,逻辑分析仪抓到的只有一个起始信号,仿真的时候recvack() 被跳过了没有执行

神农鼎 发表于 2023-5-25 10:36:34

老刘爱捣鼓示波器,OLED12864的程序看过吗 ?
在开天斧程序包中下载







页: [1]
查看完整版本: stc8H驱动ssd1315OLED屏怎么做啊,大佬们帮我看看