当前位置:编程学习 > 网站相关 >>

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;
}
 
void LcdInit(void) //初始化程序
LCD_RST = 0;
delay_us(20);
LCD_RST = 1;
delay_us(5);
LCD_CS1=0;
LCD_CS2=0;
LCD_CS3=0;
WriteCommand(0x3f);  //设置开显示命令
WriteCommand(0xc0);//设置起始位置
LCD_CS1 = 1;
LCD_CS2 = 1;
LCD_CS3 = 1;
LcdClear();    //清屏
}
void WriteChr16x16(u8 pag,u8 col,u8 *chr) //写一个汉字
{
u8 i = 0;
u8 j = 0;
u8 col_t = 0;
WriteCommand(0xc0);
col_t = col;
for(i=0;i<2;i++)
{
  for(j=0;j<16;j++)
  { 
switch(col_t&0xc0)
{
case 0: 
SelectChip1();
WriteCommand(LCD_PAGE_ADDR + pag + i);
WriteCommand(LCD_COL_ADDR  + col_t - 0 );
WriteData(chr[16*i + j]);
col_t++;
break;
case 0x40: 
SelectChip2();
WriteCommand(LCD_PAGE_ADDR + pag + i);
WriteCommand(LCD_COL_ADDR  + col_t - 64);
WriteData(chr[16*i + j]);
col_t++;
break;
case 0x80: 
SelectChip3();
WriteCommand(LCD_PAGE_ADDR + pag + i);
WriteCommand(LCD_COL_ADDR  + col_t - 128);
WriteData(chr[16*i + j]);
col_t++; 
break;
default:  break;
}
   
 }
 col_t=col_t-16;
}
}
/***************************************************main.c******************************************************/
/**
@说明:JBG19264 LCD测试程序
*/
#include <stm32f10x_lib.h>
#include "sys.h" 
#include "delay.h" 
#include "lcd.h" 
u8 table[][32]={
/*--  文字:  我  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x20,0x24,0x24,0x24,0xFE,0x23,0x22,0x20,0x20,0xFF,0x20,0x22,0x2C,0xA0,0x20,0x00,
0x00,0x08,0x48,0x84,0x7F,0x02,0x41,0x40,0x20,0x13,0x0C,0x14,0x22,0x41,0xF8,0x00,
/*--  文字:  们  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0x80,0x60,0xF8,0x07,0x00,0xF8,0x01,0x06,0x00,0x04,0x04,0x04,0xFC,0x00,0x00,
0x01,0x00,0x00,0xFF,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x40,0x80,0x7F,0x00,0x00,
/*--  文字:  都  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x20,0x24,0x24,0xA4,0x7F,0x24,0x34,0x28,0x26,0x20,0xFE,0x02,0x22,0xDA,0x06,0x00,
0x04,0x02,0xFF,0x49,0x49,0x49,0x49,0xFF,0x00,0x00,0xFF,0x08,0x10,0x08,0x07,0x00,
/*--  文字:  是  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0x00,0x00,0x7F,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x7F,0x00,0x00,0x00,0x00,
0x81,0x41,0x21,0x1D,0x21,0x41,0x81,0xFF,0x89,0x89,0x89,0x89,0x89,0x81,0x81,0x00,
/*--  文字:  好  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x10,0x10,0xF0,0x1F,0x10,0xF0,0x00,0x80,0x82,0x82,0xE2,0x92,0x8A,0x86,0x80,0x00,
0x40,0x22,0x15,0x08,0x16,0
补充:综合编程 , 其他综合 ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,