打印
[STM32F1]

12864不显示 只有显示格格

[复制链接]
1638|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
duzhongliang|  楼主 | 2014-4-18 01:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 duzhongliang 于 2014-4-21 21:47 编辑

PSB直接接的5V电压,PE的7、8、9、10、依次接RS、R/W、E、RST,PC口的高八位用于数据传输,Vo直接接3.3V电压。

/* Includes ------------------------------------------------------------------*/
#include "stm32f10x.h"
#define yanshi  66
uint8_t mingzi[]={"我非常喜欢大闸蟹"};
void delay(unsigned int ms)
{
unsigned int x,y;
for(x=0;x<ms;x++)
for(y=0;y<8000;y++);
}
void IOInit(void){
  GPIO_InitTypeDef GPIOD_InitStructure;//定义GPIO的结构体
  GPIOD_InitStructure.GPIO_Pin = GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
  GPIOD_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
  GPIOD_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);//打开GPIOD时钟
  GPIO_Init(GPIOD, &GPIOD_InitStructure);  //初始化IO口



  GPIO_InitTypeDef GPIOE_InitStructure;//定义GPIO的结构体
  GPIOE_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
  GPIOE_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIOE_InitStructure.GPIO_Pin = GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11;
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE);
  GPIO_Init(GPIOE, &GPIOE_InitStructure);  //初始化IO口   
}
void IOInit_GPIO_Pin_15_In(void){
GPIO_InitTypeDef GPIOC_InitStructure;//定义GPIO的结构体
  GPIOC_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
  GPIOC_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
  GPIOC_InitStructure.GPIO_Pin = GPIO_Pin_15;
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
  GPIO_Init(GPIOC, &GPIOC_InitStructure);  //初始化IO口
}
void IOInit_GPIOC_Out(void){
  GPIO_InitTypeDef GPIOC_InitStructure;//定义GPIO的结构体
  GPIOC_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
  GPIOC_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIOC_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
  GPIO_Init(GPIOC, &GPIOC_InitStructure);  //初始化IO口
}

void RDBF(void){
  uint8_t temp;
// IOInit_GPIO_Pin_15_Out();
// GPIO_SetBits(GPIOC, GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15);//data 0-7
  GPIO_ResetBits(GPIOE,GPIO_Pin_7);//RS
  GPIO_SetBits(GPIOE, GPIO_Pin_8);//RW
  IOInit_GPIO_Pin_15_In();
  while(1){
    GPIO_SetBits(GPIOE, GPIO_Pin_9);//E
    delay(yanshi);   
    temp=GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_15);
    GPIO_ResetBits(GPIOE,GPIO_Pin_9);//E
    if(temp==0)break;
  }
}
void WRCommand(uint8_t temp){
  RDBF();
  IOInit_GPIOC_Out();
  GPIO_ResetBits(GPIOE, GPIO_Pin_7|GPIO_Pin_8);
  GPIO_Write(GPIOC,(uint16_t)temp<<8);
  GPIO_SetBits(GPIOE, GPIO_Pin_9);
  delay(yanshi);
  GPIO_ResetBits(GPIOE, GPIO_Pin_9);
}
void WRData(uint8_t temp){
  RDBF();
  IOInit_GPIOC_Out();
  GPIO_SetBits(GPIOE, GPIO_Pin_7);
  GPIO_ResetBits(GPIOE,GPIO_Pin_8);
  GPIO_Write(GPIOC,(uint16_t)temp<<8);
  GPIO_SetBits(GPIOE, GPIO_Pin_9);
  delay(yanshi);
  GPIO_ResetBits(GPIOE, GPIO_Pin_9);
}
void  LCDInit(void){
  delay(55);
  GPIO_ResetBits(GPIOE, GPIO_Pin_10);
  delay(55);
  GPIO_SetBits(GPIOE, GPIO_Pin_10);


  WRCommand(0x30);
  WRCommand(0x02);
  WRCommand(0x0C);
  WRCommand(0x01);
  WRCommand(0x06);
// WRCommand(0x80);
}
void LCDClear(void){
  WRCommand(0x01);
  WRCommand(0x34);
  WRCommand(0x30);
}
void ShowQQChar(uint8_t addr,uint8_t *english,uint8_t count){
  uint8_t i;
  WRCommand(addr);
  for(i=0;i<count;i++){
    WRData(english[i*2]);
    WRData(english[i*2+1]);
  }
}
void ShowNUMChar(uint8_t addr,uint8_t i,uint8_t count){
  uint8_t j;
  for(j=0;j<count;){
    WRCommand(addr);
    WRData(i+j);
    j++;
    WRData(i+j);
    addr++;
    j++;
  }
}
int main(void)
{
uint8_t temp=0x80;
  SystemInit();
  IOInit();

// ShowNUMChar(0x9000,0x01,0x0F);
     while (1)
  {
    LCDInit();
    //LCDClear();
    ShowQQChar(0x80,mingzi,8);
    delay(69);
    GPIO_SetBits(GPIOD, GPIO_Pin_13|GPIO_Pin_15);//置高IO口
    delay(69);
    GPIO_SetBits(GPIOE, GPIO_Pin_11);
    if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_11))
      GPIO_ResetBits(GPIOD, GPIO_Pin_15) ;
    GPIO_Write(GPIOD,temp<<7);
    WRCommand(0x01);
  }

}


