本菜鸟一枚,用stm32f103c8t6并行驱动12864zw液晶屏
具体连接:
PA0~PA7接D0~D7,RS、RW、E、RST分别接PB0、PB1、PB2、PB4
采用库函数操作,程序如下:
*********************************************************
#include "stm32f10x.h"
#define RS_ON GPIO_SetBits(GPIOB,GPIO_Pin_0);
#define RS_OFF GPIO_ResetBits(GPIOB,GPIO_Pin_0);
#define RW_ON GPIO_SetBits(GPIOB,GPIO_Pin_1);
#define RW_OFF GPIO_ResetBits(GPIOB,GPIO_Pin_1);
#define E_ON GPIO_SetBits(GPIOB,GPIO_Pin_2);
#define E_OFF GPIO_ResetBits(GPIOB,GPIO_Pin_2);
#define RST_ON GPIO_SetBits(GPIOB,GPIO_Pin_4);
#define RST_OFF GPIO_ResetBits(GPIOB,GPIO_Pin_4);
#define LcdData(x) GPIOB->ODR=(GPIOB->ODR&0xff00)|(x&0x00FF);
void delay(unsigned int ms)
{
unsigned int x,y;
for(x=0;x<ms;x++)
for(y=0;y<8000;y++);
}
void LcdWcom(unsigned char WCom)
{
delay(10);
RS_OFF;
RW_OFF;
LcdData(WCom);
E_ON;
delay(10);
E_OFF;
}
void LcdWdata(unsigned char WData)
{
delay(10);
RS_ON;
RW_OFF;
LcdData(WData);
E_ON;
delay(10);
E_OFF;
}
void DisplayInit(void)
{
delay(10);
RST_OFF;
delay(10);
RST_ON;
LcdWcom(0x30);
LcdWcom(0x0c);
LcdWcom(0x01);
}
void SetCursor(unsigned char x,unsigned char y)
{
unsigned char i;
switch(x)
{
case 0x00: i=0x80;
break;
case 0x01: i=0x90;
break;
case 0x02: i=0x88;
break;
case 0x03: i=0x98;
break;
default: break;
}
i=y+i;
LcdWcom(i);
}
int main(void)
{
GPIO_InitTypeDef myStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB,ENABLE);
myStructure.GPIO_Pin=GPIO_Pin_All;
myStructure.GPIO_Mode=GPIO_Mode_Out_PP;
myStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&myStructure);
myStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4;
GPIO_Init(GPIOB,&myStructure);
DisplayInit();
delay(10);
SetCursor(0,0);
delay(10);
LcdWdata(0x31);
}
*************************************************************
但是液晶屏没有任何显示!!液晶屏5V供电!!
求各位大神帮忙看下程序有没有问题!!
谢了:handshake |