拿到GXM25632屏幕也有一段时间了,由于出差在外地的原因一直没有拿到屏幕,前几天回来刚看到屏幕的时候咋一看确实不小,显示区对比12864虽说长度是长了,但其实就是将12864中间横切一刀并排显示了,在程序方面其实也是一样的,选好显示区域调整好函数显示出来还是没问题的。
前期肯定是准备工作了,刚拿到屏幕就懵逼了,因为厂家提供的排线是FFC/FPC扁平软排线连接线 20P,所以就想尽办法找转接板了,准备网购一个?那又得好几天,索性将手头上带排线座的12864拆一个做一个转接板吧!也只能这样了。。。
不得不佩服我的勇气啊,牺牲了我一块12864。。。
硬件设施全部准备完了,准备看看资料,这里不得不提到豪哥了,豪哥人很爽快,联系他的QQ的时候说我是发烧友试用25632的,二话没说就把所有的资料打包发过来了,其中还有51 单片机驱动25632的驱动程序,暂时没有急着去移植程序,先看看技术文件,其中有一条很重要,资料上显示屏幕供电电压3.2~3.4V
可在试用的过程中发现3.3V的供电屏幕毛都不显示一个,后来看到别人的试用贴,才发现这个应该是技术文件的问题吧,反正上电5V试用继续ing......
手头上没有51单片机,所以不打算测试例程的可用性,直接移植到 STM32,其中51单片机里的引脚不需要配置,所以程序看起来相对简单一些,如果用STM32的话相对来说可能就要麻烦一些了。至少引脚配置方面是不能出问题的,否则就是一次失败的移植。
- #define GXM25632_KS0108_CSA_LOW (GPIO_ResetBits(GPIOB,GPIO_Pin_0))
- #define GXM25632_KS0108_CSA_HIGH (GPIO_SetBits(GPIOB,GPIO_Pin_0))
- #define GXM25632_KS0108_CSB_LOW GPIO_ResetBits(GPIOB,GPIO_Pin_1)
- #define GXM25632_KS0108_CSB_HIGH GPIO_SetBits(GPIOB,GPIO_Pin_1)
- #define GXM25632_KS0108_RS_LOW GPIO_ResetBits(GPIOB,GPIO_Pin_11)
- #define GXM25632_KS0108_RS_HIGH GPIO_SetBits(GPIOB,GPIO_Pin_11)
- #define GXM25632_KS0108_RW_LOW GPIO_ResetBits(GPIOB,GPIO_Pin_10)
- #define GXM25632_KS0108_RW_HIGH GPIO_SetBits(GPIOB,GPIO_Pin_10)
- #define GXM25632_KS0108_EN_LOW GPIO_ResetBits(GPIOB,GPIO_Pin_5)
- #define GXM25632_KS0108_EN_HIGH GPIO_SetBits(GPIOB,GPIO_Pin_5)
- #define GXM25632_KS0108_RST_LOW GPIO_ResetBits(GPIOB,GPIO_Pin_4)
- #define GXM25632_KS0108_RST_HIGH GPIO_SetBits(GPIOB,GPIO_Pin_4)
- #define GXM25632_DisplayA GXM25632_KS0108_CSA_HIGH,GXM25632_KS0108_CSB_LOW;
- #define GXM25632_DisplayB GXM25632_KS0108_CSA_LOW,GXM25632_KS0108_CSB_HIGH;
复制代码
- #include "stm32f10x.h"
- #include "25632.h"
- #include "delay.h"
- /*
- PB11: RS
- PB10: RW
- PB1 : CS2
- PB0 : CS1
- PB4 : RST
- PB5 : EN
- */
- #define C_Busy 0x80
- #define C_On_Off 0x20
- #define C_Reset 0x10
- #define LCD_On 0x3F
- #define LCD_Off 0x3E
- #define LCD_StartLine0 0xC0 //Set display start line(0~3FH), real start line=(0C0H+Line Number)
- #define LCD_Page0 0xB8 //Set Page (X Address)(0~7), real page = 0B8H+Page Number
- #define LCD_SetColumn0 0x40 //Set Y address (0~3FH), real column = 40H + column number
- void GXM25632_GPIO_int(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure;
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOB, ENABLE);
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(GPIOC, &GPIO_InitStructure);
- GPIO_ResetBits(GPIOA,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7);
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_10|GPIO_Pin_11;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(GPIOB, &GPIO_InitStructure);
- GPIO_ResetBits(GPIOB,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_10|GPIO_Pin_11);
-
- }
- //////////////////////////////////////////////////////////////////////
- void GXM25632_KS0108_int(void)
- {
- GXM25632_GPIO_int();
- GXM25632_KS0108_CSA_LOW;
- GXM25632_KS0108_CSB_LOW;
- GXM25632_DisplayA;
- GXM25632_KS0108_WriteCMD(0X00); // left screen write
- GXM25632_DisplayB;
- GXM25632_KS0108_WriteCMD(0X00); // right screen write
- //on display
- GXM25632_DisplayA;
- GXM25632_KS0108_WriteCMD(0x3f); // middle screen write
- GXM25632_DisplayB;
- GXM25632_KS0108_WriteCMD(0X3f); // right screen write
- //set start address
- GXM25632_DisplayA;
- GXM25632_KS0108_WriteCMD(0Xc0); // middle screen write
- GXM25632_DisplayB;
- GXM25632_KS0108_WriteCMD(0Xc0); // right screen write
- // write display snap
- GXM25632_DisplayA;
- GXM25632_KS0108_WriteCMD(0Xb8); // middle screen write
- GXM25632_DisplayB;
- GXM25632_KS0108_WriteCMD(0Xb8); // right screen write
- //set seg register
- GXM25632_DisplayA;
- GXM25632_KS0108_WriteCMD(0X40); // middle screen write
- GXM25632_DisplayB;
- GXM25632_KS0108_WriteCMD(0X40); // right screen write
- }
- ///////////////////////////////////////////////////////////////////////
- void GXM25632_KS0108_delay(u32 xms)
- {
- u32 i,j;
- for(i=0;i
- {
- for(j=0;j<280;j++)
- {
- // for(m=0;m<125;m++);
- }
- }
- }
- void GXM25632_KS0108_WriteCMD(u8 command)
- {
- GXM25632_KS0108_RS_LOW ;
- GXM25632_KS0108_delay(2);
- GXM25632_KS0108_RW_HIGH;
- GXM25632_KS0108_delay(4);
- GXM25632_KS0108_RW_LOW;
- //u16 temp = GPIO_ReadOutputData(GPIOA);
-
- GPIO_Write(GPIOC, command); /*保持高8位不变 temp|*/
- GXM25632_KS0108_EN_HIGH;
- GXM25632_KS0108_delay(1);
- GXM25632_KS0108_EN_LOW;
- }
- void GXM25632_KS0108_WriteDATA(u8 data_buffer)
- {
- GXM25632_KS0108_RS_LOW ;
- GXM25632_KS0108_RW_HIGH;
- GXM25632_KS0108_RW_LOW;
- GXM25632_KS0108_RS_HIGH;
- // u16 temp = GPIO_ReadOutputData(GPIOA);
- GPIO_Write(GPIOC, data_buffer); /*保持高8位不变*/
-
- GXM25632_KS0108_EN_HIGH;
- GXM25632_KS0108_delay(1);
- GXM25632_KS0108_EN_LOW;
- }
- //***************************************************//
- void GXM12864_KS0108_disp_clrscreen()
- {
- u8 i,j,page_address;
- for(j=0;j<8;j++)
- {page_address=0x00;
- page_address=j;
- page_address=page_address|0x0b8;
- GXM25632_KS0108_CSA_HIGH;
- GXM25632_KS0108_CSB_LOW;
- GXM25632_KS0108_WriteCMD(page_address); // left screen write
- GXM25632_KS0108_CSA_LOW;
- GXM25632_KS0108_CSB_HIGH;
- GXM25632_KS0108_WriteCMD(page_address); // middle screen write
- for (i=0;i<32;i++)
- {
- GXM25632_KS0108_CSA_HIGH;
- GXM25632_KS0108_CSB_LOW;
- GXM25632_KS0108_WriteDATA(0xff);
- GXM25632_KS0108_CSA_LOW;
- GXM25632_KS0108_CSB_HIGH;
- GXM25632_KS0108_WriteDATA(0xff);
- GXM25632_KS0108_CSA_HIGH;
- GXM25632_KS0108_CSB_LOW;
- GXM25632_KS0108_WriteDATA(0xff);
- GXM25632_KS0108_CSA_LOW;
- GXM25632_KS0108_CSB_HIGH;
- GXM25632_KS0108_WriteDATA(0xff);
- }
- }
- }
- //***************************************************//
- void GXM12864_KS0108_disp_point(u8 a,u8 b)
- {
- u8 i,j,page_address;
- for(j=0;j<8;j++)
- {page_address=0x00;
- page_address=j;
- page_address=page_address|0x0b8;
- GXM25632_DisplayA;
- GXM25632_KS0108_WriteCMD(page_address); // left screen write
- GXM25632_DisplayB;
- GXM25632_KS0108_WriteCMD(page_address); // middle screen write
- for (i=0;i<32;i++)
- {
- GXM25632_DisplayA;
- GXM25632_KS0108_WriteDATA(a);
- GXM25632_DisplayB;
- GXM25632_KS0108_WriteDATA(a);
- GXM25632_DisplayA;
- GXM25632_KS0108_WriteDATA(b);
- GXM25632_DisplayB;
- GXM25632_KS0108_WriteDATA(b);
- }
- }
- }
复制代码
以上是我从豪哥那里提供的51例程移植过来的代码,至于主函数方面大家在继续看看豪哥提供的代码,继续移植过来方便实用。
第一次移植的时候显示成上图这样,仔细查线后发现是CS1 CS2接反了,继续ing.......
如果大家想要有更多的拓展,而没有好的资料的话,建议网上找找KS0180驱动的12864的例程看看,他们的驱动是完全兼容的。
0
|
|
|
|