lcd12864程序流程图
LCD12864时钟毕业设计带矩阵键盘

第一章方案论证1.1 单片机型系统的选择与论证方案一:此方案采用AT89C51八位单片机实现。
它内存较小,只有4K字节Flash闪速存储器,128字节内部RAM,32个I/O口线,两个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,无在线下载编程功能,也无在线仿真功能。
只能通过编程器烧写成以.hex为后缀名的文件。
方案二:此方案采用AT89S52八位单片机实现。
它内存较大,有8K的字节Flash闪速存储器,比AT89C51要多4K。
它可在线编程,可在线仿真的功能,这让调试变得方便。
单片机软件编程的自由度大,可通过编程实现各种各样的算术算法和逻辑控制。
而且体积小,硬件实现简单,安装方便。
另外AT89S52在工业控制上也有着广泛的应用,编程技术及外围功能电路的配合使用都很成熟。
综上所述,我们采用了第二个方案,即AT89S52。
1.2显示模块的选择与论证方案一:采用LED点阵显示,用来显示文字、图形、图像、等各种信息的显示屏幕。
它均由LED矩阵块组成。
图文显示屏可与计算机同步显示汉字、英文文本和图形,该方案简单易行。
但所需的元件较多,且不容易进行操作,可读性差,一旦设定后,很难再加入其他的功能,当加上日期、时间时增加了编程的难度。
方案二:采用液晶(JHD529M1)显示器件,该液晶显示器件与同类型的图形点阵液晶显示模块相比,不论硬件电路结构或显示程序都要简洁得多,且该器件的价格也略低于相同点阵的图形液晶模块。
而且此液晶显示平稳、省电、美观,更容易实现题目要求,对后续的功能兼容性高,同时有中文字库,也可以实现图像显示。
只需将软件作修改即可,可操作性强,也易于读数,能同时显示日期、时间、星期且易于修改。
综上分析,我们采用了第二个方案。
1.3 时钟实现方案一:采用软件实现,直接用单片机的定时器编程以实现时钟,优点节省硬件,缺点是编程复杂程序运行的每一步都需要时间,多一步或少一步程序都会影响记时的准确度,准确度较差。
LCD12864显示程序(汇编语言)

;实验目的:熟悉12864LCD的使用;12864LCD带中文字库;编程让12864LCD显示公司名称“深圳乾龙盛电子”,公司电话“5”,公司传真“6”;硬件设置:;关断所有拨码开关。
#include<p16f877a.inc>;__CONFIG_DEBUG_OFF&_CP_ALL&_WRT_HALF&_CPD_ON&_LVP_OFF&_BODEN_OFF&_PWRTE_ON&_WDT_OFF&_H S_OSC;芯片配置字,看门狗关,上电延时开,掉电检测关,低压编程关,加密,4M晶体HS振荡#define RS PORTA,5 ;命令/数据选择#DEFINE RW PORTA,4 ;读/写选择#DEFINE E PORTA,3 ;使能信号#DEFINE PSB PORTA,2 ;并口/串口选择(H/L)#DEFINE RST PORTA,0 ;复位信号;-----------------------------------------------LCD_X EQU 30H ;页地址LCD_Y EQU 31H ;Y地址COUNT EQU 32H ;循环计数用COUNT1 EQU 33H ;循环计数用COUNT2 EQU 34H ;循环计数用POINT EQU 35H ;查表偏移地址POINT1 EQU 36H ;查表偏移地址POINT2 EQU 37H ;查表偏移地址TEMP EQU 38H ;临时寄存器TEMP1 EQU 39H ;临时寄存器;-----------------------------------------------ORG 0000H ;复位地址NOP ;ICD需要的空指令GOTO MAIN ;跳转到主程序;**********************主程序************************MAINBANKSEL TRISACLRF TRISA ;A口输出CLRF TRISD ;D口输出BANKSEL ADCON1MOVLW 06HMOVWF ADCON1 ;A口全为数字口CLRF STATUSBCF RST ;复位LCDCALL DELAY ;延时一段时间BSF RST ;清除复位信号NOPBSF PSB ;并口通讯;**************************初始化**********************MOVLW 30H ;基本指令操作CALL SEND_IMOVLW 01H ;清除显示CALL SEND_IMOVLW 06H ;指定在写入或读取时,光标的移动方向CALL SEND_IMOVLW 0CH ;开显示,关光标,不闪烁CALL SEND_I;***********************显示汉字************************HAN_WR2CALL CLEAR_P ;清屏HAN_WR2A ;“深圳乾龙盛电子”MOVLW LOW(TAB1A)MOVWF POINTMOVLW HIGH(TAB1A)MOVWF POINT1 ;获取表格的首地址MOVLW 0eH ;数数据字节个数(7个汉字共14字节) MOVWF COUNTMOVLW 81H ;页地址CALL SEND_ICALL QUSHUHAN_WR2B ;“。
LCD12864显示图形程序

