好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

4用DS1302与12864LCD设计的可调式中文电子日历.doc

19页
  • 卖家[上传人]:飞***
  • 文档编号:36677751
  • 上传时间:2018-04-01
  • 文档格式:DOC
  • 文档大小:282.50KB
  • / 19 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 作者作者 张小波张小波学学习习情境情境 5-可可调调式数字式数字钟钟之之 用用 DS1302 与与 12864LCD 设计设计的可的可调调式中文式中文电电子日子日历历☆ 点名,复点名,复习习1、 DS1302 的引脚及其功能,以及 DS1302 与单片机的硬件连接?2、 如何编写基于 1602LCD 的显示驱动程序?☆ 新新课讲课讲授授5.3 基于 DS1302 与 LCD12854 设计的可调数字钟上节课我们详细介绍了 LCD1602 的显示控制指令,掌握了如何编写该种型号的 LCD 的显示驱动程序这节课我们学习另外一种液晶显示模块—12864(KS0108)5.3.1 LCD12864 技术资料5.3.1.1 12864(KS0108)字符型 LCD 简介12864D 使用 KS0108(或其兼容芯片)作为控制器,适配 M6800 系列时序,具有 8 位标准数据总线6 条控制线及电源线可显示各种字符及图形。

      每个 KS0108 拥有 64×64 位(512 字节)的显示 RAM,12864D 显示屏上的 64×64 点,显示 RAM 中的数据直接作为显示驱动信号具有操作指令简单,低功耗的特点5.3.1.2、引脚说明 管脚号管脚电平说明1CSAH/L片选择信号,低电平时选择前 64 列2CSBH片选择信号,低电平时选择后 64 列3GND0V逻辑电源地4VCC5V逻辑电源5VEE-10VLCD 驱动电源6D/IH/L数据\指令选择,高电平:数据 D0-D7 将送入显示 RAM;低电平:数据 D0-D7 将送入指令寄存器执行7R/WH/L读\写选择,高电平:读数据;低电平:写数据8EH.H/L读写使能,高电平有效,下降沿锁定数据9-16DB0H/L数据输入输出引脚 5.3.1.3、 12864LCD 的指令说明作者作者 张小波张小波1、指令列表2、指令功能详解(1)读状态字(read status) 格式 BUS Y0ON/O FFRESE T0000★ BUSY=1,表示 KS0108 正在处理计算机发来的指令或数据此时接口电路被封锁,不 能接受除读状态字以外的任何操作BUSY=0 表示 KS0108 接口控制电路已处于“准备好”状 态,等待计算机的访问。

      ★ ON/OFF:表示当前的显示状态ON/OFF=1 表示关显示状态;ON/OFF=0 表示开显示 状态 ★ RESET 表示当前 KS0108 的工作状态,即反映 RST 端的电平状态当 RST 为低电平 状态时 KS0108 处于复位工作状态,RESET=1当 RST 为高电平状态时,KS0108 为正常工作 状态,RESET=0 ★ 在占领设置和数据读写时要注意状态字中的 BUSY 标志只有在 BUSY=0 时,计算 机对 KS0108 的操作才能有效因此计算机在每次对 KS0108 操作之前,都要读出状态字判断 BUSY 是否为“0”若不为“0”,则计算机需要等待,直至 BUSY=0 为止 (2)显示开关(display on/off) 格式 0011111D该指令设置显示开关/触发器的状态,由此控制显示数据锁存器的工作方式,从而控制显 示上的显示状态 D 位为显示开/关的控制位当 D=1 为显示设置,显示数据锁存器正常工作,显示屏上呈 现所许的效果此时在状态字中 ON/OFF=0当 D=0 为关显示设置,显示数据锁存器被置零, 显示屏呈不显示状态,但显示存储器并没有被破坏,在状态组中 ON/OFF=1。

      (3)显示起始行设置(Display start line) 格式 11L 5L 4L 3L 2L 1L 0 该指令设置了显示起始行寄存器的内容KS0108 有 64 行显示的管理能力,该指令中 L5~L0 为显示起始行的地址,取值在 00~3FH(1~64)范围内,它规定了显示屏上最顶一行所对 应的显示存储器的行地址如果定时间隔地,等间距地修改(如加一或减一)显示起始行寄存 器的内容,则显示屏将呈现显示内容向上或向下平滑滚动的显示效果 (4)页面地址设置[Set page(X address)]作者作者 张小波张小波格式 10111P 2P 1P 0 该指令设置了页面地址-X 地址寄存器的内容KS0108 将显示存储器分成了 8 页,指令 代码中 P2~P0 就是要确定当前所要选择的页面地址,取值范围为 00~07H,代表第 1~8 页该 指令规定了以后的读/写操作将在哪一个页面上进行执行本指令后,下面的读写操作将在指 定页内,直到重新设置页地址就是 DDRAM 的行地址,页地址存储在 X 地址计数器中,P2- P0 可表示 8 页,读写数据对页地址没有影响,除本指令可改变页地址外,复位信号(RST)可把 页地址计数器内容清零。

      表 2 DDRAM 地址映像表 Y1Y2Y3Y4…………Y6 2Y6 3Y6 4Line 01/01/01/01/0…………1/01/01/0DB0Line 11/01/01/01/0…………1/01/01/0DB1Line 21/01/01/01/0…………1/01/01/0DB2Line 31/01/01/01/0…………1/01/01/0DB3Line 41/01/01/01/0…………1/01/01/0DB4Line 51/01/01/01/0…………1/01/01/0DB5Line 61/01/01/01/0…………1/01/01/0DB6X=0Line 71/01/01/01/0…………1/01/01/0DB7………… ………… …………Line601/01/01/01/0…………1/01/01/0DB4Line611/01/01/01/0…………1/01/01/0DB5Line621/01/01/01/0…………1/01/01/0DB6X=7Line631/01/01/01/0…………1/01/01/0DB7(5)列地址设置(Set Y address) 格式 01C 5C 4C 3C 2C 1C 0 该指令设置了 Y 地址计数器的内容,C5~C0=0~3FH(1~64)代表某一页面上的某一单元 地址,随后的一次读或写数据将在这个单元上进行。

      Y 地址计数器具有自动加一功能,在每一 次读/写数据后它将自动加一,所以在连续进行读/写数据时,Y 地址计数器不必每次都设置一 次页面地址的设置和列地址的设置将显示存储器单元唯一地确定下来,为后来的显示数据 的读/写作了地址的选通 (6)写显示数据(Write display data) 格式 数据 该操作将 8 位数据写入先前已确定的显示存储器的单元内,操作完成后列地址计数器 自动加 1 (7)读显示数据(Read display data) 格式作者作者 张小波张小波数据 该操作将 KS0108 接口部的输出寄存器内容读出,然后列地址计数器自动加 15.3.2 硬件电路设计硬件主要使用了 DS1302 和 LCD12864,电路结构简单,具体如下图所示:图 1 硬件电路5.3.3 软件设计软件设计中主要是针对 DS1302 芯片和 LCD12864 进行程序的设计,而 DS1302 的驱动程序在上个项目中我们已经作了详细介绍,在此不再赘述我们主要编制 LCD12864 的驱动程序根据对 LCD12864 资料的分析,程序编制主要有:读取 LCD 的状态,忙检查,向 LCD 写入命令,向 LCD 写入数据,LCD 初始化,设置 LCD 液晶的显示位置,显示字符等。

      除此之外,我们把要显示的字符和汉字用一个专门的程序来编写,命名为 DotMatrix.c1、 LCD12864 显示驱动程序作者作者 张小波张小波(1)检查 LCD 是否忙bit LCD_IS_BUSY() {LCD_DB_PORT=0xFF; RW=1; _nop_(); DI=0; E=1; _nop_(); E=0; return (bit)(P0 }(2)向 LCD 写入一个字节(一般用于发送命令)void Write_Byte_To_LCD(uchar comand) {while(LCD_IS_BUSY()); LCD_DB_PORT=0xFF;RW=0;_nop_();DI=0;LCD_DB_PORT=comand;E=1;_nop_();E=0; } (3)向 LCD 写入数据 void Write_Data_To_LCD(uchar dat){while(LCD_IS_BUSY()); LCD_DB_PORT=0xFF;RW=0;_nop_();DI=1;if(!Reverse_Display) //根据 Reverse_Display 决定是否反相显示LCD_DB_PORT=dat;else LCD_DB_PORT=~dat;E=1;_nop_();E=0; }作者作者 张小波张小波(4)初始化 LCD void LCD12864_Initialization() {CS1=1;CS2=1;Write_Byte_To_LCD(0x38);Write_Byte_To_LCD(0x0F);Write_Byte_To_LCD(0x01);Write_Byte_To_LCD(0x06);Write_Byte_To_LCD(LCD_START_ROW); }(5)通用显示函数 从第 P 页第 L 列显示 W 个字节数据,具体显示的数据在 r 所指的数组中void LCD_Show(uchar P,uchar L,uchar W,uchar *r) reentrant{uchar i; if(L #include #define uchar unsigned char #define uint unsigned int #define LCD_DB_PORT P0 // 液晶数据线端口 DB0-DB7#define LCD_START_ROW 0xc0 //起始行命令 #define LCD_PAGE 0xB8 // 页指令#define LCD_COL 0x40 // 列指令 bit Reverse_Display=0;//是否反相显示(白底黑字/黑底白字) //液晶引脚定义sbit DI=P2^0; sbit RW=P2^1; sbit E=P2^2; sbit CS1=P2^3; sbit CS2=P2^4; sbit RST=P2^5; //--------------------------------------------------------------- //检查 LCD 是否忙//-------------------------------------------------------------- bit LCD_IS_BUSY() {LCD_DB_PORT=0xFF; RW=1; _nop_(); DI=0; E=1; _nop_(); E=0;作者作者 张小波张小波return (bit)(P0 } //--------------------------------------------------------------- //向 LCD 写入一个字节(一般用于发送命令)//-------------------------------------------------------------- void Write_Byte_To_LCD(uchar comand) {while(LCD_IS_BUSY()); LCD_DB_PORT=0xFF;RW=0;_nop_();DI=。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.