旋转编码器控制12864液晶多级菜单显示
- 格式:pdf
- 大小:292.30 KB
- 文档页数:10
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)。
12864点阵型液晶显示屏的工作原理12864点阵型液晶显示屏的基本原理与使用方法转自点阵LCD的显示原理在数字电路中,所有的数据都是以0和1保存的,对LCD控制器进行不同的数据操作,可以得到不同的结果。
对于显示英文操作,由于英文字母种类很少,只需要8位(一字节)即可。
而对于中文,常用却有6000以上,于是我们的DOS前辈想了一个办法,就是将ASCII表的高128个很少用到的数值以两个为一组来表示汉字,即汉字的内码。
而剩下的低128位则留给英文字符使用,即英文的内码。
那么,得到了汉字的内码后,还仅是一组数字,那又如何在屏幕上去显示呢?这就涉及到文字的字模,字模虽然也是一组数字,但它的意义却与数字的意义有了根本的变化,它是用数字的各位信息来记载英文或汉字的形状,如英文的'A'在字模的记载方式如图1所示:图1 “A”字模图而中文的“你”在字模中的记载却如图2所示:图2 “你”字模图12864点阵型LCD简介12864是一种图形点阵液晶显示器,它主要由行驱动器/列驱动器及128×64全点阵液晶显示器组成。
可完成图形显示,也可以显示8×4个(16×16点阵)汉字。
管脚号管脚名称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或DR 6 E H/L R/W=“L”,E信号下降沿锁存DB7∽DB0R/W=“H”,E=“H”DDRA M数据读到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背光板电源表1:12864LCD的引脚说明在使用12864LCD前先必须了解以下功能器件才能进行编程。
12864系列点阵型液晶显⽰模块12864系列点阵型液晶显⽰模块⼀、OCM12864液晶显⽰模块概述⼀、OCM12864液晶显⽰模块概述1.OCM12864液晶显⽰模块是128×64点阵型液晶显⽰模块,可显⽰各种字符及图形,可与CPU直接接⼝,具有8位标准数据总线、6条控制线及电源线。
采⽤KS0107控制IC。
2.外观尺⼨:113×65×11mm(ocm12864-1), 93×70×10mm(ocm12864-2)78×70×10mm(ocm12864-3),3.视域尺⼨:73.4×38.8mm(ocm12864-1) 70.7×38mm(ocm12864-2),64×44mm(ocm12864-3)4.重量:⼤约 gl 补充说明:外观尺⼨可根据⽤户的要求进⾏适度调整。
⼆、最⼤⼯作范围1、逻辑⼯作电压(Vcc):4.5~5.5V2、电源地(GND):0V3、LCD驱动电压(Vee):0~-10V4、输⼊电压:Vee~Vdd5、⼯作温度(Ta):0~55℃(常温) / -20~70℃(宽温)6、保存温度(Tstg):-10~65℃三、电⽓特性(测试条件 Ta=25,Vdd=5.0+/-0.25V)1、输⼊⾼电平(Vih):3.5Vmin2、输⼊低电平(Vil):0.55Vmax3、输出⾼电平(Voh):3.75Vmin九、读写模块程序举例l 写指令⼦程序(INST)SETB ECLR D_ICLR R_WMOV P1, ACLR ERETl 写数据⼦程序(DATA)SETB ESETB D_ICLR R_WMOV P1, ACLR ERETl 写⼀页显⽰RAM数据(假设指令⼦程序为INST,数据⼦程序为DATA)MOV A,#0B8HLCALL INST ;置页地址为0页MOV A,#40HLCALL INST ;置列地址为0列MOV R2,#40HMOV R1,#00HMOV DPTR,#ADDRLOOP:MOV A,R1MOVC A,@A+DPTRLCALL DATAINC R1DJNZ R2, LOOP12864系列点阵型液晶显⽰模块⼀、OCM12864液晶显⽰模块概述⼀、OCM12864液晶显⽰模块概述1.OCM12864液晶显⽰模块是128×64点阵型液晶显⽰模块,可显⽰各种字符及图形,可与CPU直接接⼝,具有8位标准数据总线、6条控制线及电源线。
12864液晶屏手册一、液晶显示模块概述12864A-1汉字图形点阵液晶显示模块,可显示汉字及图形,内置8192个中文汉字(16X16点阵,16*8=128,16*4=64, 一行只能写8个汉字,4行;)、128个字符(8X16点阵)及64X256点阵显示RAM( GDRAM 主要技术参数和显示特性:电源:VDD ~+5V(内置升压电路,无需负压);显示内容:128列X 64行(128表示点数)显示颜色:黄绿显示角度:6: 00钟直视LCD 类型:STN与MC成口 : 8位或4位并行/3位串行配置LED背光多种软件功能:光标显示、画面移位、自定义字符、睡眠模式等、外形尺寸1.外形尺寸图□U UPN12864A2.主要外形尺寸二、模块引脚说明逻辑工作电压(VDD):〜电源地(GND): 0V工作温度(Ta) : 0〜60C (常温)/ -20 〜75 C (宽温)三、接口时序模块有并行和串行两种连接方法(时序如下):8位并行连接时序图MP如资料到模块MPLM模块读出资料2、串行连接时序图串行数据传送共分三个字节完成:第一字节:串口控制一格式11111ABCA为数据传送方向控制: H表示数据从LCD到MCU L表示数据从MCHiJ LCDB C 为数据类型选择:固定为0H表示数据是显示数据,L表示数据是控制指令第二字节:(并行)8位数据的高 4 位一格式DDDD0000第三字节:(并行)8位数据的低 4 位一格式0000DDDD 串行接口时序参数:(测试条件:T=25C VDD=四、用户指令集备注:1、当模块在接受指令前,微处理顺必须先确认模块内部处于非忙碌状态,即读取BF标志时BF需为0,方可接受新的指令:如果在送出一个指令前并不检查BF标志,(一般在输入每天指令前加个delay )那么在前一个指令和这个指令中间必须延迟一段较长的时间,即是等待前一个指令确实执行完成,指令执行的时间请参考指令表中的个别指令说明。
首先定义一个菜单结构typedef struct menu//定义一个菜单{u8 range_from,range_to; //当前显示的项开始及结束序号 u8 itemCount;//项目总数u8 selected;//当前选择项u8 *menuItems[17];//菜单项目struct menu **subMenus;//子菜单struct menu *parent;//上级菜单,如果是顶级则为null void (**func)();//选择相应项按确定键后执行的函数}Menu;Menu MainMenu = { //定义主菜单0,3,4,0,//默认显示0-3项,总共4项,当前选择第0项 {"设置1 \x10","设置2 \x10","输入指令发送","查询\x10"}};Menu searchMenu = {//查询菜单0,3,6,0,{"记帐记录明细","未采集记录数","设备机号","本机IP地址","记录空间大小","软件版本"}};Menu *currentMenu;//当前的菜单用于显示菜单项void display(u8 line) //显示菜单项并设置选中的项反白{int i;line = 3-(currentMenu->range_to-line);Lcd_Fill(0x00);for(i = 0;i<4;i++){Lcd_Disp(i+1,0,currentMenu->menuItems[i+currentMenu->range_from]);}highlight(0,line,8,255);//反白显示指定行}void func(void){printf("hello\r\n");}初始化菜单:void initMenu(){MainMenu.subMenus = malloc(sizeof(&MainMenu)*4);MainMenu.subMenus[0] = NULL;//第1到3项没有子菜单置null,选择后程序会调用func中相应项中的函数MainMenu.subMenus[1] = NULL;MainMenu.subMenus[2] = NULL;MainMenu.subMenus[3] = &searchMenu;//第四项查询有子菜单MainMenu.func = malloc(sizeof(&func)*4);MainMenu.func[0] = NULL;MainMenu.func[1] = NULL;MainMenu.func[2] = &func;//当选择了并按了确定,会执行func函数MainMenu.func[3] = NULL;MainMenu.parent = NULL;//表示是顶级菜单searchMenu.subMenus = malloc(sizeof(&searchMenu)*6);searchMenu.subMenus[0] = searchMenu.subMenus[1] = searchMenu.subMenus[2] = searchMenu.subMenus[3] = searchMenu.subMenus[4] = searchMenu.subMenus[5] = NULL;searchMenu.func = malloc(sizeof(&printf)*6);searchMenu.func[0] = searchMenu.func[2] = searchMenu.func[2] = searchMenu.func[3] = searchMenu.func[4] = searchMenu.func[5] = NULL;searchMenu.parent = &MainMenu;//上一级菜单是MainMenu.进入查询子菜单后按返回键,将会显示这个菜单项currentMenu = &MainMenu;}mainint main(void){delay_init();uart_init(9600);Lcd_Init();KEY_Init();initMenu();display(currentMenu->selected);while(1){key = KEY_Scan();if(key == 0){delay_ms(10);continue;}printf("key %d is press\r\n",key);switch(key){case 12://向上if(currentMenu->selected == 0)//到了第一项break;else{currentMenu->selected--;if(currentMenu->selected < currentMenu->range_from)//更新显示的区域 {currentMenu->range_from = currentMenu->selected;currentMenu->range_to = currentMenu->range_from+3;}display(currentMenu->selected);break;}case 8://向下if(currentMenu->selected == currentMenu->itemCount-1)break;else{currentMenu->selected++;if(currentMenu->selected>currentMenu->range_to){currentMenu->range_to = currentMenu->selected;currentMenu->range_from = currentMenu->range_to-3;}display(currentMenu->selected);break;}case 4://Enter键{if(currentMenu->subMenus[currentMenu->selected] !=NULL){currentMenu = currentMenu->subMenus[currentMenu->selected]; display(0);}else{if(currentMenu->func[currentMenu->selected] != NULL){currentMenu->func[currentMenu->selected]();//执行相应的函数 display(currentMenu->selected);//返回后恢复原来的菜单状态}}break;}case 3://返回键{if(currentMenu->parent!=NULL)//父菜单不为空,将显示父菜单{currentMenu = currentMenu->parent;display(currentMenu->selected);}break;}default:break;}delay_ms(10);}}void Lcd_Disp(unsigned char x,unsigned char y,unsigned char *s) {Lcd_Write_Cmd(0x30); //进入标准模式LCD_Set_XY(x,y);while (*s){Lcd_Write_Data(*s);s++;}Lcd_Write_Cmd(0x36); //返回图形模式}void highlight(uchar x,uchar y,uchar width,u8 mode) //反白,X值为0-7,Y值为0-3,width为行反白格数{uchar i,j,flag=0x00;if(y>1){flag=0x08;y=y-2;}Lcd_Write_Cmd(0x34); //写数据时,关闭图形显示,且打开扩展指令集for(i=0;i<16;i++){Lcd_Write_Cmd(0x80+(y<<4)+i);Lcd_Write_Cmd(0x80+flag+x);for(j=0;j<width;j++){Lcd_Write_Data(mode);Lcd_Write_Data(mode);}}Lcd_Write_Cmd(0x36); //写完数据,开图形显示}。
学习笔记:12864液晶模块的详细使用备注:这篇文章是对12864操作的具体介绍,仅限刚接触12864的新手,大神请拍砖,文章写的较散,建议先参考12864手册及控制驱动器ST7920英文手册有个初步理解之后再阅读该篇文章,将会有更深的认识。
强烈建议阅读ST7920英文手册,细节内容里面有详细介绍,中文的12864也是从中译过来的。
本文分三个步骤介绍12864的内部资源原理,指令集详细讲解,以及应用例子。
对12864的所有操作概括起来有4种:1)、读忙状态(同时读出指针地址内容),初始化之后每次对12864的读写均要进行忙检测。
2)、写命令:所有的命令可以查看指令表,后续讲解指令的详细用法。
写地址也是写指令。
3)、写数据:操作对象有DDRAM、CGRAM、GDRAM。
4)、读数据:操作对象也是DDRAM、CGRAM、GDRAM。
对12864的学习首相要了解其内部资源,知道了它里面有哪些东西,你就可以更加方便的使用它。
先介绍几个英文的名字:DDRAM:(Data Display Ram),数据显示RAM,往里面写啥,屏幕就会显示啥。
CGROM:(Character Generation ROM),字符发生ROM。
里面存储了中文汉字的字模,也称作中文字库,编码方式有GB2312(中文简体)和BIG5(中文繁体)。
笔者使用的是育松电子的QC12864B,讲解以此为例。
CGRAM:(Character Generation RAM),字符发生RAM,,12864内部提供了64×2B的CGRAM,可用于用户自定义4个16×16字符,每个字符占用32个字节。
GDRAM:(Graphic Display RAM):图形显示RAM,这一块区域用于绘图,往里面写啥,屏幕就会显示啥,它与DDRAM的区别在于,往DDRAM中写的数据是字符的编码,字符的显示先是在CGROM中找到字模,然后映射到屏幕上,而往GDRAM中写的数据时图形的点阵信息,每个点用1bit来保存其显示与否。
液晶显示模块使用手册版本:1.0型号:CJ12864L系列选配件说明液晶片□常温(0~50℃)□宽温(-20~+60℃)□超宽温(-30~+70℃)□黄绿膜□蓝膜□灰膜□黑白膜背光LED背光□白光□翡绿光□黄绿光□蓝光EL背光□白光□蓝光□CCFL背光负压电路□板载负压□不带负压一.概述CJ12864L是一款带中文字库的图形点阵模块,由动态驱动方式驱动128×64点阵显示。
低功耗,供应电压范围宽。
内含多功能的指令集,操作简易。
采用COB工艺制作,结构稳固,使用寿命长。
二.特性:●提供8位,4位及串行接口可选●64×16位字符显示RAM(DDRAM最多16字符×4行,LCD显示范围16×2行)●2M位中文字型ROM(CGROM),总共提供8192个中文字型(16×16点阵)●16K位半宽字型ROM(HCGROM),总共提供126个西文字型(16×8点阵)●64×16位字符产生RAM(CGRAM)●15×16位总共240点的ICON RAM(ICONRAM)●自动复位(RESET)功能●绘图及文字画面混合显示功能●提供多功能指令:——画面清除(display clear)——游标归位(return home)——显示开/关(display on/off)——游标显示/隐藏(cursor on/off)——游标移位(cursor shift)——显示移位(display shift)——垂直画面旋转(vertical line scoll)——反白显示(By-line reverse display)——睡眠模式(sleep mode)三.外形尺寸1.外形尺寸图2.主要外形尺寸项目标准尺寸单位模块体积78*70*12.5mm 视域62.0*44.0mm 行列点阵数128×64dots 点距离0.438*0.60mm 点大小0.378*0.54mm四.硬件说明1.引脚特性管脚名称符号电平功能描述1VSS0V接地(GND)2VDD 5.0V电源电压3V0负压液晶显示器驱动电压调节端4RS H/L 并口模式寄存器选择H:数据;L:指令串口片选信号H:有效;L:失效5R/W H/L 并口模式H:读;L:写串口数据线6E H/L 并口:读/写起始脚串口连续时钟输入7 | 10DB0|DB3H/L数据总线低4位,4位并口及串口时悬空11 | 14DB4|DB7H/L数据总线高4位,串口时悬空DB7可作BUSY标志,15PSB H/L H:8/4位数据接口模式L:串行接口模式由硬件设置时,此脚悬空16NC悬空17RST H/L复位信号,选择硬件复位时,此脚悬空18VEE负压液晶显示器驱动电压19BLA5V背光正20BLK0V背光负2.原理简图3.最大工作范围1)逻辑工作电压(Vdd):5V±10%2)电源地(GND):0V 3)LCD 驱动电压(Vop):5V 4)输入电压:0~Vdd4.电气特性(测试条件Ta=25,Vdd=5.0±10%)1)输入高电平(Vih):0.7Vdd~Vdd 2)输入低电平(Vil):0.6Vmax 3)输出高电平(Voh):0.8Vdd~Vdd 4)输出低电平(Vol):0.4Vmax 5)模块工作电流: 2.2~3.0mA(不含背光)6)底黄绿光工作电流:250mA 7)侧白光工作电流:60mA五.模块主要硬件构成说明1.PSB 脚VSS VDD RS R/W E PSB DB0RES2.忙标志(BF)表示当前与MPU接口电路的运行状态。
无字库12864液晶屏滚动显示程序[转]#include<reg52.h>#include<intrins.h>#include<absacc.h>#define Lcd_Bus P0 //MCU P0<------> LCM#define Disp_On 0x3f//开显示#define Disp_Off 0x3e//关显示#define Col_Add 0x40//列地址#define Page_Add 0xb8//页地址#define Start_Line 0xc0//起始页sbit cs1=P2^3; //Master chip enablesbit cs2=P2^4; //Slave chip enablesbit Enable=P2^2; // mode Enable singlesbit Di=P2^0; //Data or Instrument Selectsbit RW=P2^1; //Write or Readsbit Lcd_Rst=P2^5; //Lcm reset/*****************************字模,此字体下对应的点阵为:宽x高=16x16*****************************/unsigned char code Chinese_character[][32]={{0x02,0xF2,0x12,0x12,0x12,0xFE,0x12,0x12,0x12,0xFE,0x12,0x12,0x12,0xF2,0x02,0x0 0 ,0x00,0x7F,0x28,0x24,0x22,0x21,0x20,0x20,0x20,0x21,0x22,0x22,0x22,0x7F, 0x00,0x00},/*"西",0*/{0x80,0x90,0x8C,0x84,0x84,0xF4,0xA5,0x86,0x84,0x84,0x84,0x84,0x94,0x8C,0x84,0x0 0,0x80,0x80,0x80,0x40,0x47,0x28,0x28,0x10,0x28,0x24,0x43,0xC0,0x40,0x00, 0x00,0x00},/*"安",1*/{0x00,0x42,0x62,0x5A,0xC6,0x10,0x54,0x54,0x54,0xFF,0x54,0x54,0x7C,0x10,0x10,0x0 0,0x40,0x23,0x14,0x08,0x17,0x28,0x29,0x49,0x49,0x7F,0x49,0x49,0x49,0x49, 0x40,0x00},/*"建",2*/{0x10,0x48,0x47,0xCC,0x54,0x44,0x14,0xE8,0x27,0x24,0x2C,0xF4,0x04,0x04,0x04,0x0 0,0x10,0x30,0x10,0x0F,0x88,0x48,0x30,0x0F,0x01,0x06,0x00,0x3F,0x40,0x40, 0x70,0x00},/*"筑",3*/{0x10,0x12,0x92,0x72,0xFE,0x51,0x91,0x00,0x22,0xCC,0x00,0x00,0xFF,0x00,0x00,0x00x04,0x02,0x01,0x00,0xFF,0x00,0x04,0x04,0x04,0x02,0x02,0x02,0xFF,0x01, 0x01,0x00},/*"科",4*/{0x08,0x08,0x88,0xFF,0x48,0x28,0x00,0xC8,0x48,0x48,0x7F,0x48,0xC8,0x48,0x08,0x0 0,0x01,0x41,0x80,0x7F,0x00,0x40,0x40,0x20,0x13,0x0C,0x0C,0x12,0x21,0x60, 0x20,0x00},/*"技",5*/{0x20,0x20,0x20,0x20,0x20,0x20,0xA0,0x7F,0xA0,0x20,0x20,0x20,0x20,0x20,0x20,0x0 0,0x00,0x80,0x40,0x20,0x10,0x0C,0x03,0x00,0x01,0x06,0x08,0x30,0x60,0xC0, 0x40,0x00},/*"大",6*/{0x40,0x30,0x10,0x12,0x5C,0x54,0x50,0x51,0x5E,0xD4,0x50,0x18,0x57,0x32,0x10,0x0 0,0x00,0x02,0x02,0x02,0x02,0x02,0x42,0x82,0x7F,0x02,0x02,0x02,0x02,0x02, 0x02,0x00},/*"学",4*/{0x00,0x02,0x1C,0xE8,0x00,0x40,0x60,0x58,0x47,0x22,0x20,0x28,0x30,0xE0,0x40,0x0 0,0x02,0x02,0x7F,0x00,0x00,0x00,0x7F,0x21,0x21,0x21,0x21,0x21,0x7F,0x00, 0x00,0x00},/*"冶",0*/{0x40,0x40,0x20,0x20,0x50,0x48,0x44,0xC3,0x44,0x48,0x50,0x50,0x20,0x60,0x20,0x0 0,0x40,0x40,0x42,0x42,0x4A,0x72,0x42,0x7F,0x42,0x62,0x5A,0x42,0x42,0x40, 0x40,0x00},/*"金",1*/{0x00,0x00,0x02,0x02,0x02,0x02,0x02,0xFE,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x0 0,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3F,0x20,0x20,0x20,0x20,0x20,0x20, 0x20,0x00},/*"工",2*/{0x10,0x12,0xD2,0xFE,0x91,0x11,0x80,0xBF,0xA1,0xA1,0xA1,0xA1,0xBF,0x80,0x00,0x0 0,0x04,0x03,0x00,0xFF,0x00,0x41,0x44,0x44,0x44,0x7F,0x44,0x44,0x44,0x44, 0x40,0x00},/*"程",3*/{0x40,0x30,0x10,0x12,0x5C,0x54,0x50,0x51,0x5E,0xD4,0x50,0x18,0x57,0x32,0x10,0x0 0,0x00,0x02,0x02,0x02,0x02,0x02,0x42,0x82,0x7F,0x02,0x02,0x02,0x02,0x02, 0x02,0x00},/*"学",4*/{0xFE,0x02,0x32,0x4A,0x86,0x0C,0x24,0x24,0x25,0x26,0x24,0x24,0x24,0x0C,0x04,0x0 0,0xFF,0x00,0x02,0x04,0x83,0x41,0x31,0x0F,0x01,0x01,0x7F,0x81,0x81,0x81, 0xF1,0x00},/*"院",5*/{0x10,0x10,0xD0,0xFE,0x50,0x90,0x00,0x10,0x10,0x10,0xD0,0xFE,0x10,0x10,0x10,0x0 0,0x08,0x06,0x01,0xFF,0x00,0x01,0x10,0x08,0x04,0x43,0x80,0x7F,0x00,0x00, 0x00,0x00},/*"材",0*/{0x20,0x24,0xA8,0x70,0xFF,0x68,0xA4,0x20,0x42,0x8C,0x00,0x00,0xFF,0x00,0x00,0x00x08,0x06,0x01,0x00,0xFF,0x00,0x01,0x02,0x02,0x03,0x02,0x02,0xFF,0x01, 0x01,0x00},/*"料",1*/{0x00,0x08,0x08,0x08,0xFF,0x08,0x08,0xF8,0x00,0xF8,0x08,0x08,0x08,0xF8,0x0 0,0x00,0x40,0x20,0x18,0x07,0x00,0x20,0x40,0x3F,0x00,0x7F,0x10,0x10,0x10,0x3F, 0x00,0x00},/*"加",2*/{0x00,0x00,0x02,0x02,0x02,0x02,0x02,0xFE,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x0 0,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3F,0x20,0x20,0x20,0x20,0x20,0x20, 0x20,0x00},/*"工",4*/{0x00,0x00,0x02,0x02,0x02,0x02,0x02,0xFE,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x0 0,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3F,0x20,0x20,0x20,0x20,0x20,0x20, 0x20,0x00},/*"工",4*/{0x10,0x12,0xD2,0xFE,0x91,0x11,0x80,0xBF,0xA1,0xA1,0xA1,0xA1,0xBF,0x80,0x00,0x0 0,0x04,0x03,0x00,0xFF,0x00,0x41,0x44,0x44,0x44,0x7F,0x44,0x44,0x44,0x44, 0x40,0x00},/*"程",5*/};unsigned char code E[][16]={{0xC0,0x30,0x08,0x08,0x08,0x08,0x38,0x00,0x07,0x18,0x20,0x20,0x20,0x10,0x08,0x0 0},/*"C",0*/{0x80,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x20,0x20,0x3F,0x21,0x20,0x00,0x01,0x0 0},/*"r",1*/{0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x19,0x24,0x22,0x22,0x22,0x3F,0x2 0},/*"a",2*/{0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x33,0x24,0x24,0x24,0x24,0x19,0x0 0},/*"s",3*/{0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x80,0x81,0x8E,0x70,0x18,0x06,0x01,0x0 0},/*"y",4*/{0x08,0xF8,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x3F,0x11,0x20,0x20,0x11,0x0E,0x0 0},/*"b",5*/{0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x0 0},/*"o",6*/{0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x80,0x81,0x8E,0x70,0x18,0x06,0x01,0x0 0},/*"y",7*/{0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x22,0x22,0x22,0x22,0x13,0x0 0},/*"e",8*/};/***********************延时子程序***********************/void delay(unsigned int k){unsigned int i;unsigned int j;for(i=0;i<k;i++)for(j=0;j<20;j++);}/***********************写命令左***********************/ void write_cmd_1(unsigned char command){cs1=1;cs2=0;Di=0;RW=0;Lcd_Bus=command; //P0口delay(0);Enable=1;delay(0);Enable=0;}/***********************写命令右***********************/ void write_cmd_2(unsigned char command){cs1=0;cs2=1;Di=0;RW=0;Lcd_Bus=command;delay(0);Enable=1;delay(0);Enable=0;}/***********************写数据左***********************/ void write_data_1(unsigned char dis_data){cs1=1;cs2=0;Di=1;RW=0;Lcd_Bus=dis_data;delay(0);Enable=1;delay(0);Enable=0;}/***********************写数据右***********************/ void write_data_2(unsigned char dis_data){cs1=0;cs2=1;Di=1;RW=0;Lcd_Bus=dis_data;delay(0);Enable=1;delay(0);Enable=0;}/***********************清内存左***********************/void clear_1(void){unsigned char j,k;cs1=1;cs2=0;write_cmd_1(Page_Add+0);write_cmd_1(Col_Add+0);for(k=0;k<8;k++){write_cmd_1(Page_Add+k);for(j=0;j<64;j++)write_data_1(0x00);}}/***********************清内存右***********************/void clear_2(void){unsigned char j,k;cs1=0;cs2=1;write_cmd_2(Page_Add+0);write_cmd_2(Col_Add+0);for(k=0;k<8;k++){write_cmd_2(Page_Add+k);for(j=0;j<64;j++)write_data_2(0x00);}}/***********************显示汉字16*16左************************/void Chinese_disp_1(unsigned char pag,unsigned char col,unsigned char n) {unsigned char i=0;unsigned char j=0;cs1=1;cs2=0;for(i=0;i<2;i++){write_cmd_1(Page_Add+pag+i);write_cmd_1(Col_Add+col);for(j=0;j<16;j++)write_data_1(Chinese_character[n][16*i+j]);}}/***********************显示汉字16*16右***********************/void Chinese_disp_2(unsigned char pag,unsigned char col,unsigned char n) {unsigned char i=0;unsigned char j=0;cs1=0;cs2=1;for(i=0;i<2;i++){write_cmd_2(Page_Add+pag+i);write_cmd_2(Col_Add+col);for(j=0;j<16;j++)write_data_2(Chinese_character[n][16*i+j]);}}/***********************显示英文16*8左************************/void E_disp_1(unsigned char pag,unsigned char col,unsigned char n){unsigned char i=0;unsigned char j=0;cs1=1;cs2=0;for(i=0;i<2;i++){write_cmd_1(Page_Add+pag+i);write_cmd_1(Col_Add+col);for(j=0;j<8;j++)write_data_1(E[n][8*i+j]);}}/***********************显示英文16*8右***********************/void E_disp_2(unsigned char pag,unsigned char col,unsigned char n){unsigned char i=0;unsigned char j=0;cs1=0;cs2=1;for(i=0;i<2;i++){write_cmd_2(Page_Add+pag+i);write_cmd_2(Col_Add+col);for(j=0;j<8;j++)write_data_2(E[n][8*i+j]);}}/***********************液晶屏初始化***********************/ void init_lcd(){Lcd_Rst=0;delay(100);Lcd_Rst=1;delay(100);write_cmd_1(Disp_Off); write_cmd_2(Disp_Off);write_cmd_1(Page_Add+0); write_cmd_2(Page_Add+0);write_cmd_1(Start_Line+0); write_cmd_2(Start_Line+0);write_cmd_1(Col_Add+0); write_cmd_2(Col_Add+0);write_cmd_1(Disp_On); write_cmd_2(Disp_On);}/***********************LCD显示子程序***********************/ void display(void){unsigned char i;for(i=Start_Line;i<0xff;i++){Chinese_disp_1(0,0, 0);Chinese_disp_1(0,16,1);Chinese_disp_1(0,32,2);Chinese_disp_1(0,48,3);Chinese_disp_2(0,0, 4);Chinese_disp_2(0,16,5);Chinese_disp_2(0,32,6);Chinese_disp_2(0,48,7);//西安建筑科技大学Chinese_disp_1(2,16,8);Chinese_disp_1(2,32,9);Chinese_disp_1(2,48,10);Chinese_disp_2(2,0,11);Chinese_disp_2(2,16,12);Chinese_disp_2(2,32,13);//冶金工程学院Chinese_disp_1(4,16,14);Chinese_disp_1(4,32,15);Chinese_disp_1(4,48,16);Chinese_disp_2(4,0,17);Chinese_disp_2(4,16,18);Chinese_disp_2(4,32,19);//材料加工工程E_disp_1(6,24,0);E_disp_1(6,32,1);E_disp_1(6,40,2);E_disp_1(6,48,3);E_disp_1(6,56,4);E_disp_2(6,0,5);E_disp_2(6,8,6);E_disp_2(6,16,7);E_disp_2(6,24,8);//Crasyboyewrite_cmd_1(i);write_cmd_2(i);delay(3000);//调整滚动速度}//delay(60000);}/***********主程序************/ void main(void){ init_lcd();clear_1();clear_2();while(1){display();}}。
12864显示原理12864显示原理是指12864液晶显示屏的工作原理和特点。
在深入了解12864显示原理之前,我们首先要了解液晶显示屏的基本结构和工作原理。
液晶显示屏是一种利用液晶材料的光学特性来显示图像的平面显示器件。
它由玻璃基板、液晶材料、驱动电路和偏光片等组成。
其中,12864显示屏是指屏幕分辨率为128×64的液晶显示屏。
它广泛应用于电子仪器、仪表、通讯设备、汽车电子等领域。
12864显示原理的核心是液晶材料的电光效应。
液晶材料具有两个特性,扭曲结构和双折射。
当施加电场时,液晶分子会发生扭曲,改变光的传播路径,从而实现像素点的亮暗变化。
通过合理的驱动电路,可以控制每个像素点的亮度,从而显示出所需的图像。
在12864显示原理中,驱动电路起着至关重要的作用。
它主要由控制器、驱动芯片和接口电路组成。
控制器负责接收外部信号并生成显示数据,驱动芯片则负责将显示数据转化为对液晶的驱动信号,接口电路则负责与外部系统进行通信。
通过这些部件的协同工作,才能实现12864显示屏的正常工作。
除了驱动电路,偏光片也是12864显示原理中不可或缺的部分。
偏光片可以过滤出特定方向的光线,使得液晶显示出清晰的图像。
在实际应用中,偏光片的选择和安装位置对显示效果有着重要的影响。
总的来说,12864显示原理是液晶显示技术的一个重要分支,它通过液晶材料的电光效应和驱动电路的协同作用,实现了图像的高质量显示。
在实际应用中,我们需要根据具体的场景和要求,选择合适的液晶显示方案,并合理设计驱动电路和偏光片,以实现最佳的显示效果。
通过对12864显示原理的深入了解,我们可以更好地应用液晶显示技术,提高产品的竞争力,为用户带来更好的视觉体验。
同时,也可以为液晶显示技术的进一步发展提供有益的参考和借鉴。
希望本文对您理解12864显示原理有所帮助,谢谢阅读!。
液晶12864 分级菜单编程思想喜欢单片机的人,想必对液晶12864应该不会陌生。
对于单片机来说,如果用于显示,12864是个不错的选择,编程既简单,而资源消耗又符合单片机的使用要求,是理想的选择。
下面就我做有关单片机的一点心得分享一下我在编写液晶12864的一点思想,希望能个喜欢这些东西的同志们有所启发。
以下是我项目中分级菜单的源文件:(一个12864的五级菜单)/**************************************分级菜单***************************************/#include"STC15F2K.H"#include"KEY.H"#include"LCD.H"#include"LIST.H"#include"YINGY.H"#include"HCSR04.H"#include"HONGW.H"#include "PCF8563.H"/**************************************变量定义***************************************/uchar wendT=30; //温度上限bit fg=0;uchar key = 0; //键值获得//uchar keyq = 0; //子菜单项标志uchar flagk = 0;uint flag = 0; //菜单标志bit flag_ms = 0; //智能模式和安全模式标志位uchar timeflag=0; //时间设置标志位uchar shi=7,fen=0,miao=0; //闹钟标志位uchar ms_h1=6,ms_m1=0,ms_h2=22,ms_m2=0; //时间标志位bit bing_nao = 0; //闹钟开启标志位uchar code l1[] = "年";uchar code l2[] = "月";uchar code l3[] = " ";uchar code l4[] = "时";uchar code l5[] = "分";uchar code l6[] = " ";uchar code l7[] = ":";uchar code l8[] = "为";/**************************************函数声明**************************************/void fenjcd();void yiji_menu();void erji_menu();void sanjims_menu();void sanjiqt_menu();void xiug_time(); //时间修改void ms_back();void qt_back();void siji_nao();void nao_time();void ms_time();void wenduT();/**************************************总菜单**************************************/void fenjcd(){yiji_menu();erji_menu();sanjims_menu();sanjiqt_menu();xiug_time(); //时间修改ms_back();qt_back();siji_nao();nao_time();ms_time();}/**************************************一级菜单**************************************/void yiji_menu(){key=getKey();if(flag==0){if(key==1||IR_code==0x45) //进入功能选择页面{write_com(0x01);write(0x81,lis2);write(0x90,lis21);write(0x88,lis23);write(0x98,lis25);write_com(0x0c);flagk = 1;flag = 1;key = 0;IR_code=0;}}if(flag == 1){if(key == 1||IR_code==0x45) //返回正常页面{write_com(0x01);write(0x82,lis1);write(0x90,lcd_date_H);write(0x88,lisk1);write(0x98,lcd_T);write(0x9c,lcd_H);write_com(0x0c);flag = 0;flagk = 0;key = 0;IR_code=0;}}}/**************************************二级菜单**************************************/void erji_menu(){if(flag==1){if(key==2||IR_code==0x40) //菜单选项加1{keyq++; //功能设置选择中if(keyq == 1){write(0x90,lis20);write(0x88,lis24);write(0x98,lis25);}else if(keyq == 2){write(0x90,lis20);write(0x88,lis23);write(0x98,lis26);}IR_code=0;if(keyq>=3) keyq = 0;if(keyq == 0){write(0x98,lis25);write(0x90,lis21);write(0x88,lis23);}}if(key==4||IR_code==0x47) //进入选中页面{if(keyq == 0) //进入时间设置页面{flag = 20; //时间设置编码write_com(0x01);write(0x82,lis30);write(0x90,lisk0);write(0x89,lisk1);write_num(0x90,year_1);//LCD显示write_num(0x91,time.year);write_num(0x93,time.month);write_num(0x95,time.day);write_num(0x89,time.hour);write_num(0x8b,time.minute);write_num(0x8d,time.second);keyq = 0;key=0;IR_code=0;}if(keyq == 1) //进入模式设置页面{flag=21;write_com(0x01);write(0x82,lis31);write(0x90,lis311);write(0x88,lis312);keyq = 0;key=0;IR_code=0;}if(keyq == 2) //进入其它设置页面{flag=22;write_com(0x01);write(0x82,lis32);write(0x90,lis321);write(0x88,lis322);write(0x98,lis324);keyq = 0;key=0;IR_code=0;}}}}/**************************************三级菜单**************************************///三级模式void sanjims_menu(){if(flag == 21) //模式选择{if(key==2||IR_code==0x40) //菜单选项加1{keyq++; //模式选择中if(keyq == 1){write(0x90,lis310);write(0x88,lis313);}IR_code=0;if(keyq>=2) keyq = 0;if(keyq == 0){write(0x88,lis312);write(0x90,lis311);}}if(key==4||IR_code==0x47) //进入选中页面{if(keyq == 0) //开启智能模式{flag = 210; //智能模式编码flag_ms = 0;write_com(0x01);write(0x82,lis1);write(0x90,lis430);write(0x88,lis432);write(0x99,lis433);keyq = 0;key = 0;IR_code=0;}if(keyq == 1) //开启安全模式{flag = 211; //安全模式编码flag_ms = 1;write_com(0x01);write(0x82,lis1);write(0x88,lis431);keyq = 0;key=0;IR_code=0;}}}if(flag == 21) //返回功能设置页面{if(key == 1||IR_code==0x45){write_com(0x01);write(0x81,lis2);write(0x90,lis21);write(0x88,lis23);write(0x98,lis25);write_com(0x0c);flag = 1;key=0;IR_code=0;}}}//三级其它void sanjiqt_menu(){if(flag == 22) //其它设置选择{if(key==2||IR_code==0x40) //菜单选项加1{keyq++; //其它设置项选择中if(keyq == 1){write(0x90,lis320);write(0x88,lis323);write(0x98,lis324);}else if(keyq == 2){write(0x90,lis320);write(0x88,lis322);write(0x98,lis325);}IR_code=0;if(keyq>=3) keyq = 0;if(keyq == 0){write(0x98,lis324);write(0x90,lis321);write(0x88,lis322);}}if(key==4||IR_code==0x47) //进入选中页面{if(keyq == 0) //进入闹钟设置{flag = 220; //闹钟设置编码write_com(0x01);write(0x82,lis40);write(0x90,lis401);write(0x88,lis402);keyq = 0;key = 0;IR_code=0;}if(keyq == 1) //进入温度上限设置**{flag = 221; //温度上限设置write_com(0x01);write(0x81,lis41);write(0x88,lis410);write_com(0x0c);keyq = 0;key = 0;IR_code=0;}if(keyq == 2) //进入遥控器解码{flag = 222; //遥控解码编码write_com(0x01);write(0x82,lis42);write(0x90,lis420);write(0x98,lis421);keyq = 0;key=0;IR_code=0;}}}if(flag == 22) //返回功能设置页面{if(key == 1||IR_code==0x45){write_com(0x01);write(0x81,lis2);write(0x90,lis21);write(0x88,lis23);write(0x98,lis25);write_com(0x0c);flag = 1;key=0;IR_code=0;}}}/*******************************************时间设置********************************************/void xiug_time(){if(flag==20){if(key == 1||IR_code==0x45){if(timeflag == 0) //秒{write_com(0x0f);write_num(0x8d,time.second);write(0x8c,l5);}else if(timeflag == 1) //分{write_com(0x0f);write_num(0x8b,time.minute);write(0x8a,l4);}else if(timeflag == 2) //时{write_com(0x0f);write_num(0x89,time.hour);write(0x88,l6);}else if(timeflag == 3) //天{write_com(0x0f);write_num(0x95,time.day);write(0x94,l2);}else if(timeflag == 4) //月{write_com(0x0f);write_num(0x93,time.month);write(0x92,l1);}else if(timeflag == 5) //年{write_com(0x0f);write_num(0x91,time.year);write_num(0x90,year_1);}timeflag++;IR_code=0;if(timeflag>6)timeflag = 0;}if(key == 3||IR_code==0x15) //数值加1{if(timeflag == 1) //秒{time.second++;if(time.second>=60)time.second=0;write_num(0x8d,time.second);write(0x8c,l5);}else if(timeflag == 2) //分{time.minute++;if(time.minute>=60)time.minute=0;write_num(0x8b,time.minute);write(0x8a,l4);}else if(timeflag == 3) //时{time.hour++;if(time.hour>=24) time.hour=0;write_num(0x89,time.hour);write(0x88,l6);}else if(timeflag == 4) //天{time.day++;if(time.day>=31)time.day=1;write_num(0x95,time.day);write(0x94,l2);}else if(timeflag == 5) //月{time.month++;if(time.month>=13)time.month=1;write_num(0x93,time.month);write(0x92,l1);}else if(timeflag == 6) //年{time.year++;write_num(0x91,time.year);write_num(0x90,year_1);}IR_code=0;}if(key==4||IR_code==0x47) //返回正常显示页面{settime();write_com(0x01);write(0x82,lis1);write(0x90,lisk0);write(0x88,lisk1);write(0x98,lcd_T);write(0x9c,lcd_H);time_lcd();write_com(0x0c);flag = 0;flagk=0;timeflag = 0;key = 0;IR_code=0;}}}/******************************************* 模式选定返回设置********************************************/ void ms_back(){if(flag==211&&(key==1||IR_code==0x45)){write_com(0x01);write(0x82,lis31);write(0x90,lis311);write(0x88,lis312);write_com(0x0c);flag=21;key=0;IR_code=0;}}/********************************************** 温度上限设置**********************************************/ void wenduT(){if(flag==221){if(fg==0){write_num(0x8d,wendT);write(0x8c,l8);write_com(0x0c);}if(key == 3||IR_code==0x15) //数值加1{fg=1;wendT++;write_com(0x0f);write_num(0x8d,wendT);write(0x8c,l8);key=0;IR_code=0;}if(IR_code==0x07) //数值加1{fg=1;wendT--;write_com(0x0f);write_num(0x8d,wendT);write(0x8c,l8);key=0;IR_code=0;}}if(key==4||IR_code==0x47) //返回正常显示页面{write_com(0x01);write(0x82,lis1);write(0x90,lisk0);write(0x88,lisk1);write(0x98,lcd_T);write(0x9c,lcd_H);time_lcd();write_com(0x0c);flag = 0;flagk = 0;timeflag = 0;key = 0;fg=0;IR_code=0;} IR_code=0;}/*******************************************其它选项选定返回设置********************************************/void qt_back(){if((flag==221||flag==222||flag==220)&&(key==1||IR_code==0x45)){write_com(0x01);write(0x82,lis32);write(0x90,lis321);write(0x88,lis322);write(0x98,lis324);write_com(0x0c);flag=22;key=0;IR_code=0;}}/*******************************************闹钟选择设定********************************************/void siji_nao(){if(flag == 220) //闹钟选择{if(key==2||IR_code==0x40) //菜单选项加1{keyq++; //闹钟选择中if(keyq == 1){write(0x90,lis400);write(0x88,lis403);}IR_code=0;if(keyq>=2) keyq = 0;if(keyq == 0){write(0x88,lis402);write(0x90,lis401);}}if(key==4||IR_code==0x47) //进入选中页面{if(keyq == 0) //关闭闹钟{flag = 2200;bing_nao =0;write_com(0x01);write(0x82,lis40);write(0x88,lis405);keyq = 0;key = 0;IR_code=0;}if(keyq == 1) //开并设置闹钟{flag = 2201;bing_nao =1;write_com(0x01);write(0x82,lis40);write(0x90,lis404);write(0x89,lisk1);write_num(0x89,shi);write_num(0x8b,fen);write_num(0x8d,miao);keyq = 0;key=0;IR_code=0;}}}if(flag == 2200) //返回闹钟选择页面{if(key == 1||IR_code==0x45){write_com(0x01);write(0x82,lis40);write(0x90,lis401);write(0x88,lis402);write_com(0x0c);flag = 220;key=0;IR_code=0;}}}/*******************************************闹钟定时********************************************/void nao_time(){if(flag==2201){{if(key == 1||IR_code==0x45){if(timeflag == 0) //秒{write_com(0x0f);write_num(0x8d,miao);write(0x8c,l5);}else if(timeflag == 1) //分{write_com(0x0f);write_num(0x8b,fen);write(0x8a,l4);}else if(timeflag == 2) //时{write_com(0x0f);write_num(0x89,shi);write(0x88,l6);}timeflag++;IR_code=0;if(timeflag>3)timeflag = 0;}if(key == 3||IR_code==0x15) //数值加1{if(timeflag == 1) //秒{miao++;if(miao>=60)miao=0;write_num(0x8d,miao);write(0x8c,l5);}else if(timeflag == 2) //分{fen++;if(fen>=60)fen=0;write_num(0x8b,fen);write(0x8a,l4);}else if(timeflag == 3) //时{shi++;if(shi>=24)shi=0;write_num(0x89,shi);write(0x88,l6);}IR_code=0;}if(key==4||IR_code==0x47) //返回正常显示页面{write_com(0x01);write(0x82,lis1);write(0x90,lisk0);write(0x88,lisk1);write(0x98,lcd_T);write(0x9c,lcd_H);time_lcd();write_com(0x0c);flag = 0;flagk = 0;timeflag = 0;key = 0;IR_code=0;}}}}/*******************************************智能模式时间定时********************************************/void ms_time(){if(flag==210){{if(key == 1||IR_code==0x45){if(timeflag == 0) //分2{write_com(0x0f);write_num(0x9d,ms_m2);write(0x9c,l4);}else if(timeflag == 1) //时2{write_com(0x0f);write_num(0x9b,ms_h2);write(0x9a,l3);}else if(timeflag == 2) //分1{write_com(0x0f);write_num(0x8d,ms_m1);write(0x8c,l4);}else if(timeflag == 3) //时1{write_com(0x0f);write_num(0x8b,ms_h1);write(0x8a,l7);}timeflag++;IR_code=0;if(timeflag>4)timeflag = 0;}if(key == 3||IR_code==0x15) //数值加1 {if(timeflag == 1) //分2{ms_m2++;if(ms_m2>=60)ms_m2=0;write_num(0x9d,ms_m2);write(0x9c,l4);}else if(timeflag == 2) //时2{ms_h2++;if(ms_h2>=24)ms_h2=0;write_num(0x9b,ms_h2);write(0x9a,l3);}else if(timeflag == 3) //分1{ms_m1++;if(ms_m1>=60)ms_m1=0;write_num(0x8d,ms_m1);write(0x8c,l4);}else if(timeflag == 4) //时1{ms_h1++;if(ms_h1>=24)ms_h1=0;write_num(0x8b,ms_h1);write(0x8a,l7);}IR_code=0;}if(key==4||IR_code==0x47) //返回正常显示页面{write_com(0x01);write(0x82,lis1);write(0x90,lisk0);write(0x88,lisk1);write(0x98,lcd_T);write(0x9c,lcd_H);time_lcd();write_com(0x0c);flag = 0;flagk=0;timeflag = 0;key = 0;IR_code=0;}}}}。
J12864中文液晶使用说明
一、硬件连接
二、软件设置
1.安装液晶库文件
将液晶库文件拷贝到单片机的编程环境中,以便在程序中调用相关函数。
2.初始化液晶
在程序的初始化函数中,调用液晶库提供的初始化函数,以初始化液晶参数和相关引脚。
三、显示中文字符
然后,在程序中调用液晶库中的函数,以显示中文字符。
通常的调用方式为:
lcd_draw_chinese(x, y, "你好");
函数参数说明:
-x:起始横坐标
-y:起始纵坐标
-"你好":待显示的中文字符
四、显示英文字符和数字
显示英文字符和数字与显示中文字符类似,只是液晶库提供了额外的函数用于显示英文字符和数字。
调用方式如下:
显示英文字符:
lcd_draw_english(x, y, "Hello");
函数参数说明:
-x:起始横坐标
-y:起始纵坐标
- "Hello":待显示的英文字符
显示数字:
lcd_draw_number(x, y, number);
函数参数说明:
-x:起始横坐标
-y:起始纵坐标
- number:待显示的数字
五、显示图形
六、注意事项
2.操纵液晶模块时应轻拿轻放,避免撞击或扭曲。
3.在使用中文液晶时,应注意控制芯片ST7920的工作电压和时序要求。
4.如果需要显示中文字符,首先要将中文字库文件转换成液晶可识别的格式。
5.当在程序中使用液晶库进行液晶控制时,需注意调用顺序和参数的正确性。
总结:。
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进行驱动的编写,分两种情况:仿真环境下和实物开发板编程。