项目需要用到OLED显示,屏幕控制器是SSD1305,官方给了在51下的驱动,然后我用STM32作为处理器,8080总线驱动,
为啥总是没有反应,
代码附上,各位大神给看看
[mw_shl_code=c,true]#include "oled.h"
#define DC PCout(3)
#define CS PCout(6)
#define RES PBout(15)
#define _WR PBout(14)
#define _RD PBout(13)
void OLED_WR_Cmd(unsigned char cmd)
{
DC=0;
CS=0;
_WR=0;
delay_us(5);
GPIO_Write(GPIOD,cmd);
delay_us(5);
_WR=1;
delay_us(5);
CS=1;
DC=1;
}
void OLED_WR_Data(unsigned char data)
{
DC=1;
CS=0;
_WR=0;
delay_us(5);
GPIO_Write(GPIOD,data);
delay_us(5);
_WR=1;
delay_us(5);
CS=1;
DC=1;
}
void clear(unsigned char m)
{
unsigned char i,j;
for(i=0;i<8;i++)
{
OLED_WR_Cmd(0xb0+i);
//startpage(i)
OLED_WR_Cmd(0x02);
OLED_WR_Cmd(0x10);
//startcolumn(0)
for(j=0;j<128;j++)
{
OLED_WR_Data(m);
}
}
}
void OLED_Init(void)
{
/* 配置OLED使用的GPIO*/
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOB, ENABLE); //使能PC,D,B端口时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3|GPIO_Pin_6; //PD3,PD6推挽输出
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//速度50MHz
GPIO_Init(GPIOC, &GPIO_InitStructure); //初始化GPIOD3,6
GPIO_SetBits(GPIOC,GPIO_Pin_3|GPIO_Pin_6); //PD3,PD6 输出高
GPIO_InitStructure.GPIO_Pin =0xFF; //PC0~7 OUT推挽输出
GPIO_Init(GPIOD, &GPIO_InitStructure);
GPIO_SetBits(GPIOD,0xFF); //PC0~7输出高
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15; //PB13,14,15 OUT推挽输出
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_SetBits(GPIOB,GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15);
/*配置OLED的控制器 官方给的驱动*/
RES=0;
delay_ms(100);
RES=1;
delay_ms(100);
OLED_WR_Cmd(0xae);/////////关显示
OLED_WR_Cmd(0xd5);/////////设定频率
OLED_WR_Cmd(0xa0);
OLED_WR_Cmd(0xa8);/////设定占空比 1/32
OLED_WR_Cmd(0x3f);
OLED_WR_Cmd(0xd3);////////设定显示范围 COM
OLED_WR_Cmd(0x00);
OLED_WR_Cmd(0x40);///////起始行
OLED_WR_Cmd(0x00);
OLED_WR_Cmd(0xad);///// 内部dc-dc
OLED_WR_Cmd(0x8e);
OLED_WR_Cmd(0x20);/////接口方式,页方式
OLED_WR_Cmd(0x02);
OLED_WR_Cmd(0xa1);/////seg 方向 132-0
OLED_WR_Cmd(0xc8);/////com 方向 63-0
OLED_WR_Cmd(0xda);////Set COM Pins Hardware Configuration
OLED_WR_Cmd(0x12);///
OLED_WR_Cmd(0x81);////////////对比度调节
OLED_WR_Cmd(0x80);/////////////对比度为中
OLED_WR_Cmd(0xdb);////////////倍压调节
OLED_WR_Cmd(0x34);///////////
OLED_WR_Cmd(0xa4);////////////Entire Display ON
OLED_WR_Cmd(0xa6);////////////Normal display
clear(0x00);
OLED_WR_Cmd(0xaf);////////////开显示
clear(0xFF); // 把整个屏幕点亮
printf("\r\n OLED Init success \r\n");
}[/mw_shl_code]
|