您的当前位置:首页正文

基于DS1302芯片的电子时钟的设计 推荐

2023-10-20 来源:钮旅网
西北工业大学明德学院本科毕业论文设计

本科毕业设计论文

题 目 基于DS1302芯片的电子时钟的设计

系别名称 电子信息工程 0

专业名称 电子信息工程 0 学生姓名 ****** 班 级 122902 学 号 ******

指导教师 ****** 毕业时间 2013年6月 0

西北工业大学明德学院本科毕业论文设计

毕业

一、题目

二、基本内容及重点

设计 论文

任务书

基于DS1302芯片的电子时钟的设计

此系统主要由1个DS1302数字时钟芯片、1个AT89S52单片机、AT24C02掉电数据存储单元、LCD12864液晶进行显示,完成显示日期和计时的功能。研究内容主要包括: (1)时钟电路的设计:采用DS1302数字时钟芯片对年、月、日、周、日、时、分、秒进行计时,工作电压宽达2.5~5.5V。与单片机的接口使同步串行通信,仅用3条线与之相连接。该电路不但能准确地计时、附加其它功能,而且,其三线接口可以节省接口资源,在断电后不丢失时间和数据信息。 (2)显示部分的设计:采用led12864进行显示,它具有功耗低,体积小,重量轻,大规模显示的优点。 (3)按键的设计:通过按键进行调时。 实验设计 选用时钟芯片对年月日时分秒进行计时,并与单片机通过三线接口进行同步通信构成数字时钟电路。 系统总体框图 电源模块 At89s52单片机 Ds1302时钟模块 闹钟功能模块 Lcd显示模块 总体框架设计图

西北工业大学明德学院本科毕业论文设计

三、预期达到的成果

1、电路设计无差错,lcd12864上完整显示电子钟的年月日时分秒,准确的显示在预订的位置。

2、按键准确控制,并且在系统掉电后不丢失时间信息。 3、电路能按照给定信息提供闹铃服务。

四、存在的问题及拟采取的解决措施 1、怎样从DS1302得到时间数据?

思路:要从DS1302里得到系统时间,所以要按照ds1302的时序图进行编程,以便得到准确的数据。

2、怎样将读取的数据显示在lcd12864上?

思路:利用程序对lcd12864进行初始化驱动,然后将得到的数据显示在适当的位置,以便清晰,准确的目测数据。

3、如何运用键盘对时间进行调整?

思路:根据设计要求,需要对时间进行加、减,以及时分秒的定义,需要设定三个按键,分别为加、减、确认按钮,然后通过程序对相应的端口进行控制,达到对时间调整的目的。

五、进度安排

第一周:搜索资料,对设计思路进行明确分析,以及确定方案。 第二周:按照设计方案,初步拟写开题报告。

第三、四周:上交开题报告,通过审核,购买材料,准备着手实体。 第五、六周:设计硬件电路及其软件程序的编写。 第七周:对电路进行调试,以便达到预期目的。 第八、九周:撰写设计论文,准备答辩。

六、参考文献和书目

[1]王明顺,赵德平。可涓流充电的串行实时时钟芯片DS1302的设计及应用。国外电子元器件,1997。

[2]黄明强。DS1302在单片机系统中的应用与设计。保定师范专科学校学报。2004,17(2)。

[3]赵海兰,朱剑,赵祥伟。DS1302实时显示时间原理及应用。电子技术出版社。2002-1 [4]邓红,张越。单片机实验与应用设计教程。冶金工业出版社,2004-5。

西北工业大学明德学院本科毕业论文设计

[5]孙雪梅,范久臣。实时时钟芯片在单片机系统中的应用。沈阳教育学院学报。2005-7。 [6]DALLAS SEMICONDUCTOR.DS1302 Trickle Charge Timekeeping Chip.

学生 ___________

指导教师 ___________ 系主任 ___________

西北工业大学明德学院本科毕业论文设计

摘 要

万年历在我国已有一千多年的历史,据记载它为商朝的万年所创,所以为了纪念他,将他的这一历法命名为“万年历”。而随着电子科学技术的发展,万年历也由原先的纸张形式转变为当代的,以电脑软件和电子产品的形式出现的“电子万年历”。也就是我们现在俗称的“电子钟”。现在所使用的电子万年历在日常生活中具有广泛的用途,它可以对年、月、日、周、时、分、秒进行计时,还有闰年补偿、时间校准、闹铃设置等功能,而且使用寿命长,误差更小,所依据有关反的应用前景与市场。

本文提出了一种基于AT89S52RC为核心的设计,由DS1302时钟芯片提供时钟、LCD动态扫描显示屏显示。AT89S52RC单片机是由Atmel公司推出的,功耗小,电压可选用4—6V电压供电;DS1302时钟芯片是美国DALLAS公司推出的具有涓流电流充电功能的低功耗实时时钟芯片,它可以对年、月、日、星期、时、分、秒进行计时,还具有闰年补偿等多种功能,而且DS1302的使用寿命长,误差小;利用AT24C02内存芯片的一种掉电数据存储器,这种存储器掉电后再次开机,LCD数码管能够显示上次关机时的数字.数字显示是采用的LCD12864显示屏来显示,可以同时显示年、月、日、星期、时、分、秒和温度等信息。此外电子时钟还具有时间校准等功能。

关键词:时钟电路;时钟芯片DS1302;LCD动态扫描; 单片机AT89S52RC; 掉电数据存储AT24C02;

I

西北工业大学明德学院本科毕业论文设计

ABSTRACT

Calendar in China more than a thousand years of history, according to records million years of the Shang Dynasty created to commemorate him, his calendar named \"calendar\". With the development of Electronic Science and Technology, calendar from the original paper form into a contemporary form of computer software and electronic products \"electronic calendar. What we now commonly known as \"electronic clock.\" Now use the electronic calendar with a wide range of uses in everyday life, it can be time, there is a leap year compensation, time calibration, alarm setting year, month, day, week, hours, minutes, seconds, and the use of long life, the error is smaller, in accordance with the relevant anti-application prospects and market.

In this paper, based on AT89S52RC as the core design, provided by the DS1302 clock chip clock, LCD dynamic scanning display. The microcontroller AT89S52RC is introduced by Atmel, power consumption, voltage 4-6V voltage power supply can be used; DS1302 clock chip DALLAS introduced low-power real-time clock chip with a trickle-charging function, it can be years, month, day, week, hour, minutes, seconds, chronograph, leap year compensation also has a variety of functions, and the DS1302 long life, small error; figures show the LCD display to display, can display year, month , day, week, hours, minutes, seconds, and temperature information. In addition, the electronic clock also has a time calibration function.

Keywords: microcontroller,DS1302 clock chip,LCD display

II

西北工业大学明德学院本科毕业论文设计

