【CH579M-R1】驱动OLED为项目做准备
[复制链接]
本帖最后由 yangjiaxu 于 2021-1-11 22:02 编辑
CH579通过这两周的使用,已经熟悉了基本开发模式,对IO的初始化,一些特殊引脚的配置,ADC,定时器串口等等已经可以正常操作了。今天,就来驱动一下OLED12864,为便携式LCR测试仪做准备。
先看看效果。
本次使用的是SSD1306的OLED显示模块,使用CH579进行驱动。驱动部分还是比较简单,直接贴上代码。
#include "oled.h"
#include "oledfont.h"
UINT8 OLED_GRAM[128][8]; //OLED显示缓存的临时变量
/*******************************************************************************
* Function Name : OLED_WriteCmd
* Description : 向OLED写入命令
* Input : cmd: 命令
* Return : None
*******************************************************************************/
void OLED_WriteCmd(UINT8 cmd)
{
I2C_Start();
I2C_SendByte(0x78);
I2C_WaitAck();
I2C_SendByte(0x00);
I2C_WaitAck();
I2C_SendByte(cmd);
I2C_WaitAck();
I2C_Stop();
}
/*******************************************************************************
* Function Name : OLED_WriteData
* Description : 向OLED写入数据
* Input : data: 数据
* Return : None
*******************************************************************************/
void OLED_WriteData(UINT8 data)
{
I2C_Start();
I2C_SendByte(0x78);
I2C_WaitAck();
I2C_SendByte(0x40);
I2C_WaitAck();
I2C_SendByte(data);
I2C_WaitAck();
I2C_Stop();
}
/*******************************************************************************
* Function Name : OLED_RefreshGram
* Description : 刷新OLED显示
* Input : None
* Return : None
*******************************************************************************/
void OLED_RefreshGram(void)
{
signed char p;
UINT8 x;
for(p=7; p>=0; --p)
{
OLED_WriteCmd(0xB0+p);
OLED_WriteCmd(0x00);
OLED_WriteCmd(0x10);
for(x=0; x<128; ++x)
{
OLED_WriteData(OLED_GRAM[x][p]);
}
}
}
/*******************************************************************************
* Function Name : OLED_Clear
* Description : 清空OLED显示
* Input : None
* Return : None
*******************************************************************************/
void OLED_Clear(void)
{
UINT8 x, p;
for(p=0; p<8; ++p)
for(x=0; x<128; ++x)
{
OLED_GRAM[x][p] = 0;
}
OLED_RefreshGram();
}
/*******************************************************************************
* Function Name : OLED_DisplayOn
* Description : 打开OLED显示
* Input : None
* Return : None
*******************************************************************************/
void OLED_DisplayOn(void)
{
OLED_WriteCmd(0x8D);
OLED_WriteCmd(0x14);
OLED_WriteCmd(0xAF);
}
/*******************************************************************************
* Function Name : OLED_DisplayOff
* Description : 关闭OLED显示
* Input : None
* Return : None
*******************************************************************************/
void OLED_DisplayOff(void)
{
OLED_WriteCmd(0x8D);
OLED_WriteCmd(0x10);
OLED_WriteCmd(0xAE);
}
/*******************************************************************************
* Function Name : OLED_DrawPoint
* Description : OLED(x,y)坐标处的灯亮灭
* Input : x: 横坐标,显示屏由左到右
y: 纵坐标,显示屏由上到下
s: 1/0 = 亮/灭
* Return : None
*******************************************************************************/
/* OLED描点 */
void OLED_DrawPoint(UINT8 x, UINT8 y, UINT8 s)
{
UINT8 pos, page, temp=0;
if(x>127 || y>63)
return;
page = 7-y/8;
pos = y%8;
temp = 1<<(7-pos);
if(s)
OLED_GRAM[x]
|