标题:
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