目 录

绪 论 ................................................................................................................................................ 2 第一章 设计要求与方案论证 ......................................................................................................... 3

1.1 引言 ................................................................................................................................... 3 1.2功能要求 ............................................................................................................................ 3 1.3方案论证 ............................................................................................................................ 3

1.3.1 技术可行性 ........................................................................................................... 3 1.3.2 单片机的选择 ....................................................................................................... 4 1.3.4 键盘模式的选择 ................................................................................................... 5 1.3.5总体方案论证与选择 ............................................................................................ 5

第二章 系统硬件电路设计 ........................................................................................................... 6

2.1硬件要求 ............................................................................................................................ 6 2.2系统硬件概述 .................................................................................................................... 6

2.2.1 主控制器STC89S52RC .......................................................................................... 6 2.2.2时钟电路DS1302 ................................................................................................... 7 2.2.3 掉电数据存储at24c02 ...................................................................................... 8 2.3主要单元电路的设计 ...................................................................................................... 11

2.3.1 显示电路 ............................................................................................................. 11 2.3.2键盘接口 .............................................................................................................. 12

2.3.2.2查询式按键及其接口 ......................................................................................................... 13 2.3.2.3矩阵式键盘及其接口 ......................................................................................................... 13 2.3.2.4键盘扫描控制方式 ............................................................................................................. 14

3.1 程序设计 ......................................................................................................................... 18 3.2 从1302读取日期和时间程序 ....................................................................................... 20 第四章 PROTEUS使用 .................................................................................................................... 21

4.1编程环境PROTEUS ........................................................................................................... 21 4.2用PROTEUS ISIS对电子万年历的硬件电路设计 ........................................................ 21 4.3用PROTEUS ISIS进行电子万年历的仿真测试 ............................................................ 25 第五章 结束语 ............................................................................................................................... 27 参考文献......................................................................................................................................... 28 附录 ................................................................................................................................................ 29

附录1...................................................................................................................................... 29

1

西北工业大学明德学院本科毕业论文设计

绪 论

随着人们生活水平的提高和生活节奏的加快,对时间的要求越来越高,精准数字计时的消费需求也是越来越多。

二十一世纪的今天,最具代表性的电子产品就是电子时钟,他是近代世界钟表业界的第三次革命。第一次是摆和摆轮游丝的发明,相对稳定的机械振荡频率源使钟表的走时差从分级缩小到秒级,代表性的产品就是带有摆和摆轮游丝的机械钟或表。第二次革命是石英晶体振荡器的应用发明了走时精度更高的石英电子钟表,是钟表的走时月差从分级缩小到秒级。第三次革命就是单片机数码计时技术的应用,使计时产品的走时日差从分级缩小到1/600万秒,从原有传统指针计时的方式发展为人们日常更为熟悉的夜光数字显示方式,直观明了,并增加了全自动日期,星期的显示功能,它更符合消费者的生活需求!因此,电子时钟的出现带来了钟表计时业界跨越性的进步、、、、、、

我国生产的电子时钟有很多种,总体上来说一研究多功能电子时钟为主,使万年历出了原有的显示时间,日期等基本功能外,还具有闹冷,报警等功能。商家生产的电子万年历更从质量,价格,实用上考虑,不断地改进电子时钟的设计,使其更加的具有市场。

本设计为软件,硬件相结合的一组设计。在软件设计过程中,应对硬件部分有相关了解,最好是能有具体的实物电路,这样有助于软件设计。

除了采用集成化的时钟芯片外,还有采用MCU的方案,利用STC89系列单片机制成电子电路,采用软件和硬件结合的方法,控制LCD液晶显示并输出,分别用来显示年月日时分秒,其最大特点是:硬件电路简单,安装方便易于实现,软件设计独特,可靠。STC89S52RC是由ATMEL公司推出的一种小型单片机。95年出现在中国市场。其主要特点为采用FLASH存贮器技术,降低了制造成本,其软件、硬件与MCS-52完全兼容,可以很快被中国广大用户接受。

2

西北工业大学明德学院本科毕业论文设计

第一章 设计要求与方案论证

1.1 引言

本文提出了一种基于STC89S52RC单片机的时钟设计方案,本方案以STC89S52RC单片机作为主控核心,与时钟芯片DS1302、按键、LED显示等模块组成硬件系统。在硬件系统中设有独立按键和LCD12864液晶显示器,能显示丰富的信息,根据使用者的需要可以随时对时间进行校准、选择时间等,综上所述此电子时钟具有读取方便、显示直观、功能多样、电路简洁、成本低廉等诸多优点,符合电子仪器仪表的发展趋势,具有广阔的市场前景。

1.2功能要求

本电子时钟能动态显示年、月、日、星期、小时、分钟、秒,掉电不丢失数据,具有闹钟功能。

1.3方案论证

1.3.1 技术可行性

随着国内超大规模集成电路的出现,微处理器及其外围芯片有了迅速的发

展。集成技术的最新发展之一是将CPU和外围芯片,如程序存储器、数据存储器、并行I/O口、串行I/O口、定时/计数器、中断控制器及其他控制部件集成在一个芯片之中,制成单片计算机(Single-Chip Microcomputer)。而近年来推出的一些高档单片机还包括有许多特殊功能单元,如A/D、D/A转换器、调制解调器、通信控制器、锁相环、DMA、浮点运算单元、PWM控制输出单元、PWM输出时的死区可编程控制功能等。因此,只要外加一些扩展电路及必要的通道接口就可以构成各种计算机应用系统,如工业流水线控制系统、作为家用电器的主控制器、分布式控制系统的终端节点或作为其主控制节点起中继的作用、数据采集系统

单片机的出现,并在各技术领域中得到如此迅猛的发展,与单片机构成计算机

1、单片机构成的应用系统有较大的可靠性。这些可靠性的获得除了依靠单

3

西北工业大学明德学院本科毕业论文设计

片机芯片本身的高可靠性以及应用有最少的联接外,还可以方便地采用软、硬件技

2、系统扩展、系统配置较典型、规范,容易构成各种规模的应用系统,应用

3、由于构成的应用系统是一个计算机系统,相当多的测、控功能由软件实现,故具有柔性特征,不须改变硬件系统就能适当地改变系统功能。 4、有优异的性能、价格比。 1.3.2 单片机的选择

方案一:采用传统的AT89S52RC作为电机的控制核心。单片机算术运算功能强,软件编程灵活、自由度大,可用软件编程实现各种算法和逻辑控制,并且由于其功耗低、体积小、技术成熟和成本低等优点,使其在各个领域应用广泛。

方案二:采用FTC10F04单片机,还带有非易失性Flash程序存储器。它是一种高性能、低功耗的8位CMOS微处理芯片,市场应用最多。其主要特点如下:8KB Flash ROM,可以擦除1000次以上,数据保存10年。