COM
EQU 20H ;指令数据寄存器
DAT
EQU 21H ;显示数据寄存器
;********************************变量定义结束**********************************
;*********************************程序开始************************************
指令和数据;BF=0时,模块为准备状态,随时可接受外部指令和数据。利用状态 读指令,可以将BF读到DB7总线,从而检验LCD的工作状态 4. 显示控制触发器DFF
此触发器是用于模块屏幕显示开和关的控制。DFF=1为开显示,DISPLAY OFF DDRAM的内容就显示在屏幕上;DFF=0为关显示。DISPLAY OFF DDRAM的状态是指 令显示ON/OFF和RST信号控制的。 5. XY地址计数器
2.2 程序功能
LCD 会每隔 1 秒显示一个画面,共 3 个画面,一直循环下去。 第 1 秒:
第 2 秒: 第 3 秒:
8
嵌入式应用软件园,版权所有,请勿转载/销售。
第 3 章程序代码
3.1 文本版代码
我们的辛勤付出,需要您的肯定,请访问: 嵌入式应用软件园。
;******************************************************************************
第 3 章程序代码 .....................................................................................9 3.1 文本版代码 ................................................................................ 9 3.2 图片版代码 .............................................................................. 21
LCD12864液晶显示电子钟设计

《单片机原理及应用》课程设计说明书题目LCD12864 液晶显示电子钟设计系(部)专业(班级)姓名学号指导教师起止日期课程设计任务书系(部):专业:目录一、12864液晶的工作原理 (4)二、方案设计 (5)实物硬件设计 (5)系统硬件设计 (5)主芯片模块 (5)晶振和复位模块 (6)按钮模块 (7)系统软件设计 (7)主程序设计 (7)三、仿真和分析 (8)四、总结体会 (8)参考文献 (9)一、12864液晶的工作原理液晶显示屏中的业态光电显示材料,利用液晶的电光效应把电信号转换成数字符、图像等可见信号。
如图1-1,液晶正常情况下,其分子排列很有秩序,显得清澈透明,一旦加上直流电场后,分子的排列被打乱,一部分液晶变的不透明,颜色加深因而能显示数字和图像。
管脚一共1个CS1左半屏片选端,CS2右半屏片选端;V0液晶显示驱动电压,通过一个电位器接到VCC;RS数据指令选择信号,H为数据,L为指令,也叫D/I;R/W读写选择信号,H为读,L为写,。
E为LCD使能端,R/W为L时,E信号下降沿锁存DB7-DB0;R/W为H时,E为H,DDRAM数据读到DB7-DB0。
DB0-DB7数据传输端口。
RST复位信号。
-VOUT和V0为液晶显示驱动电压。
12864是一种图形点阵液晶显示器,它主要由行驱动器/列驱动器及128×64全点阵液晶显示器组成。
可完成图形显示,也可以显示8×4个(16×16点阵)汉字。
图1-1 12864LCD液晶显示屏二、方案设计实物硬件设计单片机控制液晶显示屏系统总共可分为六个环节,分别是单片机控制系统、12864字符显示模块、控制开关模块、晶振控制模块、复位电路模块和DS1302时钟控制模块。
通过这六个模块的协调工作就可以完成相应的液晶屏控制和显示功能。
这六个模块的相互连接如图2-1:图2-1 硬件组成框图系统硬件设计本硬件电路主要由四大模块组成:主芯片模块;晶振和复位电路模块;控制接钮模块;显示电路模块。
LCD12864程序文档

