自己设计的STM32并行驱动LCE,大家帮忙看下有什么错误!

2019-07-14 22:26发布

#include "STM32f10x.h"
#define RS_ON      GPIO_SetBits(GPIOB,GPIO_Pin_1);
#define RS_OFF     GPIO_ResetBits(GPIOB,GPIO_Pin_1);
#define RW_ON      GPIO_SetBits(GPIOB,GPIO_Pin_5);
#define RW_OFF     GPIO_ResetBits(GPIOB,GPIO_Pin_5);
#define E_ON       GPIO_SetBits(GPIOB,GPIO_Pin_6);
#define E_OFF      GPIO_ResetBits(GPIOB,GPIO_Pin_6);

//#define LcdData(x) GPIOB->ODR=(GPIOB->ODR&0xff00)|(x&0x00FF);
void LcdData(unsigned char Data)
{
GPIO_Write(GPIOB,Data<<7);
}

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(100);
RS_OFF;
RW_OFF;
LcdData(WCom);

  • E_ON;

delay(100);
E_OFF;
}

void LcdWdata(unsigned char WData)
{
delay(100);
RS_ON;
RW_OFF;
LcdData(WData);
E_ON;
delay(100);
E_OFF;
}

void DisplayInit(void)
{

delay(100);
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_GPIOB,ENABLE);

myStructure.GPIO_Pin=GPIO_Pin_All;
myStructure.GPIO_Mode=GPIO_Mode_Out_OD;
myStructure.GPIO_Speed=GPIO_Speed_50MHz;
//myStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4;
GPIO_Init(GPIOB,&myStructure);
           delay(100);
DisplayInit();
delay(5);
SetCursor(0,0);
delay(5);
LcdWdata(0x31);
}


0条回答

一周热门 更多>