由于本系统对CPU运算速度要求很高,需要执行很复杂的运算,方案一成本比较低,适合做设计,方案二运算速度高,性能好,所以两种方案都有可取之处。选用方案一作为主方案,方案二作为备用方案。 1.3.3 显示模块的选择

方案一:使用液晶显示屏显示时间数字。 液晶显示屏(LCD)具有轻薄短小、低耗电量、无辐射危险,平面直角显示以及影象稳定不闪烁等优势,可视面积大,画面效果好,分辨率高,抗干扰能力强等特点。但由于液晶是以点阵的模式显示各种符号,需要利用控制芯片创建字符库,编程工作量大,控制器的资源占用较多,但对于学生的学习有极大的促进作用。

带中文字库的128X64是一种具有4位/8位并行、2线或3线串行多种接口方式,内部含有国标一级、二 级简体中文字库的点阵图形液晶显示模块;其显示分辨率为128×64, 内置8192个16*16点汉字,和128个 16*8点ASCII 字符集.利用该模块灵活的接口方式和简单、方便的操作指令,可构成全中文人机交互图形界 面。可以显示8×4行16×16点阵的汉字. 也可完成图形显示.低电压低

4

西北工业大学明德学院本科毕业论文设计

功耗是其又一显著特点。由该模块构成的液晶显示方案与同类型的图形点阵液晶显示模块相比,硬件电路要简洁得多,且该模块的价格也略低于相同点阵的图形液晶模块。

方案二:使用传统的LED数码管显示。 数码管具有:低能耗、低损耗、低压、寿命长、耐老化、防晒、防潮、防火、防高(低)温,对外界环境要求低,易于维护,同时其精度比较高,称重轻,精确可靠,操作简单。数码管采用BCD编码显示数字,程序编译容易,资源占用较少,但人性化显示不够直观。 根据以上的论述,采用方案一。在本系统中,我们采用了LCD12864液晶动态显示。

1.3.4 键盘模式的选择

在对日期和时间进行切换,对日期和时间进行调节校准过程中,系统需要产生激励电流,因此需要用按键。

方案一:使用独立式键盘。独立式键盘是指直接用I/O口线构成的单个按

键电路。独立式按键电路配置灵活,软件结构简单。

方案二:使用矩阵式键盘。矩阵式键盘是由行线和列线组成,按键位于行、

列的交叉点上,行线、列线分别连接到按键开关的两端。其特点是简单且不增加成本,这种键盘适合按键数量较多的场合。

根据以上的论述,因本系统需要的按键不多,日期加1键,月数加1键,

年数加1键,分数加1键,时数加1键,时间/日期切换键,要求简单。所以采用方案一独立式键盘。 1.3.5总体方案论证与选择

按照系统设计功能的要求,初步确定系统由主控模块、时控模块、及显示模块和键盘接口模块共4个模块组成。主控芯片使用51系列STC89S52RC单片机,时钟芯片使用美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟DS1302。采用DS1302作为计时芯片,可以做到计时准确。更重要的是,DS1302可以在很小电流的后备电源(2.5~5.5V电源,再2.5V时耗电小于300nA),而且DS1302可以编程选择多种充电电流来为后备电源进行慢速充电,可以保证后备电源基本不耗电。显示模块采用LCD12864液晶显示器动态显示。

5

西北工业大学明德学院本科毕业论文设计

第二章 系统硬件电路设计

2.1硬件要求 2.2系统硬件概述

2.2.1 主控制器AT89S52RC

AT89S52RC单片机是宏晶科技推出的新一代高速、低功耗、超强抗干扰的单片机,指令代码完全兼容传统8051单片机,12时钟、机器周期和6时钟、机器周期可以任意选择。 主要特性如下:

● 增强型8051单片机,6时钟、机器周期和12时钟、机器周期可以任意

选择,指令代码完全兼容传统8051单片机。 ● 工作电压:5.5V~3.3V ● 工作频率范围:0~44MHz。 ● 用户应用程序空间为8K字节 ● 片上集成512字节RAM

● 通用I/O口32个,复位后为:P1/P2/P3/P4是准双向口/弱上位,P0口是

漏极开路输出,作为总线扩展用时,不用加上拉电阻,作为I/O口用时,需加上拉电阻。

● ISP(在系统可编程)/IAP(再应用可编程),无需专用编程器,无需专用

仿真器,可通过串口(RXD/P3.0,TXD/P3.1 )直接下载用户程序,数秒即可完成一片。 ● 具有EEPROM功能 ● 具有看门狗功能

● 共3个16位定时器/计数器。及定时器T0、T1、T2

● 外部中断4路,下降沿中断或低电平触发电路,Power Down模式可由

外部中断低电平触发中断方式唤醒

● 通用异步串行口(UART),还可用定时器实现多个UART

6

西北工业大学明德学院本科毕业论文设计

● 工作温度范围:-40~+85度(工业级)/0~75度(商业级) ● PDIP封装 2.2.2时钟电路DS1302 DS1302的性能特性:

● 实时时钟,可对秒、分、时、日、周、月以及带闰年补偿的年进行比较; ● 用于高速数据暂存的31*8位RAM; ● 最少引脚的串行I/O; ● 2.5~5.5V电压工作范围; ● 2.5V时耗小于300nA;

● 用于时钟或RAM数据读/写的单字节或多字节(脉冲方式)数据传送方

式;

● 简单的三线接口;

● 可选的慢速充电(至Vcc1)的能力。

DS1302在任何数据传送时必须先初始化,把RST脚置为高电平,然后把8位地址和命令字装入移位寄存器,数据在SCLK的上升沿被访问到。在开始8个时钟周期,把命令字节装入移位寄存器后,另外的时钟周期在读操作时输出数据,在写操作时写入数据。时钟脉冲的个数在单字节方式下为8+8,在多字节方式下为8+字节数,最大可达248字节数。如果在传送过程中置RST脚为低电平,则会终止本次数据传送,并且I/O引脚变为高阻态。上电运行时,在Vcc≥2.5V之前,RST脚必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平。

DS1302的控制字如表所示。控制字节的最高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入到DS1302中。位6如果为0,则表示存取日历时钟数据;为1则表示存取RAM数据。位5~1(A4~A0)指示操作单元的地址。最低有效位(位0)如果为0,则表示药进行写操作;为1表示进行读操作。控制字节总是从最低位开始输入/输出。

为了提高对32个地址寻址能力(地址/命令位1~5=逻辑1),可以把时钟/日历或RAM寄存器规定为多字节(burst)方式。位6规定时钟或RAM,而位0规定读或写。在时钟/日历寄存器中的地址9~31或RAM寄存器中的地址31不

7