LCD12864串口显示使用详解LCD12864点阵液晶显示模块(LCM)就是由128*64个液晶显示点组成的一个128列*64行的阵列。
每个显示点对应一位二进制数,1表示亮,0表示灭。
存储这些点阵信息的RAM称为显示数据存储器,要显示某个图形或汉字就是将相应的点阵信息写入到相应的存储单元中。
LCD12864控制芯片:ST7920A 带中文字库MCU:STM32F103源程序下载地址:/detail/wylloong/8538839根据串行连接时序图所示,串行数据传送共分三个字节完成:第一字节:串口控制指令——格式 11111ABC 其中,A为数据传送方向控制:H表示数据从LCD到MCU,L表示数据从MCU到LCD;B为数据类型选择:H表示数据是显示数据,L表示数据是控制指令;C固定为0第二字节:(并行)8位数据的高4位——格式 DDDD0000第三字节:(并行)8位数据的低4位——格式 0000DDDD,发送时将低四位移至发送数据的高四位,即DDDD0000方能正确。
绘图RAM(GDRAM):绘图显示RAM提供128*8个字节的记忆空间,在更改绘图RAM时,先连续写入水平与垂直的坐标值,再写入两个字节的数据到绘图RAM,而地址计数器(AC)会自动加1;在写入绘图RAM的期间,绘图显示必须关闭。
整个写入绘图RAM的步骤如下:1、关闭绘图显示功能。
2、先将水平的位元组坐标(X)写入绘图RAM地址,再将垂直的坐标(Y)写入绘图RAM地址;将D15——D8写入到RAM中;将D7——D0写入到RAM 中;3、打开绘图显示功能。
带中文字库的128X64显示模块时应注意以下几点:①欲在某一个位置显示中文字符时,应先设定显示字符位置,即先设定显示地址,再写入中文字符编码。
②显示ASCII字符过程与显示中文字符过程相同。
不过在显示连续字符时,只须设定一次显示地址,由模块自动对地址加1指向下一个字符位置,否则,显示的字符中将会有一个空ASCII字符位置。
LCD12864液晶显示原理电路图程序

LCD12864系列点阵型液晶显示模块使用说明书一、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.重量:大约g补充说明:外观尺寸可根据用户的要求进展适度调整。
二、最大工作X围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.75VminH H D7 D6 D5 D4 D3 D2 D1 D0功能:从DD RAM读数据,读指令执行后Y地址计数器自动加1。
从DD RAM读数据前要先执行“设置页地址〞及“设置列地址〞命令。
六、接口时序1.写操作时序时序11.读操作时序时序2时序参数表:名称符号最小值典型值最大值单位E周期时间Tcyc 1000 nsE高电平宽度Pweh 450 nsE低电平宽度Pwel 450 nsX=7Line60 1/0 1/0 1/0 1/0 ………… 1/0 1/0 1/0 DB4 Line61 1/0 1/0 1/0 1/0 ………… 1/0 1/0 1/0 DB5 Line62 1/0 1/0 1/0 1/0 ………… 1/0 1/0 1/0 DB6 Line631/0 1/0 1/0 1/0…………1/0 1/0 1/0 DB7八、测试硬件电路九、读写模块程序举例● 写指令子程序〔INST 〕 SETB E CLR D _I CLR R _W MOV P1, A CLR E RET● 写数据子程序〔DATA 〕 SETB E SETB D_I CLR R _W MOV P1, A CLR E RET● 写一页显示RAM 数据〔假设指令子程序为INST ,数据子程序为DATA 〕VEE ’V0第三脚VEE 第18脚可调10K〔三极管内置〕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, LOOP带中文字库的128X64是一种具有4位/8位并行、2线或3线串行多种接口方式,内部含有国标一级、二级简体中文字库的点阵图形液晶显示模块;其显示分辨率为128×64, 内置8192个16*16点汉字,和128个16*8点ASCII字符集.利用该模块灵活的接口方式和简单、方便的操作指令,可构成全中文人机交互图形界面。
lcd12864显示程序

