msp430单片机oled汉字字模_求0.96寸OLED显示屏带字库字库430驱动

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

/*************************************************************

* OLED_ZK_430.c

*************************************************************/

#include

#include "OLED_ZK_430.h"

void initial_IO()

{

LCD_SDA_DIR |= LCD_SDA;

LCD_SCLK_DIR |= LCD_SCLK;

ROM_CS_DIR |= ROM_CS;

ROM_SCK_DIR |= ROM_SCK;

ROM_OUT_DIR |= ROM_OUT;

ROM_IN_DIR |= ROM_IN;

}

/**********************************************

//IIC Start

*********************************************/

void IIC_Start()

{

LCD_SCLK_OUT |= LCD_SCLK;

LCD_SDA_OUT |= LCD_SDA;

LCD_SDA_OUT &= ~LCD_SDA;

LCD_SCLK_OUT &= ~LCD_SCLK;

}

/**********************************************

//IIC Stop

**********************************************/

void IIC_Stop()

{

LCD_SCLK_OUT &= ~LCD_SCLK;

LCD_SDA_OUT &= ~LCD_SDA;

LCD_SCLK_OUT |= LCD_SCLK;

LCD_SDA_OUT |= LCD_SDA;

}

/**********************************************

// IIC Write byte

**********************************************/

void Write_IIC_Byte(uchar IIC_Byte)

{

unsigned char i;

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

{

if (IIC_Byte & 0x80)//1?0?

LCD_SDA_OUT |= LCD_SDA;

else

LCD_SDA_OUT &= ~LCD_SDA;

LCD_SCLK_OUT |= LCD_SCLK;

LCD_SCLK_OUT &= ~LCD_SCLK;

IIC_Byte <<= 1;//loop

}

LCD_SDA_OUT |= LCD_SDA;

LCD_SCLK_OUT |= LCD_SCLK;

LCD_SCLK_OUT &= ~LCD_SCLK;

}

/*****************************************************************************

名称: LED_WrDat

简要: 向OLED写数据

*****************************************************************************/

void transfer_data_lcd(uchar ucData)

{

IIC_Start();

Write_IIC_Byte(0x78);

Write_IIC_Byte(0x40);//write data

Write_IIC_Byte(ucData);

IIC_Stop();

}

/*****************************************************************************

名称 : LED_WrCmd

简要 : 向OLED写命令

*****************************************************************************/

void transfer_command_lcd(uchar ucCmd)

{

IIC_Start();

Write_IIC_Byte(0x78); //Slave address,SA0=0

Write_IIC_Byte(0x00);//write command

Write_IIC_Byte(ucCmd);

IIC_Stop();

}

/*延时*/

void delay(int n_ms)