西北工业大学明德学院本科毕业论文设计

能存储数据。在多字节方式下,读或写从地址0的位0开始。必须按数据传送的次序写最先的8个寄存器。但是,当以多字节方式写RAM时,为了传送数据不必写所有的31字节,不管是否谢了全部31字节,所写的每一字节都将传送至RAM。

表2.1 DS1302控制字

DS1302共有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式。其日历、时间寄存器及其控制字如上表所示,其中奇数为读操作,偶数为写操作。

时钟暂停:秒寄存器的位7定义位时钟暂停位。当它为1时,DS1302停止振荡,进入低功耗的备份方式,通常在对DS1302进行写操作时(如进入时钟调整程序),停止振荡。当它为0时,时钟将开始启动。

AM-PM/12-24小时方式:小时寄存器的位7定义为12或24小时方式选择位。它为高电平时,选择12小时方式。在此方式下,位5为第二个10小时位(20~23h)。

DS1302的晶振选用32768Hz,电容推荐值为6pF。因为振荡频率较低,也可以不接电容,对计时精度影响不大。 2.2.3 掉电数据存储at24c02 1.芯片说明

AT24C01/02/04/08/16提供1024/2048/4096/8192/16384位串行EEPROM,EEPROM组为128/256/512/1024/2048×8位。AT24C01为低功耗CMOS工艺制造,可单电压工作。 2.芯片特点

8

西北工业大学明德学院本科毕业论文设计

⑴低电压5.0V(VCC=4.5~6.0V) 3.0V(VCC=2.7~6.0V) 2.5V(VCC=2.25~6.0V) 2.0V(VCC=1.8~6.0V) ⑵内部组态

AT24 C 01的容量为128×8(1KB),AT24C02的容量为256×8(2KB),AT24C04的容量为512×8(4KB),AT24C08的容量为1024×8(8KB),AT24C16的容量为2048×8(16KB)。

·双线串行接口(双线为:时钟线SCL,串行数据线SDA);·双线数据传送协议; ·支持ISO/IEC7816-3同步协议;

·8字节页面(1KB,2KB)、16字节页面(4KB,8KB,16KB)写入方式; ·允许部分页面写入;

·自定时写入周期(最大10ms);

·高可靠性,擦写次数可达10万个周期,数据保存期达100年;

·以晶片、模块及标准封装等形式提供。标准封装有8个引脚的双列直插(PDIP)、8个引脚封装和14个引脚的饿表面封装(SOIC); ·晶片和芯片厚度为(6~12)mil; ·提供测试卡中芯片的测试程序;

·芯片体积较小,增加了可靠性,降低了成本。 3.封装形式及管脚

AT24C02芯片封装如下图所示:

管脚功能说明 引脚功能

9

西北工业大学明德学院本科毕业论文设计

A2~A0 地址 SDA 串行数据 SCL 串行时钟 WP 写保护 NC 未连接 4.芯片最大额定值

工作温度:-55~+125℃ 储存温度:-65~+150℃ 任一管脚对地电压:-1.0~+0.7V 最大工作电压:6.6V DC 输出电流:50mA 5.芯片内部功能逻辑

AT24C01芯片逻辑图如图F3-2所示。

下面对该芯片引脚作一简要说明。 ⑴引脚说明

SCL(串行时钟):SCL上升沿将数据输入到EEPROM芯片,下降沿将EEPROM中的数据输出。其数据传送的最高速率为100Kbit/s(位/秒)。

SDA(串行数据):双向串行数据传送引脚,该引脚采用漏极开路驱动,可以与其它任何数量漏极开路或集极开路器件进行“线或”。

A0、A1、A2(器件/页地址):器件地址输入端,应用于标准封装中。 WP:写保护。接高电平时,写保护;接地时,可进行读写操作。 ⑵逻辑图组成

开始/停止逻辑:控制一次读/写操作的开始和停止。

串行控制逻辑:在IC卡中,SCL为同步时钟,地址、数据和读写控制命令从SDA输入,由串行控制逻辑区分。

地址/计数器:形成访问EEPROM的地址,分别送X译码器进行字选,送Y译码器进行位选。

10

西北工业大学明德学院本科毕业论文设计

6.AT24C02和单片机连接

分析:要读出一字节数据,必须先写入器件地址和片内地址。在图5.20中,单片机P1.0作为数据总线SDA,而P1.1作为时钟总线SCL。器件地址是1010 000XB,片内地址是28H

2.3主要单元电路的设计

2.3.1 显示电路

引脚号 引脚名称 方向 功能说明 1 VSS - 模块的电源地 2 VDD - 模块的电源正端 3 V0 - LCD驱动电压输入端

4 RS(CS) H/L 并行的指令/数据选择信号;串行的片选信号 5 R/W(SID) H/L 并行的读/写选择信号;串行的数据口 6 E(CLK) H/L 并行的使能信号;串行的同步时钟 7 DB0 H/L 数据0 8 DB1 H/L 数据1 9 DB2 H/L 数据2 10 DB3 H/L 数据3 11 DB4 H/L 数据4 12 DB5 H/L 数据5 13 DB6 H/L 数据6 14 DB7 H/L 数据7

15 PSB H/L 并/串行接口选择:H-并行;L-串行

11

西北工业大学明德学院本科毕业论文设计

16 NC 空脚

17 /RET H/L 复位 低电平有效 18 NC 空脚

19 LED_A (LED+5V) 背光源正极(加int?) 20 LED_K (LED-OV) 背光源负极

2.3.2键盘接口

键盘在单片机系统中是一个很重要的部件。为了输入数据、查询和控制系统的工作状态,都要用到键盘,键盘是人工干预计算机的主要手段。

键盘可分为编码和非编码键盘两种。编码键盘采用硬件线线路来实现键盘编码,每按下一个键,键盘能自动生成按键代码,键数较多,而且还具有去抖动功能。这种键盘使用方便,但硬件较复杂,PC机所用的键盘就属于这种。非编码键盘仅提供按键开关工作状态,其他工作由软件完成,这种键盘键数较少,硬件简单,一般在单片机应用系统中广泛使用。此处主要介绍该类非编码键盘及其与MCS—51型单片机的接口。

2.3.2.1 按键开关取抖动问题

按键开关在电路中的连接如图所示。按键未

12

西北工业大学明德学院本科毕业论文设计

按下时,A点电位为高电平5V;按键按下时,A点电位为低电平。A点电位就用于向CPU传递按键的开关状态。但是由于按键的结构为机械弹性开关,在按键按下和断开时,触点在闭合和断开瞬间还会接触不稳定,引起A点电平不稳定,如图2-11b所示,键盘的抖动时间一般为5~10ms,抖动现象会引起CPU对一次键操作进行多次处理,从而可能产生错误。因此必须设法消除抖动的不良后果。

