12864的OLED简单显示程序.docx

上传人:b****8 文档编号:10755645 上传时间:2023-02-22 格式:DOCX 页数:26 大小:20KB
下载 相关 举报
12864的OLED简单显示程序.docx_第1页
第1页 / 共26页
12864的OLED简单显示程序.docx_第2页
第2页 / 共26页
12864的OLED简单显示程序.docx_第3页
第3页 / 共26页
12864的OLED简单显示程序.docx_第4页
第4页 / 共26页
12864的OLED简单显示程序.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

12864的OLED简单显示程序.docx

《12864的OLED简单显示程序.docx》由会员分享,可在线阅读,更多相关《12864的OLED简单显示程序.docx(26页珍藏版)》请在冰豆网上搜索。

12864的OLED简单显示程序.docx

12864的OLED简单显示程序

OLED12864程序.哥瞎写的

 

/*___________________________OLED12864.c_____*/

#include"stm32f4xx.h"

#include"oled12864.h"

#include"codetab.h"

#defineDEFAULT_PRT_START_ROW2//默认显示字符串的起始行数

#defineDEFAULT_PRT_END_ROW7//默认显示字符串的中止行数

u8default_prt_nowrow;

 

u8oled_buf[8][128];

/*********延时函数**********/

voidoled12864_delay(intn_count)

{

while(n_count)

{

n_count--;

}

}

/*********************LCD全屏************************************/

voidoled12864_fill_full(unsignedcharbmp_dat)

