打印

STM32驱动液晶的问题

[复制链接]
1491|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
siabc|  楼主 | 2013-10-1 21:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 siabc 于 2013-10-2 12:53 编辑

下面为我的驱动程序,在1602液晶上不显示字母a啊,求大家给看看,哪里写的不对啊,我用示波器看脉冲似乎是对的,疑惑


#include "stm32f10x.h"
#define uchar unsigned char
#define uint unsigned int
#define EN_Enable GPIO_WriteBit(GPIOB,GPIO_Pin_12, Bit_SET); //lcden使能
#define EN_Disable GPIO_WriteBit(GPIOB,GPIO_Pin_12, Bit_RESET);
#define RS_Enable GPIO_WriteBit(GPIOB,GPIO_Pin_13, Bit_SET);  //rs使能
#define RS_Disable GPIO_WriteBit(GPIOB,GPIO_Pin_13, Bit_RESET);
#define WR_Enable GPIO_WriteBit(GPIOB,GPIO_Pin_14, Bit_SET); //写指令
#define WR_Disable GPIO_WriteBit(GPIOB,GPIO_Pin_14, Bit_RESET);

void delay()
{
        unsigned int i;
        char j=0;
        for(j=0;j<10;j++)
        for(i=0;i<1100;i++);
}

void Write_Com(uchar dat)        //写命令
{
        RS_Disable;
        delay();
        EN_Disable;
        delay();
        WR_Disable;
        delay();
        GPIOC->ODR=dat;        //这里给PORTC复制是不是这么写的??
        delay();        
        EN_Enable;
        delay();
        delay();
}

void Write_Dat(uchar dat)  //写数据
{
        RS_Enable;         
        delay();
        EN_Disable;
        delay();
        WR_Disable;
        delay();
        GPIOC->ODR=dat;        //这里给PORTC复制是不是这么写的??
        delay();
        EN_Enable;
        delay();
        delay();
}

void LCD_Init()
{
        RS_Disable;
        delay();
        WR_Disable;
        delay();
        EN_Disable;
        delay();
        Write_Com(0x38);
        Write_Com(0x0c);
        Write_Com(0x06);
        Write_Com(0x01);
        Write_Com(0x80);
}

int main()
{
        GPIO_InitTypeDef my_GPIO; //my_GPIO是结构体变量
        my_GPIO.GPIO_Pin=GPIO_Pin_All;
        my_GPIO.GPIO_Speed=GPIO_Speed_10MHz;
        my_GPIO.GPIO_Mode=GPIO_Mode_Out_PP;
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOB,ENABLE);
        GPIO_Init(GPIOC,&my_GPIO);//PORTC为RS,RW,LCDEN        
        GPIO_Init(GPIOB,&my_GPIO);//PORTB为数据端(只取低八位)
        
        LCD_Init();
         while(1)
        {
                 Write_Com(0x80);//写地址
                 Write_Dat('a');//写数据
        }
}
沙发
siabc|  楼主 | 2013-10-2 10:02 | 只看该作者
怎么没人回答啊

使用特权

评论回复
板凳
香如故| | 2013-10-2 10:50 | 只看该作者
电路图贴上来才好看啊

使用特权

评论回复
地板
outstanding| | 2013-10-2 11:48 | 只看该作者
什么液晶  什么都没有告诉我们,怎么帮?

使用特权

评论回复
5
siabc|  楼主 | 2013-10-2 12:56 | 只看该作者
outstanding 发表于 2013-10-2 11:48
什么液晶  什么都没有告诉我们,怎么帮?

是1602的,就是GPIOB的12,13,14分别接液晶的EN,RS,RW,然后GPIOC的0~7接液晶的八个数据口

使用特权

评论回复
6
siabc|  楼主 | 2013-10-2 12:59 | 只看该作者
香如故 发表于 2013-10-2 10:50
电路图贴上来才好看啊

可是图不好贴啊,就是GPIOB的12,13,14分别接液晶的EN,RS,RW,然后GPIOC的0~7接液晶的八个数据口

使用特权

评论回复
7
siabc|  楼主 | 2013-10-2 16:13 | 只看该作者
求指导啊,刚刚接触STM32

使用特权

评论回复
8
lofky| | 2013-10-2 18:19 | 只看该作者
我建议你单步调试

使用特权

评论回复
9
wozaiyanda| | 2013-10-5 20:02 | 只看该作者
在初始化中的几个write_com之间加下延时试试

使用特权

评论回复
10
拿起书本| | 2013-10-7 20:53 | 只看该作者
可能是一些引脚的定义有错误,或者是你的程序时序出现问题,不太确定

使用特权

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

本版积分规则

6

主题

38

帖子

0

粉丝