图2.3 键操作和键抖动

消除抖动的不良后果的方法有硬、软件两种。

为了节省硬件,通常在单片机系统中,一般不采用硬件方法消除键的抖动,而是用软件消除抖动的方法。根据抖动特性,在第一次检测到按键按下后,执行一段延时5~10ms让前延抖动消失后再一次检测键的状态,如果仍保持闭合状态电平,则确认真正有键按下。当检测到按键释放后,也要给5~10ms的延时,待后延抖动消失后才转入该键处理程序。 2.3.2.2查询式按键及其接口

按照键盘与CPU的连接方式可以分为查询按键和矩阵式键盘。查询式按键是各按键相互独立,每个按键占用一根I/O口线,每根I/O口线上的按键工作状态不会影响其他I/O口线上按键的工作状态。查询式按键电路配置灵活,软件结构简单,但每个按键必须占用一根I/O口线,在按键数量较多时,I/O口线浪费较大,且电路结构显得繁杂。故这种形式适用于按键数量较少的场合。 2.3.2.3矩阵式键盘及其接口

矩阵式键盘又称行列式键盘,有n个行线和m个列线,经限流电阻接+5V电源上,按键跨接在行线和列线上,n×m行列结构可构成mn个按键,组成一个

13

西北工业大学明德学院本科毕业论文设计

键盘。与独立式按键相比,mn个按键只占用m+n根I/O口线,因此适用于按键较多的场合。

当无键闭合时,相应的I/O之间开路。当有键闭合时,与闭合键相连接的两条I/O口线之间短路。判断有无键按下的方法是:第一步,置列线相关I/O口为输入态,从行线相对应的I/O口输出低电平,读入列线数据,若某一列线为低电平,则该列线上有键闭合。第二步,置行线相关I/O口输出低电平,读入列线数据,若某一列线为低电平,则该列线上有键闭合。综合一二两步的结果,可确定按键编号。但是键闭合一次只能进行一次键功能操作,因此须等待近按键释放后,再进行键功能操作,否则按一次键,有可能会连续多次进行同样的键操作。 2.3.2.4键盘扫描控制方式

在单片机应用系统中,对键盘的处理工作仅是CPU工作内容的一部分,CPU还要进行数据处理、显示和其他输入输出操作,因此键盘处理工作既不能占用CPU太多时间,又需要CPU对键盘操作及时作出响应。CPU对键盘处理控制的工作方式有以下几种: 1. 程序控制扫描方式

程序控制扫描方式是在CPU工作空余,调用键盘扫描子程序,响应键输入信号要求。

2. 定时控制扫描方式

定时控制扫描方式是利用定时/计数器每隔一段时间产生定时中断,CPU响应中断后对键盘进行扫描,并在有键闭合时转入该键的功能子程序。 3. 中断控制扫描方式

中断控制扫描方式是利用外部中断源,响应输入信号。当无按键按下时,CPU执行正常工作程序。当有按键按下时,CPU立即产生中断。在中断服务子程序中扫描键盘,判断是哪一个键被按下,然后执行该键的功能子程序。这种控制方式克服了前两种控制方式可能产生的空扫描和不能及时响应键输入的缺点,既能及时处理键输入,又能提高CPU运行效率,但要占用一个宝贵的中断资源。图即工作于中断方式的矩阵式键盘接口电路。在初始化时P1.4~P1.7置输出0,P1.0~P1.3置为输入态,P1.0~P1.3分别接至与门各输入端。当有键闭合时

INTO=0,CPU中断后,在中断服务子程序中,再完成键识别和键功能处理。

14

西北工业大学明德学院本科毕业论文设计

图2.4 工作于中断方式的矩阵式键盘接口电路

2.3.3时钟电路

2.3.3.1 DS1302工作方式简介及数据操作原理

DS1302可以对年、月、日、星期、时、分、秒进行计时, 且具有闰年补偿功能, 工作电压宽达2.5~5.5V。采用三线接口与CPU进行同步通信, 并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个33x8的用于临时性存放数据的RAM寄存器。DS1302是的DS1202升级产品, 与DS1202兼容, 但增加了主电源/后背电源双电源引脚, 同时提供了对后背电源进行涓细电流充电的能力。

DS1302时钟芯片包括实时时钟/日历和31字节的静态RAM。它经过一个简单的串行接口与微处理器通信。实时时钟/日历提供秒、分、时、日、周、月和年等信息。对于小于31天的月和月末的日期自动进行调整,还包括闰年校正的功能。时钟的运行可以采用24<小>时或带AM/PM的12小时格式。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多字节的时钟信号或RAM数据。

DS1302有主电源/后备电源双电源引脚:Vcc1在单电源与电池供电的系统中提供低电源,并提供低功率的电磁备份;Vcc1在双电池系统中提供主电源。在这种运行方式中,Vcc1里连接到后备电源,以便在没有主电源的情况下能保存时间信息以及数据。DS1302由Vcc1或Vcc2中较打大者供电。当Vcc2>

15

西北工业大学明德学院本科毕业论文设计

(Vcc1+0.2V)时,Vcc2给DS1302供电;当Vcc2<Vcc1时,DS1302由Vcc1供电。

图2.5 DS1302

DS1302在任何数据传送时必须先初始化,把RST脚置为高电平,然后把8位地址和命令字装入移位寄存器,数据在SCLK的上升沿被访问到。在开始8个时钟周期,把命令字节装入移位寄存器后,另外的时钟周期在读操作时输出数据,在写操作时写入数据。时钟脉冲的个数在单字节方式下为8+8,在多字节方式下为8+字节数,最大可达248字节数。如果在传送过程中置RST脚为低电平,则会终止本次数据传送,并且I/O引脚变为高阻态。上电运行时,在Vcc≥2.5V之前,RST脚必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平。

DS1302的控制字如图所示。控制字节的最高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入到DS1302中。位6如果为0,则表示存取日历时钟数据;为1则表示存取RAM数据。位5~1(A4~A0)指示操作单元的地址。最低有效位(位0)如果为0,则表示药进行写操作;为1表示进行读操作。控制字节总是从最低位开始输入/输出。

为了提高对32个地址寻址能力(地址/命令位1~5=逻辑1),可以把时钟/日历或RAM寄存器规定为多字节(burst)方式。位6规定时钟或RAM,而位0规定读或写。在时钟/日历寄存器中的地址9~31或RAM寄存器中的地址31不能存储数据。在多字节方式下,读或写从地址0的位0开始。必须按数据传送的次序写最先的8个寄存器。但是,当以多字节方式写RAM时,为了传送数据不必写所有的31字节,不管是否谢了全部31字节,所写的每一字节都将传送至RAM。

