OpenEdv-开源电子网

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

STM32F103C8驱动LCD1602A出了问题。。。

[复制链接]

1

主题

3

帖子

0

精华

新手入门

积分
15
金钱
15
注册时间
2018-6-12
在线时间
0 小时
发表于 2018-6-12 21:39:20 | 显示全部楼层 |阅读模式
1金钱
最近课设要用到LCD1602,就借鉴了一下前辈的代码:http://www.openedv.com/posts/list/46874.htm
这个我用战舰的ZE没有问题,但改成C8的最小开发板就不行了,只能显示白框。我也看了兼容5V电平的IO口。
这么连的:VSS   |VDD|  V0  | RS  | RW|   E  |D0  |  D1  |  D2 |  D3| D4| D5 |  D6 | D7 | A   |   K
               GND  |5V   |GND | B15| B14| B13| B10|  B11 | B12| A8 | A9 |A10| A11 |A12|3.3V| GND
[mw_shl_code=c,true]#include "delay.h"
#include "sys.h"
#include "usart.h"
#include "led.h"
#include "lcd1602.h"

int main(void)
{
        u8 str[] = "ATOM@ALIENTEK";
       
        delay_init();
        NVIC_Configuration();
        uart_init(9600);
        GPIO_Configuration();
        LED_Init();
        LCD1602_Init();
        LCD1602_Show_Str(1, 0, str);
        LCD1602_Show_Str(2, 1, "I love STM32");
        /*while(1)
        {
                LED0 = 0;
                delay_ms(200);
                LED0 = 1;
                delay_ms(200);
        }*/
}
[/mw_shl_code][mw_shl_code=c,true]#include "lcd1602.h"
#include "delay.h"

void GPIO_Configuration(void)
{
        GPIO_InitTypeDef        GPIO_InitStructure;
       
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB |RCC_APB2Periph_GPIOA,ENABLE);//ê1ÄüPB,PD¶Ë¿úê±Öó

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;        //íÆíìêä3ö
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;        //IO¿úËù¶èÎa50MHz
        GPIO_Init(GPIOA, &GPIO_InitStructure);                                //3õê¼»ˉGPIOD0~7

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15|GPIO_Pin_14|GPIO_Pin_13|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;        //íÆíìêä3ö
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;        //IO¿úËù¶èÎa50MHz
        GPIO_Init(GPIOB, &GPIO_InitStructure);                                //3õê¼»ˉGPIB15,14,13
}

/* μè′yòo¾§×¼±¸oà */
void LCD1602_Wait_Ready(void)
{
        u8 sta;
       
        DATAOUT(0xff);
        LCD_RS_Clr();
        LCD_RW_Set();
        do
        {
                LCD_EN_Set();
                delay_ms(5);        //Ñóê±5ms£¬·Ç3£ÖØòa
                sta = GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_12);//¶áè¡×′ì¬×Ö
                LCD_EN_Clr();
        }while(sta & 0x80);//bit7μèóú1±íê¾òo¾§ÕyÃ|£¬Öظ′¼ì2aÖ±μ½Æäμèóú0ÎaÖ1
}

/* ÏòLCD1602òo¾§D′èëò»×Ö½úÃüácmd-′yD′èëÃüáîÖμ */
void LCD1602_Write_Cmd(u8 cmd)
{
        LCD1602_Wait_Ready();
        LCD_RS_Clr();
        LCD_RW_Clr();
        DATAOUT(cmd);
        LCD_EN_Set();
        LCD_EN_Clr();
}

/* ÏòLCD1602òo¾§D′èëò»×Ö½úêy¾Y£¬dat-′yD′èëêy¾YÖμ */
void LCD1602_Write_Dat(u8 dat)
{
        LCD1602_Wait_Ready();
        LCD_RS_Set();
        LCD_RW_Clr();
        DATAOUT(dat);
        LCD_EN_Set();
        LCD_EN_Clr();
}

/* ÇåÆá */
void LCD1602_ClearScreen(void)
{
        LCD1602_Write_Cmd(0x01);
}

/* éèÖÃÏÔê¾RAMÆeê¼μØÖ·£¬òà¼′1a±êλÖã¬(x,y)-¶Ôó|ÆáÄ»éÏμÄ×Ö·û×ø±ê */
void LCD1602_Set_Cursor(u8 x, u8 y)
{
        u8 addr;
       
        if (y == 0)
                addr = 0x00 + x;
        else
                addr = 0x40 + x;
        LCD1602_Write_Cmd(addr | 0x80);
}