{

unsignedchary,x;

OLED12864_CS=0;//使能片选

for(y=0;y<8;y++)

{

oled12864_wr_cmd(0xb0+y);

oled12864_wr_cmd(0x01);

oled12864_wr_cmd(0x10);

for(x=0;x

{

//oled12864_delay(10000);

oled12864_wr_data(bmp_dat);

}

}

OLED12864_CS=1;

}

/*********************LCD复位************************************/

voidoled12864_cls(void)

{

unsignedchary,x;

OLED12864_CS=0;//使能片选

for(y=0;y<8;y++)

{

oled12864_wr_cmd(0xb0+y);

oled12864_wr_cmd(0x01);

oled12864_wr_cmd(0x10);

for(x=0;x

oled12864_wr_cmd(0);

}

OLED12864_CS=1;

}

/*********************LCD初始化************************************/

voidoled12864_init(void)

{

//manual_spi_init();

OLED12864_CS=0;//使能片选

//MAN_SPI_SCL=1;

//MAN_SPI_SDA=1;

OLED12864_DC=1;

OLED12864_RST=0;

oled12864_delay(400000);

OLED12864_RST=1;//从上电到下面开始初始化要有足够的时间,即等待RC复位完毕

oled12864_wr_cmd(0xae);//--turnoffoledpanel

oled12864_wr_cmd(0x00);//---setlowcolumnaddress

oled12864_wr_cmd(0x10);//---sethighcolumnaddress

oled12864_wr_cmd(0x3f);//--setstartlineaddressSetMappingRAMDisplayStartLine(0x00~0x3F)

oled12864_wr_cmd(0x81);//--setcontrastcontrolregister

oled12864_wr_cmd(0xcf);//SetSEGOutputCurrentBrightness

oled12864_wr_cmd(0xa0);//--SetSEG/ColumnMapping0xa0左右反置0xa1正常

oled12864_wr_cmd(0xc0);//SetCOM/RowScanDirection0xc0上下反置0xc8正常

oled12864_wr_cmd(0xa6);//--setnormaldisplay

oled12864_wr_cmd(0xa8);//--setmultiplexratio(1to64)

oled12864_wr_cmd(0x3f);//--1/64duty

oled12864_wr_cmd(0xd3);//-setdisplayoffsetShiftMappingRAMCounter(0x00~0x3F)

oled12864_wr_cmd(0x00);//-notoffset

oled12864_wr_cmd(0xd5);//--setdisplayclockdivideratio/oscillatorfrequency

oled12864_wr_cmd(0x80);//--setdivideratio,SetClockas100Frames/Sec

oled12864_wr_cmd(0xd9);//--setpre-chargeperiod

oled12864_wr_cmd(0xf1);//SetPre-Chargeas15Clocks&Dischargeas1Clock

oled12864_wr_cmd(0xda);//--setcompinshardwareconfiguration

oled12864_wr_cmd(0x12);

oled12864_wr_cmd(0xdb);//--setvcomh

oled12864_wr_cmd(0x40);//SetVCOMDeselectLevel

oled12864_wr_cmd(0x20);//-SetPageAddressingMode(0x00/0x01/0x02)

oled12864_wr_cmd(0x02);//

oled12864_wr_cmd(0x8d);//--setChargePumpenable/disable

oled12864_wr_cmd(0x14);//--set(0x10)disable

oled12864_wr_cmd(0xa4);//DisableEntireDisplayOn(0xa4/0xa5)

oled12864_wr_cmd(0xa6);//DisableInverseDisplayOn(0xa6/a7)

oled12864_wr_cmd(0xaf);//--turnonoledpanel

oled12864_fill_full(0x02);//初始清屏

oled12864_set_pos(0,0);

default_prt_nowrow=DEFAULT_PRT_START_ROW;

OLED12864_CS=1;

}

//无x,y值审查

//white为1,black为0

voidoled12864_draw_point(u8x,u8y,u8white_black)

{

u8tmp1,tmp2;

staticu8pre_x,pre_y;

tmp2=(y%8);

tmp2=1<

y>>=3;

if(white_black)

{

tmp1=oled_buf[y][x];//取得当前值

tmp1|=tmp2;

}

else

{

tmp1=oled_buf[y][x];

tmp1&=(!

tmp2);

}

oled_buf[y][x]=tmp1;

}

//放一个8×6字符串

//注意column是0~128,row是0~7

voidoled12864_put_86char(charcolumn6,charrow,char*ch)

{

charncount=0;

charc;

charmax_ncount=(X_WIDTH-column6)/6;

while(ch[ncount]!

=0&&ncount<=max_ncount)

{

c=ch[ncount++];

c-=32;

oled_buf[row][column6]=F6x8[c][0];

column6++;

oled_buf[row][column6]=F6x8[c][1];

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];

column6++;

}

}

//按照默认方式显示一行数据,并清空下一行

voidoled12864_printf(char*ch)

{

oled12864_put_86char(0,default_prt_nowrow,ch);

default_prt_nowrow++;

if(default_prt_nowrow>DEFAULT_PRT_END_ROW)

default_prt_nowrow=DEFAULT_PRT_START_ROW;

oled12864_put_86char(0,default_prt_nowrow,"--------------------");

}

//oled内容按oled_buf[]刷新

voidoled12864_refresh(void)

{

unsignedchary,x;

u16u16Tmp;

intnCount;

OLED12864_CS=0;//使能片选

for(y=0;y<8;y++)

{

oled12864_set_pos(0,y);

OLED12864_DC_DATA;

OLED12864_CS=0;//使能片选

for(x=0;x

{

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_CS=1;

}

 

/*___________________________OLED12864.h_____*/

#ifndef__OLED12864_H__

#define__OLED12864_H__

#include"stm32f4_bitband.h"

#include"manual_SPI.h"

#defineOLED12864_DCPAout(8)

#defineOLED12864_DC_HGPIOA->BSRRL=1<<8

#defineOLED12864_DC_LGPIOA->BSRRH=1<<8

#defineOLED12864_DC_DATAOLED12864_DC_H

#defineOLED12864_DC_CMDOLED12864_DC_L

#defineOLED12864_RSTPAout(3)

#defineOLED12864_CSPAout(4)

#defineOLED12864_CS_HGPIOA->BSRRL=1<<4

#defineOLED12864_CS_LGPIOA->BSRRH=1<<4

#defineOLED_SPI//用手动SPI方式

#defineOLED_HIGH1

#defineOLED_LOW0

#defineOLED_DC_C0

#defineOLED_DC_D1

#defineXLevelL0x00

#defineXLevelH0x10

#defineXLevel((XLevelH&0x0F)*16+XLevelL)

#defineMax_Column128

#defineMax_Row64

#defineBrightness0xCF

#defineX_WIDTH128

#defineY_WIDTH64

#defineOLED_BLACK_POINT0

#defineOLED_WHITE_POINT1

#defineOLED_COLUMN6(x)(x*6)

/*********延时函数**********/

voidoled12864_delay(intn_count);

/*********oled写数据********/

//注意,没有片选,需要在调用函数中片选

#ifdefOLED_8080

#defineOLED12864_WRPAout(6)

#defineOLED12864_WR_HGPIOA->BSRRL=1<<6

#defineOLED12864_WR_LGPIOA->BSRRH=1<<6

#defineOLED12864_RDPAout(7)

#defineOLED12864_RD_HGPIOA->BSRRL=1<<7

#defineOLED12864_RD_LGPIOA->BSRRH=1<<7

#defineOLED12864_8080_DATAGPIOB->ODR

void__inlineoled12864_wr_data(u8data)

{

OLED12864_8080_DATA=data;

OLED12864_DC_H;//写数据信号

//OLED12864_CS=0;

OLED12864_WR_L;//写信号

OLED12864_WR_H;

//OLED12864_CS=1;

OLED12864_DC_H;

}

/*********OLED写命令********/

void__inlineoled12864_wr_cmd(u8data)

{

OLED12864_8080_DATA=data;

OLED12864_DC_L;//写命令信号

//OLED12864_CS=0;

OLED12864_WR_L;//写信号

OLED12864_WR_H;

//OLED12864_CS=1;

OLED12864_DC_H;

}

#endif

#ifdefOLED_MANUAL_SPI

/*********oled写数据********/

void__inlineoled12864_wr_data(u8data)

{

OLED12864_CS_L;//拉低CS

OLED12864_DC=OLED_HIGH;

manual_spi_sendbyte(data);

}

/*********OLED写命令********/

void__inlineoled12864_wr_cmd(u8data)

{

OLED12864_CS_L;//拉低CS

OLED12864_DC=OLED_LOW;

manual_spi_sendbyte(data);

OLED12864_CS_H;//拉低CS

}

#endif

#ifdefOLED_SPI

/*********oled写数据********/

void__inlineoled12864_wr_data(u8data)

{

intn;

OLED12864_CS_L;

OLED12864_DC=OLED_HIGH;

SPI1->DR=data;

//while(SPI1->SR&0x0080);//等待BSY变成0

for(n=0;n<9;n++);

OLED12864_CS_H;

}

/*********OLED写命令********/

void__inlineoled12864_wr_cmd(u8data)

{

intn;

OLED12864_CS_L;//拉低CS

OLED12864_DC=OLED_LOW;

SPI1->DR=data;

//while(SPI1->SR&0x0080);//等待BYS变成0

for(n=0;n<9;n++);

OLED12864_CS_H;//拉低CS

}

#endif

//#defineoled12864_wr_cmd(data)OLED12864_8080_DATA=data;\

//OLED12864_DC_L;\

//OLED12864_WR_L;\

//OLED12864_WR_H;\

//OLED12864_DC_H;

/**********oled设置坐标********/

void__inlineoled12864_set_pos(u8x,u8y)

{

oled12864_wr_cmd(0xb0+y);

oled12864_wr_cmd((x>>4)|0x10);

oled12864_wr_cmd(x&0x0f);

}

 

/*********************LCD全屏************************************/

voidoled12864_fill_full(unsignedcharbmp_dat);

/*********************LCD复位************************************/

voidoled12864_cls(void);

/*********************LCD初始化************************************/

voidoled12864_init(void);

/******************画点,无x,y值审查******************************/

voidoled12864_draw_point(u8x,u8y,u8white_black);

//放一个8×6字符串

voidoled12864_put_86char(charcolumn6,charrow,char*ch);

//按照默认方式显示一行数据,并清空下一行

voidoled12864_printf(char*ch);

//oled内容按oled_buf[]刷新

voidoled12864_refresh(void);

#endif

 

/*_____________________________codetab.h______*/

 

#ifndef__CODETAB_H__

#define__CODETAB_H__

 

/************************************6*8的点阵************************************/

constunsignedcharF6x8[][6]=

{

0x00,0x00,0x00,0x00,0x00,0x00,//sp

0x00,0x00,0x00,0x2f,0x00,0x00,//!

0x00,0x00,0x07,0x00,0x07,0x00,//"

0x00,0x14,0x7f,0x14,0x7f,0x14,//#

0x00,0x24,0x2a,0x7f,0x2a,0x12,//$

0x00,0x62,0x64,0x08,0x13,0x23,//%

0x00,0x36,0x49,0x55,0x22,0x50,//&

0x00,0x00,0x05,0x03,0x00,0x00,//'

0x00,0x00,0x1c,0x22,0x41,0x00,//(

0x00,0x00,0x41,0x22,0x1c,0x00,//)

0x00,0x14,0x08,0x3E,0x08,0x14,//*

0x00,0x08,0x08,0x3E,0x08,0x08,//+

0x00,0x00,0x00,0xA0,0x60,0x00,//,

0x00,0x08,0x08,0x08,0x08,0x08,//-

0x00,0x00,0x60,0x60,0x00,0x00,//.

0x00,0x20,0x10,0x08,0x04,0x02,///

0x00,0x3E,0x51,0x49,0x45,0x3E,//0

0x00,0x00,0x42,0x7F,0x40,0x00,//1

0x00,0x42,0x61,0x51,0x49,0x46,//2

0x00,0x21,0x41,0x45,0x4B,0x31,//3

0x00,0x18,0x14,0x12,0x7F,0x10,//4

0x00,0x27,0x45,0x45,0x45,0x39,//5

0x00,0x3C,0x4A,0x49,0x49,0x30,//6

0x00,0x01,0x71,0x09,0x05,0x03,//7

0x00,0x36,0x49,0x49,0x49,0x36,//8

0x00,0x06,0x49,0x49,0x29,0x1E,//9

0x00,0x00,0x36,0x36,0x00,0x00,//:

0x00,0x00,0x56,0x36,0x00,0x00,//;

0x00,0x08,0x14,0x22,0x41,0x00,//<

0x00,0x14,0x14,0x14,0x14,0x14,//=

0x00,0x00,0x41,0x22,0x14,0x08,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > 司法考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1