DS1302共有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式。其日历、时间寄存器及其控制字如下表所示,其中奇数为读操作,偶数为写操作。

表2.3 DS1302控制字

16

西北工业大学明德学院本科毕业论文设计

时钟暂停:秒寄存器的位7定义位时钟暂停位。当它为1时,DS1302停止振荡,进入低功耗的备份方式,通常在对DS1302进行写操作时(如进入时钟调整程序),停止振荡。当它为0时,时钟将开始启动。

AM-PM/12-24小时方式:小时寄存器的位7定义为12或24小时方式选择位。它为高电平时,选择12小时方式。在此方式下,位5为第二个10小时位(20~23h)。

DS1302的晶振选用32768Hz,电容推荐值为6pF。因为振荡频率较低,也可以不接电容,对计时精度影响不大。

17

西北工业大学明德学院本科毕业论文设计

第三章 系统的软件设计

3.1 程序设计

电子时钟的程序主要包括3个方面的内容:一是DS1302从单片机中读取数据进行计数,二是利用按键进行时间的调整,三是单片机中读取DS1302中的数据驱动LED数码管显示时间。STC89C52RC单片机主要I/O口的分配:P10、P11、P12分别接时钟芯片的SCLK、I/O、RST引脚,P13、P14、P15、P16接四个独立按键。

开始

K加1程序K等于0显示时间K等于1显示日期K等于2显示报警时间报警程序按键程序返回 18

西北工业大学明德学院本科毕业论文设计

主程序流程图

时间调整程序流程图

19

西北工业大学明德学院本科毕业论文设计

3.2 从1302读取日期和时间程序

读1302日期和时间 N 需要调整时间吗? Y 调整时间和日期 系统初始化 开 始

图4-2 从1302读取程序

20

西北工业大学明德学院本科毕业论文设计

第四章 PROTEUS使用

4.1编程环境PROTEUS

PROTEUS软件是由英国LabCenter Electronics 公司开发的EDA工具软件,由ISIS和ARES两个软件构成,其中ISIS是一款便捷的电子系统仿真平台软件,ARES是一款高级的布线编辑软件,它集成了高级原理布线图、混合模式SPICE电路仿真、PCB设计以及自动布线来实现一个完整的电子设计。

4.2用PROTEUS ISIS对电子万年历的硬件电路设计

通过PROTEUS ISIS软件的VSM(虚拟仿真技术),用户可以对模拟电路、数字电路、模数混合电路,以及基于微控制器的系统连同所有外围接口电子元器件一起仿真。

用PROTEUS ISIS设计硬件电路的过程 ① 选择设计图纸的到小

根据设计所使用到元器件的多少,选择合适大小的设计图纸,操作是单击菜单栏上的System→Set Sheet Size ,然后弹出如图5-1所示的对话框,从中选择合适大小的图纸,也可以选择User进行图纸的自定义设置。在设计过程中也可以通过此方法调整图纸的大小。

图 5-1

② 选取仿真所需的元器件

选取元器件的方式是,单击如图5-2所示的按钮“P”。会弹出如图5-3所示

21

西北工业大学明德学院本科毕业论文设计

的窗口。

图 5-2

图 5-3

从此窗口的左上角的“Keywords”中输入电子万年历设计用到的器件,如输入

22

西北工业大学明德学院本科毕业论文设计

“AT89C51”,在中间会列出带有输入关键字的元器件,选择合适的元器件并双击它,则已经选择好了该元器件。然后再在“Keywords”中输入其他所需的元器件,用同样的方法进行操作。最后选择好所有的元器件如图5-4所示。

图 5-4 所用器件

其中74LS174表示三个串行接口,AT89C51代表单片机会,DS1302代表时钟芯片,RESPACK-8代表八排电阻。

③ 把元器件放到图纸的合适位置,进行布线

单击如图5-4所示的元器件AT89C51,再在右边图纸上单击,就把元器件放入到了图纸上。再用同样的方法把ds1302放入到图纸的合适位置。如果元器件放置错误,这可通过两次右击删除所放置的元器件,如果位置放得不理想,可以先右击该器件,然后按住左键进行移动。在布线之前,如果觉得元器件的引脚的方向不好布线,则可以通过单击

这四个按钮进行调整,这四按

钮的意思分别是:顺时针旋转90°,逆时针旋转90°,沿Y轴对称,沿X轴对称。通过这样的调整,可以使整个布局合理一些。接着进行布线,由于PROTEUS ISIS有自动布线的功能,比如要把AT89C51的P2口连到74LS164的OUT8口,只要先在P2引脚上单击一下,再在OUT8引脚上单击,则ISIS自动将两个引脚连上线。

23

西北工业大学明德学院本科毕业论文设计

图 5-5 at89c51与ds1302的连接

ISIS还提供了网络布线,即不使用线连接也可以把两个引脚虚拟的连接了起来。具体操作是:单击要连线的一个引脚,连出适当的距离后双击,另一个引脚也同样操作,在单击如图6-5所示的“LBL”按钮,再在图中P0.1引脚的A处单击,在弹出的窗口中的“String”中填入名称,如“A” ,对OUT7引脚进行同样的操作,在“String”中也填入名称“A”,这样就完成了P3.4引脚与RES引脚的网络连接,这个好处避免两个距离比较远的器件进行真实线的连接,使布线美观。 ④ 编辑窗口连接端子

要让最后的设计成功仿真时,必须放置并连接端子。选择

,从中可以选

择电路原理中的两个通用的端子,一个是接地,一个是电源。如图5-6所示。

24

西北工业大学明德学院本科毕业论文设计

图 5-6连接端子

最后分别对各元器件的属性值进行设置,单击接线是否合理,说明硬件电路已经顺利的完成。

按钮,进行电气检测,查看

4.3用PROTEUS ISIS进行电子万年历的仿真测试

① 添加Keil中编写的代码文件

单击工具栏中的Source→Add/Remove Source files...,弹出一个对话框,分别单击“New” ,然后选择在Keil中编写的数字电压表.ASM汇编语言程序,单击“OK” ,完成添加代码文件。

② 编译源程序,生成.HEX目标代码文件

单击Source→Build All。如果编译结果没有错误,会出现如图5-8所示的结果。

图5-8

③ 加载.HEX目标代码文件

通过如图5-9所示的对话框,选择刚才编译生成的.HEX文件。设置使单片

25

西北工业大学明德学院本科毕业论文设计

机的运行频率为6MHz 。

图5-9

④ 单击按钮,进行对电子万年历的仿真测试。

⑤ PROTEUS的调试功能

由于使用的是汇编语言编写的程序,如果在测量的时候测量值显示错误,说明程序中存在问题,这个问题只用在仿真测量的时候才能被发现,这时可以使用PROTEUS对程序进行调试。单击

