野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 14571|回复: 2

stm32控制LCD12864

[复制链接]
发表于 2015-3-19 19:53:56 | 显示全部楼层 |阅读模式
#include "12864.h"
#include "bsp_SysTick.h"

void GPIO_Config(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
       
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOE, ENABLE);
       
        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6;
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
       
        GPIO_Init(GPIOE,&GPIO_InitStructure);
       
        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_All;
        GPIO_Init(GPIOD,&GPIO_InitStructure);
}

void write_com(uint16_t com)
{
        LCD_RS_OFF;
        LCD_RW_OFF;
        Delay_us(5);
        GPIOD->ODR=0x00ff&com;
        Delay_us(5);
        LCD_EN_ON;
        Delay_us(5);
        LCD_EN_OFF;
}

void write_data(uint16_t dat)
{
        LCD_RS_ON;
        LCD_RW_OFF;
        Delay_us(5);
        GPIOD->ODR=0x00ff&dat;
        Delay_us(5);
        LCD_EN_ON;
        Delay_us(5);
        LCD_EN_OFF;
}

void lcd_pos(uint8_t x,uint8_t y)
{
        uint8_t pos;
        if(x==0)
                x=0x0080;
        if(x==1)
                x=0x0090;
        if(x==2)
                x=0x0088;
        if(x==3)
                x=0x0098;
        pos=x+y;
        write_com(pos);
}

void lcd_init(void)
{
        GPIO_Config();
        LCD_EN_OFF;
        LCD_PSB_ON;
        write_com(0x0030);
        Delay_us(5);
        write_com(0x000c);
        Delay_us(5);
        write_com(0x0001);
        Delay_us(5);
}

void lcd_display(uint8_t x,uint8_t y,uint8_t *string)
{
        uint8_t i=0;
        lcd_pos(x,y);
        while(string[i]!='\0')
        {
                write_data(string[i]);
                Delay_us(5);
                i++;
        }
}

这个程序是根据51改的,为什么显示屏一点反应都没有啊?(延时是微妙级的)

回复

使用道具 举报

发表于 2015-3-20 08:42:03 | 显示全部楼层
我用51时的初始化程序是这样的
Write_lcd(0,0x30);    //功能设定,8位接口控制,选择普通指令(禁止了扩展指令)
    Write_lcd(0,0x30);    //同一指令的动作不能同时改变RE 及DL、G,需先改变DL 或G 再改变RE                              
    Write_lcd(0,0x0c);    //整体显示开,游标位置显示关,游标位置反白关
    Write_lcd(0,0x01);    //清除显示
    Write_lcd(0,0x06);    //画面设定,游标右移,画面不移动
 是不是程序中延时较小,又没有检测BUSY
 另外STM32的视频教程我基本上都看了 GPIO_Pin_Alll 这个参数我还没见过,不知在哪定义过
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-3-20 12:15:25 | 显示全部楼层
11kxmx 发表于 2015-3-20 08:42
我用51时的初始化程序是这样的
Write_lcd(0,0x30);    //功能设定,8位接口控制,选择普通指令(禁止了扩展指 ...

延时是微妙级别的,GPIO_Pin_All是在GPIO_Pin_15后面定义的
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-23 02:20 , Processed in 0.031167 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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