目录
1.oledfont.h
2.gpio_spi.h
3.gpio_spi.c
4.oled.h
5.oled.c
1.oledfont.h
#ifndef __OLEDFONT_H
#define __OLEDFONT_H
const unsigned char oled_asc2_8x16[95][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},/
static void SPI_GPIO_Init(void)
{
GPFCON &= ~(3<<(1*2));
GPFCON |= (1<<(1*2));
GPFDAT |= (1<<1);
GPGCON &= ~((3<<(2*2)) | (3<<(4*2)) | (3<<(5*2)) | (3<<(6*2)) | (3<<(7*2)));
GPGCON |= ((1<<(2*2)) | (1<<(4*2)) | (1<<(6*2)) | (1<<(7*2)));
GPGDAT |= (1<<2);
}
static void SPI_Set_CLK(char val)
{
if (val)
GPGDAT |= (1<<7);
else
GPGDAT &= ~(1<<7);
}
static void SPI_Set_DO(char val)
{
if (val)
GPGDAT |= (1<<6);
else
GPGDAT &= ~(1<<6);
}
void SPISendByte(unsigned char val)
{
int i;
for (i = 0; i < 8; i++)
{
SPI_Set_CLK(0);
SPI_Set_DO(val & 0x80);
SPI_Set_CLK(1);
val <<= 1;
}
}
void SPIInit(void)
{
SPI_GPIO_Init();
}
4.oled.h
#ifndef _OLED_H
#define _OLED_H
void OLEDInit(void);
void OLEDPrint(int page, int col, char *str);
void OLEDPutChar(int page, int col, char c);
#endif
5.oled.c
#include "oledfont.h"
#include "gpio_spi.h"
#include "s3c24xx.h"
static void OLED_Set_DC(char val)
{
if (val)
GPGDAT |= (1<<4);
else
GPGDAT &= ~(1<<4);
}
static void OLED_Set_CS(char val)
{
if (val)
GPFDAT |= (1<<1);
else
GPFDAT &= ~(1<<1);
}
static void OLEDWriteCmd(unsigned char cmd)
{
OLED_Set_DC(0);
OLED_Set_CS(0);
SPISendByte(cmd);
OLED_Set_CS(1);
OLED_Set_DC(1);
}
static void OLEDWriteDat(unsigned char dat)
{
OLED_Set_DC(1);
OLED_Set_CS(0);
SPISendByte(dat);
OLED_Set_CS(1);
OLED_Set_DC(1);
}
static void OLEDSetPageAddrMode(void)
{
OLEDWriteCmd(0x20);
OLEDWriteCmd(0x02);
}
static void OLEDSetPos(int page, int col)
{
OLEDWriteCmd(0xB0 + page);
OLEDWriteCmd(col & 0xf);
OLEDWriteCmd(0x10 + (col >> 4));
}
static void OLEDClear(void)
{
int page, i;
for (page = 0; page < 8; page ++)
{
OLEDSetPos(page, 0);
for (i = 0; i < 128; i++)
OLEDWriteDat(0);
}
}
void OLEDInit(void)
{
OLEDWriteCmd(0xAE);
OLEDWriteCmd(0x00);
OLEDWriteCmd(0x10);
OLEDWriteCmd(0x40);
OLEDWriteCmd(0xB0);
OLEDWriteCmd(0x81);
OLEDWriteCmd(0x66);
OLEDWriteCmd(0xA1);
OLEDWriteCmd(0xA6);
OLEDWriteCmd(0xA8);
OLEDWriteCmd(0x3F);
OLEDWriteCmd(0xC8);
OLEDWriteCmd(0xD3);
OLEDWriteCmd(0x00);
OLEDWriteCmd(0xD5);
OLEDWriteCmd(0x80);
OLEDWriteCmd(0xD9);
OLEDWriteCmd(0x1f);
OLEDWriteCmd(0xDA);
OLEDWriteCmd(0x12);
OLEDWriteCmd(0xdb);
OLEDWriteCmd(0x30);
OLEDWriteCmd(0x8d);
OLEDWriteCmd(0x14);
OLEDSetPageAddrMode();
OLEDClear();
OLEDWriteCmd(0xAF);
}
void OLEDPutChar(int page, int col, char c)
{
int i = 0;
const unsigned char *dots = oled_asc2_8x16[c - ' '];
OLEDSetPos(page, col);
for (i = 0; i < 8; i++)
OLEDWriteDat(dots[i]);
OLEDSetPos(page+1, col);
for (i = 0; i < 8; i++)
OLEDWriteDat(dots[i+8]);
}
void OLEDPrint(int page, int col, char *str)
{
int i = 0;
while (str[i])
{
OLEDPutChar(page, col, str[i]);
col += 8;
if (col > 127)
{
col = 0;
page += 2;
}
i++;
}
}
#ifndef _OLED_H #define _OLED_H void OLEDInit(void); void OLEDPrint(int page, int col, char *str); void OLEDPutChar(int page, int col, char c); #endif