按钮,再单击菜单栏中的Debug,可以在

最下面选择打开内存观察窗口,寄存器值观察窗口,汇编语言源代码窗口等等。在汇编语言源代码窗口中,也可以在所需要设置断点的语句前双击设置断点,当设置断点的时候,程序运行到所设断点处停止,从而可以在内存、寄存器等的值的变化,从而找出程序出错的地方。

26

西北工业大学明德学院本科毕业论文设计

第五章 结束语

2010年3月,我开始了我的毕业论文工作,时至今日,论文基本完成。从最初的茫然,到慢慢的进入状态,再到对思路逐渐的清晰,整个写作过程难以用语言来表达。历经了一个多月的奋战,紧张而又充实的毕业设计终于落下了帷幕。回想这段日子的经历和感受,我感慨万千,在这次毕业设计的过程中,我拥有了无数难忘的回忆和收获。当我终于完成了所有打字、绘图、排版、校对的任务后整个人都很累,但同时看着电脑荧屏上的毕业设计稿件我的心里是甜的,我觉得这一切都值了。这次毕业论文的制作过程是我的一次再学习,再提高的过程。在论文中我充分地运用了大学期间所学到的知识。

我不会忘记这难忘的几个月的时间。毕业论文的制作给了我难忘的回忆。在我徜徉书海查找资料的日子里,面对无数书本的罗列,最难忘的是每次找到资料时的激动和兴奋;亲手用protel 99设计电路图的时间里,记忆最深的是每一步小小思路实现时那幸福的心情;为了论文我曾赶稿到深夜,但看着亲手打出的一字一句,心里满满的只有喜悦毫无疲惫。这段旅程看似荆棘密布,实则蕴藏着无尽的宝藏。我从资料的收集中,掌握了很多单片机及其接口应用的知识,让我对我所学过的知识有所巩固和提高,并且让我对当今单片机的最新发展技术有所了解。在整个过程中,我学到了新知识,增长了见识。在今后的日子里,我仍然要不断地充实自己,争取在所学领域有所作为。

脚踏实地,认真严谨,实事求是的学习态度,不怕困难、坚持不懈、吃苦耐劳的精神是我在这次设计中最大的收益。我想这是一次意志的磨练,是对我实际能力的一次提升,也会对我未来的学习和工作有很大的帮助。在这次毕业设计中也使我们的同学关系更进一步了,同学之间互相帮助,有什么不懂的大家在一起商量,听听不同的看法对我们更好的理解知识,所以在这里非常感谢帮助我的同学。

在此更要感谢我的指导老师和专业老师,是你们的细心指导和关怀,使我能够顺利的完成毕业论文。在此我要向肖老师致以最衷心的感谢和敬意。

27

西北工业大学明德学院本科毕业论文设计

参考文献

[1] 赵长德.微型计算机原理与接口技术[M].北京:机械工业出版社,1999:98-350. [2] 苏平.单片机的原理与接口技术[M].北京:电子工业出版社,2006:1-113. [3] 王忠民.微型计算机原理[M].西安:西安科技大学出版社,2003:15-55. [4] 胡戴明.计算机组成原理[M].北京:经济科学出版社,2005:43-56.

[5] 纪宗南.单片机外围器件使用手册[M].北京:北京航空航天大学出版社,622-655.

[6] 周雪.模拟电子技术[M]西安: 西安电子科技大学出版社,2005:81-95. [7] 左金生.电子与模拟电子技术[M].北京:电子工业出版社,2004:105-131. [8] 尹勇.单片机开发环境μVision2的开发指南[M]. 北京:北京航空航天大学出版社,2004:173-199.

[9] 张斌武.单片机系统Proteus设计与仿真[M]. 北京:电子工业出版社,2005:52-89.

28

西北工业大学明德学院本科毕业论文设计

附 录

附录1

源代码 DELAY.C #define DELAY_C #include”includes.h” #define XTAL 12 void delay_lus(void) {

asm(”nop”): }

