OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 10006|回复: 25

mini板驱动12864一直停在忙信号

[复制链接]

145

主题

477

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1264
金钱
1264
注册时间
2012-4-2
在线时间
69 小时
发表于 2012-10-15 09:03:36 | 显示全部楼层 |阅读模式

初始化程序没有停下,但一到写数据显示时就忙了。 一个字都显示不出来....
帮忙看看吧


#include "12864.h"
#include "sys.h"
#include "delay.h"


void LCD12864_Init(void)
{
 RCC->APB2ENR|=1<<2;   //A
 RCC->APB2ENR|=1<<3;   //B

 GPIOA->CRL&=0XFFFFF000;
 GPIOA->CRL|=0X00000333;

 GPIOB->CRL&=0X00000000;
 GPIOB->CRL|=0X33333333;
}


void NOP(void)
{ u8 i; for(i=0; i<100; i++); }

/*******************************************************************/
/*                                                                 */
/*检查LCD忙状态                                                    */
/*lcd_busy为1时,忙,等待。lcd-busy为0时,闲,可写指令与数据。      */
/*                                                                 */
/*******************************************************************/
u8 lcd_busy(void)
 {                         
    u8 result;
    LCD_RS = 0;
    LCD_RW = 1;
    LCD_EN = 1;
    NOP();
 NOP();
    result = GPIOB->IDR&0x80;
    LCD_EN = 0;
    return(result);
}

/*******************************************************************/
/*                                                                 */
/*写指令数据到LCD                                                  */
/*RS=L,RW=L,E=高脉冲,D0-D7=指令码。                             */
/*                                                                 */
/*******************************************************************/
void lcd_wcmd(u8 cmd)
{                         
    while(lcd_busy());
    LCD_RS = 0;
    LCD_RW = 0;
    LCD_EN = 0;
 NOP();
 NOP();
    LCD_data(cmd); // |0x0000ffff
    NOP();
 NOP();
    LCD_EN = 1;
    NOP();
 NOP();
    LCD_EN = 0; 
}

/*******************************************************************/
/*                                                                 */
/*写显示数据到LCD                                                  */
/*RS=H,RW=L,E=高脉冲,D0-D7=数据。                               */
/*                                                                 */
/*******************************************************************/
void lcd_wdat(u8 dat)
{                         
  while(lcd_busy());
    LCD_RS = 1;
    LCD_RW = 0;
    LCD_EN = 0;
    LCD_data(dat); //   |0x0000ffff
    NOP();
 NOP();
    LCD_EN = 1;
    NOP();
 NOP();
    LCD_EN = 0;
}

/*******************************************************************/
/*                                                                 */
/*  LCD初始化设定                                                  */
/*                                                                 */
/*******************************************************************/
void lcd_init(void)
{
    lcd_wcmd(0x34);      //扩充指令操作
    delay_ms(5);
    lcd_wcmd(0x30);      //基本指令操作
    delay_ms(5);
    lcd_wcmd(0x0C);      //显示开,关光标
    delay_ms(5);
    lcd_wcmd(0x01);      //清除LCD的显示内容
    delay_ms(5);
 while(lcd_busy());
}

/*********************************************************/
/*                                                       */
/* 设定显示位置                                          */
/*                                                       */
/*********************************************************/
void lcd_pos(u8 X,u8 Y)
{                         
   u8  pos;
   if (X==0)
     {X=0x80;}
   else if (X==1)
     {X=0x90;}
   else if (X==2)
     {X=0x88;}
   else if (X==3)
     {X=0x98;}
   pos = X+Y ; 
   lcd_wcmd(pos);     //显示地址
}

 




#ifndef __12864_H__
#define __12864_H__

#include "sys.h"
/*
const u8 dis1[] = {"2012年10月13日"};
const u8 dis2[] = {"单片机动手制作"};
const u8 dis3[] = {"强强联合--------"};
const u8 dis4[] = {"--------新兴阳光"};
*/
//#define LCD_data  GPIOB->ODR   //数据口
#define LCD_data(x) GPIOB->ODR=(GPIOB->ODR&0xff00)|(x&0x00FF); //Pa0-Pa7输出//数据口
#define LCD_RS PCout(7)            //寄存器选择输入
#define LCD_RW PCout(8)            //液晶读/写控制
#define LCD_EN PCout(9)           //液晶使能控制


void lcd_pos(u8 X,u8 Y);
void lcd_init(void);
void lcd_wdat(u8 dat);
void lcd_wcmd(u8 cmd);
u8 lcd_busy(void);
void NOP(void);
void LCD12864_Init(void);


#endif


#include <stm32f10x_lib.h>
#include "sys.h"
#include "delay.h"
#include "12864.H"

/*********************************************************/
/*               */
/* 主程序                     */
/*                                                       */
/*********************************************************/

