Board logo

标题: stm32_19264液晶LCD驱动程序 [打印本页]

作者: yuyang911220    时间: 2014-11-29 22:50     标题: stm32_19264液晶LCD驱动程序

弄了两天,终于调通了stm32 LCD19264液晶驱动程序
系统采用stm32f103ze微处理器,3.3v供电
液晶为:深圳兴宇合公司的JBG19264E00-08W-A31 , 无字库,视角6:00
编译器为:MDK4.0
注意:若显示出现乱码的现象请适当修改延时函数
/****************************lcd.h********************************************/
#ifndef __LCD_H
#define __LCD_H

#include "sys.h"
#define LCD_RS  PFout(0)// PF.0
#define LCD_E   PFout(1)// PF.1

#define LCD_CS1 PFout(2)// PF.2
#define LCD_RST PFout(3)// PF.3
#define LCD_CS2 PFout(4)// PF.4

#define LCD_CS3 PFout(5)// PF.5
#define LCD_DATA(x)  GPIOE->ODR=(GPIOB->ODR&0x807F)|((x & 0x00FF)<<7) //PE7~14,作为数据线
#define LCD_PAGE_ADDR 0xb8
#define LCD_COL_ADDR  0x40   
void LCDPortSet(void);
//LCD IO口配置
void LcdInit(void);  
//初始化程序
void LcdClear(void);
//清屏程序

void WriteChr16x16(u8 pag,u8 col, u8  *chr);
//写一个汉字
   
#endif

/******************************************************lcd.c************************************************/
#include <stm32f10x_lib.h>
  
#include "lcd.h"
#include "delay.h"
//LCD IO口配置
void LCDPortSet(void)
{



RCC->APB2ENR|=1<<6;      //使能PORTE时钟

RCC->APB2ENR|=1<<7;      //使能PORTF时钟

GPIOE->CRH&=0XF0000000;
//PE8-14数据口

GPIOE->CRH|=0X03333333;

GPIOE->CRL&=0X0FFFFFFF;
//PE7数据口

GPIOE->CRL|=0X30000000;


GPIOE->ODR|=0X7F80;      //上拉

GPIOF->CRL&=0XF0000000;

GPIOF->CRL|=0X03333333;  //PF.0 1 2 3 4 5 6推挽输出

GPIOF->ODR|=1<<0;      //PF.0 输出高

GPIOF->ODR|=1<<1;      //PF.1 输出高

GPIOF->ODR|=1<<2;      //PF.2 输出高

GPIOF->ODR|=1<<3;      //PF.3 输出高

GPIOF->ODR|=1<<4;      //PF.4 输出高

GPIOF->ODR|=1<<5;      //PF.5 输出高

GPIOF->ODR|=1<<6;      //PF.6 输出高
}

void SelectChip1(void) //选择第1屏
{

LCD_CS1=0;

LCD_CS2=1;

LCD_CS3=1;
}

void SelectChip2(void) //选择第2屏
{

LCD_CS1=1;

LCD_CS2=0;

LCD_CS3=1;
}
void SelectChip3(void) //选择第3屏
{


LCD_CS1=1;

LCD_CS2=1;

LCD_CS3=0;

}
void WriteCommand(u8 cmd)   //写命令
{
   

LCD_RS=0;
  //写命令

//RW=0;


LCD_DATA(cmd);

LCD_E=1;

delay_us(10);

LCD_E=0;
}
void WriteData(u8  dat)
//写数据
{

      
LCD_RS=1;
//写数据

//RW=0;

LCD_DATA(dat);
//数据输出到数据口


   LCD_E=1;
//写入到LCD

   delay_us(10);

   LCD_E=0;
}


void LcdClear(void)
//清屏
{

u16  j = 0;

u16  k = 0;

LCD_CS1 = 0;

LCD_CS2 = 0;

LCD_CS3 = 0;

WriteCommand(LCD_PAGE_ADDR + 0);

WriteCommand(LCD_COL_ADDR  + 0);

for(k=0;k<8;k++)

{

WriteCommand(LCD_PAGE_ADDR+k);


for(j=0;j<64;j++)  


{


WriteData(0x00);

}

}

LCD_CS1 = 1;

LCD_CS2 = 1;

LCD_CS3 = 1;
}




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0