/* Ôúòo¾§éÏÏÔê¾×Ö·û′®£¬(x,y)-¶Ôó|ÆáÄ»éÏμÄÆeê¼×ø±ê£¬str-×Ö·û′®Ö¸Õë */
void LCD1602_Show_Str(u8 x, u8 y, u8 *str)
{
        LCD1602_Set_Cursor(x, y);
        while(*str != '\0')
        {
                LCD1602_Write_Dat(*str++);
        }
}

/* 3õê¼»ˉ1602òo¾§ */
void LCD1602_Init(void)
{
        LCD1602_Write_Cmd(0x38);        //16*2ÏÔê¾£¬5*7μãÕó£¬8λêy¾Y¿ú
        LCD1602_Write_Cmd(0x0c);        //¿aÏÔê¾£¬1a±ê1رÕ
        LCD1602_Write_Cmd(0x06);        //ÎÄ×Ö2»¶ˉ£¬μØÖ·×Ô¶ˉ+1
        LCD1602_Write_Cmd(0x01);        //ÇåÆá
}

[/mw_shl_code][mw_shl_code=c,true]#include "led.h"

//3õê¼»ˉPB5oíPE5Îaêä3ö¿ú.2¢ê1ÄüÕaὸö¿úμÄê±Öó                    
//LED IO3õê¼»ˉ
void LED_Init(void)
{
        GPIO_InitTypeDef        GPIO_InitStructure;
       
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOE, ENABLE);         //ê1ÄüPB,PE¶Ë¿úê±Öó
       
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;                                 //LED0-->PB.5 ¶Ë¿úÅäÖÃ
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                  //íÆíìêä3ö
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                 //IO¿úËù¶èÎa50MHz
        GPIO_Init(GPIOB, &GPIO_InitStructure);                                         //¸ù¾Yé趨2Îêy3õê¼»ˉGPIOB.5
        GPIO_SetBits(GPIOB,GPIO_Pin_6);                                                 //PB.5 êä3ö¸ß

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;                             //LED1-->PE.5 ¶Ë¿úÅäÖÃ, íÆíìêä3ö
        GPIO_Init(GPIOB, &GPIO_InitStructure);                                           //íÆíìêä3ö £¬IO¿úËù¶èÎa50MHz
        GPIO_SetBits(GPIOB,GPIO_Pin_9);                                                  //PE.5 êä3ö¸ß
}

[/mw_shl_code]

前辈的代码.rar

1.88 MB, 下载次数: 166

我的代码.rar

1.89 MB, 下载次数: 121

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

使用道具 举报

1

主题

3

帖子

0

精华

新手入门

积分
15
金钱
15
注册时间
2018-6-12
在线时间
0 小时
 楼主| 发表于 2018-6-12 21:40:00 | 显示全部楼层
疯狂求助,我真的是已经懵逼了!
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2018-6-13 00:46:18 | 显示全部楼层
参考论坛其他网友的代码,继续整
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

7

主题

35

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
309
金钱
309
注册时间
2017-3-4
在线时间
113 小时
发表于 2018-6-13 08:47:08 | 显示全部楼层
1602初始化的时候,写了一条指令之后延时一下试试。比如:写了0x38;delay();0x0c;delay();..........
回复

使用道具 举报

0

主题

4

帖子

0

精华

新手上路

积分
21
金钱
21
注册时间
2017-2-21
在线时间
3 小时
发表于 2018-9-18 11:24:43 | 显示全部楼层
学习下,谢谢分享
回复

使用道具 举报

7

主题

20

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2018-9-12
在线时间
11 小时
发表于 2018-9-21 21:26:22 | 显示全部楼层
是不是头文件没改
回复

使用道具 举报

5

主题

52

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
305
金钱
305
注册时间
2018-12-5
在线时间
43 小时
发表于 2018-12-6 09:01:52 | 显示全部楼层
请问我电路外面没接上拉电阻,用的是STM32F103T6,GPIOA口用到的不兼容5V,请问能调吗?
回复

使用道具 举报

0

主题

8

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
271
金钱
271
注册时间
2018-10-15
在线时间
46 小时
发表于 2019-1-23 15:12:13 | 显示全部楼层
1602的D0~D7口你接的是MCU上的PA和PB口,但是你使用的DATAOUT()函数,在头文件里面定义的是操作的PD口  #define        DATAOUT(x)        GPIO_Write(GPIOD, x)
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-23 14:59

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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