初级会员

- 积分
- 60
- 金钱
- 60
- 注册时间
- 2015-4-6
- 在线时间
- 0 小时
|
5金钱
小弟刚学stm32不懂,把stm32的B8-B15作为数据口 使用开漏输出;B0,B1是RS RW;EN PSB RST接到E3 E4 E5 现在不显示,请教什么问题呢 大神们
具体程序如下:void LCD12864_InitPort(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE |RCC_APB2Periph_GPIOB, ENABLE);
//GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable,ENABLE);
GPIO_InitStructure.GPIO_Pin = LCD_GPIO_DAT;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB , &GPIO_InitStructure);
//RS /RW
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB , &GPIO_InitStructure);
//EN /PSB/RST
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //???ì????
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOE , &GPIO_InitStructure);
//GPIO_Init(LCD12864_GPIO , &GPIO_InitStructure);
//GPIO_Write(LCD12864_GPIO ,0xffff);
}
/************************************************************************************************
@f_name: void NOP(void)
@brief: ???±????
@param: None
@return: None
************************************************************************************************/
void NOP(void)
{ u8 i; for(i=0; i<100; i++); }
/************************************************************************************************
@f_name: u8 LCD12864_busy(void)
@brief: ?ì????×???
@param: None
@return: None
************************************************************************************************/
u8 LCD12864_busy(void)
{
u8 x;
LCD_RS(0);
LCD_RW(1);
LCD_EN(1);
NOP();
NOP();
x=Text_Busy;
LCD_EN(0);
return x;
}
/************************************************************************************************
@f_name: void LCD12684_Wcmd(u8 dat)
@brief: ??????
@param: u8 dat ????????
@return: None
************************************************************************************************/
void LCD12684_Wcmd(u8 dat)
{
while(LCD12864_busy()); //???ì??
LCD_RS(0);
LCD_RW(0);
LCD_EN(0);
// NOP();
// NOP();
LCD_WriteData(dat);
delay_ms(5);
// NOP();
// NOP();
LCD_EN(1);
// NOP();
// NOP();
delay_ms(5);
LCD_EN(0);
}
/************************************************************************************************
@f_name: void LCD12684_Wcmd(u8 dat)
@brief: ??????
@param: u8 dat ????????
@return: None
************************************************************************************************/
void LCD12684_Wdat(u8 dat)
{
while(LCD12864_busy()); //???ì??
LCD_RS(1);
LCD_RW(0);
LCD_EN(0);
// NOP();
// NOP();
LCD_WriteData(dat);
delay_ms(5);
// NOP();
// NOP();
LCD_EN(1);
delay_ms(5);
// NOP();
// NOP();
LCD_EN(0);
}
/************************************************************************************************
@f_name: void LCD12864_Init(void)
@brief: ???§??????
@param: None
@return: None
************************************************************************************************/
void LCD12864_Init(void)
{
LCD_PSB(1); //????·???
LCD_RST(0); //???§???? ?????????§
delay_ms(3);
LCD_RST(1); //????????????????
delay_ms(3);
LCD12684_Wcmd(0x34); //?©????????×÷
delay_ms(5);
LCD12684_Wcmd(0x30); //?ù±???????×÷
delay_ms(5);
LCD12684_Wcmd(0x0c); //????????????±ê
delay_ms(5);
LCD12684_Wcmd(0x01); //????LCD??????????
delay_ms(5);
}
/************************************************************************************************
@f_name: void LCD12864_Clr(void)
@brief: ????
@param: None
@return: None
************************************************************************************************/
void LCD12864_Clr(void)
{
LCD12684_Wcmd(0x34); //?©????????×÷ ?°?????±
delay_ms(5);
LCD12684_Wcmd(0x30); //?ù±???????×÷
delay_ms(5);
LCD12684_Wcmd(0x01); //????
delay_ms(5);
}
/************************************************************************************************
@f_name: void LCD12864_Pos(u8 x,u8 y)
@brief: ?è??????????
@param: u8 x??X?á u8 y:Y?á
@return: None
************************************************************************************************/
void LCD12864_Pos(u8 x,u8 y)
{
u8 pos;
if (x==1) {x=0x80;}
else if (x==2) {x=0x90;}
else if (x==3) {x=0x88;}
else if (x==4) {x=0x98;}
else x=0x80;
pos = x+y ;
LCD12684_Wcmd(pos); //???????·
}
/************************************************************************************************
@f_name: void LCD12864_PhotoDis(u8 *bmp)
@brief: ????????
@param: u8 *bmp ??????×é
@return: None
************************************************************************************************/
void LCD12864_PhotoDis(u8 *bmp)
{
u8 i,j;
LCD12684_Wcmd(0x34); //??±?????????
for(i=0;i<32;i++)
{
LCD12684_Wcmd(0x80+i); //???????®??×?±ê??
LCD12684_Wcmd(0x80); //???????±×?±ê??
for(j=0;j<16;j++) //??????????8??????????
LCD12684_Wdat(*bmp++);
delay_ms(1);
}
for(i=0;i<32;i++)
{
LCD12684_Wcmd(0x80+i);
LCD12684_Wcmd(0x88);
for(j=0;j<16;j++)
LCD12684_Wdat(*bmp++);
delay_ms(1);
}
LCD12684_Wcmd(0x36); //???ê????,??????????
}
/************************************************************************************************
@f_name: void LCD_ShowString(u8 x,u8 y,const u8 *p)
@brief: ????×?·??®
@param: u8 *bmp ??????×é
@return: None
************************************************************************************************/
void LCD_ShowString(u8 x,u8 y,const u8 *p)
{
u8 temp;
if(x>4) {x=1;}
if(y>4) {y=0;}
LCD12864_Pos(x,y);
temp=*p;
while(temp!='\0')
{
LCD12684_Wdat(temp);
temp=*(++p);
}
}
头文件如下:#ifndef __12864_H_
#define __12864_H_
#include "sys.h"
//?????¨??????????????
//**************************************************************************************************************************
// #define LCD12864_GPIO GPIOB
// #define GPIOCLK RCC_APB2Periph_GPIOB
#define RS GPIO_Pin_0
#define RW GPIO_Pin_1
#define EN GPIO_Pin_3
#define   SB GPIO_Pin_4
#define RST GPIO_Pin_5
#define Busy GPIO_Pin_15
#define LCD_GPIO_DAT GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10 |GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15
// #define LCD_GPIO_CMD GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5
#define LCD_RS(x) x ? GPIO_SetBits(GPIOB,RS): GPIO_ResetBits(GPIOB,RS)
#define LCD_RW(x) x ? GPIO_SetBits(GPIOB,RW): GPIO_ResetBits(GPIOB,RW)
#define LCD_EN(x) x ? GPIO_SetBits(GPIOE,EN): GPIO_ResetBits(GPIOE,EN)
#define LCD_PSB(x) x ? GPIO_SetBits(GPIOE,PSB): GPIO_ResetBits(GPIOE,PSB)
#define LCD_RST(x) x ? GPIO_SetBits(GPIOE,RST): GPIO_ResetBits(GPIOE,RST)
#define Text_Busy GPIO_ReadInputDataBit(GPIOB,Busy) //PBin(7)
#define LCD_WriteData(x) {GPIOB->ODR = GPIOB->ODR-(GPIOB->ODR & 0xff00);GPIOB->ODR |= x<<8;} //{GPIOB->BSRR = x<<8 & 0xff00;GPIOB->BRR = ((~x)<<8) & 0xff00;} //??8????????
//#define LCD_WriteData(x) {LCD12864_GPIO->BSRR = x & 0x00ff;LCD12864_GPIO->BRR = ((~x)<<8) & 0x00ff;} //??8????????
void LCD12864_InitPort(void);
void NOP(void);
u8 LCD12864_busy(void);
void LCD12684_Wcmd(u8 dat);
void LCD12684_Wdat(u8 dat);
void LCD12864_Init(void);
void LCD12864_Clr(void);
void LCD12864_Pos(u8 x,u8 y);
void LCD12864_PhotoDis(u8 *bmp);
void LCD_ShowString(u8 x,u8 y,const u8 *p);
//**********************************************************************************************************************
#endif
|
|