const u8 dis1[] = {"2012年10月13日"};
const u8 dis2[] = {"单片机动手制作"};
const u8 dis3[] = {"强强联合--------"};
const u8 dis4[] = {"--------新兴阳光"};

int main(void)
 {
  u8 i;
 Stm32_Clock_Init(9);
 delay_init(72);
 LCD12864_Init();

    delay_ms(10);                 //延时
    lcd_init();                //初始化LCD 
 delay_ms(10);
 lcd_init();
 delay_ms(100);
 while(1)
 {          
     lcd_pos(0,0);             //设置显示位置为第一行的第1个字符
     i = 0;
     while(dis1 != '\0')
      {                         //显示字符
        lcd_wdat(dis1);
        i++;
      }
     lcd_pos(1,0);             //设置显示位置为第二行的第1个字符
     i = 0;
     while(dis2 != '\0')
      {
        lcd_wdat(dis2);      //显示字符
        i++;
      }
    lcd_pos(2,0);             //设置显示位置为第三行的第1个字符
      i = 0;
     while(dis3 != '\0')
      {
        lcd_wdat(dis3);      //显示字符
        i++;
      }
   lcd_pos(3,0);             //设置显示位置为第四行的第1个字符
      i = 0;
     while(dis4 != '\0')
      {
        lcd_wdat(dis4);      //显示字符
        i++;
      }

   while(1);
  }
}









STM32 12864 并口.rar

432.05 KB, 下载次数: 823

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

25

主题

683

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1351
金钱
1351
注册时间
2012-4-25
在线时间
195 小时
发表于 2012-10-15 11:16:56 | 显示全部楼层
以前 驱动过 ,STM32 驱动 128*64需要的是5V电压,3,3V不行
1-1
回复 支持 反对

使用道具 举报

7

主题

43

帖子

0

精华

初级会员

Rank: 2

积分
98
金钱
98
注册时间
2012-9-25
在线时间
3 小时
发表于 2012-10-15 11:54:46 | 显示全部楼层
先把忙信号屏蔽下,看能不能显示哦!
回复 支持 反对

使用道具 举报

145

主题

477

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1264
金钱
1264
注册时间
2012-4-2
在线时间
69 小时
 楼主| 发表于 2012-10-15 12:02:05 | 显示全部楼层
屏蔽了也不行。 就是去掉忙检测

3.3V不行吗? 
我是并口,弄好并口再弄串口
回复 支持 反对

使用道具 举报

25

主题

683

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1351
金钱
1351
注册时间
2012-4-25
在线时间
195 小时
发表于 2012-10-15 13:50:17 | 显示全部楼层
3.3V不行,曾经弄过很久,就是因为电压达不到 一定要5V
1-1
回复 支持 反对

使用道具 举报

145

主题

477

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1264
金钱
1264
注册时间
2012-4-2
在线时间
69 小时
 楼主| 发表于 2012-10-15 16:04:35 | 显示全部楼层


 
确实是,谢谢大家。
以后看资料一定要注意工作电压才行,以前一直漠不关心的电压。

还是谢谢大家哈
回复 支持 反对

使用道具 举报

2

主题

8

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2012-11-14
在线时间
3 小时
发表于 2012-12-25 14:12:33 | 显示全部楼层
回复【5楼】mygod:
---------------------------------
在么 我看到你做过128*64的LCD驱动 一定要3.3V么?我的这块屏幕上参数是2.8-5V,可是我还是点不亮
回复 支持 反对

使用道具 举报

46

主题

1579

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1970
金钱
1970
注册时间
2011-7-17
在线时间
4 小时
发表于 2012-12-25 15:02:43 | 显示全部楼层
我表示,STM32驱动LCD12864是一个浪费,12864这东西,不是为STM32设计的。
Time?And?Relative?Dimension?In?Space.
回复 支持 反对

使用道具 举报

25

主题

683

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1351
金钱
1351
注册时间
2012-4-25
在线时间
195 小时
发表于 2012-12-25 15:35:22 | 显示全部楼层
回复【6楼】767904101:
---------------------------------
自己仔细检查下接线,电压一般是用5V的,
1-1
回复 支持 反对

使用道具 举报

86

主题

417

帖子

0

精华

高级会员

Rank: 4

积分
781
金钱
781
注册时间
2013-2-20
在线时间
0 小时
发表于 2013-4-20 22:35:52 | 显示全部楼层
我用的迷你板的5v电压给12864供电,12864的数据口和控制口 接的mini板的io口  程序 一样卡在忙状态 ,而且 把忙检测用延时来代替  屏幕照样不能显示, 为啥呢????
乐于思考,敢于请教;问人不累,诲人不倦!本人CSDN博客:http://blog.csdn.net/dcx1205 学习嵌入式的同学不要错过啊!
回复 支持 反对

使用道具 举报

145

主题

