12864串行驱动

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

*
LCD12864 串行驱动
* 文 件:
LCD12864_serial.h
--------------------------------------------------------------------------------------*/
#ifndef __LCD12864_SERIAL_H
* 功能:
传送 1Byte 数据到 LCD12864
--------------------------------------------------------------------------------------*/
void LCD12864_SendByte(unsigned char data)
RS 接 PA10 RW 接 PA11 EN 接 PA12 PS:RS 可直接接高电平,这样单片机可以节省一个 IO,实测无异常 现象 程序功能: 汉字字符数字显示、画任意点线圆、显示任意图片(128*64 以内)、 显示任意字库。 七种字库可选(GB12、GB16、GB24、ASCII5x8、ASCII6x12、ASCII8x16、 ASCII12x24),不足请自己添加,本文最后附上 ASCII5x8、ASCII6x12、 ASCII8x16、ASCII12x24 字库文件。 汉字取模软件:LcmZimo.exe 图片取模软件:Image2Lcd.exe
void LCD12864_WriteDat(unsigned char data)
{来自百度文库
// GPIO_SetBits(RS_GPIO, RS_CS);
LCD12864_SendByte(SENDDATA);
LCD12864_SendByte(data&0xf0);
LCD12864_SendByte((data&0X0F)<<4); // GPIO_ResetBits(RS_GPIO, RS_CS); }
/*-------------------------------------------------------------------------------------
* 功能:
向 LCD12864 写入 1Byte 数据
--------------------------------------------------------------------------------------*/
}
/*-------------------------------------------------------------------------------------
* 功能:
在指定位置显示字符串
* 说明:
*
dis_addr_x(0 ~ 15)
//0XF1000 //0XF1100 //0XF1010 //0XF1110
void Delay_us(uint16_t xus); void Delay_ms(uint16_t xms);
/*-------------------------------------------------------------------------------------
void LCD12864_WriteCmd(unsigned char cmd)
{
// GPIO_SetBits(RS_GPIO, RS_CS);
LCD12864_SendByte(SENDCMD);
LCD12864_SendByte(cmd&0xF0);
LCD12864_SendByte((cmd&0x0F)<<4); // GPIO_ResetBits(RS_GPIO, RS_CS); }
/*-------------------------------------------------------------------------------------
* 功能:
向 LCD12864 写 1Byte 命令
--------------------------------------------------------------------------------------*/
* 说明:
LCD12864 PSB(15 脚)需接低电平,RS(4 脚)需接高电平
* 文件调用: 需调用 Delay_us()、Delay_ms()
--------------------------------------------------------------------------------------*/
/*以下函数仅操作缓存 PicBuff,需调用 LCD12864_DisPlayPicBuff 才能在液晶上显示显示*/ typedef struct
{ unsigned char Width; unsigned char Height; const char *Ptr;
}PicStruct;
typedef struct {
编写人:刘辉
显示效果图: 自带字库显示:
GRAM 画图显示:
单片机内部 RAM 画圆和任意直线:
单片机内部 RAM 显示任意字库:
驱动程序:
LCD12864_serial.h
/*--------------------------------------------------------------------------------------
Y,unsigned char Color); void LCD12864_Line_Y(unsigned char *Buff,unsigned char X,unsigned char Y0,unsigned char Y1,unsigned char Color); void LCD12864_Line(unsigned char *Buff,unsigned char X0,unsigned char Y0,unsigned char X1,unsigned char Y1,unsigned char Color); void LCD12864_DisPlayPicBuff(unsigned char *Buff); #endif
void LCD12864_SetLocation(unsigned char x,unsigned char y)
{ if(y==0x00) x+=0x80; else if(y==0x01) x+=0x90; else if(y==0x02) x+=0x88; else x+=0x98; LCD12864_WriteCmd(x);
LCD12864_serial.c
/*--------------------------------------------------------------------------------------
*
LCD12864 串行驱动
* 文 件:
LCD12864_serial.c
* 描述:
LCD12864 串行驱动,字符、汉字显示、图形显示
/*-------------------------------------------------------------------------------------
* 功能:
设置 LCD12864 显示位置
* 说明:
*
x(0 ~ 15)
*
y(0 ~ 3)
--------------------------------------------------------------------------------------*/
STM32 单片机 12864 串行驱动
说明:测试单片机型号 STM32F103C8T6,由于单片机 IO 资源不充分, 故采用串行驱动 12864。由于串行操作 12864 无法读取内部 RAM,所 以画图操作在单片机内部开辟 16*64 字节 RAM 充当缓存,经测试整 屏刷新速度大于 5 次/s。 接线方法: PSB 接地
#include "stm32f10x.h"
#include "LCD12864_serial.h"
#include "FontAsciiDot.h"
#include "math.h"
#define SENDCMD 0XF8 #define READCMD 0XFC #define SENDDATA 0XFA #define READDATA 0XFE
unsigned char Width; unsigned char Height; unsigned int len; const void *Font; }sFont;
extern sFont Font_ASCII5x8; extern sFont Font_ASCII6x12; extern sFont Font_ASCII8x16; extern sFont Font_ASCII12x24; extern sFont Font_GB12; extern sFont Font_GB16; extern sFont Font_GB24;
extern unsigned char PicBuff[16*64];
void LCD12864_ClearPicBuff(unsigned char *Buff); void LCD12864_DisPlayFont(sFont *font, unsigned char x, unsigned char y, unsigned char len, unsigned char *pData); void LCD12864_DisPlayPic(unsigned char *Buff,PicStruct *Pic,unsigned char x,unsigned char y); void LCD12864_DrawCircle(unsigned char *Buff,unsigned char x0,unsigned char y0,unsigned char r); void LCD12864_DrawPoint(unsigned char *Buff, unsigned char x, unsigned char y, unsigned char color); void LCD12864_Line_X(unsigned char *Buff,unsigned char X0,unsigned char X1,unsigned char
void LCD12864_Init(void); void LCD12864_Clear(void); void LCD12864_ClearGRAM(void); void LCD12864_WriteDat(unsigned char data); void LCD12864_DrawPicture(const unsigned char *ptr); void LCD12864_SetLocation(unsigned char x,unsigned char y); void LCD12864_WriteStr(unsigned char dis_addr_x,unsigned char dis_addr_y,char* str);
#define __LCD12864_SERIAL_H
//#define RS_GPIO GPIOA #define RW_GPIO GPIOA #define EN_GPIO GPIOA //#define RS_CS GPIO_Pin_10 #define RW_SID GPIO_Pin_11 #define EN_CLK GPIO_Pin_12
{
unsigned char i;
for(i=0;i<8;i++)
{
if(data&0x80)
GPIO_SetBits(RW_GPIO, RW_SID);
else
GPIO_ResetBits(RW_GPIO, RW_SID); Delay_us(1);
GPIO_SetBits(EN_GPIO, EN_CLK); data <<= 1; // Delay_us(1); GPIO_ResetBits(EN_GPIO, EN_CLK); } }
相关文档
最新文档