沙发
mmuuss586| | 2014-4-18 08:21 | 只看该作者
那等于没显示

使用特权

评论回复
板凳
mmuuss586| | 2014-4-18 10:39 | 只看该作者
看看吧,不难的

12864.part2.rar

919.81 KB

12864.part1.rar

4 MB

使用特权

评论回复
地板
yzzly| | 2014-4-18 12:06 | 只看该作者
多数是CPU操作12864的速度太快造成的

使用特权

评论回复
5
duzhongliang|  楼主 | 2014-4-21 21:49 | 只看该作者
mmuuss586 发表于 2014-4-18 08:21
那等于没显示

版主 按这个思路在430可以,在这就不行

使用特权

评论回复
6
duzhongliang|  楼主 | 2014-4-21 21:50 | 只看该作者
本帖最后由 duzhongliang 于 2014-4-21 22:00 编辑
mmuuss586 发表于 2014-4-18 08:21
那等于没显示


#include  <msp430x16x.h>
void delay(unsigned int num){
  unsigned int i;
  for(;num>0;num--){
  while(i--);
  i=600;
  }
}
const unsigned char mingzi[]={"我非常喜欢大闸蟹"};
#define RS_Y   P5OUT |= 0x10
#define RS_N   P5OUT &= ~0X10
#define RW_Y  P5OUT |= 0x08
#define RW_N  P5OUT &= ~0x08
#define E_Y    P5OUT |= 0x04
#define E_N    P5OUT &= ~0X04

#define LCD_DataIn    P6DIR&=0x00   //数据口方向设置为输入
#define LCD_DataOut   P6DIR|=0xff  //数据口方向设置为输出

void RDBF(void){
  unsigned char temp;
  RS_N;
  RW_Y;
  //LCD_DataOut;
  while(1){
   // P6OUT=0xFF;
    LCD_DataIn;
    E_Y ;  
    delay(33);
    temp=P6IN;
    E_N ;
    //P2OUT = 0x00;
    if((temp&0x80) == 0)break;
  }
  
}

void WRCommand(unsigned char data){
  RDBF();
  RS_N;
  RW_N;
  LCD_DataOut;
  P6OUT = data;
  E_Y ;
  E_N ;
}

void WRData(unsigned char data){
  RDBF();
  RS_Y;
  RW_N;
  LCD_DataOut;
  P6OUT = data;
  E_Y ;
  E_N ;
}

void LCDInit(void){
  WRCommand(0x30);
  WRCommand(0x02);
  WRCommand(0x0C);
  WRCommand(0x01);
  WRCommand(0x06);
}

void ShowQQChar(unsigned addr ,const unsigned char * mingzi){
  unsigned char i;
  WRCommand(addr);
  for(i=0;i<8;i++){
    WRData(mingzi[i*2]);
    WRData(mingzi[i*2+1]);
  }
}

void main(){
  
  WDTCTL = WDTPW + WDTHOLD;                 // Stop watchdog timer
  P5DIR |=0xFF;
  P2DIR |= 0x11;
  while(1){
      LCDInit();
  ShowQQChar(0x80,mingzi);
  P2OUT = 0x00;
  delay(44);
  WRCommand(0x01);
  P2OUT = 0x11;
  delay(33);
  }
}




















使用特权

评论回复
7
mmuuss586| | 2014-4-21 21:52 | 只看该作者
duzhongliang 发表于 2014-4-21 21:49
版主 按这个思路在430可以,在这就不行

那也急不来,实在不行就只能拿示波器分析下时序,
和12864的DATASHEET比对下,哪个地方的时序不合理。

使用特权

评论回复
8
duzhongliang|  楼主 | 2014-4-22 01:32 | 只看该作者
终于搞定原来是硬件的问题

使用特权

评论回复
9
picasso101| | 2014-9-25 16:29 | 只看该作者
请教下,怎么实现的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

48

帖子

1

粉丝