477

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1264
金钱
1264
注册时间
2012-4-2
在线时间
69 小时
 楼主| 发表于 2013-4-28 00:12:21 | 显示全部楼层
可能是程序没写好,或者是电压没供正确。
回复 支持 反对

使用道具 举报

2

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
58
金钱
58
注册时间
2013-3-18
在线时间
0 小时
发表于 2013-4-28 19:59:33 | 显示全部楼层
回复【10楼】可乐虎:
---------------------------------
可乐虎在驱动12864呢,加油啊,有时间我也试试
回复 支持 反对

使用道具 举报

头像被屏蔽

6168

主题

7036

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
19705
金钱
19705
注册时间
2012-12-27
在线时间
25 小时
发表于 2013-5-2 21:46:34 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

86

主题

417

帖子

0

精华

高级会员

Rank: 4

积分
781
金钱
781
注册时间
2013-2-20
在线时间
0 小时
发表于 2013-5-3 15:53:04 | 显示全部楼层
搞定了呢
回复 支持 反对

使用道具 举报

50

主题

201

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
423
金钱
423
注册时间
2013-4-9
在线时间
1 小时
发表于 2013-5-4 16:54:34 | 显示全部楼层
回复【楼主位】767904101:
---------------------------------
我在想 你这个检测忙 不用把io口设置成输入的吗
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
21
金钱
21
注册时间
2013-5-27
在线时间
0 小时
发表于 2013-5-27 16:30:03 | 显示全部楼层
回复【6楼】767904101:
---------------------------------
“只把VDD接5V,其它都直接接到芯片io口上”是这个意思吗?
回复 支持 反对

使用道具 举报

60

主题

153

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
428
金钱
428
注册时间
2014-1-28
在线时间
8 小时
发表于 2014-2-27 18:54:49 | 显示全部楼层
回复【14楼】可乐虎:
---------------------------------

兄弟,你怎么搞定的?
我现在也是STM32,和 +5V的12864,我郁闷。
硬件该怎么连线呢?
求解答。
谢谢。
回复 支持 反对

使用道具 举报

56

主题

289

帖子

0

精华

高级会员

Rank: 4

积分
865
金钱
865
注册时间
2012-11-16
在线时间
65 小时
发表于 2014-5-4 18:21:50 | 显示全部楼层
有谁解决了这个问题吗
回复 支持 反对

使用道具 举报

145

主题

477

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1264
金钱
1264
注册时间
2012-4-2
在线时间
69 小时
 楼主| 发表于 2014-6-20 23:28:51 | 显示全部楼层
用回复【18楼】一般BDN:
---------------------------------
可以用3.3V转5V芯片
回复 支持 反对

使用道具 举报

56

主题

289

帖子

0

精华

高级会员

Rank: 4

积分
865
金钱
865
注册时间
2012-11-16
在线时间
65 小时
发表于 2014-6-21 10:22:44 | 显示全部楼层
回复【19楼】767904101:
---------------------------------
能给个具体型号吗
回复 支持 反对

使用道具 举报

145

主题

477

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1264
金钱
1264
注册时间
2012-4-2
在线时间
69 小时
 楼主| 发表于 2014-6-21 10:34:20 | 显示全部楼层
sn74alvc164245
回复 支持 反对

使用道具 举报

145

主题

477

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1264
金钱
1264
注册时间
2012-4-2
在线时间
69 小时
 楼主| 发表于 2014-6-21 10:34:44 | 显示全部楼层
回复【20楼】一般BDN:
---------------------------------
sn74alvc164245
回复 支持 反对

使用道具 举报

56

主题

289

帖子

0

精华

高级会员

Rank: 4

积分
865
金钱
865
注册时间
2012-11-16
在线时间
65 小时
发表于 2014-6-21 11:13:26 | 显示全部楼层
回复【22楼】767904101:
---------------------------------
谢谢
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2014-5-15
在线时间
1 小时
发表于 2014-8-26 11:28:33 | 显示全部楼层


12864用5V供电,其他接口分别接10K上拉电阻到5V(上图是我从电话机拆下的一片12864加10K上拉电阻接STM32的图)
回复 支持 反对

使用道具 举报

5

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
65
金钱
65
注册时间
2014-10-27
在线时间
0 小时
发表于 2014-10-29 21:00:54 | 显示全部楼层
回复【14楼】可乐虎:
---------------------------------
请问你这个怎么搞定的,我现在也在用mini板驱动5V12864,遇到跟你一样的情况,一直处于检测忙状态。
回复 支持 反对

使用道具 举报

1

主题

44

帖子

0

精华

初级会员

Rank: 2

积分
171
金钱
171
注册时间
2016-3-8
在线时间
41 小时
发表于 2016-8-11 19:50:54 | 显示全部楼层
我也卡在忙检测了,把忙检测屏蔽掉就能显示了。但这样是掩耳盗铃啊,怎么办
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-7 20:53

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表