stm8驱动12864屏的这段程序哪错了,求指教。

2019-03-23 18:36发布

#include"stm8s.h"

#define uchar unsigned char
#define RS     GPIOC,GPIO_PIN_1
#define RW      GPIOC,GPIO_PIN_2
#define E      GPIOC,GPIO_PIN_3
#define RSTE      GPIOC,GPIO_PIN_5
#define LCD_Date_PORT GPIOD
#define u32 unsigned long
#define u8 unsigned long

#define RS_LOW() GPIO_WriteLow(GPIOC, GPIO_PIN_1);
#define RS_HIGH() GPIO_WriteHigh(GPIOC, GPIO_PIN_1);

#define RW_LOW() GPIO_WriteLow(GPIOC, GPIO_PIN_2);
#define RW_HIGH() GPIO_WriteHigh(GPIOC, GPIO_PIN_2);

#define E_LOW() GPIO_WriteLow(GPIOC, GPIO_PIN_3);
#define E_HIGH() GPIO_WriteHigh(GPIOC, GPIO_PIN_3);

#define RSTE_LOW() GPIO_WriteLow(GPIOC, GPIO_PIN_5);
#define RSTE_HIGH() GPIO_WriteHigh(GPIOC, GPIO_PIN_5);

#define LCD_DATE_port(dat) GPIO_Write(GPIOD, dat);

#define BUSY() GPIO_ReadInputPin(GPIOD, GPIO_PIN_7);

void GPIO_configuration()
{
  GPIO_DeInit(GPIOC);
  GPIO_DeInit(GPIOD);
  GPIO_Init(GPIOC, GPIO_PIN_1, GPIO_MODE_OUT_PP_LOW_FAST);
  GPIO_Init(GPIOC, GPIO_PIN_2, GPIO_MODE_OUT_PP_LOW_FAST);
  GPIO_Init(GPIOC, GPIO_PIN_3, GPIO_MODE_OUT_PP_LOW_FAST);
  GPIO_Init(GPIOC, GPIO_PIN_5, GPIO_MODE_OUT_PP_LOW_FAST);
  GPIO_Init(GPIOC, GPIO_PIN_6, GPIO_MODE_OUT_PP_LOW_FAST);
  GPIO_Init(GPIOD,GPIO_PIN_ALL, GPIO_MODE_OUT_PP_HIGH_FAST);

}

//延时函数
void delay(u8 xx)
{
  while(xx--);
}
//读忙程序
void rdby(void)
{
  unsigned char read;
  GPIO_configuration();
  while(1)
  {
    RS_LOW();
    RW_HIGH();
    E_LOW();
    LCD_DATE_port(0xff);
    E_HIGH();
    GPIO_Init(GPIOD, GPIO_PIN_ALL, GPIO_MODE_IN_FL_NO_IT);
    read=GPIO_ReadInputData(GPIOD);
    if((read&(GPIO_ReadInputPin(GPIOD, GPIO_PIN_7)))==0)
      break;
  }
}
//xie shu ju
void wr_data(uchar data)
{
  GPIO_configuration();
  rdby();
  RS_HIGH();
  RW_LOW();
  E_HIGH();
  LCD_DATE_port(data);
  E_LOW();
}
//xie ming ling
void wr_cmd(uchar cmd)
{
  GPIO_configuration();
  rdby();
  RS_LOW();
  RW_LOW();
  E_HIGH();
  LCD_DATE_port(cmd);
  E_LOW();
}
//hang lie que ding
void display(uchar x,uchar y,uchar *seg)
{
  uchar i;
  switch(x)
  {
  case 1:i=0x80;break;
  case 2:i=0x90;break;
  case 3:i=0x88;break;
  case 4:i=0x98;break;
  default :break;
  }
  i=i+y-1;
  wr_cmd(i);
    while(*seg>0)
  {
    wr_data(*seg);
    seg++;
  }
}
//lcd chu shi hua
void lcd_int()
{
  delay(5000);
  RSTE_HIGH();
  RSTE_LOW();
  RSTE_HIGH();
  wr_cmd(0x30);
  delay(500);
  wr_cmd(0x30);
  delay(500);
  wr_cmd(0x0e);
  delay(500);
  wr_cmd(0x01);
  delay(500);
  delay(500);
  wr_cmd(0x06);
  delay(500);
   
  
}
void main()
{
  lcd_int();
  while(1)
  {
    display(1,2,"nihao");
  }
}

此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。