{

int j, k;

for (j = 0; j

for (k = 0; k<110; k++);

}

/*LCD模块初始化*/

void initial_lcd()

{

ROM_CS_OUT |= ROM_CS ;

delay(20);

transfer_command_lcd(0xAE); //display off

transfer_command_lcd(0x20);//Set Memory Addressing Mode

transfer_command_lcd(0x10);//00,Horizontal Addressing Mode;01,Vertical Addressing Mode;10,Page Addressing Mode (RESET);11,Invalid

transfer_command_lcd(0xb0);//Set Page Start Address for Page Addressing Mode,0-7

transfer_command_lcd(0xc8);//Set COM Output Scan Direction

transfer_command_lcd(0x00);//---set low column address

transfer_command_lcd(0x10);//---set high column address

transfer_command_lcd(0x40);//--set start line address

transfer_command_lcd(0x81);//--set contrast control register

transfer_command_lcd(0x7f);

transfer_command_lcd(0xa1);//--set segment re-map 0 to 127

transfer_command_lcd(0xa6);//--set normal display

transfer_command_lcd(0xa8);//--set multiplex ratio(1 to 64)

transfer_command_lcd(0x3F);//

transfer_command_lcd(0xa4);//0xa4,Output follows RAM content;0xa5,Output ignores RAM content

transfer_command_lcd(0xd3);//-set display offset

transfer_command_lcd(0x00);//-not offset

transfer_command_lcd(0xd5);//--set display clock divide ratio/oscillator frequency

transfer_command_lcd(0xf0);//--set divide ratio

transfer_command_lcd(0xd9);//--set pre-charge period

transfer_command_lcd(0x22); //

transfer_command_lcd(0xda);//--set com pins hardware configuration

transfer_command_lcd(0x12);

transfer_command_lcd(0xdb);//--set vcomh

transfer_command_lcd(0x20);//0x20,0.77xVcc

transfer_command_lcd(0x8d);//--set DC-DC enable

transfer_command_lcd(0x14);//

transfer_command_lcd(0xaf);//--turn on oled panel

}

void lcd_address(uchar page, uchar column)

{

transfer_command_lcd(0xb0 + column); /*设置页地址*/

transfer_command_lcd(((page & 0xf0) >> 4) | 0x10);/*设置列地址的高4位*/

transfer_command_lcd((page & 0x0f) | 0x00);/*设置列地址的低4位*/

}

/*********************************************************************

* 名称:clear_screen()

* 简要:清屏

*********************************************************************/

void clear_screen()

{

unsigned char i, j;

ROM_CS_OUT |= ROM_CS ;

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

{

transfer_command_lcd(0xb0 + i);

transfer_command_lcd(0x00);

transfer_command_lcd(0x10);

for (j = 0; j<128; j++)

{

transfer_data_lcd(0x00);

}

}

}

/*********************************************************************

* 名称:display_128x64(uchar *dp)

* 简要:显示128x64点阵图像

* 参数:page:页 column: 列 dp: 字符串

*********************************************************************/

void display_128x64(uchar *dp)

{

uint i, j;

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

{

lcd_address(0, j);

for (i = 0; i<128; i++)

{

transfer_data_lcd(*dp);/*写数据到LCD,每写完一个8位的数据后列地址自动加1*/

dp++;

}

}

}

/*********************************************************************

* 名称:display_graphic_16x16(uint page, uint column, uchar *dp)

* 简要:显示16x16点阵图像、汉字、生僻字或16x16点阵的其他图标

* 参数:page:页 column: 列 dp: 字符串

*********************************************************************/

void display_graphic_16x16(uint page, uint column, uchar *dp)

{

uint i, j;

ROM_CS_OUT |= ROM_CS ;

for (j = 2; j>0; j--)

{

lcd_address(column, page);

for (i = 0; i<16; i++)

{

transfer_data_lcd(*dp);/*写数据到LCD,每写完一个8位的数据后列地址自动加1*/

dp++;

}

page++;

}

}

/*********************************************************************

* 名称:display_graphic_8x16(uint page, uchar column, uchar *dp)

* 简要:显示8x16点阵图像、ASCII, 或8x16点阵的自造字符、其他图标

* 参数:page:页 column: 列 dp: 字符串

*********************************************************************/

/*显示8x16点阵图像、ASCII, 或8x16点阵的自造字符、其他图标*/

void display_graphic_8x16(uint page, uchar column, uchar *dp)

{

uint i, j;

for (j = 2; j>0; j--)

{

lcd_address(column, page);

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

{

transfer_data_lcd(*dp);/*写数据到LCD,每写完一个8位的数据后列地址自动加1*/

dp++;

}

page++;

}

}

/*********************************************************************

* 名称:display_graphic_5x7(uint page, uchar column, uchar *dp)

* 简要:显示5*7点阵图像、ASCII, 或5x7点阵的自造字符、其他图标

* 参数:page:页 column: 列 dp: 字符串

* 使用示例:display_graphic_16x16(6, 97, jiong1);在第7页,第81列显示单个自编生僻汉字“囧”

*********************************************************************/

void display_graphic_5x7(uint page, uchar column, uchar *dp)

{

uint col_cnt;

uchar page_address;

uchar column_address_L, column_address_H;

page_address = 0xb0 + page - 1;

column_address_L = (column & 0x0f) - 1;

column_address_H = ((column >> 4) & 0x0f) + 0x10;

transfer_command_lcd(page_address); /*Set Page Address*/

transfer_command_lcd(column_address_H);/*Set MSB of column Address*/

transfer_command_lcd(column_address_L);/*Set LSB of column Address*/

for (col_cnt = 0; col_cnt<6; col_cnt++)

{

transfer_data_lcd(*dp);

dp++;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值