230 likes | 452 Vues
项目九按键设置液晶电子钟. 单片机产品实战. 项目九 按键设置 液晶电子钟. 终极目标 : 进一步掌握 AT89S52 单片机、液晶屏应用,完成液晶电子钟的设计、安装、调试。 促成目标 : 了解液晶屏的结构和工作原理; 进一步掌握单片机 C 语言程序设计; 掌握液晶电子钟电路和程序设计。. 液晶电子钟的工作任务. 功能实现 能显示日历、星期、时钟; 可以通过键盘对年、月、日、时、分秒进行设置。. 认识液晶屏. LCD 液晶显示有显示容量大、耗能低、人机交流界面友好等优点。 现在液晶显示广泛应用于便携式仪器仪表、智能电器、消费类电子产品等领域。
E N D
项目九按键设置液晶电子钟 单片机产品实战
项目九 按键设置液晶电子钟 终极目标: 进一步掌握AT89S52单片机、液晶屏应用,完成液晶电子钟的设计、安装、调试。 促成目标: 了解液晶屏的结构和工作原理; 进一步掌握单片机C语言程序设计; 掌握液晶电子钟电路和程序设计。
液晶电子钟的工作任务 功能实现 能显示日历、星期、时钟; 可以通过键盘对年、月、日、时、分秒进行设置。
认识液晶屏 • LCD液晶显示有显示容量大、耗能低、人机交流界面友好等优点。 • 现在液晶显示广泛应用于便携式仪器仪表、智能电器、消费类电子产品等领域。 • RT12864是一种将液晶显示器件、连接件、集成电路、PCB线路板、背光源、结构件装配在一起的组件。
RT12864功能 RT12864 系列是一种图形点阵型液晶显示模块。 主要由行驱动器与列驱动器组成,可显示128(列)64(行)点阵。 可完成图形显示,也可显示32个(16*16点阵)汉字。 七条控制指令 ,与CPU接口采用8位数据总线并口输入输出方式。
LCD引脚 • RT12864液晶显示模块有20条引脚
RT12864内部结构 • IC1控制模块的右半屏,IC2控制模块的左半屏。 • IC1和IC2为列驱动器; • IC3为行驱动器。 • 了解行、列驱动器所包含的主要功能器件,对模块编程非常有利。
了解如下器件有利于模块编程 • 指令寄存器(IR ): • 当D/I(RS )=0时,在E信号下降沿的作用下,指令码写入IR。 • 数据寄存器(DR ): • 当D/I (RS )=1时,在E信号下降沿作用下,图形显示数据写入DR; • 在E信号高电平作用下由DR读到DB7~DB0数据总线。 • 忙标志BF: • BF=1时,此时模块不接受外部指和数据; • BF=0时,模块为准备状态,随时可接受外部指令和数据; • 利用STATUS READ指令,可以将BF读到DB7总线,从而检验模块之工作状态。
了解如下器件有利于模块编程 • 显示控制触发器DFF: • 此触发器是用于模块屏幕显示开和关的控制 • DFF=1为开显示 • DFF=0为关显示 • XY地址计数器: • XY地址计数器是一个9位计数器 • 高3位是X地址计数器,X地址计数器是没有记数功能的 • 低6位为Y地址计数器,Y地址计数器具有循环计数功能 • 显示数据RAM(DDRAM ): • DDRAM是存储图形显示数据的。 • 数据为1表示显示选择,数据为0表示显示非选择。
控制指令及相应代码 • 显示开关控制(DISPLAY ON/OFF) • 设置显示起始行(DISPLAY START LINE) • 设置页地址(SET PAGE “X ADDRESS”) • 设置Y地址(SET Y ADDRESS) • 读状态(STATUS READ) • 写显示数据(WRITE DISPLAY DATE) • 向LCD发送命令
显示开关控制 • 显示开关控制命令字格式如下: • D=1:开显示(DISPLAY ON),即显示器可以进行各种显示操作; • D=0:关显示(DISPLAY OFF),即不能对显示器进行各种显示操作。 • 显示开关控制相应代码 • void Set_OnOff(uchar onoff) • { • onoff=0x3e | onoff; //0011 111x • Writ_Comd(onoff); • }
设置显示起始行 • 设置显示起始行命令字格式如下: • 指定显示屏从DDRAM中哪一行开始显示数据,起始行的地址可以是0~63的任意一行。 • 设置显示起始行相应代码 • void Set_StartLine(uchar startline) //0~63 • { • startline=startline & 0x07; • startline=startline | 0xc0; //1100 0000 • Writ_Comd(startline); • }
设置页地址 • 设置页地址命令字格式如下: • 所谓页地址就是DDRAM的行地址,8行为一页,模块共64行(即8页) • 页地址由本指令或RST信号改变复位后页地址为0 • 设置页地址相应代码 • void Set_Line(uchar line) • { • line=line & 0x07; // 0<=line<=7 • line=line|0xb8; //1011 1xxx • Writ_Comd(line); • }
设置Y地址 • 设置Y地址命令字格式如下: • 此指令的作用是将Y地址送入Y地址计数器,作为DDRAM的Y地址指针。 • 在对DDRAM进行读写操作后,Y地址指针自动加1,指向下一个DDRAM单元。 • 设置Y地址相应代码 • void Set_Column(uchar column) • { • column=column & 0x3f; // 0=<column<=63 • column=column | 0x40; // 01xx xxxx • Writ_Comd(column); • }
读状态 • 液晶只有在不忙的时候才可以进行下一步操作,读状态命令字格式如下: • 当R/W=1和D/I=0时,在E信号为“H”的作用下,状态分别输出到数据总线(DB7~DB0)的相应位。 • 各位状态如下: • BUSY:1为忙;0为空闲。 • RST:1为复位;0为正常。 • ON/OFF:1为显示开;0为显示关。
读状态相应代码 • void Check_Busy(void) • { • uchar dat; • DI=0; • RW=1; • Do • { • DataPort=0x00; • EN=1; //在E为高电平时读操作有效 • dat=DataPort; //读LCD状态 • EN=0; • dat=0x80 & dat; //仅当第7位为0时才可操作(判别busy信号) • } • while(!(dat==0x00)); //直到不忙结束循环 • }
写显示数据 • 写入要显示的内容,写显示数据命令字格式如下: • 此指令是把要显示的数据写入相应的DDRAM单元,Y地址指针自动加1。 • 写显示数据相应代码 • void Write_Dat(uchar dat) • { • Check_Busy(); //要确认其在不忙时才可写数据 • RW=0;DI=1; • DataPort=dat; • EN=1; EN=0; //写数据 • }
向LCD发送命令 • 要想让液晶完成某一操作就必须先向其写入一命令字,告诉其应该作什么。写命令字格式如下: • 向LCD发送命令相应代码 • void Writ_Comd(uchar command) • { • Check_Busy(); //要确认其在不忙时才可写命令 • RW=0;DI=0; • DataPort=command; • EN=1; EN=0; //写命令 • }
按键功能 • LEFT: • 运行模式/设置模式切换 • UP: • 设置模式下设置值加一 • DOWN: • 设置模式下设置值减一 • RIGHT: • 设置模式下设置项切换
LCD取模设置 • 取模软件: • PCtoLCD2002完美版 • 阴码、逆向、列行式、C51格式 • 汉字字体: • 楷体_GB2312 • 字符字体: • MingLiu
液晶电子钟C语言程序设计 • 头文件 • main.h • lcd.h • 液晶电子钟主程序 • main.c • 液晶电子钟显示程序 • Lcd.c