当前位置:文档之家› 12864的OLED简单显示程序=

12864的OLED简单显示程序=

oled12864_wr_cmd(0xd9);//--set pre-charge period
oled12864_wr_cmd(0xf1);//Set Pre-Charge as 15 Clocks & Discharge as 1 Clock
oled12864_wr_cmd(0xda);//--set com pins hardware configuration
}
}
OLED12864_CS = 1;
}
/*********************LCD复位************************************/
void oled12864_cls(void)
{
unsigned char y,x;
OLED12864_CS = 0;//使能片选
static u8 pre_x,pre_y;
tmp2 = (y%8);
tmp2 = 1 << tmp2;
y >>= 3;
if(white_black)
{
tmp1 = oled_buf[y][x];//取得当前值
tmp1 |= tmp2;
}
else
{
tmp1 = oled_buf[y][x];
tmp1 &= (!tmp2);
oled12864_wr_cmd(0xa6);//--set normal display
oled12864_wr_cmd(0xa8);//--set multiplex ratio(1 to 64)
oled12864_wr_cmd(0x3f);//--1/64 duty
oled12864_wr_cmd(0xd3);//-set display offsetShift Mapping RAM Counter (0x00~0x3F)
}
oled_buf[y][x] = tmp1;
}
//放一个8×6字符串
//注意column是0~128,row是0~7
void oled12864_put_86char(char column6, char row ,char *ch)
{
char ncount = 0;
char c;
char max_ncount = (X_WIDTH - column6) / 6;
for(y=0;y<8;y++)
{
oled12864_wr_cmd(0xb0+y);
oled12864_wr_cmd(0x01);
oled12864_wr_cmd(0x10);
for(x=0;x<X_WIDTH;x++)
oled12864_wr_cmd(0);
}
OLED12864_CS = 1;
}
/*********************LCD初始化************************************/
{
u16Tmp = oled_buf[y][x];
//oled12864_delay(10000);
//while( SPI1->SR & 0x0080 );//等待BSY变成0
for(nCount=0;nCount<9;nCount++);
SPI1->DR = u16Tmp;
//oled12864_wr_data( oled_buf[y][x] );
OLED12864程序.哥瞎写的
/*___________________________OLED12864.c_____*/
#include "stm32f4xx.h"
#include "oled12864.h"
#include "codetab.h"
#define DEFAULT_PRT_START_ROW 2//默认显示字符串的起始行数
{
n_count--;
}
}
/*********************LCD全屏************************************/
void oled12864_fill_full(unsigned char bmp_dat)
{
unsigned char y,x;
OLED12864_CS = 0;//使能片选
column6++;
oled_buf[row][column6] = F6x8[c][2];
column6++;
oled_buf[row][column6] = F6x8[c][3];
column6++;
oled_buf[row][column6] = F6x8[c][4];
column6++;
oled_buf[row][column6] = F6x8[c][5];
default_prt_nowrow = DEFAULT_PRT_START_ROW;
OLED12864_CS = 1;
}
//无x,y值审查
//white为1,black为0
void oled12864_draw_point(u8 x, u8 y, u8 white_black)
{
u8 tmp1,tmp2;
oled12864_wr_cmd(0xa6);// Disable Inverse Display On (0xa6/a7)
oled12864_wr_cmd(0xaf);//--turn on oled panel
oled12864_fill_full(0x02); //初始清屏
oled12864_set_pos(0,0);
oled12864_wr_cmd(0x3f);//--set start line address Set Mapping RAM Display Start Line (0x00~0x3F)
oled12864_wr_cmd(0x81);//--set contrast control register
#define OLED12864_DC_CMD OLED12864_DC_L
#define OLED12864_RST PAout(3)
#define OLED12864_CS PAout(4)
#define OLED12864_CS_H GPIOA->BSRRL = 1<<4
#define OLED12864_CS_L GPIOA->BSRRH = 1<<4
#define OLED12864_DC PAout(8)
#define OLED12864_DC_H GPIOA->BSRRL = 1<<8
#define OLED12864_DC_L GPIOA->BSRRH = 1<<8
#define OLED12864_DC_DATA OLED12864_DC_H
for(y=0;y<8;y++)
{
oled12864_wr_cmd(0xb0+y);
oled12864_wr_cmd(0x01);
oled12864_wr_cmd(0x10);
for(x=0;x<X_WIDTH;x++)
{
//oled12864_delay(10000);
oled12864_wr_data(bmp_dat);
#define DEFAULT_PRT_END_ROW 7 //默认显示字符串的中止行数
u8 default_prt_nowrow;
u8 oled_buf[8][128];
/*********延时函数**********/
void oled12864_delay(int n_count)
{
while(n_count)
oled12864_wr_cmd(0xcf); // Set SEG Output Current Brightness
oled12864_wr_cmd(0xa0);//--Set SEG/Column Mapping 0xa0左右反置0xa1正常
oled12864_wr_cmd(0xc0);//Set COM/Row Scan Direction 0xc0上下反置0xc8正常
#define OLED_SPI //用手动SPI方式
#define OLED_HIGH 1
#define OLED_LOW 0
#define OLED_DC_C 0
#define OLED_DC_D 1
#define XLevelL0x00
#define XLevelH0x10
#define XLevel((XLevelH&0x0F)*16+XLevelL)
default_prt_nowrow = DEFAULT_PRT_START_ROW;
oled12864_put_86char(0,default_prt_nowrow,"--------------------");
}
//oled内容按oled_buf[]刷新
void oled12864_refresh(void)
oled12864_wr_cmd(0x00);//-not offset
oled12864_wr_cmd(0xd5);//--set display clock divide ratio/oscillator frequency
oled12864_wr_cmd(0x80);//--set divide ratio, Set Clock as 100 Frames/Sec
相关主题