void delay_nus(unsigned int n) {

unsigned int i=0; for(i=0;ivoid delay_ims(void) {

unsigned int i;

for(i=0:i<(unsigned int)(XTAL*143-2);i++); }

void delay_nms(unsigned int n) {

29

西北工业大学明德学院本科毕业论文设计

unsigned int i=0; for(i=0;idelay_ims(); } }

DSl302.C

#include”includes.h” #define DSl302_C unsigned char bflag; unsigned char bpm; unsigned char get_hours(void) {

unsigned char i; unsigned char R_Byte; unsigned char TmpByte; reset(); write(0x85); ddr_set_io(); R_Byte=0x00; Prt_clear_io(); ddr_clear_io(); for(i:0;i<4;i++) }

TmpByte=0; if((pinp&(1<R_Byte>>=1;

30

西北工业大学明德学院本科毕业论文设计

R_Byte I=TmpByte; Prt_set_clk(); delay_nus(2); prt_clear_clk(); delay_nus(2); } bflag=0; if((pinp&(1<>=4; return R_Byte; }

unsigned char readbyte(unsigned char w_byte) {

unsigned char temp; reset();

31

西北工业大学明德学院本科毕业论文设计

write(w_byte); temp=read(); prt_clear_rst(); prt_clear_clk(); return temp; }

void writebyte(unsigned char w_byte,unsigned char w_2_byte) reset(); write(w_byte); write(w_2_byte); prt_clear_rst(); prt_clear_clk(); }

void reset(void) {

ddr_set_rst(); prt_clear_clk(); prt_clear_rst(); prt_set_rst(); }

void write(unsigned char W_Byte) {

unsigned char i; DDRC=0xFF;

for(i=0;i<8;i++) {

Prt_clear_io(); if(W_Byte &0x01)

32

{ 西北工业大学明德学院本科毕业论文设计

{

prt_set_io(); }

Prt_set_clk();

delay_nus(1);//delay_nus(2); prt_clear_clk();

delay_nus(1);//delay_nus(2); W_Byte>>=1; } }

unslgned char read(void) {

unsigned char i; unsigned char R_Byte; unsigned char R_Byte2; unsigned char TmpByte; ddr_set_io(); R_Byte=0x00; R_Byte2=0x00;

prt_clear_io(); ddr_clear_io();

for(i=0;i<4;i++)//get the first 4 bits {

TmpByte=0; if((pinp&(1<TmpByte=1; TmpByte=0x80; }

33

西北工业大学明德学院本科毕业论文设计

//TmpByte<<=7;

R_Byte= (R-Byte>>1);//R_Byte>>=1; R_Byte |=TmpByte; prt_set_clk();

delay_nus(1);//delay_nus(2); prt_chear_clk();

delay_nus(1);//delay_nus(2); }

for(i=0;i<4;i++) {

TmpByte=0; if((pinp&(1<TmpByte=1; TmpByte=0x80; }

//TmpByte<<=7;

R_Byte2=(R_Byte2>>1);//R_Byte2>>=l; R_Byte2 |=TmpByte; Prt_set_clk();

delay_nus(1)://delay_nus(2); prt_clear_clk();

delay_nus(1);//delay_nus(2); }

R_Byte>>=4; R_Byte2>>=4;

R_Byte=(R_Byte2*10)+R_Byte; return R_Byte; }

34

西北工业大学明德学院本科毕业论文设计

HD44780.C

#include”includes.h” #define HD44780_C void lcd_pulse(void) {

Icd—set—e() delay_nms(1); Icd_clear_e(); delay_nms(1); }

void icd_wait(void) {

asm(”nop”);

}

void icd_send(unsigned char data) {

Lcd_wait(); dataport=data; lcd_pulse(); }

void clrscr(void) {

lcd_clear_rs(); lcd_clear_rw(); icd_send(0x01); lcd_wait(); }

35

西北工业大学明德学院本科毕业论文设计

void gotoz(unsigned char z) {

lcd_clear_rs(); lcd_clear_rw(); lcd_send(z || 0x80); }

void gotoxy(unsigned char x,unsigned char y) {

gotoz((x)|((y)<(6)); }

void put_char(char c) {

lcd_clear_rw(); lcd_set_rs(); lcd_send(c); }

void outtext(unsigned char*text) {

unsigned char i;

for(i=0; text[i]&&i<16;i++) put_char(text[i]); }

void initgraph(void) {

dirport_data:0xFF;

dirport_con |=(LCD_E | LCD_RS | LCD_RW); lcd_clear_rs();

36

西北工业大学明德学院本科毕业论文设计

lcd_clear_rw(); lcd_send(0x3C); lcd_send(0x3C); lcd_send(0x3C); lcd_send(0x06); lcd_send(0x0C); }

#define LCD_C #include”includes.h”void LCD_INIT(void) {

LCD_DIR_PORT=0xff;LCD_0Pl_PORT=0x30;lcd_clear_rw(); lcd_clear_rs(); lcd_set_e(); asm(”nop”); asm(”nop”); icd_clear_e(); delay_nus(40); icd_clear_rw(); icd_clear_rs(); lcd__set_e(); asm(”nop”); asm(”nop”); icd_clear_e(); delay_nus(40); icd_set_e(); asm(”nop”):

37

西北工业大学明德学院本科毕业论文设计

asm(”nop”); lcd_clear_e(); delay_nus(40); LCD_OP_PORT=0x20; icd_set_e(); asm(”nop”); asm(”nop“); lcd_clear_e(); delay_nus(40); }

void LCD_Busy(void) {

unsigned char temp,high; unsigned char low; LCD_DIR_PORT=0x0f; do {

teap=LCD_OP_PORT; temp=temp&BIT3; LCD_OP_PORT=temp;

Lcd_set_rw(); //Set LCD to READ lcd_clear_rs(); lcd_set_e(); delay_nus(3); high=LCD_IP_PORT; lcd_clear_e(); lcd_set_e(); asm(”nop”); asm(”nop”);

38

西北工业大学明德学院本科毕业论文设计

low=LCD—IP—PORT;. lcd_clear_e(); }while(high&0x80); delay_nus(20); }

void LCD_WriteControl(unsigned char CMD) {

char temp; LCD_Busy();

LCD_DIR_PORT=0xff; temp=LCD_OP_PORT; temp=temp&BIT3:

LCD_OP_PORT=(CMD &0xf0)| temp; lcd_clear_rw(); lcd_clear_rs(); lcd_set_e(); asm(”nop”); asm(”nop”); lcd_clear_e();

LCD_OP_PORT=(CMD<<4)|temp; lcd_clear_rw(); lcd_clear_rs(); lcd_set_e(); asm(”nop”); asm(”nop”); lcd_clear_e(); }

void LCD_WriteData(unsiqned char Data) {

39

西北工业大学明德学院本科毕业论文设计

char temp~ LCD_Busy(); LCD_DIR_PORT=0xFF; temp=LCD_OP_PORT; temp=temp&BIT3;

LCD_OP_PORT=(Data&0xf0)| temp; lcd_clear_rw(); //Set LCD to write lcd_set_rs(); lcd_set_e(); asm(”nop”); asm(”nop”); lcd_clear_e();

LCD_OP_PORT=(Data<<4)|temp; lcd_clear_rw(); lcd_set_rs(); lcd_set_e(); asm(”nop”); asm(”nop”); lcd_clear_e(); }

//*********************************// //***初始化液晶***//

//*********************************// void Init_LCD(void) {

LCD_INIT();

LCD_WriteControl(LCD_FUNCTION_SET); LCD_WriteControl(LCD_OFF); LCD_WriteControl(LCD_CLEAR);

40

西北工业大学明德学院本科毕业论文设计

LCD_WriteControl(LCD_MODE_SET); LCD_WriteControl(LCD_ON); LCD_WrlteControl(LCD_HOME); //LCD_WriteControl(0x90); }

//************************************************// / /***清屏 ***//

//************************************************// void LCD_Clear(void) {

LCD_WriteControl(0x01); }

//***********************************************// //***移动光标到0行0列***//

//***********************************************// void LCD_Home(void) {

LCD_WriteControl(0x02); \" }

//**********************************************// //***显示字符,在当前光标处***//

//***********************************************// void LCD_DisplayCharacter(char Char) {

LCD_WriteData(Char); }

//***********************************************// //***在Flash中、在指定的行和列显示一个字符串***// //***********************************************//

41

西北工业大学明德学院本科毕业论文设计

void

LCD_DisplayString_F(char

rOW,char

column,unsigned

char__flash*string)

{

LCD_Cursor(row,column); while(*string) }

LCD_DisplayCharacter(*string++); } }

//***********************************************// //***在RAM中、在指定的行和列显示一个字符串***// //***********************************************// void LCD_DisplayString(char row,char column,unsigned char*string) {

LCD_Cursor(row,column); while(*string)

LCD_DisplayCharacter(*string++); }

//***********************************************// //***定位行和列的光标***//

//***********************************************// void LCD_Cursor(char row,char column) {

switch (row) {

case 1:LCD_WriteControl(0x80+column一1);break; case 2:LCD_WriteControl(0xc0+column一1);break; case 3:LCD_WriteControl(0x94+column—1);break; case 4:LCD_WriteControl(0xd4+column—1);break; default:break;

42

西北工业大学明德学院本科毕业论文设计

} }

//**************************// //***打开光标***//

//**************************// void LCD_Cursor_On(void) {

LCD_WriteControl(LCD_CURS_ON); }

43

因篇幅问题不能全部显示,请点此查看更多更全内容