最近在网上购得一块 oled 128*32点阵 蓝绿色 ,店家也给了接口定义和测试程序。可我试了不行,郁闷中……
介绍如下:
品牌铼宝,128*32点阵,蓝绿色,控制器:SSD1303,工作电压3.3伏,需外接最大16伏的驱动电压。
外形尺寸37*16(不包含排线的尺寸)。引脚间距0.85mm。
引脚定义(正面右边为1脚):
1.NC
2.VSS
3.GDR
4.VDDB
5.FB
6.RESE
7.VBREF
8.NC
9.NC
10.NC
11.VDD1 接4.7uF电容到GND
12.BS1
13.BS2
14.NC
15.CS#
16.RES#
17.D/C
18.R/W
19.E/RD
20.D0
21.D1
22.D2
23.D3
24.D4
25.D5
26.D6
27.D7
28.IREF 接910K电阻到GND
29.VCDMH 接4.7uF电容到GND
30.VCC 7-16伏(建议16伏),接4.7uF电容到GND
31.NC
(原文件名:13.jpg)
(原文件名:23.jpg)
测试程序
#include "reg52.h"
#include <stdio.h>
#include <intrins.h>
#define SSD_DATA P2
sbit SSD_CS=P3^3;
sbit SSD_RES=P3^4;
sbit SSD_DC=P3^5;
sbit SSD_WR=P3^6;
sbit SSD_RD=P3^7;
// 纵向取模下高位,数据排列:从左到右从上到下 //
unsigned char code nBitmapDot[] = // 数据表
{
0x00,0x00,0x00,0x00,0x18,0x78,0xF0,0xC0,
0x40,0xC0,0x40,0xC0,0xC0,0x4C,0xFC,0x78,
0x40,0x40,0x40,0x60,0x70,0x40,0x00,0x00,
0x00,0x00,0x00,0x00,0xFC,0xF8,0x98,0x98,
0x98,0x98,0x98,0x98,0x98,0xFC,0xF8,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,
0xFC,0x08,0xA0,0x60,0x60,0x64,0xFC,0xF8,
0x60,0xFE,0xFC,0x68,0x60,0x70,0x60,0x40,
0x00,0x00,0x00,0x00,0xFC,0xF8,0x08,0x00,
0x00,0x00,0x00,0xFC,0xFC,0x08,0x00,0x00,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x40,0x40,0x40,0x40,0x40,0x40,0xFC,0xFC,
0x48,0x40,0x40,0x60,0x70,0x60,0x40,0x00,
0x00,0x00,0x00,0x00,0x00,0xFC,0xF8,0x18,
0x00,0x10,0x30,0x10,0x10,0x10,0xD0,0xF0,
0xF8,0x38,0x10,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x0C,0x3C,0xF8,0xF0,0x81,0xF9,
0x86,0xE0,0xF8,0x6F,0xC3,0xF9,0x7F,0xFF,
0xD9,0x98,0xFC,0x38,0x10,0x00,0x00,0x00,
0x00,0xC0,0x80,0x80,0xFF,0xBF,0x99,0xD9,
0x19,0x19,0xD9,0x99,0x99,0xBF,0x9F,0x80,
0xC0,0x80,0x00,0x00,0x03,0x03,0xF3,0xFF,
0xFF,0xE3,0xE3,0xC3,0xFE,0xFF,0x27,0x27,
0x26,0x27,0x27,0xFE,0xFE,0x04,0x00,0x00,
0x08,0x08,0x08,0x08,0xFF,0xFF,0x08,0x0E,
0x0F,0x03,0x03,0xFF,0xFF,0x03,0x03,0xFF,
0xFF,0xFF,0x80,0x00,0x00,0x00,0x06,0x06,
0x86,0x06,0x1E,0x7E,0xF6,0xE6,0x07,0xC7,
0xFE,0x7E,0x06,0x06,0x26,0x1E,0x0F,0x0E,
0x08,0x00,0x0C,0x0C,0x0C,0xFF,0xFF,0x0C,
0x0E,0x3E,0x78,0x3C,0xFE,0xE7,0x63,0xA1,
0xE0,0x60,0xA0,0xF0,0xF0,0x00,0x00,0x00,
0x00,0x00,0x10,0x30,0xF0,0xFE,0xFF,0x0F,
0x03,0x01,0xFF,0x0E,0x03,0x03,0x9E,0xFC,
0xF3,0x9F,0x07,0x00,0x00,0x00,0x00,0x00,
0x00,0xFF,0xFF,0x31,0x31,0x31,0xFF,0xFF,
0x01,0x00,0xFF,0xFF,0x31,0x31,0x31,0xFF,
0xFF,0x01,0x00,0x00,0x30,0x0E,0x03,0xFF,
0xFF,0x10,0x33,0x31,0x37,0x37,0xF3,0xFF,
0x7F,0xF3,0xB3,0x37,0x37,0x38,0x30,0x20,
0x40,0xE0,0xE0,0x60,0x3F,0x3F,0x33,0x33,
0x9B,0xC3,0x7B,0x3F,0x07,0x3F,0xFB,0xC3,
0x03,0x03,0x03,0x03,0x00,0x30,0x10,0x10,
0x11,0x17,0x1F,0x12,0x10,0x90,0xF0,0x7F,
0xDF,0x90,0x90,0x90,0x90,0x10,0x1C,0x18,
0x10,0x00,0xC0,0xE0,0x70,0x7F,0x3F,0x98,
0xCC,0xFE,0x7E,0x1E,0x8F,0xE3,0x78,0x3F,
0x0F,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x0F,0x0F,0x0F,0x00,
0x00,0x18,0x1F,0x10,0x0C,0x0E,0x07,0x03,
0x00,0x03,0x0F,0x0F,0x0E,0x04,0x00,0x00,
0x00,0x1F,0x0F,0x02,0x02,0x02,0x0F,0x0F,
0x00,0x00,0x1F,0x0F,0x02,0x02,0x02,0x0F,
0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,
0x1F,0x10,0x18,0x0C,0x0E,0x07,0x07,0x01,
0x00,0x01,0x07,0x0F,0x0F,0x1E,0x0C,0x00,
0x00,0x01,0x00,0x00,0x18,0x0C,0x04,0x07,
0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x03,
0x07,0x0E,0x1E,0x04,0x00,0x18,0x18,0x08,
0x08,0x0C,0x04,0x06,0x03,0x03,0x01,0x00,
0x00,0x00,0x01,0x03,0x03,0x07,0x1E,0x08,
0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,
0x18,0x0C,0x06,0x07,0x03,0x00,0x02,0x06,
0x1E,0x0E,0x0F,0x07,0x00,0x00,0x00,0x00
};
//SSD1303 8080 parallel interface
#include "main.h"
#include "intrins.h"
void Delay_us(unsigned char times)
{
unsigned char i,j;
for(i=0;i<times;i++){
for(j=0;j<24;j++)
_nop_();
}
}
void Ssd_Command(unsigned char command){
SSD_DC=0;
_nop_();
SSD_CS=0;
_nop_();
SSD_RD=1;
SSD_WR=0;
_nop_();
SSD_DATA=command;
Delay_us(1);
SSD_WR=1;
_nop_();
SSD_CS=1;
}
void Ssd_Data(unsigned char dat){
SSD_DC=1;
_nop_();
SSD_CS=0;
_nop_();
SSD_RD=1;
SSD_WR=0;
_nop_();
P2=dat;
_nop_();
SSD_WR=1;
_nop_();
SSD_CS=1;
}
void Ssd_Init(void){
SSD_RES=0;
Delay_us(30);
SSD_RES=1;
Delay_us(20);
Ssd_Command(0xae); //display off显示关
Ssd_Command(0x40); //display start line 00000显示开始行00000
Ssd_Command(0x81); //contrast对比度
Ssd_Command(0x80);
Ssd_Command(0x82); //brightness亮度
Ssd_Command(0x80);
Ssd_Command(0xa0); //no remap不重画
Ssd_Command(0xa4); //intire display off全部显示关
Ssd_Command(0xa6); //normal display正常显示
Ssd_Command(0xa8); //39 mux
Ssd_Command(31);
Ssd_Command(0xad); //DCDC off
Ssd_Command(0x8a);
Ssd_Command(0xc8); //scan from COM[N-1] to COM0从COM[N-1] 至 COM0扫描
Ssd_Command(0xd3); //row 0->com 62
Ssd_Command(32);
Ssd_Command(0xd5); //
Ssd_Command(0x03); //
Ssd_Command(0xd8); //mono mode,normal power mode mono模式,正常电源模式
Ssd_Command(0x00); //?
Ssd_Command(0xda); //alternative COM pin configuration另一个com引脚配置
Ssd_Command(0x12);
Ssd_Command(0xaf); //display on显示开
}
void main(void){
unsigned char i,j1;
unsigned int k;
Ssd_Init();
for(i=0;i<4;i++)
{
Ssd_Command(0xB0+i);//设置显示位置—行
Ssd_Command(0x00); //设置显示位置—列低地址
Ssd_Command(0x10); //设置显示位置—列高地址
for(j1=0;j1<128;j1++)
Ssd_Data(nBitmapDot[128*i+j1]);
}
while(1);
} |