可串行驱动LCD12864的应用之一……基础篇
12864液晶屏幕使用说明及程序
12864使用说明一、串/并接口1.1 串口接口管脚信号*注释1:如在实际应用中仅使用并口通讯模式,可将PSB 接固定高电平。
*注释2:模块内部接有上电复位电路,因此在不需要经常复位的场合可将该端悬空。
*注释3:如背光和模块共用一个电源,可以将模块上的JA、JK 用焊锡短接。
1.2 并行接口管脚信号*注释1:如在实际应用中仅使用并口通讯模式,可将PSB 接固定高电平。
*注释2:模块内部接有上电复位电路,因此在不需要经常复位的场合可将该端悬空。
*注释3:如背光和模块共用一个电源,可以将模块上的JA、JK 用焊锡短接。
二、模块主要硬件构成说明控制器接口信号说明:2.1、RS,R/W的配合选择决定控制界面的4种模式:2.2、E信号●忙标志BFBF 标志提供内部工作情况.BF=1 表示模块在进行内部操作,此时模块不接受外部指令和数据.BF=0 时, 模块为准备状态,随时可接受外部指令和数据.利用STATUS RD 指令,可以将BF 读到DB7 总线,从而检验模块之工作状态.●字型产生ROM(CGROM)字型产生ROM(CGROM)提供8192 个此触发器是用于模块屏幕显示开和关的控制。
DFF=1 为开显示(DISPLAY ON),DDRAM 的内容就显示在屏幕上,DFF=0 为关显示(DISPLAY OFF)。
DFF 的状态是指令DISPLAY ON/OFF 和RST 信号控制的。
●显示数据RAM(DDRAM)模块内部显示数据 RAM 提供 64×2 个位元组的空间,最多可控制 4 行 16 字(64 个字)的中文字型显示,当写入显示数据 RAM 时,可分别显示 CGROM 与CGRAM 的字型;此模块可显示三种字型,分别是半角英、数字型(16*8)、CGRAM 字型及 CGROM 的中文字型。
三种字型的选择,由在 DDRAM 中写入的编码选择,在0000H—0006H 的编码中(其代码分别是0000、0002、0004、0006 共4 个)将选择 CGRAM 的自定义字型,02H—7FH 的编码中将选择半角英数字的字型,至于A1 以上的编码将自动的结合下一个位元组,组成两个位元组的编码形成中文字型的编码BIG5(A140—D75F),GB(A1A0-F7FFH)。
LCD12864(ST7920)串行驱动程序
完整功能版的ST7920驱动的12864液晶(并行驱动),MCU= Mega162007-07-04 23:40:11| 分类:AVR单片机| 标签:avr |字号大中小订阅/**************************************************** 工程:ST7920驱动的12864液晶的并行驱动模式创建日期:2007年7月3日创建人:朱海峰邮箱:ntzhf100@ QQ:543376422 引脚定义:RS(CS)=====>PB0RW(SID)====>PB1EN(SCLK)===>PB2D0=========>PA0::D7=========>PA7PSB为硬件控制,接高电平为8位或4位的并行模式,接低电平为串行模式****************************************************/#include <iom16v.h>#include <macros.h>#define uint8_t unsigned char#define uint16_t unsigned int#define nop() NOP()#define DATA_PORT PORTA#define Set_RS() DDRB |= (1<<0);PORTB |= (1<<0);#define Set_RW() DDRB |= (1<<1);PORTB |= (1<<1);#define Set_EN() DDRB |= (1<<2);PORTB |= (1<<2);#define Clr_RS() DDRB |= (1<<0);PORTB &= ~(1<<0);#define Clr_RW() DDRB |= (1<<1);PORTB &= ~(1<<1);#define Clr_EN() DDRB |= (1<<2);PORTB &= ~(1<<2);#define Set_output() DDRA = 0XFF#define Set_input() DDRA = 0X00#define PIN_port PINA#define left 0x18#define right 0x1c#define xtal 8 //晶振调整MHzvoid WriteCom(uint8_t CMD);void WriteDat(uint8_t DAT);void Delay(uint16_t ms);uint8_t CheckBusy(void);void Draw_Pic(uint8_t x, uint8_t y, const uint8_t *Draw);void Picture_Set_XY(uint8_t x, uint8_t y);void Char_Set_XY(uint8_t x, uint8_t y, uint8_t *p);void Lcd_Init(void);void Chip_Init(void);void Set_Draw(void);void Lcd_flash(uint16_t delay_t,uint8_t times);void Move(uint8_t step,uint8_t dirction,uint16_t time);const uint8_t PIC1[64][16]={/*-- 调入了一幅图像:C:\Documents and Settings\Administrator\桌面\atmel.bmp --*//*-- 宽度x高度=128x64 --*/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0 0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0 0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0 0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0 0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0 0,0x00,0x00,0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,0x00, 0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,0x00, 0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,0x00, 0x00,0x00,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,0x00, 0x00,0x00,0x03,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,0x00, 0x00,0x00,0x03,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,0x00, 0x00,0x00,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,0x00, 0x00,0x00,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,0x00, 0x00,0x00,0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,0x00, 0x00,0x00,0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF8,0x00,0x00, 0x00,0x00,0x00,0x07,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0 0,0x00,0x00,0x00,0x07,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0 0,0x00,0x00,0x3F,0xE7,0xFC,0xFF,0xFF,0xFF,0xE0,0xFF,0xFF,0xCF,0xF8,0x00,0x00,0x00,0x00,0x00,0x3F,0xE7,0xFC,0xFF,0xFF,0xFF,0xF0,0xFF,0xFF,0xCF,0xF8,0x00,0x00,0x00, 0x00,0x00,0x7F,0xE7,0xFC,0xFF,0xFF,0xFF,0xF8,0xFF,0xFF,0xCF,0xF8,0x00,0x00,0x00, 0x00,0x00,0x7F,0xE7,0xFC,0xFF,0xFF,0xFF,0xFC,0xFF,0xFF,0xCF,0xF8,0x00,0x00,0x00, 0x00,0x00,0xFF,0xE7,0xFC,0xFF,0xBF,0xEF,0xFC,0xFF,0xFF,0xCF,0xF8,0x00,0x00,0x00, 0x00,0x00,0xFF,0xE7,0xFC,0xFF,0xBF,0xE7,0xFC,0xFF,0xFF,0xCF,0xF8,0x00,0x00,0x00, 0x00,0x01,0xFF,0xE7,0xFC,0xFF,0xBF,0xE7,0xFC,0xFF,0xFF,0xCF,0xF8,0x00,0x00,0x00, 0x00,0x03,0xFF,0xE7,0xFC,0xFF,0xBF,0xE7,0xFC,0xFF,0xFF,0xCF,0xF8,0x00,0x00,0x00, 0x00,0x03,0xFF,0xE7,0xFC,0xFF,0xBF,0xE7,0xFC,0xFF,0xFF,0xCF,0xF8,0x00,0x00,0x00, 0x00,0x07,0xFF,0xE7,0xFC,0xFF,0xBF,0xE7,0xFC,0xFC,0x00,0x0F,0xF8,0x00,0x00,0x00, 0x00,0x07,0xFF,0xE7,0xFC,0xFF,0xBF,0xE7,0xFC,0xFF,0xFF,0xCF,0xF8,0x00,0x00,0x00, 0x00,0x0F,0xFF,0xE7,0xFC,0xFF,0xBF,0xE7,0xFC,0xFF,0xFF,0xCF,0xF8,0x00,0x00,0x00, 0x00,0x0F,0xFF,0xE7,0xFC,0xFF,0xBF,0xE7,0xFC,0xFF,0xFF,0xCF,0xF8,0x00,0x00,0x00, 0x00,0x1F,0xFF,0xE7,0xFC,0xFF,0xBF,0xE7,0xFC,0xFF,0xFF,0xCF,0xF8,0x00,0x00,0x00, 0x00,0x1F,0xFF,0xE7,0xFC,0xFF,0xBF,0xE7,0xFC,0xFF,0xFF,0xCF,0xF8,0x00,0x00,0x00, 0x00,0x3F,0xFF,0xE7,0xFC,0xFF,0xBF,0xE7,0xFC,0xFF,0xFF,0xCF,0xF8,0x00,0x00,0x00, 0x00,0x3F,0xFF,0xE7,0xFC,0xFF,0xBF,0xE7,0xFC,0xFF,0xFF,0xCF,0xF8,0x00,0x00,0x00, 0x00,0x7F,0xFF,0xE7,0xFC,0xFF,0xBF,0xE7,0xFC,0xFF,0xFF,0xCF,0xF8,0x00,0x00,0x00, 0x00,0xFF,0xFF,0xE7,0xFC,0xFF,0xBF,0xE7,0xFC,0xFF,0xFF,0xCF,0xF8,0x00,0x00,0x00, 0x00,0xFF,0xFF,0xE7,0xFC,0xFF,0xBF,0xE7,0xFC,0xFC,0x00,0x0F,0xF8,0x00,0x00,0x00, 0x01,0xFF,0xBF,0xE7,0xFC,0xFF,0xBF,0xE7,0xFC,0xFE,0x00,0x0F,0xF8,0x00,0x00,0x00, 0x01,0xFF,0x3F,0xE7,0xFC,0xFF,0xBF,0xE7,0xFC,0xFF,0xFF,0xCF,0xFF,0xF8,0x00,0x00, 0x03,0xFF,0x3F,0xE7,0xFC,0xFF,0xBF,0xE7,0xFC,0xFF,0xFF,0xCF,0xFF,0xF8,0x00,0x00,0x03,0xFE,0x3F,0xE7,0xFC,0xFF,0xBF,0xE7,0xFC,0xFF,0xFF,0xCF,0xFF,0xF0,0x00,0x00, 0x07,0xFE,0x3F,0xE7,0xFC,0xFF,0xBF,0xE7,0xFC,0xFF,0xFF,0xCF,0xFF,0xF0,0x00,0x00, 0x07,0xFF,0x3F,0xE7,0xFC,0xFF,0xBF,0xE7,0xFC,0xFF,0xFF,0xCF,0xFF,0xE0,0x00,0x00, 0x0F,0xFF,0x3F,0xE7,0xFC,0xFF,0xBF,0xE7,0xFC,0xFF,0xFF,0xCF,0xFF,0xE0,0x00,0x00, 0x0F,0xFF,0x3F,0xE7,0xFC,0xFF,0xBF,0xE7,0xFC,0xFF,0xFF,0xCF,0xFF,0xC0,0x00,0x00, 0x1F,0xFF,0x3F,0xE7,0xFC,0xFF,0xBF,0xE7,0xFC,0xFF,0xFF,0xCF,0xFF,0xC0,0x00,0x00, 0x1F,0xFF,0x3F,0xE7,0xFC,0xFF,0x1F,0xE7,0xFC,0xFF,0xFF,0xCF,0xFF,0x80,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0 0,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3E,0x00,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x63,0x00,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFD,0x00,0x00, 0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0xB6,0x80,0x00, 0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0xBE,0x80,0x00, 0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF8,0xB6,0x80,0x00, 0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF8,0xF7,0x00,0x00, 0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,0x63,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x00,0x0 0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0 0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0 0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0 0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0 0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0 0};const uint8_t PIC2[64][16]={/*-- 调入了一幅图像:C:\Documents and Settings\Administrator\桌面\AVR.BMP --*//*-- 宽度x高度=128x64 --*/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0 0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0 0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3 C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x4 3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xB D,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x2 7,0x00,0x00,0x1F,0xFF,0x83,0xFF,0xE0,0x00,0x00,0xFF,0xF8,0x3F,0xFF,0xFF,0x01,0x3C, 0x00,0x00,0x3F,0xFF,0x81,0xFF,0xF0,0x00,0x01,0xFF,0xF0,0x7F,0xFF,0xFF,0xC1,0x3E, 0x00,0x00,0x3F,0xFF,0xC1,0xFF,0xF0,0x00,0x01,0xFF,0xF0,0x7F,0xFF,0xFF,0xE0,0xA7, 0x00,0x00,0x3F,0xFF,0xC1,0xFF,0xF0,0x00,0x03,0xFF,0xE0,0x7F,0xFF,0xFF,0xF0,0xE7, 0x00,0x00,0x7F,0xFF,0xE0,0xFF,0xF8,0x00,0x03,0xFF,0xE0,0xFF,0xFF,0xFF,0xF8,0x7E, 0x00,0x00,0x7F,0xFF,0xE0,0xFF,0xF8,0x00,0x03,0xFF,0xE0,0xFF,0xFF,0xFF,0xF8,0x00, 0x00,0x00,0x7F,0xFF,0xE0,0x7F,0xFC,0x00,0x07,0xFF,0xC1,0xFF,0xFF,0xFF,0xFC,0x00, 0x00,0x00,0xFF,0xFF,0xF0,0x7F,0xFC,0x00,0x07,0xFF,0xC1,0xFF,0xFF,0xFF,0xFC,0x00, 0x00,0x00,0xFF,0xFF,0xF0,0x7F,0xFE,0x00,0x0F,0xFF,0x83,0xFF,0xFF,0xFF,0xFE,0x00, 0x00,0x01,0xFF,0xFF,0xF8,0x3F,0xFE,0x00,0x0F,0xFF,0x83,0xFF,0xE0,0x7F,0xFE,0x00, 0x00,0x01,0xFF,0xFF,0xF8,0x3F,0xFE,0x00,0x1F,0xFF,0x07,0xFF,0xC0,0x3F,0xFE,0x00, 0x00,0x03,0xFF,0xFF,0xF8,0x3F,0xFF,0x00,0x1F,0xFF,0x07,0xFF,0xC0,0x3F,0xFE,0x00, 0x00,0x03,0xFF,0xFF,0xFC,0x1F,0xFF,0x00,0x1F,0xFE,0x07,0xFF,0xC0,0x3F,0xFE,0x00, 0x00,0x03,0xFF,0xFF,0xFC,0x1F,0xFF,0x80,0x3F,0xFE,0x0F,0xFF,0x80,0x3F,0xFE,0x00, 0x00,0x07,0xFF,0xFF,0xFE,0x0F,0xFF,0x80,0x3F,0xFE,0x0F,0xFF,0x80,0x3F,0xFE,0x00, 0x00,0x07,0xFF,0x9F,0xFE,0x0F,0xFF,0x80,0x7F,0xFC,0x1F,0xFF,0x00,0x7F,0xFE,0x00, 0x00,0x07,0xFF,0x9F,0xFF,0x07,0xFF,0xC0,0x7F,0xFC,0x1F,0xFF,0x00,0xFF,0xFC,0x00, 0x00,0x0F,0xFF,0x8F,0xFF,0x07,0xFF,0xC0,0x7F,0xF8,0x1F,0xFF,0x01,0xFF,0xFC,0x00,0x00,0x0F,0xFF,0x0F,0xFF,0x03,0xFF,0xC0,0xFF,0xF8,0x3F,0xFF,0xFF,0xFF,0xF8,0x00, 0x00,0x0F,0xFF,0x0F,0xFF,0x83,0xFF,0xE0,0xFF,0xF8,0x3F,0xFF,0xFF,0xFF,0xF8,0x00, 0x00,0x1F,0xFF,0x07,0xFF,0x83,0xFF,0xE1,0xFF,0xF0,0x7F,0xFF,0xFF,0xFF,0xF0,0x00, 0x00,0x1F,0xFE,0x07,0xFF,0xC1,0xFF,0xF1,0xFF,0xF0,0x7F,0xFF,0xFF,0xFF,0xE0,0x00, 0x00,0x3F,0xFE,0x07,0xFF,0xC1,0xFF,0xF3,0xFF,0xE0,0x7F,0xFF,0xFF,0xFF,0xC0,0x00, 0x00,0x3F,0xFE,0x03,0xFF,0xC0,0xFF,0xFB,0xFF,0xE0,0xFF,0xFF,0xFF,0xFF,0x80,0x00, 0x00,0x7F,0xFC,0x03,0xFF,0xE0,0xFF,0xFB,0xFF,0xC0,0xFF,0xFF,0xFF,0xFF,0x00,0x00, 0x00,0x7F,0xFC,0x03,0xFF,0xE0,0x7F,0xFF,0xFF,0xC1,0xFF,0xFF,0xFF,0xFC,0x00,0x00, 0x00,0x7F,0xF8,0x01,0xFF,0xF0,0x7F,0xFF,0xFF,0x81,0xFF,0xFF,0xFF,0xE0,0x00,0x00, 0x00,0xFF,0xFF,0xFF,0xFF,0xF8,0x3F,0xFF,0xFF,0x83,0xFF,0xFF,0xFF,0xC0,0x00,0x00, 0x00,0xFF,0xFF,0xFF,0xFF,0xF8,0x3F,0xFF,0xFF,0x83,0xFF,0xF3,0xFF,0xC0,0x00,0x00, 0x00,0xFF,0xFF,0xFF,0xFF,0xF8,0x3F,0xFF,0xFF,0x03,0xFF,0xE3,0xFF,0xE0,0x00,0x00, 0x01,0xFF,0xFF,0xFF,0xFF,0xFC,0x1F,0xFF,0xFF,0x07,0xFF,0xE3,0xFF,0xE0,0x00,0x00, 0x01,0xFF,0xFF,0xFF,0xFF,0xFC,0x1F,0xFF,0xFE,0x07,0xFF,0xC3,0xFF,0xE0,0x00,0x00, 0x03,0xFF,0xFF,0xFF,0xFF,0xFE,0x1F,0xFF,0xFE,0x0F,0xFF,0xC1,0xFF,0xF0,0x00,0x00, 0x03,0xFF,0xFF,0xFF,0xFF,0xFE,0x0F,0xFF,0xFE,0x0F,0xFF,0x81,0xFF,0xF0,0x00,0x00, 0x03,0xFF,0xFF,0xFF,0xFF,0xFE,0x0F,0xFF,0xFC,0x0F,0xFF,0x81,0xFF,0xF8,0x00,0x00, 0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0xFF,0xFC,0x1F,0xFF,0x81,0xFF,0xF8,0x00,0x00, 0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0xFF,0xF8,0x3F,0xFF,0x00,0xFF,0xF8,0x00,0x00, 0x0F,0xFF,0xC0,0x00,0x1F,0xFF,0x83,0xFF,0xF8,0x3F,0xFF,0x00,0xFF,0xF8,0x00,0x00, 0x0F,0xFF,0x80,0x00,0x0F,0xFF,0x83,0xFF,0xF0,0x3F,0xFE,0x00,0xFF,0xFC,0x00,0x00, 0x0F,0xFF,0x80,0x00,0x0F,0xFF,0xC3,0xFF,0xF0,0x7F,0xFE,0x00,0x7F,0xFC,0x00,0x00,0x1F,0xFF,0x00,0x00,0x0F,0xFF,0xC1,0xFF,0xF0,0x7F,0xFC,0x00,0x7F,0xFC,0x00,0x00, 0x1F,0xFF,0x00,0x00,0x07,0xFF,0xC1,0xFF,0xE0,0x7F,0xFC,0x00,0x7F,0xFE,0x00,0x00, 0x1F,0xFF,0x00,0x00,0x07,0xFF,0xE0,0xFF,0xE0,0xFF,0xF8,0x00,0x7F,0xFE,0x00,0x00, 0x3F,0xFE,0x00,0x00,0x03,0xFF,0xE0,0xFF,0xC0,0xFF,0xF8,0x00,0x3F,0xFE,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x0 0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x0 0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x0 0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0 0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0 0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0 0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0 0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0 0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0 0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0 0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0 0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0 0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0 0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0 0};/**************************************************/void main(void){uint8_t i;Delay(10);Chip_Init(); //芯片初始化函数Lcd_Init(); //液晶初始化函数while(1)//ST7920的好处就是带字库,所以程序里可以直接写中英文和字符{ //英文和字符为半角的Char_Set_XY(0,0,"ntzhf100@"); //在第0行的第0个位置依次输出文字Char_Set_XY(2,1,"蓝水天下"); //在第1行的第2个位置依次输出文字Char_Set_XY(0,2,"我的天下,我的自"); //在第2行的第0个位置依次输出文字Char_Set_XY(0,3,"由空间!"); //在第3行的第0个位置依次输出文字Delay(2000); //软件延时2SLcd_flash(500,3); //液晶闪烁程序每次500ms的延时,闪动3次//=========液晶内部的地址=============//Line1 80H 81H 82H 83H 84H 85H 86H 87H//Line2 90H 91H 92H 93H 94H 95H 96H 97H//Line3 88H 89H 8AH 8BH 8CH 8DH 8EH 8FH//Line4 98H 99H 9AH 9BH 9CH 9DH 9EH 9FH//因为液晶本身的缺陷,所以移动显示会很丑Move(8,left,500); //液晶左移程序,移动8步,步与步之间间隔500ms Delay(2000); //软件延时2SMove(8,right,500); //液晶右移程序,移动8步,步与步之间间隔500ms Delay(2000); //软件延时2SSet_Draw(); //设定为绘图模式Draw_Pic(0,0,*PIC1); //第一张图片ATMEL的LOGODelay(3000); //软件延时3SDraw_Pic(0,0,*PIC2); //第一张图片AVR的LOGODelay(3000); //软件延时3SLcd_Init(); //重新设定为普通模式,即输出中英文和字符模式}}/*************************************************/ void Chip_Init(void){DDRA = 0XFF;PORTA = 0X00;DDRB = 0X07;PORTB = 0X00;}/*************************************************/ void Lcd_Init(void){uint8_t cmd;cmd=0x30; //功能设置8位数据,基本指令WriteCom(cmd); //写指令cmd=0x0C; //显示状态ON,游标OFF,反白OFF WriteCom(cmd); //写指令cmd=0x01; //清除显示WriteCom(cmd); //写指令cmd=0x02; //地址归位WriteCom(cmd); //写指令cmd=0x80; //设置DDRAM地址WriteCom(cmd); //写指令Delay(100); //延时}/*************************************************/void Delay(uint16_t ms) //毫秒级延时,当改晶振为几M则xtal设为几{uint16_t i;while(ms--){for(i=1;i<(uint16_t)(xtal*143-2);i++);}}/*************************************************/void Lcd_flash(uint16_t delay_t,uint8_t times){uint8_t j;for(j=0;j<times;j++){WriteCom(0x08); //关闭显示Delay(delay_t); //软件延时WriteCom(0x0c); //开显示Delay(delay_t); //软件延时}}/*************************************************/ void Move(uint8_t step,uint8_t dirction,uint16_t time) {uint8_t i;for(i=0;i<step-1;i++) //移动的步数{WriteCom(dirction); //文字移动方向Delay(time); //控制移动时间}}/*************************************************/ void WriteCom(uint8_t CMD) //写控制命令函数{while(CheckBusy()); //检测液晶内部是否忙Clr_RS();Clr_RW();DATA_PORT = CMD;Set_EN();nop();nop();}/*************************************************/ void WriteDat(uint8_t DAT) //写数据函数{while(CheckBusy()); //检测液晶内部是否忙Set_RS();Clr_RW();DATA_PORT = DAT;Set_EN();nop();nop();Clr_EN();}/*************************************************/ uint8_t CheckBusy(void){uint8_t temp;DATA_PORT = 0XFF;Clr_RS();nop(); //这里的nop不能省略,否则不行Set_RW();Set_EN();nop();Set_input();nop();temp = PINA;nop();Clr_EN();nop();Set_output();temp &= 0x80;return(temp);}/*************************************************/ void Char_Set_XY(uint8_t x, uint8_t y, uint8_t *p) {if(y == 0){WriteCom((0x80+x));}if(y == 1){WriteCom((0x90+x));}if(y == 2){WriteCom((0x88+x));}if(y == 3){WriteCom((0x98+x));}while(*p != 0){WriteDat(*p++);}}/*************************************************/void Set_Draw(void){WriteCom(0x01); //清屏Delay(20); //延时WriteCom(0x36); //8BIT控制界面,扩充指令集,,绘图显示ON Delay(20); //延时}/*************************************************/ void Draw_Pic(uint8_t x, uint8_t y, const uint8_t *Draw) {uint8_t i, j, temp_x, temp_y;temp_x = x;temp_y = y;temp_x |= 0x80;temp_y |= 0x80;for(i=0;i<32;i++ ){WriteCom(temp_y++); //设置绘图区的Y地址坐标WriteCom(temp_x); //设置绘图区的X地址坐标for(j=0;j<16;j++){WriteDat(*Draw);Draw++;}}temp_x = 0x88;temp_y = 0x80;j = 0;for(;i<64;i++ ){WriteCom(temp_y++); //设置绘图区的Y地址坐标WriteCom(temp_x); //设置绘图区的X地址坐标for(j=0;j<16;j++){WriteDat(*Draw);Draw++;}}}/**************************************************/12864串行/*************************************** start51 study board test software** test 12864LCD** using serial interface** author:bluehacker<kernelpaniccrash AT > ** QQ:282074921** Date:2007-11-18**************************************/#ifndef _LZP_START51_12864LCDS_H#define _LZP_START51_12864LCDS_H#include "reg52.h"//12864串行口定义sbit LCD_CS=P2^3;sbit LCD_CLK=P2^5;sbit LCD_SID=P2^4;//12864LCD指令定义#define CMD_CLEAR 0x01#define CMD_RESET 0x02//设置波特率#define OSC_FREQ 11059200L#define BAUD_115200 256 - (OSC_FREQ/192L)/115200L // 255 #define BAUD_57600 256 - (OSC_FREQ/192L)/57600L // 254 #define BAUD_38400 256 - (OSC_FREQ/192L)/38400L // 253 #define BAUD_28800 256 - (OSC_FREQ/192L)/28800L // 252 #define BAUD_19200 256 - (OSC_FREQ/192L)/19200L // 250 #define BAUD_14400 256 - (OSC_FREQ/192L)/14400L // 248 #define BAUD_9600 256 - (OSC_FREQ/192L)/9600L // 244 void Delay_us(unsigned char nUs);void Delay_ms(unsigned int nMs);bit lcd_busy(void);void write_command(unsigned char cmd);unsigned char read_data(void);void write_data(unsigned char dat);void clear_lcd();void lcd_init();void lcd_setxy(unsigned char x,unsigned char y);void lcd_display_str(unsigned char x, unsigned char y,unsigned char *str);#endif我的是ST7920控制的.接了RS(CS),与WR(SID)两个至单片机,节约了串口.另外PSB(串行为0,并行接1)跟LED-接GND,RS与LED+接VCC.这个程序可能还有点问题,接上背光(LED+,LED-)显示就不很清晰了,关了之后很清晰. 显示最后三个汉字"李正平"错误,为"李掌"可笑.查查程序哪里有问题了//FileName:12864lcds.c/*************************************** start51 study board test software** test 12864LCD** using serial interface** author:bluehacker<kernelpaniccrash AT > ** QQ:282074921** Date:2007-11-18**************************************/#include "12864.h"void Delay_us(unsigned char nUs){unsigned char i;while(nUs--)for(i=0;i<10;i++);}void Delay_ms(unsigned int nMs){ unsigned char i;while(nMs--)for(i=0;i<120;i++);}bit lcd_busy(){unsigned char i;bit dat;//先产生连续5个'1'LCD_CS=1;for(i=0;i<5;i++){LCD_CLK=0;LCD_SID=1;LCD_CLK=1;}//再发送一个'1',表示读操作LCD_CLK=0;LCD_SID=1;LCD_CLK=1;//再发送一个'0',表示写命令操作LCD_CLK=0;LCD_SID=0;LCD_CLK=1;//再发送一个'0',这是表示第一个字节结束LCD_CLK=0;LCD_SID=0;LCD_CLK=1;//Delay_us(1);dat=0;LCD_CLK=0;dat=LCD_SID;LCD_CLK=1;LCD_CS=0;return dat;}void write_command(unsigned char cmd) {unsigned char i;while(lcd_busy());//先产生连续5个'1'LCD_CS=1;for(i=0;i<5;i++){LCD_CLK=0;LCD_SID=1;LCD_CLK=1;}//再发送一个'0',表示写操作LCD_CLK=0;LCD_SID=0;LCD_CLK=1;//再发送一个'0',表示写命令操作LCD_CLK=0;LCD_SID=0;LCD_CLK=1;//再发送一个'0',这是表示第一个字节结束LCD_CLK=0;LCD_SID=0;LCD_CLK=1;//下面发送具体指令,先发送高4位for(i=0;i<4;i++){LCD_CLK=0;if(cmd&0x80)LCD_SID=1;elseLCD_SID=0;LCD_CLK=1;cmd<<=1;}//发送连续4个'0'for(i=0;i<4;i++){LCD_CLK=0;LCD_SID=0;LCD_CLK=1;}//下面发送指令的低4位for(i=0;i<4;i++){LCD_CLK=0;if(cmd&0x80)LCD_SID=1;elseLCD_SID=0;LCD_CLK=1;cmd<<=1;}//发送连续4个'0'for(i=0;i<4;i++){LCD_CLK=0;LCD_SID=0;LCD_CLK=1;}LCD_CS=0;//结束}void write_data(unsigned char dat) {unsigned char i;while(lcd_busy());//先产生连续5个'1'LCD_CS=1;for(i=0;i<5;i++){LCD_CLK=0;LCD_SID=1;LCD_CLK=1;}//再发送一个'0',表示写操作LCD_CLK=0;LCD_SID=0;LCD_CLK=1;//再发送一个'1',表示写数据操作LCD_CLK=0;LCD_SID=1;LCD_CLK=1;//再发送一个'0',这是表示第一个字节结束LCD_CLK=0;LCD_SID=0;LCD_CLK=1;//下面发送具体数据,先发送高4位for(i=0;i<4;i++){LCD_CLK=0;if(dat&0x80)LCD_SID=1;elseLCD_SID=0;LCD_CLK=1;dat<<=1;}//发送连续4个'0'for(i=0;i<4;i++){LCD_CLK=0;LCD_SID=0;LCD_CLK=1;}//下面发送数据的低4位for(i=0;i<4;i++){LCD_CLK=0;if(dat&0x80)LCD_SID=1;elseLCD_SID=0;LCD_CLK=1;dat<<=1;}//发送连续4个'0'for(i=0;i<4;i++){LCD_CLK=0;LCD_SID=0;LCD_CLK=1;}LCD_CS=0;//结束}unsigned char read_data() {unsigned char i,dat;while(lcd_busy());//先产生连续5个'1'LCD_CS=1;for(i=0;i<5;i++){LCD_CLK=0;LCD_SID=1;LCD_CLK=1;}//再发送一个'1',表示读操作LCD_CLK=0;LCD_SID=0;LCD_CLK=1;//再发送一个'1',表示数据操作LCD_CLK=0;LCD_SID=1;LCD_CLK=1;//再发送一个'0',这是表示第一个字节结束LCD_CLK=0;LCD_SID=0;LCD_CLK=1;//下面读具体数据//先读高4位dat=0;for(i=0;i<4;i++){LCD_CLK=0;dat<<=1;LCD_CLK=1;dat|=LCD_SID;}//再接受4个连续'0',没什么意义,直接丢掉for(i=0;i<4;i++){LCD_CLK=0;Delay_us(1);LCD_CLK=1;Delay_us(1);}//接受低4位for(i=0;i<4;i++){LCD_CLK=0;dat<<=1;LCD_CLK=1;dat|=LCD_SID;}//再接受4个连续'0',没什么意义,直接丢掉for(i=0;i<4;i++){LCD_CLK=0;Delay_us(1);LCD_CLK=1;Delay_us(1);}LCD_CS=0;return dat;}void clear_lcd(){write_command(CMD_CLEAR);}void lcd_setxy(unsigned char x,unsigned char y) {unsigned char addr;switch(y){case 0:addr=0x80+x;break;case 1:addr=0x90+x;break;case 2:addr=0x88+x;break;case 3:addr=0x98+x;break;}write_command(addr);}void lcd_display_str(unsigned char x, unsigned char y,unsigned char *str) {unsigned char i;lcd_setxy(x,y);for(i=0;str[i]!='\0';i++){write_data(str[i]);}}void lcd_init(){write_command(CMD_RESET);write_command(0x0d);//设置显示状态,整体显示ON,游标与游标位置ON write_command(0x30);//功能设置,基本指令write_command(0x18);//游标与显示移位控制clear_lcd();//write_command(0x80);//设置DDRAM位址,并不必须}void main(){TCON=0;SCON=0x50;/*mode 1,1 start bit ,8 data bit ,1 stop bit,enable receive*/ PCON=0x80;/*SMOD=1, Baud Rate twice*/TMOD=0x21;/*timer 0--mode 1 and timer 1 ---mode2*///set baud rate,use timer 1 as baud rate generatorTH1=BAUD_19200;TL1=TH1;TR1=1;// ET1=0;//disable timer 1 interruptEA=0;lcd_init();Delay_ms(100);//显示武林外传lcd_setxy(1,2);write_data(0xce);write_data(0xe4);lcd_setxy(2,2);write_data(0xc1);write_data(0xd6);lcd_setxy(3,2);write_data(0xcd);write_data(0xe2);lcd_setxy(4,2);write_data(0xb4);write_data(0xab);Delay_ms(5000);clear_lcd();write_command(CMD_RESET); Delay_ms(5000);lcd_display_str(2,0,"bluehacker"); lcd_display_str(1,1,"QQ:282074921"); lcd_display_str(3,2,"李正平");LCD12864(ST7920)串行驱动程序作者:L_jeary 文章来源:L_jeary 点击数:286 更新时间:2011-6-23/*==================================================== ================LCD12864对应的C文件,定义了相关的LCD驱动函数主要有:串行驱动LCD12864,内置的控制器为ST7920和ST7921LCD初始化函数读写函数0xf8为写命令的命令字;0xfa为写数据的命令字,这里用的是TI_F28027在编写和调试过程中借鉴了一些网上的程序,在此表示感谢,这里是已经调好的,在移植过程中,调试时注意先要通过示波器对函数void send_data(Uint16 D_Ctrl,Uint16 D_data)的时序检测一下,是否满足要求,不行的话可改一下延时值或者查看硬件是否连好===================================================== ===============*/#include "LCD12864.h" //LCD12864的头文件typedef unsigned int Uint16;/*==================================================== =================管脚的初始化,主要定义复用管脚功能方向等===================================================== =================*/void Init_guanjiao(void){EALLOW;GpioCtrlRegs.GPAMUX2.bit.GPIO16=0;//通用IO 片选CS管脚GpioCtrlRegs.GPADIR.bit.GPIO16=1;//输出GpioCtrlRegs.GPAPUD.bit.GPIO16=1;//禁止上拉电阻GpioCtrlRegs.GPBMUX1.bit.GPIO33=0; //数据管脚SIDGpioCtrlRegs.GPBDIR.bit.GPIO33=1;GpioCtrlRegs.GPBPUD.bit.GPIO33=1;GpioCtrlRegs.GPAMUX1.bit.GPIO2=0;//时钟CLK管脚GpioCtrlRegs.GPADIR.bit.GPIO2=1;GpioCtrlRegs.GPAPUD.bit.GPIO2=1;EDIS;}/*==================================================== =================LCD串行数据传送程序函数名:void send_data(Uint16 D_Ctrl,Uint16 D_data)功能:串行数据传送共分三个字节完成:第一字节:串口控制-格式11111ABCA为数据传送方向控制:H表示数据从LCD到MCU,L表示数据从MCU到LCDB为数据类型选择:H表示数据是显示数据,L表示数据是控制指令C固定为0第二字节分两次传送第一次:(并行)8位数据的高4位-格式DDDD0000 放在一个字节中的高四位第二次:(并行)8位数据的低4位-格式0000DDDD 放在一个字节中的高四位===================================================== =================*/void send_data(Uint16 D_Ctrl,Uint16 D_data)//LCD_CLK一个脉冲写一位{Uint16 i,j;Uint16 temp;//LCD_CS=1; //片选使能GpioDataRegs.GPADAT.bit.GPIO16=1;for(i=0;i<3;i++) // 串行数据的传送{if(i==0) //写第一个字节格式1111 1ABC{temp=D_Ctrl;}if(i==1) //写第二个字节第一次写高四位放在第一次传送的高四位{temp=(D_data&0xf0);}if(i==2) //写第二个字节第二次写低四位放在第二次传送的高四位{temp=(D_data&0x0f);temp=temp<<4;for(j=0;j<8;j++) //串行写8位二进制数据{//LCD_CLK=0; //时钟输入置低GpioDataRegs.GPADAT.bit.GPIO2=0; F_delay(3);if((temp&0x80)==0){//LCD_SID=0; //数据SID GpioDataRegs.GPBDAT.bit.GPIO33=0; }else{//LCD_SID=1; //数据SID GpioDataRegs.GPBDAT.bit.GPIO33=1; }//LCD_CLK=1; //时钟输入置高GpioDataRegs.GPADAT.bit.GPIO2=1; temp=temp<<1;F_delay(5);}//LCD_CLK=0; //时钟输入置低GpioDataRegs.GPADAT.bit.GPIO2=0;//LCD_CS=0; //片选禁止GpioDataRegs.GPADAT.bit.GPIO16=0;}/*==================================================== ===================LCD初始化程序函数名:void lcd_initial()功能:===================================================== ===================*/void lcd_initial(void)//写命令第一字节为0xf8,表示写的是命令//0xfa则表示写数据{Init_guanjiao();send_data(0xf8,0x30); //功能设定//F_delay(10);send_data(0xf8,0x0C); //显示状态开/关//F_delay(10);send_data(0xf8,0x01); //清屏显示//F_delay(10);//send_data(0xf8,0x06); //进如点设定,整体显示设定//F_delay(10);send_data(0xf8,0x02); //地址归位//F_delay(10);//send_data(0xf8,0x40); //设定CGRAM//F_delay(10);send_data(0xf8,0x80); //设定DDRAM//F_delay(10);}/*==================================================== =====================函数名:void write_one_word(Uint16 x,Uint16 y,Uint16 word0, Uint16 word1)功能:实现在任意坐标写一个字X列;Y行===================================================== ======================*/void write_one_word(Uint16 x,Uint16 y,Uint16 word0, Uint16 word1){x &= 0x0f;y &= 0x0f;switch(y){case 0:x+=0x80;break;case 1:x+=0x90;break;case 2:x+=0x88;break;case 3:x+=0x98;break;default:break;}send_data(0xf8,x);//F_delay(80L);send_data(0xfa,word0);//F_delay(80L);send_data(0xfa,word1);}/*==================================================== ========================函数名:void write_list_word(Uint16 x,Uint16 y,Uint16 flash *hanzi)。
LCD12864原理与应用
LCD12864原理与应用1、LCD12864简介:LCD12864分为两种,带字库的和不带字库的,不带字库的液晶显示汉字的时候可以选择自己喜欢的字体。
而带字库的液晶,只能显示GB2312字体,当然也可以显示其他的字体,不过是用图片的形式显示。
下面介绍不带字库的LCD12864,以Proteus中的AMPIRE128×64为例,如下图所示,它的液晶驱动器为KS0108。
引脚功能:引脚符号状态引脚名称功能,输入芯片片选端,都是低电平有效CS1=0开左屏幕,CS1=1关左屏幕CS2=0开右屏幕,CS2=1关右屏幕RS输入数据/命令选择信号RS=1为数据操作,RS=0为写指令或读状态RW输入读写选择信号R/W=1为读选通,R/W=0为写选通E输入读写使能信号在E下降沿,数据被锁存(写)入液晶,在E高电平期间,数据被读出DB0—DB7三态数据总线数据或指令的传送通道输入复位信号,低电平时复位复位时,关闭液晶显示,使显示起始行为0,可以跟单片机的复位引脚RST相连,也可以直接接VCC,使之不起作用V0液晶显示器驱动电压-Vout-10V LCD驱动负电压与带字库的液晶不同,此块液晶含有两个液晶驱动器,每块驱动器都控制64*64个点,分为左右两个屏幕显示,总共为128*64个点(即有128×64个点)。
这就是为什么AMPIRE128*64有CS1和CS2两个片选端的原因。
此液晶有8页,一页有8行点阵点,左右各64列,共128列。
如下图所示:2、LCD12864中的几条重要指令(一)行(line)设置命令:由此可见显示的起始行地址为0XC0,共64行,有规律地改变起始行号,可以实现滚屏效果。
(二)页(page)设置指令:起始页地址为0XB8,因为液晶有64行点,分为8页,每页就有8行点。
(三)列(column)地址设置指令每块驱动器的列地址都是从0X40到0X7F,共64列,所以此液晶共有128列点。
LCD12864资料
12864LCD液晶显示屏一、概述二、带中文字库的128X64是一种具有4位/8位并行、2线或3线串行多种接口方式,内部含有国标一级、二级简体中文字库的点阵图形液晶显示模块;其显示分辨率为128×64, 内置8192个16*16点汉字,和128个16*8点ASCII字符集.利用该模块灵活的接口方式和简单、方便的操作指令,可构成全中文人机交互图形界面。
可以显示8×4行16×16点阵的汉字. 也可完成图形显示.低电压低功耗是其又一显著特点。
由该模块构成的液晶显示方案与同类型的图形点阵液晶显示模块相比,不论硬件电路结构或显示程序都要简洁得多,且该模块的价格也略低于相同点阵的图形液晶模块。
三、基本特性:(1)、低电源电压(VDD:+3.0--+5.5V)(2)、显示分辨率:128×64点(3)、内置汉字字库,提供8192个16×16点阵汉字(简繁体可选) (4)、内置 128个16×8点阵字符(5)、2MHZ时钟频率(6)、显示方式:STN、半透、正显(7)、驱动方式:1/32DUTY,1/5BIAS (8)、视角方向:6点(9)、背光方式:侧部高亮白色LED,功耗仅为普通LED的1/5—1/10 (10)、通讯方式:串行、并口可选(11)、内置DC-DC转换电路,无需外加负压(12)、无需片选信号,简化软件设计(13)、工作温度: 0℃ - +55℃ ,存储温度: -20℃ - +60℃模块接口说明:*注释1:如在实际应用中仅使用串口通讯模式,可将PSB接固定低电平,也可以将模块上的J8和“GND”用焊锡短接。
*注释2:模块内部接有上电复位电路,因此在不需要经常复位的场合可将该端悬空。
*注释3:如背光和模块共用一个电源,可以将模块上的JA、JK用焊锡短接。
2.2并行接口管脚名称电平管脚功能描述管脚号1 VSS 0V 电源地2 VCC 3.0+5V 电源正3 V0 - 对比度(亮度)调整RS=“H”,表示DB7——DB0为4 RS(CS)H/L显示数据RS=“L”,表示DB7——DB0为显示指令数据5 R/W(SID) H/L R/W=“H”,E=“H”,数据被读到DB7——DB0R/W=“L”,E=“H→L”,DB7——DB0的数据被写到IR 或DR6 E(SCLK) H/L 使能信号7 DB0 H/L 三态数据线8 DB1 H/L 三态数据线9 DB2 H/L 三态数据线10 DB3 H/L 三态数据线11 DB4 H/L 三态数据线12 DB5 H/L 三态数据线13 DB6 H/L 三态数据线14 DB7 H/L 三态数据线15 PSB H/LH:8位或4位并口方式,L:串口方式(见注释1)16 NC - 空脚17 /RESET H/L 复位端,低电平有效(见注释2)18 VOUT - LCD驱动电压输出端19 A VDD 背光源正端(+5V)(见注释3)20 K VSS 背光源负端(见注释3)*注释1:如在实际应用中仅使用并口通讯模式,可将PSB接固定高电平,也可以将模块上的J8和“VCC”用焊锡短接。
LCD12864详解
12864液晶一、概述带中文字库的128X64是一种具有4位/8位并行、2线或3线串行多种接口方式,内部含有国标一级、二级简体中文字库的点阵图形液晶显示模块;其显示分辨率为128×64,内置8192个16*16点汉字,和128个16*8点ASCII字符集.利用该模块灵活的接口方式和简单、方便的操作指令,可构成全中文人机交互图形界面。
可以显示8×4行16×16点阵的汉字.也可完成图形显示.低电压低功耗是其又一显著特点。
由该模块构成的液晶显示方案与同类型的图形点阵液晶显示模块相比,不论硬件电路结构或显示程序都要简洁得多,且该模块的价格也略低于相同点阵的图形液晶模块。
基本特性:低电源电压(VDD:+3.0--+5.5V)显示分辨率:128×64点内置汉字字库,提供8192个16×16点阵汉字(简繁体可选)内置 128个16×8点阵字符2MHZ时钟频率显示方式:STN、半透、正显驱动方式:1/32DUTY,1/5BIAS视角方向:6点背光方式:侧部高亮白色LED,功耗仅为普通LED的1/5—1/10通讯方式:串行、并口可选内置DC-DC转换电路,无需外加负压无需片选信号,简化软件设计工作温度: 0℃ - +55℃ ,存储温度: -20℃ - +60℃模块接口说明:*注释1:如在实际应用中仅使用串口通讯模式,可将PSB接固定低电平,也可以将模块上的J8和“GND”用焊锡短接。
*注释2:模块内部接有上电复位电路,因此在不需要经常复位的场合可将该端悬空。
*注释3:如背光和模块共用一个电源,可以将模块上的JA、JK用焊锡短接。
2.2并行接口管脚号管脚名称电平管脚功能描述1 VSS 0V 电源地2 VCC 3.0+5V 电源正3 V0 - 对比度(亮度)调整4RS(CS)H/LRS=“H”,表示DB7——DB0为显示数据RS=“L”,表示DB7——DB0为显示指令数据5R/W(SID) H/L R/W=“H”,E=“H”,数据被读到DB7——DB0R/W=“L”,E=“H→L”, DB7——DB0的数据被写到IR或DR6 E(SCLK) H/L 使能信号7 DB0 H/L 三态数据线8 DB1 H/L 三态数据线9 DB2 H/L 三态数据线10 DB3 H/L 三态数据线11 DB4 H/L 三态数据线12 DB5 H/L 三态数据线13 DB6 H/L 三态数据线14 DB7 H/L 三态数据线15 PSB H/L H:8位或4位并口方式,L:串口方式(见注释1)16 NC - 空脚17 /RESET H/L 复位端,低电平有效(见注释2)18 VOUT - LCD驱动电压输出端19 A VDD 背光源正端(+5V)(见注释3)20 K VSS 背光源负端(见注释3)*注释1:如在实际应用中仅使用并口通讯模式,可将PSB接固定高电平,也可以将模块上的J8和“VCC”用焊锡短接。
单片机学习项目 (18) LCD12864的原理与应用
单片机学习项目项目18-LCD12864的原理与应用一:电路原理图液晶12864和单片机的连接电路见图图6-2-3所示,其中12864的数据端D0~D7分别接单片机的P0口,需加上啦电阻;/WR接P24,/RD接P2.3,/CE接P2.2,/CD接P2.1,/RST接P2.0;12864的第4脚接多圈电位器,用来调节12864显示的对比度。
二:12864液晶显示器驱动程序12864的驱动程序中主要有系统配置预处理、基本操作函数和应用操作函数,基本操作函数有:向12864中写一个一字节数据,写一个一字节命令,写一个数据一个命令,写两个数据两个命令和12864基本设置函数、清屏函数以及延时函数,由于写过程中采用了延时,所以程序中省去了读状态操作;应用操作包含的函数有显示字符、显示汉字、显示图形等函数,因此12864中包含了字库和图形的文件。
基本操作类函数和应用操作类函数是12864的基本程序,保存在f12864.c文件中,所使用的字库、图形文件实例分别存放在ziku.c和tuxing.c中。
#include<reg51.h>#include<f12864.c>/*主函数*/void main(void){ucharsec,min = 30,hour = 12;F12864_init();F12864_clear();dispay_tuxing();delay(50000);delay(50000);delay(50000);delay(50000);F12864_clear();display_hanzi(2,0,0,6);display_hanzi(2,1,6,12);display_string(0,4,"----------------");display_string(2,5,"HelloWorld!");display_string(0,6,"0123456789ABCDEF");delay(50000);delay(50000);delay(50000);delay(50000);F12864_clear();while(1){display_hanzi(0,0,12,14);display_num(4,1,hour);display_num(7,1,min);display_num(10,1,sec);sec++;display_string(6,1,":");display_string(9,1,":");delay(50000);display_string(6,1,"");display_string(9,1," ");delay(50000);if(sec>= 60){sec= 0;min++;}if(min>= 60){min= 0;hour++;}if(hour>= 24)hour =0;}}(1)基本操作/*预处理*/#include<reg51.h>#include<ziku.c>#include<tuxing.c>#define uchar unsigned char#define uint unsigned intuchar num[] ="0123456789";sbit rest = P2^0; //复位信号,低电平有效sbit _cd = P2^1; //命令和数据控制口(高为命令,低为数据)sbit _ce = P2^2; //片选信号,低电平有效sbit _rd = P2^3; //读信号,低电平有效sbit _wr = P2^4; //写信号,低电平有效/*延迟函数*/void delay(uint i){while(i--);}/*写命令*/void write_commond(uchar com){_ce = 0;_cd = 1; //高电平,写指令_rd = 1;P0 = com;_wr = 0; _nop_();_wr = 1;_ce = 1;_cd = 0;}/*对写一个数据*/void write_date(uchar dat){_ce = 0;_cd = 0; //低电平,写指令_rd = 1;P0 = dat;_wr = 0;_nop_();_wr= 1;_ce = 1;_cd= 1;}/*写一个指令和一个数据*/void write_dc(uchar com,uchar dat){write_date(dat); //先写数据write_commond(com); //后写指令}/*写一个指令和两个数据*/voidwrite_ddc(uchar com,uchar dat1,uchar dat2){write_date(dat1); //先写数据write_date(dat2); //先写数据write_commond(com); //后写指令}/*LCD12864初始化函数*/voidf12864_init(void){rest = 0;delay(300);rest = 1;write_ddc(0x40,0x00,0x00); //设置文本显示区首地址0x0000write_ddc(0x41,128 / 8,0x00); //设置文本显示区宽度8点阵write_ddc(0x42,0x00,0x08); //设置图形显示区首地址0x0800write_ddc(0x43,128 / 8,0x00); //设置图形显示区宽度write_commond(0x81); //显示方式设置,文本与图形异或显示write_commond(0x9e); //显示开关设置,文本开,图形开,光标闪烁关}/*清屏函数*/void f12864_clear(void){unsigned int i;write_ddc(0x24,0x00,0x00); //置地址指针为从零开始write_commond(0xb0); //自动写for(i = 0;i <128 * 64 ;i++) write_date(0x00); //清一屏write_commond(0xb2); // 自动写结束write_ddc(0x24,0x00,0x00); //重置地址指针}(2) 应用操作/*显示一个ASCII码函数*/void write_char(uchar x,uchary,uchar Charbyte){uint adress;adress = 16 * y + x; //文本显示write_ddc(0x24,(uchar)(adress),(uchar)(adress >> 8)); //地址指针位置write_dc(0xC4,Charbyte - 32); //数据一次读写方式,查字符rom}/*显示字符串函数,8*8点阵,x:左右字符间隔,y:上下字符间隔*/void display_string(ucharx,uchar y,uchar *p){while(*p != 0){write_char(x,y,*p);x++;p++;if(x > 15 ) //自动换行 128*64 //共16行0~15{x= 0;y++;}}}/*显示1个汉字,x:左右点阵间距(8点阵倍数),y:上下点阵间距(16点阵倍数)*/void write_hanzi(ucharx,uchar y,uchar z){unsigned int address;uchar m,n = 0;address = 16 * 16 * y + x + 0x0800; //显示图形for(m = 0;m < 16;m++)//1个汉字占上下16行{write_ddc(0x24,(uchar)(address),(uchar)(address>>8));write_dc(0xc0,ziku[z][n++]);write_dc(0xc0,ziku[z][n++]);//一个汉字横向取模为两个字节address =address + 16; //换行}}/*显示多个汉字,x:左右点阵间距(8点阵倍数),y:上下点阵间距(16点阵倍数),从第i个汉字开始显示,显示j- i个*/void display_hanzi(ucharx,uchar y,uchar i,uchar j){for(i;i < j;i++){write_hanzi(x,y,i);x = x + 2;}}/*显示两位数字,每一个8*8点阵,x:左右字符间隔,y:上下字符间隔*/void display_num(ucharx,uchar y,uchar i){uint adress;adress = 16 * y + x; //文本显示,每行16字符write_ddc(0x24,(uchar)(adress),(uchar)(adress >> 8)); //地址指针位置write_dc(0xc0,num[i / 10] -32);write_dc(0xc0,num[i % 10] - 32); //写两个数字}/*显示128*64图形*/void dispay_tuxing(void){uchar i,j;uint address,x;address = 0x0800; //首地址,图形显示for(i = 0;i < 64;i++)//64行{write_ddc(0x24,(uchar)(address),(uchar)(address>>8));for(j =0;j < 16;j++)//每行16字节{write_dc(0xc0,tuxing[x]);x++;}address =address + 16;//换行}}uchar code ziku[][32] ={/*-- 文字: 好 --*//*-- Times New Roman12; 此字体下对应的点阵为:宽x高=16x16 --*/0x10,0x00,0x11,0xFC,0x10,0x08,0x10,0x10,0xFC,0x20,0x24,0x20,0x24,0x20,0x27,0xFE,0x44,0x20,0x64,0x20,0x18,0x20,0x08,0x20,0x14,0x20,0x26,0x20,0x44,0xA0,0x80,0x40,/*-- 文字: 人 --*//*-- Times New Roman12; 此字体下对应的点阵为:宽x高=16x16 --*/0x01,0x00,0x01,0x80,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x02,0x80,0x02,0x80,0x04,0x80,0x04,0x40,0x08,0x60,0x08,0x30,0x10,0x18,0x20,0x0E,0x40,0x04,0x00,0x00, /*-- 文字: 一 --*//*-- Times New Roman12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x7F,0xFE, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*-- 文字: 生 --*//*-- Times New Roman12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x80,0x10,0xC0,0x10,0x80,0x10,0x88,0x1F,0xFC,0x20,0x80,0x20,0x80,0x40,0x88, 0x9F,0xFC,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x84,0x7F,0xFE,0x00,0x00, /*-- 文字: 平 --*//*-- Times New Roman12; 此字体下对应的点阵为:宽x高=16x16 --*/0x7F,0xFC,0x01,0x00,0x21,0x10,0x11,0x18,0x09,0x10,0x0D,0x20,0x09,0x40,0x01,0x00, 0xFF,0xFE,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00, /*-- 文字: 安 --*//*-- Times New Roman12; 此字体下对应的点阵为:宽x高=16x16 --*/0x02,0x00,0x01,0x00,0x3F,0xFE,0x20,0x04,0x44,0x08,0x06,0x00,0x04,0x00,0xFF,0xFE, 0x08,0x20,0x08,0x20,0x08,0x40,0x06,0x80,0x01,0x00,0x06,0xC0,0x18,0x38,0xE0,0x10, /*-- 文字: 祝 --*//*-- Times New Roman12; 此字体下对应的点阵为:宽x高=16x16 --*/0x20,0x00,0x11,0xF8,0x11,0x08,0xFD,0x08,0x05,0x08,0x09,0x08,0x11,0x08,0x39,0xF8, 0x54,0x90,0x94,0x90,0x10,0x90,0x10,0x90,0x11,0x12,0x11,0x12,0x12,0x12,0x14,0x0E, /*-- 文字: 您 --*//*-- Times New Roman12; 此字体下对应的点阵为:宽x高=16x16 --*/0x08,0x00,0x09,0x00,0x11,0xFE,0x12,0x04,0x34,0x40,0x32,0x50,0x52,0x48,0x94,0x44, 0x11,0x44,0x10,0x80,0x00,0x00,0x29,0x04,0x28,0x92,0x68,0x12,0x07,0xF0,0x00,0x00, /*-- 文字: 一 --*//*-- Times New Roman12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x7F,0xFE, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*-- 文字: 帆 --*//*-- Times New Roman12; 此字体下对应的点阵为:宽x高=16x16 --*/0x10,0x00,0x11,0xF0,0x11,0x10,0x7D,0x10,0x55,0x10,0x55,0x10,0x55,0x90,0x55,0x50, 0x55,0x70,0x55,0x50,0x5D,0x10,0x11,0x12,0x11,0x12,0x12,0x12,0x12,0x0E,0x14,0x00, /*-- 文字: 风 --*//*-- Times New Roman12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x00,0x1F,0xF8,0x10,0x08,0x10,0x48,0x14,0x68,0x12,0x48,0x11,0x48,0x10,0x88, 0x10,0x88,0x11,0x48,0x12,0x6A,0x24,0x2A,0x28,0x26,0x40,0x06,0x80,0x02,0x00,0x00, /*-- 文字: 顺 --*//*-- Times New Roman12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x00,0x45,0xFE,0x54,0x20,0x54,0x40,0x55,0xFC,0x55,0x04,0x55,0x04,0x55,0x24, 0x55,0x24,0x55,0x24,0x55,0x24,0x54,0x20,0x44,0x50,0x84,0x8C,0x05,0x04,0x00,0x00, /*-- 文字: 时 --*//*-- 楷体_GB23129; 此字体下对应的点阵为:宽x高=12x12 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=16x12 --*/0xFF,0xFF,0xFF,0xFF,0xFE,0xFF,0xCE,0xFF,0xAE,0xFF,0xAE,0x1F,0xA0,0xFF,0x8E,0xFF,0xA A,0xFF,0x8A,0xFF,0xAE,0xFF,0xFC,0xFF,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,/*-- 文字: 间 --*//*-- 楷体_GB23129; 此字体下对应的点阵为:宽x高=12x12 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=16x12 --*/0xFF,0xFF,0xFF,0xFF,0xDE,0x7F,0xE9,0xBF,0xBF,0xBF,0xA1,0xBF,0xAD,0xBF,0xA1,0xBF, 0xAD,0xBF,0xA1,0xBF,0xBF,0xBF,0xBE,0xBF,0xFF,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, };。
lcd128642篇
lcd128642篇【第一篇】lcd128642篇–了解面向物联网应用的LCD显示技术物联网(IoT)是当今科技领域的一个热门话题。
它引领着智能家居、智能手表、智能汽车等创新产品的发展。
在这些产品中,液晶显示技术扮演着至关重要的角色。
具体而言,lcd128642是一款广泛用于物联网应用的液晶显示器。
lcd128642提供了许多出色的特性,使其成为物联网领域的首选显示技术。
首先,该型号的lcd显示器具有高分辨率和高对比度。
它能够呈现出清晰、锐利的图像,使用户能够轻松区分不同的细节。
这对于应用于智能家居设备和智能手表等小尺寸屏幕的产品尤为重要。
其次,lcd128642还具备低功耗的特点。
它有效利用能源,使得物联网设备能够长时间工作而无需频繁更换电池。
这大大增强了设备的可靠性和使用寿命。
此外,lcd128642还具备宽视角和快速响应时间。
这意味着不论用户以什么角度观察屏幕,显示效果都会保持一致。
对于需要频繁交互的物联网应用,这是非常关键的。
最后,lcd128642的设计紧凑,体积小巧。
这使得它适用于各种物联网产品,无论是智能家居设备还是可穿戴设备。
总而言之,lcd128642是一款优秀的液晶显示技术,非常适合物联网应用。
它的高分辨率、低功耗、宽视角和紧凑的设计为物联网设备提供了良好的显示解决方案。
随着物联网领域的不断发展,lcd128642将继续发挥其重要作用。
【第二篇】lcd128642篇–探索液晶显示器的未来发展趋势液晶显示器(LCD)是当前广泛应用的显示技术之一,而其中的lcd128642型号更是备受关注。
然而,随着科技的不断进步和市场需求的变化,液晶显示器面临着一些挑战和发展机遇。
首先,虽然lcd显示器在分辨率和对比度方面已经取得了巨大进步,但仍存在一些改进的空间。
随着4K和8K分辨率的普及,用户对更高质量的显示效果有了更高的期望。
此外,对于某些特殊应用,如虚拟现实和增强现实,lcd显示器尚需进一步提升。
lcd12864_1 lcd液晶屏幕
16列
• • •
0页
1页
•
•
显示一幅图最大8页128列
•要求图形必须为位图,单源自图。读时序(进行读操作之前,必须有一次 空读操作 )
写时序
使用步骤
(1)LCD初始化。主要包括对控制器的显示开,显示起始行设置。 (2)LCD清屏。由于系统上电时,显示缓冲区的数据是不固定 的,显示出乱码,因此在液晶显示操作之前应将缓冲区清零。 • (3)数据显示。确定显示坐标后,写入显示数据,将文字、图形 等显示到LCD上。 • 注意列地址有自增功能
db0db7数据线传输指令或者数据左右屏选择12864点阵lcd采用两片hd61202作为列驱动器同时使用一片hd61203作为行驱动器的液晶模块lcd结构128列中前64列对应左屏由cs1选择后64列对应右屏由cs2选择每屏分为8页64列管理每页8行
LCD12864使用
3 Sept. 2008 © Neusoft Confidential
• • •
指令见工程下PDF第6页
Copyright © 2008 版权所有 东软集团
• •
注:该图以左半屏为例(64行*64列)
图形屏lcd12864与lcd字符屏lcd1602的区 别
•
对于图形屏,往ddram里写什么样的数据,屏幕上就会显示什么 样的点,比如你写0x38, 则显示00111000b。
显示一个汉字需要16列2页
• •
LCD采用纵向取模,字节倒序的形式 如“连”由32字节组成: uint8 DispTable[32]={ 0x40,0x41,0x4E,0xC4,0x00,0x44,0xE4,0 x5C,0x47,0xF4,0x44,0x44,0x44,0x04,0x 00,0x00, 0x00,0x40,0x20,0x1F,0x22,0x42,0x42,0x 42,0x42,0x5F,0x42,0x42,0x42,0x42,0x42 ,0x00} 字模工具生成字模只能先取到第0页的 0-15列的16字节,再取到第1页的0-15 列的16字节 多个字时也是只能先取到第0页的所有 列,再取到第1页的所有列。
LCD12864-串行传输程序
//********************************************************************************************************
SCLK = 0; //下降沿读走数据
NOP();
}
}
/*读出一个字节 该字节高四位是第一个字节temp1高四位,低四位是temp2的高四位*/
static uchar read_byte()
{
uchar i,temp1,temp2;
}while(sbuff&0x80);
}
/*向LCD12864写入一个指令或者数据*/
void write_12864_byte(bit C_D,uchar date)
{
check_busy(); //读忙
CS = 1; //使能液晶
NOP();
if(SID) //如果数据是1 则最低位置一
temp1++;
NOP();
SCLK= 0;
NOP();
}
for(i=0;i<8;i++) //第二个字节中是读取数据的低四位
write_12864_byte(0,0x01);//0000 0001 清零 将DDRAM填满“20H”(空格)代码,并且设定DDRAM的地址计数器(AC)为00H;
// 更新设置进入设定点将I/D设为1,游标右移AC加1。
{
uchar i;
CS=0;
SID=0;
SCLK=0;
RST=0;
for(i=250;i>0;i--); //液晶复位延时一下
LCD12864液晶显示器中文说明(DOC)
一、液晶显示模块概述12864A-1汉字图形点阵液晶显示模块,可显示汉字及图形,内置8192个中文汉字(16X16点阵)、128个字符(8X16点阵)及64X256点阵显示RAM(GDRAM)。
主要技术参数和显示特性:电源:VDD 3.3V~+5V(内置升压电路,无需负压);显示内容:128列× 64行显示颜色:黄绿显示角度:6:00钟直视LCD类型:STN与MCU接口:8位或4位并行/3位串行配置LED背光多种软件功能:光标显示、画面移位、自定义字符、睡眠模式等二、外形尺寸1.外形尺寸图2.二、模块引脚说明电源地(GND):0V工作温度(Ta):0~60℃(常温) / -20~75℃(宽温)三、接口时序模块有并行和串行两种连接方法(时序如下):8位并行连接时序图MPU写资料到模块MPU从模块读出资料、串行连接时序图2串行数据传送共分三个字节完成:第一字节:串口控制—格式11111ABCA为数据传送方向控制:H表示数据从LCD到MCU,L表示数据从MCU到LCDB为数据类型选择:H表示数据是显示数据,L表示数据是控制指令C固定为0第二字节:(并行)8位数据的高4位—格式DDDD0000第三字节:(并行)8位数据的低4位—格式0000DDDD串行接口时序参数:(测试条件:T=25℃VDD=4.5V)四、用户指令集1、当模块在接受指令前,微处理顺必须先确认模块内部处于非忙碌状态,即读取BF 标志时BF 需为0,方可接受新的指令;如果在送出一个指令前并不检查BF 标志,那么在前一个指令和这个指令中间必须延迟一段较长的时间,即是等待前一个指令确实执行完成,指令执行的时间请参考指令表中的个别指令说明。
2、“RE ”为基本指令集与扩充指令集的选择控制位元,当变更“RE ”位元后,往后的指令集将维持在最后的状态,除非再次变更“RE ”位元,否则使用相同指令集时,不需每次重设“RE ”位元。
具体指令介绍:1、清除显示 CODE :功能:清除显示屏幕,把DDRAM 位址计数器调整为“00H ” 2、位址归位 CODE :功能:把DDRAM 位址计数器调整为“00H ”,游标回原点,该功能不影响显示DDRAM 3、位址归位 CODE : 功能:把DDRAM 位址计数器调整为“00H ”,游标回原点,该功能不影响显示DDRAM 功能:执行该命令后,所设置的行将显示在屏幕的第一行。
LCD12864的原理分析以及使用方法(含代码分析)
LCD12864液晶显示模块的使用与分析(函代码分析)一、LCD12864功能应用LCD12864液晶显示模块能显示中文汉字、数字、字符,能显示数字与字符的个数为64个(4行,每行16个数字或字符),能显示汉字的个数为32个(4行,每行8个汉字)。
其内置了8192个中文汉字(16*16的点阵)、128个字符(8*16点阵)、以及64*256 点阵显示RAM(GDRAM)。
图1外观尺寸图图2外观尺寸图图3 LCD12864读操作时序图4 LCD12864写操作时序二、LCD12864主要技术参数(1)工作电压:3.3V-5.5V,模块最佳电压为5V。
(2)可以在显示界面显示数字、字母和中文汉字。
(3)与外部单片机的通信方式有并行或串行两种通信方式,这里主要介绍并行通信方式。
(4)显示内容:128 列× 64 行(5)显示颜色:黄绿/蓝屏/灰屏(6)LCD 类型:STN(7)与MCU 接口:8 位或4 位并行/3 位串行(8)配置LED 背光(9)多种软件功能:光标显示、画面移位、自定义字符、睡眠模式等三、LCD12864液晶显示的电路用法分析图5 LCD12864电路连接图图6 LCD12864电路连接图LCD12864模块主要用来显示所要的界面信息或数据,所以要求能显示汉字,字符和数字,而LCD12864满足系统要求的显示功能。
LCD12864在显示字母和数字时,是4*16的显示字符模块,即可以显示4行,每行可以显示16个字母或数字;在显示汉字时,是4*8的汉字显示模块,即可以显示4行,每行可以显示8个汉字。
下面进行介绍的是并行通信的显示方式。
按照电路原理图跟单片机最小系统进行连线,如图6所示。
LCD12864共有20个引脚,其引脚具体功能如表1所示,由表可得LCD12864引脚组成为8位数据传输端口(DB0-DB7);两个电源引脚(VCC,GND);两个电源背光引脚(BLK,BLA),控制LCD的背景亮度;一个VO引脚,外接一个上拉电阻(控制LCD12864的字符对比度,让字符更加的清晰可见);RST复位引脚,低电平有效,此处直接接高电平;第16、17位空引脚,不用管;剩下的RS,RW,EN 和PSB四个引脚则跟LCD12864的写入息息相关,通过PSB可以控制LCD12864跟单片机的通信方式,输入高电平,则LCD12864跟单片机的通信模式为并行通信,低电平则为串行通信。
12864LCD液晶显示原理及使用方法
12864LCD液晶显示原理及使用方法液晶简介液晶是一种在一定温度范围内呈现既不同于固态液态又不同于气态的特殊物质态,它既具有各向异性的晶体所特有的双折射性又具有液体的流动性液晶显示器件(英文的简写为LCD)就是利用液晶态物质的液晶分子排列状态在电场中改变而调制外界光的被动型显示器件。
点阵式图形液晶显示屏是 LCD 的一种能够动态显示图形汉字以及各种符号信息为各种电子产品提供了友好的人机界面点阵式图形液晶显示屏的主要特点如下(这些特点也就是LCD 的特点):工作电压低、微功耗、体积小、可视面积大、无电磁辐射、数字接口、寿命长等特点。
12864LCD是一种图形点阵液晶显示器,它主要由行驱动器/列驱动器及128×64 全点阵液晶显示器组成。
可完成图形显示,也可以显示8×4 个(16×16 点阵)汉字或者显示16×4个(8×16 点阵)ASCII码。
分为两种,带字库的和不带字库的。
不带字库的LCD需要自己提供字库字模,此时可以根据个人喜好设置各种字体显示风格,设计上较为灵活。
带字库的LCD提供字库字模,但是只能显示GB2312的宋体。
各有优缺点,根据不同应用场景灵活选择。
其液晶模块原理图如下所示。
12864LCD点阵图形液晶模块原理框图下面给出了其应用连接电路,分别介绍其各引脚的功能和作用。
如下表所示:12864LCD 的引脚说明管脚号管脚名称LEVER 管脚功能描述1GND 0 电源地2VCC+5.0V 电源电压3VLCD - 液晶显示器驱动电压4RS (D/I) H/LD/I=“H”,表示DB7∽DB0 为显示数据D/I=“L”,表示DB7∽DB0 为显示指令数据5R/W H/L R/W=“H”,E=“H”数据被读到DB7∽DB0R/W=“L”,E=“H→L”数据被写到IR 或DR 6EN H/L R/W=“L”,E 信号下降沿锁存DB7∽DB0R/W=“H”,E=“H”DDRAM 数据读到DB7∽DB0 7DB0 H/L 数据线8DB1 H/L数据线9DB2 H/L 数据线10DB3 H/L 数据线11DB4 H/L数据线12DB5 H/L数据线13DB6 H/L数据线14DB7 H/L数据线15CS1 H/L H:选择芯片(右半屏)信号16CS2 H/L H:选择芯片(左半屏)信号17RET H/L复位信号,低电平复位18VEE -10VLCD 驱动负电压19LED+ - LED 背光板电源20LED- - LED 背光板电源12864LCD点阵图形液晶模块应用连接电路液晶驱动设置在理解12864LCD硬件原理和管脚功能之后,可以针对LCD进行驱动的编写,分两种情况:仿真环境下和实物开发板编程。
电子小设计液晶显示屏幕元器件基础知识LCD12864点阵型液晶介绍
电子小设计液晶显示屏幕元器件基础知识LCD12864点阵型液晶介绍LCD12864点阵型液晶简介:12864是一种图形点阵液晶显示器,它主要由行驱动器/列驱动器及128×64全点阵液晶显示器组成。
可完成图形显示,也可以显示8×4个(16×16点阵)汉字。
LCD12864点阵型液晶实物LCD12864 引脚介绍:管脚号管脚名称LEVER 管脚功能描述1 VSS 0 电源地2 VDD 5.0V 电源电压3 V0 - 液晶显示器驱动电压4 D/I(RS) H/L D/I=“H”,表示DB7∽DB0为显示数据D/I=“L”,表示DB7∽DB0为显示指令数据5 R/W H/L R/W=“H”,E=“H”数据被读到DB7∽DB0R/W=“L”,E=“H→L”数据被写到IR或DR6 E H/L R/W=“L”,E信号下降沿锁存DB7∽DB0R/W=“H”,E=“H”DDRAM数据读到DB7∽DB07 DB0 H/L 数据线8 DB1 H/L 数据线9 DB2 H/L 数据线10 DB3 H/L 数据线11 DB4 H/L 数据线12 DB5 H/L 数据线13 DB6 H/L 数据线14 DB7 H/L 数据线15 CS1 H/L H:选择芯片(右半屏)信号16 CS2 H/L H:选择芯片(左半屏)信号17 RET H/L 复位信号,低电平复位18 VOUT -10V LCD驱动负电压19 LED - LED背光板电源20 LED- - LED背光板电源LCD12864液晶屏幕原理图:LCD12864液晶屏幕原理图LCD12864液晶屏幕驱动程序://12864液晶操作口sbit rs = P1^0;sbit rw = P1^1;sbit en = P1^2;/*******12864驱动程序************///===========液晶写指令========== void writecommand(uchar command){checkbusy();rs=0;rw=0;en=1;P0=command; //液晶数据线P0en=0;}//============液晶写数据============ void writedata(uchar date){checkbusy();rs=1;rw=0;en=1;P0=date;en=0;}//=========液晶设置==========void lcdset(void){writecommand(0x30); //基本指令集writecommand(0x01); //清屏,DDRAM的地址归零writecommand(0x02); //地址归位writecommand(0x0c); //显示开,光标关,反白关writecommand(0x06); //DDRAM地址加1}//=========设置光标===========void cursor(uchar y,uchar x){uchar command = 0x80;writecommand(0x0f);//开光标闪烁if( y == 2)y = 3;else if(y == 3)y = 2;command |= (y-1) << 3;command = (x-1);writecommand(command);}//========字符显示=======void display(uchar y, uchar x, uchar *p){switch (y){case 1:writecommand(0x7f x); break; //液晶第一行case 2:writecommand(0x8f x); break; //0x90 (x-1) case 3:writecommand(0x87 x);break;case 4:writecommand(0x97 x);break;default:break;}while(*p)writedata(*p );}//=========显示数字=======void displayNumber(uchar y,uchar x,uchar number) {switch (number){//引号内数字为中文全角输入占据一个汉字位置case 0:display(y,x,'0');break;case 1:display(y,x,'1');break;case 2:display(y,x,'2');break;case 3:display(y,x,'3');break;case 4:display(y,x,'4');break;case 5:display(y,x,'5');break;case 6:display(y,x,'6');break;case 7:display(y,x,'7');break;case 8:display(y,x,'8');break;case 9:display(y,x,'9');break;default:break;}}void displaytime0(void) //静态数据{display(1, 2, '智能作息系统');display(2, 3, '年');display(2, 6, '月');display(3, 1, '星期');display(3, 8, '℃');display(4, 3, '-'); //全角输入display(4, 6, '-');}/*******12864主程序调用************/lcdset();delay(1000);lcdset(); //调用两次可以解决上电后液晶不能自动复位问题/*显示版本信息*/display(1,3,'welcome!');display(2,2,'智能作息系统');display(3,3,'版本1.0');display(4,1,'制作人: 马云');writecommand(0x01); //清屏LCD12864液晶屏幕显示效果:LCD12864液晶屏幕显示效果。
LCD12864(ST7920)串行驱动程序
0xf8为写命令的命令字;0xfa为写数据的命令字,这里用的是TI_F28027
在编写和调试过程中借鉴了一些网上的程序,在此表示感谢,
这里是已经调好的,在移植过程中,调试时注意先要通过示波器对函数
void send_data(Uint16 D_Ctrl,Uint16 D_data)
void send_data(Uint16 D_Ctrl,Uint16 D_data)
//LCD_CLK一个脉冲写一位
{
Uint16 i,j;
Uint16 temp;
//LCD_CS=1; //片选使能
GpioDataRegs.GPADAT.bit.GPIO16=1;
send_data (0xf8,y+j*2);
send_data (0xf8,x+i);
send_data (0xf8,0x30);
send_data (0xfa,data1);
send_data (0xfa,data1);
for(i=0;i<3;i++) // 串行数据的传送
{
if(i==0) //写第一个字节 格式1111 1ABC
{
temp=D_Ctrl;
}
if(i==1) //写第二个字节 第一次写 高四位放在第一次传送的高四位
{
temp=(D_data&0xf0);
功能:
实现在任意坐标写一个字
X列;Y行
===========================================================================*/
12864液晶屏幕使用说明及程序
12864使用说明一、串/并接口1.1 串口接口管脚信号*注释1:如在实际应用中仅使用并口通讯模式,可将PSB 接固定高电平。
*注释2:模块内部接有上电复位电路,因此在不需要经常复位的场合可将该端悬空。
*注释3:如背光和模块共用一个电源,可以将模块上的JA、JK 用焊锡短接。
1.2 并行接口管脚信号*注释1:如在实际应用中仅使用并口通讯模式,可将PSB 接固定高电平。
*注释2:模块内部接有上电复位电路,因此在不需要经常复位的场合可将该端悬空。
*注释3:如背光和模块共用一个电源,可以将模块上的JA、JK 用焊锡短接。
二、模块主要硬件构成说明控制器接口信号说明:2.1、RS,R/W的配合选择决定控制界面的4种模式:2.2、E信号●忙标志BFBF 标志提供内部工作情况.BF=1 表示模块在进行内部操作,此时模块不接受外部指令和数据.BF=0 时, 模块为准备状态,随时可接受外部指令和数据.利用STATUS RD 指令,可以将BF 读到DB7 总线,从而检验模块之工作状态.●字型产生ROM(CGROM)字型产生ROM(CGROM)提供8192 个此触发器是用于模块屏幕显示开和关的控制。
DFF=1 为开显示(DISPLAY ON),DDRAM 的内容就显示在屏幕上,DFF=0 为关显示(DISPLAY OFF)。
DFF 的状态是指令DISPLAY ON/OFF 和RST 信号控制的。
●显示数据RAM(DDRAM)模块内部显示数据 RAM 提供 64×2 个位元组的空间,最多可控制 4 行 16 字(64 个字)的中文字型显示,当写入显示数据 RAM 时,可分别显示 CGROM 与CGRAM 的字型;此模块可显示三种字型,分别是半角英、数字型(16*8)、CGRAM 字型及 CGROM 的中文字型。
三种字型的选择,由在 DDRAM 中写入的编码选择,在0000H—0006H 的编码中(其代码分别是 0000、0002、0004、0006 共 4 个)将选择 CGRAM 的自定义字型,02H—7FH 的编码中将选择半角英数字的字型,至于A1 以上的编码将自动的结合下一个位元组,组成两个位元组的编码形成中文字型的编码BIG5(A140—D75F),GB(A1A0-F7FFH)。
LCD12864原理与应用(源程序+原理图+proteus仿真)
LCD12864原理与应用1、LCD12864简介:LCD12864分为两种,带字库的和不带字库的,不带字库的液晶显示汉字的时候可以选择自己喜欢的字体。
而带字库的液晶,只能显示GB2312字体,当然也可以显示其他的字体,不过是用图片的形式显示。
下面介绍不带字库的LCD12864,以Proteus中的AMPIRE128×64为例,如下图所示,它的液晶驱动器为KS0108。
引脚功能:引脚符号状态引脚名称功能,输入芯片片选端,都是低电平有效CS1=0开左屏幕,CS1=1关左屏幕CS2=0开右屏幕,CS2=1关右屏幕RS 输入数据/命令选择信号RS=1为数据操作,RS=0为写指令或读状态RW 输入读写选择信号R/W=1为读选通,R/W=0为写选通E 输入读写使能信号在E下降沿,数据被锁存(写)入液晶,在E高电平期间,数据被读出DB0—DB7 三态数据总线数据或指令的传送通道输入复位信号,低电平时复位复位时,关闭液晶显示,使显示起始行为0,可以跟单片机的复位引脚RST相连,也可以直接接VCC,使之不起作用V0 液晶显示器驱动电压-Vout -10V LCD驱动负电压与带字库的液晶不同,此块液晶含有两个液晶驱动器,每块驱动器都控制64*64个点,分为左右两个屏幕显示,总共为128*64个点(即有128×64个点)。
这就是为什么AMPIRE128*64有CS1和CS2两个片选端的原因。
此液晶有8页,一页有8行点阵点,左右各64列,共128列。
如下图所示:2、LCD12864中的几条重要指令(一)行(line)设置命令:由此可见显示的起始行地址为0XC0,共64行,有规律地改变起始行号,可以实现滚屏效果。
(二)页(page)设置指令:起始页地址为0XB8,因为液晶有64行点,分为8页,每页就有8行点。
(三)列(column)地址设置指令每块驱动器的列地址都是从0X40到0X7F,共64列,所以此液晶共有128列点。
单片机驱动LCD12864的应用_科学计算器的设计与制作
这部分主要是设计程序驱动液晶显示。怎样把一 串很长并且会随着按键变化的数字通过液晶显示出来 以及怎样显示计算式是显示部分程序设计的关键。在 此设计中用到了 sprintf() 函数,它用作格式化的输出 函数,将一个格式化的字符串输出到一个目的字符串 中,从而可以把数字转化为字符串输出。函数调用方 式为 int sprintf(char*string,char *format,arg_list), 其中第一个参数是目的字符串。sprintf() 函数共有五
GND
142
152
P10
162
12
7
182
192
12
CE
1=2
P11
1+2
-1 2
12
*
12
12
/
1/x
.1 2
+1/-2
12 ” ˝¸
12 ø ¿/“„
12
sin
12
¿“•‰
P12
12
cos
P13
P 14 P 15 P 16 P 17 P 30 P 31
40 2011. 07
可以进一步提升程序设计能力。
一、系统结构及硬件电路设计
此作品的系统结构包括 :单片机系统、键盘模块 和液晶显示单元,原理图如图 1 所示,系统结构如图 2 所示,作品实物图如图 3 所示。单片机系统主要由 单片机、时钟电路和复位电路构成。时钟电路相当于 单片机系统的心脏,它是系统必不可少的部分。作品 选用 STC89C58RD 单片机,该单片机具有 4 个 8 位 I/O 口 P0~P3 口,2 个 16 位定时器 / 计数器 T0 和 T1。通 过程序设计使单片机处理键盘输入的数据、驱动液晶 显示等。键盘用作数据输入接在单片机的 P1 和部分 P3 口,设计使用 4×6 的矩阵键盘,相对于独立按键, 矩阵键盘大大节省了单片机的 I/O 口,扩大了按键功 能,同时也节省了硬件资源。每按下一个键,同时让 蜂鸣器发声,这样设计便于判断按键是否真正按下。 LCD12864 作为人机交互界面,显示计算结果和计算的 信息。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
在网上搜了一下,ST7920控制器的LCD产品可以提供8位,4位并行和串行接口可选,并行的控制接口的LCD较多,前面的贴子也介绍过,我们在这儿不说了,这儿我们讲的是串口控制LCD12864。
买了块ST7920的LCD12864,这个好像价格便宜些,52元。
是不是显示效果要差些呢。
再来个背面:
买来后也就只有个管脚说明:(我只说串口的定义)
工作于串行模式时的引脚定义:
PIN1------------ GND 电源-,一般接0V。
PIN2------------VDD 电源+,一般接5V。
PIN3------------V0 对比度调整端。
PIN4------------CS,片选
PIN5------------SID,数据
PIN6------------SCK,脉冲
PIN7------------NC,不连接
PIN8------------NC,不连接
PIN9------------NC,不连接
PIN10-----------NC,不连接
PIN11-----------NC,不连接
PIN12-----------NC,不连接
PIN13-----------NC,不连接
PIN14-----------NC,不连接
PIN15-----------PSB 并行:PSB=1,可以接VCC;串行:PSB=0,一般接GND
PIN16 ----------NC,不连接
PIN17-----------RST,模块复位(低电平有效)
PIN18 ----------NC,不连接
PIN19 ----------LED+ ,背光+,一般接5V。
PIN20 ----------LED- ,背光-,一般接GND。
在网上搜了关于ST7920的资料,跟据图上的接法串行驱动只要四根线和S52连接:
PIN5----SID 数据线
PIN6----SCLK 时钟脉冲线
PIN1----VSS(GND)接地
PIN2----VDD(Vcc)电源+5V
我先试了背光,也就是第20脚接地,19脚通过电流表接电源+5V,测得背光电流为30mA,背光很亮。
下面还是要先讲原理,资料说起来是枯燥了点。
但你不去理解它,是不可能让LCD正常工作的。
先说说ST7920的LCD内部都有哪些资源。
1、ST7920 内部固化了8192 个16×16 点阵的中文字型在CGROM里。
2、固化有126 个16×8 点阵的西文字符在HCGROM里。
3、提供4个16×16点阵自造字符的存储空间CGRAM。
4、提供128×64的点阵绘图共1024个字节的存储空间GDRAM。
5、提供1个16×15点阵图标的存储空间IRAM(ICON RAM)。
如何去把它们显示在LCD上呢。
1、作为字符显示,在控制器内有个供写入字符代码的缓存器DDRAM ,你只要将要显示的中文字符代码或西文字符代码写入DDRAM,硬件将依照编码自动从CGROM 中选择将要显示的字型显示再屏幕上。
至于是显示西文字符还是中文字符,它会自动辨别的,这和我们PC上是一样的,字符代码也完全一样。
2、图形方式就是用指令直接将表示点阵信息的字节数据写入相应位置的GDRAM 内,
具体的规则:
1、字符显示时,DDRAM地址与液晶屏的位置关系见下图:
这个图上可以看出,它的地址编排很怪,第一行到87H完了以后就跳到了第三行接着88H了,每二行也是一样的,很明显,有下面两行接在上面两行后面的迹像。
如下图:
2、下面我们再来看看图形显示GDRAM地址和LCD屏位置的关系:
上图我们可以看出ST7920的LCD12864在地址的排列上是分为上、下半屏来显示的,上半屏横向的列地址(X)是0-7(00h-07h),下半屏的列地址是8-15(08h-0fh)。
而每个一地址都可写入两个字节的内容,它们是按高位在前低位在后排列的。
垂直方向上的地址(Y)上半屏是0-31(00h-1fh),下半屏的Y地址仍是0-31(00h-1fh),可以看出,它的地址排列方式还是将下半屏接在上半屏后面的,因此这块LCD12864,虽然在点阵的物理排列上是128×64,但在地址排列上,它却是块256×32。
3、下面我们来介绍能够使用的指令?
下面我们来看看在串行模式下是如何进行控制的,见下图:
由图可以看出,单片机与液晶模块之间传送1字节的数据共需24个时钟脉冲。
首先,单片机要给出数据传输起始位,这里是以5个连续的“1”作数据起始位,如模块接收到连续的5个“1”,则内部传输被重置并且串行传输将被同步。
紧接着,“RW”位用于选择数据的传输方向(读或写),“RS”位用于选择内部数据寄存器或指令寄存器,最后的第8位固定为“0”。
在接收到起始位及“RW”和“RS”的第1个字节后,下一个字节的数据或指令将被分为2个字节来串行传送或接收。
数据或指令的高4位,被放在第2个字节串行数据的高4位,其低4位则置为“0”;数据或指令的低4位被放在第3个字节的高4位,其低
4位也置为“0”,如此完成一个字节指令或数据的传送。
需要注意的是,当有多个数据或指令要传送时,必须要等到一个指令完成执行完毕后再传送下一个指令或数据,否则,会造成指令或数据的丢失。
这是因为液晶模块内部没有发送/接收缓冲区。
我先上点图,再写。
2
3
4
5
6
待续……。