/*************************************************名称:LCD12864_ST7920并行测试程序试验功能:测试基于ST7920控制芯片的LCD12864的显示并行方式连接;晶振11.0592M编写:*************************************************/#include <reg52.h>#include <ziku.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned int //宏定义/*****LCD接口定义*****/sbit LCD_RS = P2^0; //1:输入数据;0:输入命令sbit LCD_RW = P2^1; //1:读数据0:写数据sbit LCD_EN = P2^2; //LCM使能端sbit LCD_PSB = P2^3; //串并口选择1:并口模式; 0:串口模式;#define LCD_DATA P0 //LCD总线端口/*****LCD功能初始化指令*****/#define CLEAR_SCREEN 0x01 //清屏指令:清屏且AC值为00H#define AC_INIT 0x02 //将AC设置为00H。
且游标移到原点位置#define CURSE_ADD 0x06 //设定游标移到方向及图像整体移动方向(默认游标右移,图像整体不动)#define FUN_MODE 0x30 //工作模式:8位基本指令集#define DISPLAY_ON 0x0c //显示开,显示游标,且游标位置反白#define DISPLAY_OFF 0x08 //显示关#define CURSE_DIR 0x14 //游标向右移动:AC=AC+1#define SET_CG_AC 0x40 //设置AC,范围为:00H~3FH#define SET_DD_AC 0x80/*****汉字地址表*****/uchar code addr_tab[]={ //便于根据汉字坐标求出地址0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,//第一行汉字位置0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,//第二行汉字位置0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,//第三行汉字位置0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f,//第四行汉字位置};/*****n(ms)延时子程序*****/void delayms(uint t) //约延时n(ms){uint i;while(t--){for(i=0;i<125;i++);}}/*****等待LCD忙*****/void WaitBusy(void) //延时一小段时间,等待LCD空闲{uchar i=5;while(i--);}/*****写指令代码*****/void Lcd_WriteCmd(uchar cmdcode){LCD_RS = 0;LCD_RW = 0;LCD_EN = 1;WaitBusy();LCD_DATA = cmdcode;LCD_EN = 0;}/*****写数据*****/void Lcd_WriteData(uchar dispdata){LCD_RS = 1;LCD_RW = 0;LCD_EN = 1;WaitBusy();LCD_DATA = dispdata;LCD_EN = 0;}/*****初始化LCD*****/void Lcd_Init(){LCD_PSB = 1;delayms(50);Lcd_WriteCmd(0x30); //选择基本指令集delayms(1);Lcd_WriteCmd(0x30); //选择8bit数据流delayms(1);Lcd_WriteCmd(0x0c); //开显示(无游标、不反白)delayms(1);Lcd_WriteCmd(0x01); //清除显示,并且设定地址指针为00Hdelayms(20);}/*****显示汉字*****/void hanzi_Disp(uchar x,uchar y,uchar code *s){ //x、y为汉字坐标Lcd_WriteCmd(addr_tab[8*x+y]); //写地址while(*s>0){Lcd_WriteData(*s); //写数据s++;}}/*****显示图片(显示Gdram内容)*****//*绘图显示的步骤1 关闭绘图显示功能2 先将垂直的坐标(Y)写入绘图RAM地址3 再将水平的位元组坐标(X)写入绘图RAM地址4 将D15-D8写入RAM中5 将D7-D0写入到RAM中6 打开绘图显示功能*///图片取模方式:横向取模,字节正序void pic_Disp(uchar *pic) //显示Gdram内容(显示图片){uchar x,y,i;for(i=0;i<9;i=i+8)for(y=0;y<32;y++){for(x=0;x<8;x++){Lcd_WriteCmd(0x36); //扩充指令,开绘图显示Lcd_WriteCmd(0x80+y); //行地址Lcd_WriteCmd(0x80+x+i); //列地址Lcd_WriteData(*pic++); //写数据D15-D8Lcd_WriteData(*pic++); //写数据D7-D0Lcd_WriteCmd(0x30);}}}/*****整屏显示竖条*****///当i=0时显示上面128×32,当i=8时显示下面128×32//当i=0时显示上面128×32,当i=8时显示下面128×32void LcdFill_Vertical(){uchar x,y,i;for(i=0;i<9;i=i+8)for(y=0;y<0x20;y++){for(x=0;x<8;x++){Lcd_WriteCmd(0x36); //扩充指令绘图显示Lcd_WriteCmd(y+0x80); //行地址Lcd_WriteCmd(x+0x80+i); //列地址Lcd_WriteData(0x55); //写数据D15-D8Lcd_WriteData(0x55); //写数据D7-D0Lcd_WriteCmd(0x30);}}}/*****整屏显示横条*****/void LcdFill_Level(){uchar x,y,i;uchar k;for(i=0;i<9;i+=8)for(y=0;y<0x20;y++){if((y%2)==1) k=0xff;else k=0;for(x=0;x<8;x++){Lcd_WriteCmd(0x36); //扩充指令绘图显示Lcd_WriteCmd(y+0x80); //行地址Lcd_WriteCmd(x+0x80+i); //列地址Lcd_WriteData(k);Lcd_WriteData(k);Lcd_WriteCmd(0x30);}}}/*****整屏充满亮点或暗点*****///当i=0时显示上面128×32,当i=8时显示下面128×32 //当i=0时显示上面128×32,当i=8时显示下面128×32 void Lcd_Fill(uchar test){for(i=0;i<9;i=i+8)for(y=0;y<0x20;y++){for(x=0;x<8;x++){Lcd_WriteCmd(0x36); //扩充指令绘图显示Lcd_WriteCmd(y+0x80); //行地址Lcd_WriteCmd(x+0x80+i); //列地址Lcd_WriteData(test); //写数据D15-D8Lcd_WriteData(test); //写数据D7-D0 Lcd_WriteCmd(0x30);}}}/*****主函数*****/void main(void){Lcd_Init();while(1){Lcd_Init();hanzi_Disp(0,0,"ST7920型液晶模块");hanzi_Disp(1,1,"并行测试程序");hanzi_Disp(2,0,"");hanzi_Disp(3,3,"");delayms(2000);Lcd_Init();// Lcd_Fill(0xff);hanzi_Disp(1,2,"坏点检测");delayms(500);Lcd_Init();Lcd_Fill(0xff);delayms(1500);Lcd_Init();LcdFill_Vertical();delayms(750);Lcd_Init();LcdFill_Level();delayms(750);hanzi_Disp(1,2,"显示汉字");delayms(500);Lcd_Init();hanzi_Disp(0,0,tangshi);delayms(1500);Lcd_Init();hanzi_Disp(1,2,"显示图片");delayms(500);Lcd_Init();pic_Disp(LCDsheji);delayms(1000);Lcd_Init();pic_Disp(rmb);delayms(1000);Lcd_Init();pic_Disp(qiche);delayms(1000);Lcd_Init();pic_Disp(gongji);delayms(1000);Lcd_Fill(0x00); //清显示RAMdelayms(500);}}以下是字库头文件:ziku.hunsigned char code tangshi[]={"黄河远上白云间,羌笛何须怨杨柳,一片孤城万仞山。
LCD12864显示程序

