基于OLED液晶显示器的显示系统Word文件下载.docx
《基于OLED液晶显示器的显示系统Word文件下载.docx》由会员分享,可在线阅读,更多相关《基于OLED液晶显示器的显示系统Word文件下载.docx(31页珍藏版)》请在冰豆网上搜索。
硬复位OLED。
DC:
命令/数据标志(0,读写命令;
1,读写数据)。
SCLK:
串行时钟线。
在4线串行模式下,D0信号线作为串行时钟线SCLK。
SDIN:
串行数据线。
在4线串行模式下,D1信号线作为串行数据线SDIN。
模块的D2需要悬空,其他引脚可以接到GND。
在4线串行模式下,只能往模块写数据而不能读数据。
在4线SPI模式下,每个数据长度均为8位,在SCLK的上升沿,数据从SDIN移入到SSD1306,并且是高位在前的。
DC线还是用作命令/数据的标志线。
在4线SPI模式下,写操作的时序如图17.1.6所示:
4线SPI写操作时序图
模块的显存:
SSD1306的显存总共为128*64bit大小,SSD1306将这些显存分为了8页,其对应关系如下表所示:
SSD1306显存与屏幕对应关系表
(2)飞思卡尔单片机的功能及特点:
MC9S12XS128是16位单片机,由16位中央处理单元(CPU12X)、128KB程序、Flash(P-lash)、8KBRAM、8KB数据Flash(D-lash)组成片内存储器。
主要功能模块包括:
内部存储器,内部PLL锁相环模块,2个异步串口通讯SCI,1个串行外设接口SPIMSCAN模块,1个8通道输入/输出比较定时器模块TIM,周期中断定时器模块PIT,16通道A/D转换模块ADC,1个8通道脉冲宽度调制模块PWM,输入/输出数字I/O口。
本次设计中主要用到PORTA,PORTB端口:
PORTA:
PORTA为通用I/O口,共8个,作为通用数字I/O口使用,未集成特殊功能.主要配置寄存器有:
数据寄存器PORTA、数据方向寄存DDRA、上拉电阻控制寄存器PUCR和驱动控制寄存器RDR。
a.数据寄存器PORTA
通过写1/0使单片机对应引脚输出高低电平,或通过读取数据寄存器获得对应引脚的高低电平值。
例:
PORTA_PB0=1
b.数据方向寄存器DDRA
DDRA寄存器配置引脚为输出口还是输入口,“0”,输入口;
“1”,输出口。
MCU复位后,DDRA值为0x00,引脚默认为输入口。
DDRA=0xFF//配置PORTA口为输出
PORTB:
PORTB为通用数字I/O口,共8个。
其使用与PORTA基本一样。
主要配置寄存器有:
数据寄存器PORTB、数据方向寄存DDRB。
上拉电阻控制寄存器PUCR和驱动控制寄存器RDR与PORTA、PORTB、PORTE、PORTK共用。
a.数据寄存器PORTB
b.数据方向寄存器DDRB
四、原理图:
器件说明:
OLED液晶显示器(8管脚),4个1k电阻,4个按键,飞思卡尔芯片(64管脚)
管脚连接:
GND
FMQ
AN07
VCC
KEY
MOSI0
D0
PB4
PA1
D1
PB3
PA2
RST
PB1
PA3
DC
PB2
PA4
五、流程图
六、程序设计
1.voidpll_set(void):
内部锁相环模块,单片机使用PLL功能能够获得更高的总线频率,这对于需要提高单片机运行速度的应用场合非常必要。
2.voidOLED_Init(void):
初始化OLED液晶显示屏
3.voidLCD_WrCmd(bytecmd):
写指令函数
4.voidLCD_WrDat(bytedata):
写数据函数
5.voidLCD_PutPixel(bytex,bytey):
填充一个点
6.voidLCD_P6x8Str(bytex,bytey,bytech[]):
显示字符串函数
7.voidmain(void):
主函数
#include"
main.h"
//所有头文件已包含在在include.h里
unsignedcharch_data[]="
---Bytangxuqing"
;
//显示数组
/*
*******************************************************************
*
*延时函数
********************************************************************
*/
voiddelayms(unsignedlongms)
{
unsignedintii,jj;
if(ms<
1)
ms=1;
for(ii=0;
ii<
ms;
ii++)
for(jj=0;
jj<
3338*2;
jj++);
//80MHz--1ms
}
*时钟设置
*通过锁相环(PLL)设置系统时钟为56M
voidpll_set(void)
CLKSEL=0X00;
PLLCTL_PLLON=1;
SYNR=0xc0|0x06;
REFDV=0x80|0x01;
POSTDIV=0x00;
_asm(nop);
while(!
(CRGFLG_LOCK==1));
CLKSEL_PLLSEL=1;
*对I/O口的初定义
*
voidinit_IO(void){
DDRA=0xff;
PORTA=0xfb;
*主函数
voidmain(void){
/*putyourowncodehere*/
_DISABLE_COP();
//关看门狗
DisableInterrupts;
//关中断
pll_set();
//锁相环初始化56MHz
uart_init();
//串口初始化(中断,9600)
OLED_Init();
//OLED初始化
sound_init();
//声音初始化
init_IO();
//通用I/O口初始化
LCD_P6x8Str(1,6,ch_data);
//显示开机界面
kaiji_fmq();
//开机声音
DDRA_DDRA1=0;
DDRA_DDRA2=0;
DDRA_DDRA3=0;
DDRA_DDRA4=0;
//SETPORTAI/OINPUT
PORTAB_PA1=1;
PORTAB_PA2=1;
PORTAB_PA3=1;
PORTAB_PA4=1;
EnableInterrupts;
for(;
){
//_FEED_COP();
/*feedsthedog*/
/*for(i=0;
i<
32;
i++){//扫描显示点
for(j=0;
j<
128;
j++)
LCD_PutPixel(j,i);
delayms
(1);
}
*/
//LCD_P6x8Str(0,0,ch_data);
if(!
PORTA_PA1){
LCD_P6x8Str(1,2,"
1"
);
PORTA_PA2){
LCD_P6x8Str(1,3,"
2"
PORTA_PA3){
LCD_P6x8Str(1,4,"
3"
PORTA_PA4){
LCD_P6x8Str(1,5,"
4"
}/*loopforever*/
/*pleasemakesurethatyouneverleavemain*/
OLED.c函数(子程序函数)
#defineOLED_GLO
oled.h"
#defineXLevelL0x00
#defineXLevelH0x10
#defineXLevel((XLevelH&
0x0F)*16+XLevelL)
#defineMax_Column128
#defineMax_Row64
#defineBrightness0xCF
4线SPI使用说明:
VBT供内部DC-DC电压,3.3~4.3V,如果使用5V电压,为保险起见串一个100~500欧的电阻
VCC供内部逻辑电压1.8~6V
GND地
BS0低电平
BS1低电平
BS2低电平
CS片选管脚
DC命令数据选择管脚
RES模块复位管脚
D0(SCLK),时钟脚,由MCU控制
D1(MOSI),主输出从输入数据脚,由MCU控制
D2悬空
D3-D7,低电平,也可悬空,但最好设为低电平
RD低电平,也可悬空,但最好设为低电平
RW低电平,也可悬空,但最好设为低电平
C7---D0(SCLK)时钟脚,由MCU控制
C6---D1(MOSI)主输出从输入数据脚,由MCU控制
C0---RST模块复位管脚
C4---DC命令数据选择管脚*/
/****************************引脚定义***********************************
PB1RST
PB2DC
PB3D1
PB4D0
*************************************************************************/
#defineX_WIDTH128
#defineY_WIDTH64
//======================================
constbyteF6x8[][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},//>
{0x00,0x02,0x01,0x51,0x09,0x06},//?
{0x00,0x32,0x49,0x59,0x51,0x3E},//@
{0x00,0x7C,0x12,0x11,0x12,0x7C},//A
{0x00,0x7F,0x49,0x49,0x49,0x36},//B
{0x00,0x3E,0x41,0x41,0x41,0x22},//C
{0x00,0x7F,0x41,0x41,0x22,0x1C},//D
{0x00,0x7F,0x49,0x49,0x49,0x41},//E
{0x00,0x7F,0x09,0x09,0x09,0x01},//F
{0x00,0x3E,0x41,0x49,0x49,0x7A},//G
{0x00,0x7F,0x08,0x08,0x08,0x7F},//H
{0x00,0x00,0x41,0x7F,0x41,0x00},//I
{0x00,0x20,0x40,0x41,0x3F,0x01},//J
{0x00,0x7F,0x08,0x14,0x22,0x41},//K
{0x00,0x7F,0x40,0x40,0x40,0x40},//L
{0x00,0x7F,0x02,0x0C,0x02,0x7F},//M
{0x00,0x7F,0x04,0x08,0x10,0x7F},//N
{0x00,0x3E,0x41,0x41,0x41,0x3E},//O
{0x00,0x7F,0x09,0x09,0x09,0x06},//P
{0x00,0x3E,0x41,0x51,0x21,0x5E},//Q
{0x00,0x7F,0x09,0x19,0x29,0x46},//R
{0x00,0x46,0x49,0x49,0x49,0x31},//S
{0x00,0x01,0x01,0x7F,0x01,0x01},//T
{0x00,0x3F,0x40,0x40,0x40,0x3F},//U
{0x00,0x1F,0x20,0x40,0x20,0x1F},//V
{0x00,0x3F,0x40,0x38,0x40,0x3F},//W
{0x00,0x63,0x14,0x08,0x14,0x63},//X
{0x00,0x07,0x08,0x70,0x08,0x07},//Y
{0x00,0x61,0x51,0x49,0x45,0x43},//Z
{0x00,0x00,0x7F,0x41,0x41,0x00},//[
{0x00,0x55,0x2A,0x55,0x2A,0x55},//55
{0x00,0x00,0x41,0x41,0x7F,0x00},//]
{0x00,0x04,0x02,0x01,0x02,0x04},//^
{0x00,0x40,0x40,0x40,0x40,0x40},//_
{0x00,0x00,0x01,0x02,0x04,0x00},//'
{0x00,0x88,0x48,0x28,0x18,0xff},//a
{0x00,0xff,0xa0,0x90,0x88,0xe4},//b
{0x00,0x02,0x82,0x7A,0x2A,0xEA},//c
{0x2B,0x7a,0x82,0x02,0x02,0x00},//d
{0x00,0x7C,0x54,0x54,0x54,0x00},//e
{0xFE,0x02,0x22,0x3E,0x00,0x00},//f
{0x00,0xFF,0x05,0x75,0x15,0xFD},//g
{0x15,0x75,0x07,0x38,0x80,0xFF},//h
{0x00,0x06,0x02,0x23,0xAA,0xFB},//i
{0x2A,0x23,0x02,0x06,0x00,0x00},//j
{0xFE,0x22,0x3E,0x00,0x06,0x12},//k
{0x7A,0x1B,0x7A,0x52,0x66,0x00},//l
//{0x00,0x20,0x54,0x54,0x54,0x78},//a
//{0x00,0x7F,0x48,0x44,0x44,0x38},//b
//{0x00,0x38,0x44,0x44,0x44,0x20},//c
//{0x00,0x38,0x44,0x44,0x48,0x7F},//d
//{0x00,0x38,0x54,0x54,0x54,0x18},//e
//{0x00,0x08,0x7E,0x09,0x01,0x02},//f
//{0x00,0x18,0xA4,0xA4,0xA4,0x7C},//g
//{0x00,0x7F,0x08,0x04,0x04,0x78},//h
//{0x00,0x00,0x44,0x7D,0x40,0x00},//i
//{0x00,0x40,0x80,0x84,0x7D,0x00},//j
//{0x00,0x7F,0x10,0x28,0x44,0x00},//k
//{0x00,0x00,0x41,0x7F,0x40,0x00},//l
{0x00,0x7C,0x04,0x18,0x04,0x78},//m
{0x00,0x7C,0x08,0x04,0x04,0x78},//n
{0x00,0x38,0x44,0x44,0x44,0x38},//o
{0x00,0xFC,0x24,0x24,0x24,0x18