OpenEdv-开源电子网

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

LCD1602不能正常显示

[复制链接]

3

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
70
金钱
70
注册时间
2015-4-8
在线时间
8 小时
发表于 2015-5-2 13:34:13 | 显示全部楼层 |阅读模式
5金钱
输入输入2、4显示的是6;输入3、5显示的是7;输入B、D显示F;输入C、E显示的是G
# include "sys.h"
# include "usart.h"
# include "delay.h"
# include "RUN.h"
typedef volatile unsigned char  uint8; //??·???8??±???
typedef volatile unsigned int   uint16;//??·???16??????±???
typedef volatile unsigned long  uint32;//??·???32???¤????±???
void LCD_Init(void);//?ù?÷
void LCD_FBUF(void);//?ù?÷
void LCD1602_Init(void);//?ù?÷
void LCD_WriteCom(unsigned char Com);//?ù?÷
void LCD_WriteData(unsigned char Date);//?ù?÷

//?÷????
int main(void)
{
Stm32_Clock_Init(9);
delay_init(72);
LCD_Init() ;   //GPIO??????????????
  LCD1602_Init();//LCD??????
while(1)
  {
LCD_WriteCom  (0x80+00);   //??????
  LCD_WriteData (0x36);
 }
}

/*
  LCDRS=0;       //RS=0,6
     LCDRW=0;       //RW=1,5
     LCDEN=0;       //EN=1,4
DATA_OUT=0X95; //????????1
   LCD_WriteCom  (0x80+00);   //??????
   LCD_WriteData ('A');    //??????
LCD_WriteData (0xA3);
LCD_WriteCom  (0x80+2);   //??????
   LCD_WriteData ('B');    //??????
LCD_WriteData (0xA3);
LCD_WriteCom  (0x80+40);   //??????
   LCD_WriteData ('C');    //??????
LCD_WriteData (0xA3);
LCD_WriteCom  (0x80+40);   //??????
   LCD_WriteData ('A');    //??????
LCD_WriteData ('B');    //??????
LCD_WriteData ('C');    //??????
LCD_WriteData ('D');    //??????
LCD_WriteData ('E');    //??????
LCD_WriteData ('F');    //??????
LCD_WriteData ('G');    //??????
LCD_WriteData ('H');    //??????
LCD_WriteData ('I');    //??????
LCD_WriteData ('G');    //??????
LCD_WriteData ('K');    //??????
LCD_WriteData ('L');    //??????
LCD_WriteData ('M');    //??????
LCD_WriteData ('N');    //??????
   LCD_WriteData ('O');    //??????
LCD_WriteCom  (0x80+00);   //??????
LCD_WriteData ('1');    //??????
LCD_WriteData ('2');    //??????
LCD_WriteData ('3');    //??????
LCD_WriteData ('4');    //??????
LCD_WriteData ('5');    //??????
LCD_WriteData ('6');    //??????
LCD_WriteData ('7');    //??????
LCD_WriteData ('8');    //??????
LCD_WriteData ('9');    //??????
LCD_WriteData ('1');    //??????
LCD_WriteData ('2');    //??????
LCD_WriteData ('3');    //??????
LCD_WriteData ('4');    //??????
LCD_WriteData ('5');    //??????
LCD_WriteData ('6');    //??????
LCD_WriteData ('7');    //??????*/
 



# include "run.h"
# include "delay.h"
//??????PB4??PB5??PB6·?±???EN??RW??RS
//8????????·?±?????
//lcd IO??????
void LCD_Init(void)
{
RCC->APB2ENR|=1<<3;//????PORTB?±??
  RCC->APB2ENR|=1<<4;//????PORTC?±??
JTAG_Set(SWD_ENABLE);//??±?JTAG????SWD
  GPIOB->CRL&=0XF000FFFF;//PB4??PB5??PB6??×÷????????????
GPIOB->CRL|=0X03330000;//PB4??PB5??PB6???©????????50Hz
GPIOB->ODR=0X0070;
GPIOC->CRL&=0X00000000;//??PC0~PC7??×÷????????????
GPIOC->CRL|=0X33333333;//PC0~PC7???©????????50Hz
GPIOC->ODR=0X00FF;
}
//?????ò
void LCD_FBUF(void)
{
  LCDRS=0;       //RS=0,6
  LCDRW=1;       //RW=1,5
  LCDEN=1;       //EN=1,4
delay_ms(5); 
  DATA_OUT=0XFF; //????????1
  while((DATA_OUT & 0x80) == 0x80);    //??????????D7 PC9??·????±??
  LCDRW=1;       //RW=1
  LCDEN=0;       //EN=0
}