L C D12864显示程序(总3页) -CAL-FENGHAI.-(YICAI)-Company One1-CAL-本页仅作为文档封面,使用请直接删除本例程为通过用AT89C52芯片操作LCD12864显示的程序,使用的晶振为12M。
/**********************************************************程序说明:LCD12864显示主程序程序调试员:莫剑辉调试时间:2010-6-7**********************************************************/#include<reg52.h>#include"12864.c"void main(){Ini_Lcd(); //液晶初始化子程序Disp(1,0,6,"莫剑辉"); //显示数据到LCD12864子程序while(1);}这里我们通过调用下面的头文件就可以了,这样的做法方便我们以后要用到LCD12864的程序的调用。
/**********************************************************程序说明:LCD12864显示头文件程序调试员:莫剑辉调试时间:2010-6-7**********************************************************///#include<reg52.h>#define uchar unsigned char#define uint unsigned int#define DATA P2 //数据输出端0~7sbit RS=P0^0; //LCD12864 RS端sbit RW=P0^1; //LCD12864 RW端sbit E =P0^2; //LCD12864 E 端sbit PSB =P0^3;/*********************************************延时子程序*********************************************/void Delay_1ms(uint x){uint j,i;for(j=0;j<x;j++){for(i=0;i<120;i++); //延时X乘以120}}/*********************************************LCD12864液晶测忙子程序(读状态)*********************************************/void Busy(){uchar busy;do{E = 0; //0为关闭使能端,1为打开使能端RS = 0; //1为指令,0为数据RW = 1; //1为读,0为写Delay_1ms(20); //延时20乘以120时间E = 1; //0为关闭使能端,1为打开使能端busy=P1; //读取P2状态Delay_1ms(20); //延时20乘以120时间E = 0; //0为关闭使能端,1为打开使能端}while(busy&0x80); //判断BUSY位是否工作:1为内部在工作,0为正常状态}/*********************************************LCD12864液晶数据写入子程序*********************************************/void Write_Data(uchar k){Busy(); //测忙E =1; //0为关闭使能端,1为打开使能端RS=1; //1为指令,0为数据RW=0; //1为读,0为写DATA=k; //输入数据K到DATADelay_1ms(20); //延时20乘以120时间E =0; //0为关闭使能端,1为打开使能端Delay_1ms(20); //延时20乘以120时间}/*********************************************LCD12864液晶命令写入子程序*********************************************/void Write_Cmd(uchar cmd){Busy(); //测忙E=1; //0为关闭使能端,1为打开使能端RS=0; //1为指令,0为数据RW=0; //1为读,0为写DATA=cmd; //输入命令cmd到DATADelay_1ms(20); //延时20乘以120时间E=0; //0为关闭使能端,1为打开使能端Delay_1ms(20); //延时20乘以120时间}/*********************************************LCD12864液晶数据显示子程序*********************************************/void Disp(uchar y,uchar x,uchar i,uchar *z){uchar Address;if(y==1){Address=0x80+x;} //Y判断第几行,X判断第几列,0x80为液晶行初始地址if(y==2){Address=0x90+x;}if(y==3){Address=0x88+x;}if(y==4){Address=0x98+x;}Write_Cmd(Address); //写入地址命令到LCD12864while(i) //写入显示数据的大小{Write_Data(*(z++)); //写入显示数据到LCD12864i--;}}/*********************************************LCD12864液晶初始化子程序*********************************************/void Ini_Lcd(void){PSB=1;Delay_1ms(20);Write_Cmd(0x30); //基本指令集Delay_1ms(20);Write_Cmd(0x02); // 地址归位Delay_1ms(20);Write_Cmd(0x0c); //整体显示打开,游标关闭Delay_1ms(20);Write_Cmd(0x06); //游标右移Delay_1ms(20);Write_Cmd(0x80); //设定显示的起始地址Delay_1ms(20);Write_Cmd(0x01); //清除显示}。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
lcd12864 程序流程图
我们常用的人机交互显示界面中,除了数码管,LED,以及我们之前已经提到的LCD1602 之外,还有一种液晶屏用的比较多。
相信接触过单片机的朋友都知道了,那就是12864 液晶。
顾名思义,12864 表示其横向可以显示128 个点,纵向可以显示64 个点。
我们常用的12864 液晶模块中有带字库的,也有不带字库的,其控制芯片也有很多种,如KS0108 、T6963,ST7920 等等。
在这里我们以ST7920 为主控芯片的12864 液晶屏来学习如何去驱动它。
(液晶屏采用金鹏的OCMJ4X8C)。
lcd12864 液晶说明:
我们先来了解一下它的并行连接情况。
下面是电路连接图:
上面的图可以看出,液晶模块和单片机的连接除了P0 口的8 位并行数据线之外,还有RS,RW,E 等几根线。
其中R/S 是指令和数据寄存器的选择控制线(串行模式下为片选),R/W 是读写控制线(串行模式下是数据线),E 是使能线(串行模式下为时钟线)。
通过这几根控制线和数据线,再结合它的时序图,我们就可以编写出相应的驱动程序啦。
看看并行模式下的写时序图:。