//LCD??????×?????
void LCD_WriteCom(unsigned char Com)
{
//LCD_FBUF();                 //?ì????·?????×???
  LCDRS=0;                    //RS=0
  LCDRW=0;                    //RW=0
  LCDEN=0;                   //EN=0
  delay_ms(2); 
DATA_OUT = Com;             //????????
  delay_ms(2);               //???±1ms
  LCDEN=1;                    //EN=1
  delay_ms(2);                //???±1ms
  LCDEN=0;                    //EN=0
delay_ms(2);
}

//LCD??????×?????
void LCD_WriteData(unsigned char Date)
{
//LCD_FBUF();                     //?ì????·?????×???
  LCDRS=1;                        //RS=1
  LCDRW=0;                        //RW=0
  LCDEN=0;                        //EN=0
  delay_ms(2); 
DATA_OUT = Date;                //????????
  delay_ms(2);                    //???±4ms
  LCDEN=1;                        //EN=1
  delay_ms(2);                    //???±4ms
  LCDEN=0;                        //EN=0
delay_ms(2);
}

//LCD????????????????
void LCD1602_Init(void)
{
delay_ms(2);  
  LCD_WriteCom(0X38);           //?è??16*2??????5*7???ó??8??????????
  delay_ms(2);                                     //???±200us
  LCD_WriteCom(0X38);           //?è??16*2??????5*7???ó??8??????????
  delay_ms(2);                                   //???±200us
  LCD_WriteCom(0X0C);           //?è???ò??????
  delay_ms(2);                                     //???±200us
  LCD_WriteCom(0X06);           //???ò????????×?·??ó??1
  delay_ms(2);                                    //???±200us
  LCD_WriteCom(0X01);           //????????
  delay_ms(2);                                     //???±200us
}

最佳答案

上帝能给的就那么多
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
70
金钱
70
注册时间
2015-4-8
在线时间
8 小时
 楼主| 发表于 2015-5-2 13:34:14 | 显示全部楼层
回复

使用道具 举报

58

主题

6294

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11556
金钱
11556
注册时间
2014-4-1
在线时间
1317 小时
发表于 2015-5-2 14:05:06 | 显示全部楼层
这种显示,中间过程太多,不好说。

先对照硬件,看每个字符的编码对不对;

然后看程序,是否输出了对应的编码。

先编个简单的程序,把硬件和编码固定下来。
回复

使用道具 举报

3

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
70
金钱
70
注册时间
2015-4-8
在线时间
8 小时
 楼主| 发表于 2015-5-2 14:15:19 | 显示全部楼层
回复【2楼】xuande:
--其实就是一个主函数去显示了一个字符,有的显示没有问题,有的却显示错误,-------------------------------
int main(void)
{
Stm32_Clock_Init(9);
delay_init(72);
LCD_Init() ;   //GPIO初始化
  LCD1602_Init();//LCD初始化
while(1)
  {
LCD_WriteCom  (0x80+00);   //写指令
  LCD_WriteData (0x36);//写数据
 }
}
上帝能给的就那么多
回复

使用道具 举报

3

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
70
金钱
70
注册时间
2015-4-8
在线时间
8 小时
 楼主| 发表于 2015-5-2 14:15:37 | 显示全部楼层
回复【2楼】xuande:
---------------------------------
要加上拉电阻么?
上帝能给的就那么多
回复

使用道具 举报

56

主题

1237

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2644
金钱
2644
注册时间
2014-2-13
在线时间
518 小时
发表于 2015-5-3 20:44:36 | 显示全部楼层
可以参考我的帖子
http://www.openedv.com/posts/list/46874.htm
技术交流,Sell 中颖单片机,欢迎私信骚扰
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-23 02:01

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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