160128中文显示温度与时间

更新时间:2024-06-04 22:36:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

安徽财经大学信息工程学院本科课程论文(设计)

专业综合课程 设计论文

题 目 160128中文显示温度与时间 学 院 信息工程学院 专 业 电子信息工程 班 级 08 信工(2)班 学 号 200883080 姓 名 *** 指导老师 ** 老师

2011 年 10 月

1

安徽财经大学信息工程学院本科课程论文(设计)

摘 要

本课程设计是利用单片机AT89C51、时钟芯片DS1302、温度传感器DS18B20以及160*128的液晶组合设计的一款模拟万年历,实现简单的显示温度、时间和日期的功能。时钟芯片利用单片机的晶振提供脉冲以控制内部计时器,读取当前的日期与时间,并通过接口传输给单片机予以处理;同时温度传感器将产生的模拟温度传送给单片机。单片机将所接受的数据传输出到显示器160128上,以实现温度、日期与时间的同时显示。该系统主要是由时钟读取模块、当前温度读取模块、温度与时间显示模块和控制电路四部分组成。时钟读取部分利用时钟芯片DS1302实时提供当前的时间,并传送给单片机;温度提取是利用DS18b20读取当前室内温度;显示部分利用LCD160128液晶显示出万年历及温度。整个系统利用C语言进行程序设计,经调试仿真效果均达到课程设计要求。

关键词:AT89C51;万年历;DS1302;DS18B20;LCD160128

2

安徽财经大学信息工程学院本科课程论文(设计)

Abstract

This curriculum project is using monolithic integrated circuit AT89C51, clock chip DS1302, temperature sensor DS18B20 as well as 160*128 liquid crystal unitized design one section simulates ten thousand calendars, realizes the simple demonstration temperature, the time and the date function. The clock chip provides the pulse using monolithic integrated circuit's crystal oscillator to control the internal timer, reads the current date and the time, and processes through the connection transmission for the monolithic integrated circuit; Simultaneously the temperature sensor will produce the simulation temperature transmits for the monolithic integrated circuit. The monolithic integrated circuit will accept the data transmission to the monitor on 160128, realizes the temperature, the date and the time at the same time demonstration. This system is mainly by the clock read module, the current temperature read module, the temperature and the time display module and the control circuit four parts is composed. The clock read part real-time provides the current time using clock chip DS1302, and transmits for the monolithic integrated circuit; The temperature extraction is reads the current indoor temperature using DS18b20; The demonstration part uses the LCD160128 liquid crystal display ten thousand calendars and the temperature. The overall system carries on the programming using the C language, meets the curriculum project requirements after the debugging simulation effect.

Keywords: AT89C51;Calendar ;DS1302;DS18B20;LCD160128

3

安徽财经大学信息工程学院本科课程论文(设计)

目录

前言 ............................................................... 1 1 设计任务与要求 ................................................ 1 2 总体框图 ....................................................... 1

2.1 设计方案 .................................................... 1

2.2 电路原理图 .................................................. 2

3 实验元器件选择及其功能 ........................................ 2

3.1实验器件 ..................................................... 2

3.2主要器件极其相关功能 ......................................... 2

4 系统软硬件设计 ................................................ 8

4.1硬件电路设计 ................................................. 8 4.2 软件设计 ................................................... 10

5 总体设计电路图 ................................................ 27 6 安装与调试 .................................................... 28

6.1调试过程 .................................................... 28

6.2电路仿真 .................................................... 31

7 性能测试与分析 ............................................... 33 8 设计总结 ...................................................... 33 9 实验心得与体会 ............................................... 34 参考文献 .......................................................... 35

4

安徽财经大学信息工程学院本科课程论文(设计)

前言

单片机是随着超大规模集成电路技术的发展而诞生的,由于它具有体积小、功能强、性价比高等特点,所以广泛应用于电子仪表、家用电器、节能装置、军事装置、机器人、工业控制等诸多领域,使产品小型化、智能化,既提高了产品的功能和质量,又降低了成本,简化了设计。

本设计主要介绍单片机在带实时日历时钟的温度检测系统中的应用。它具有电路简单、功能齐全、制作成本低、性价比高,只需要提供家用电源供电即可。该仪器采用美国Intel公司八位单片机作为控制核心,配以其他进口集成电路,加上对软件的精心设计,实现了仪表智能化。

系统软件部分采用MCS—51单片机C语言精心编写,其数据流程清晰地反映在程序中,增强了软件的可读性,便于改进和扩充,从而为其实用提供更好的软件支持。

1 设计任务与要求

(1)利用单片机AT89C51控制整个设计电路。 (2)用实时时钟芯片DS1302对当前时间进行计时。 (3)用温度传感器DS18B20检测当前温度。 (4)在160128LCD上显示当前时间和温度。

2 总体框图

2.1 设计方案

(1)本课题所设计的显示温度与时间的液晶屏是将由单片机转送的时间、温度及日期显示出来。

(2)时钟芯片DS1302可以实时检测当前时间。

(3)温度传感器DS18b20可以模拟外界温度的变化。当温度变化时,160128

1

安徽财经大学信息工程学院本科课程论文(设计)

显示的数据也会实时改变。

2.2 电路原理图

LCD160128中文显示温度及时间 温度传感器 时钟芯片 控制图2.1

器件

3 实验元器件选择及其功能

3.1实验器件

AT89C51 1片 DS1302 1片 DS18B20 1片 LCD160128 1块

3.2主要器件极其相关功能

(1)AT89C51

MCS51系列单片机是美国Intel公司于1980年推出的一种8位单片机系列。

2

安徽财经大学信息工程学院本科课程论文(设计)

该系列的基本型产品是8051、8031和8751。这3种产品之间的区别只是在片内程序存储器方面。8051的片内程序存储器(ROM)是掩膜型的,即在制造芯片时已将应用程序固化进去;8031片内没有程序存储器;8751内部包含有用作程序存储器的4KB的EPROM。由于8051的编程需要制造商的支持,8751的价格昂贵,因此8031获得了更为广泛的使用。

MCS51系列单片机优异的性能/价格比使得它从面世以来就获得用户的认可。Intel公司把这种单片机的内核,即8051内核,以出售或互换专利的方式授权给一些公司,如Atmel、Philips、ADI等。这些公司的这类产品也被称为8051兼容芯片,这些8051兼容芯片在原来的基础上增加了许多特性。本书应用电路中采用了Atmel公司的AT89S51芯片,它与MCS51单片机指令集兼容,同时它的内部包含用作程序存储器的4KB的基于FLASH技术的只读存储器。采用这款芯片既克服了采用8031需要添加外部程序存储器导致电路复杂的缺点,又克服了采用8751导致电路制作成本高的缺点。

AT89系列单片机在内部结构上基本相同,其中不同型号的单片机只不过在个别模块和功能方面有些区别。AT89C51单片机内部硬件结构框图如图2.1所示。它由一个8位中央处理器(CPU)、一个256B片内RAM及4KB Flash ROM 、21个特殊功能寄存器、4个8位并行I/O口、两个16位定时/计数器、一个串行I/O口以及中断系统等部分组成,各功能部件通过片内单一总线联成一个整体,集成在一块芯片上。

AT89C51 单片机内部结构如图所示:

3

安徽财经大学信息工程学院本科课程论文(设计)

时钟源 外部事件 时序和振荡电路 程序存储器 ROM 数据存储器RAM 2个16位定时/ 计数器 CPU 内部8位数据总线 中断 系统 内部中断并行 I/O口 串行I/O口 RXD TXD 外部中断 P0 P1 P2 P3 CPU是单片机内部的核心部件,是一个8位二进制数的中央处理单元,主要由运算器、控制器和寄存器阵列构成。 (2)DS1302的结构与工作原理

DS1302 是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个31×8的用于临时性存放数据的RAM寄存器。DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后背电源双电源引脚,同时提供了对后背电源进行涓细电流充电的能力。 DS1302的外部引脚功能所示:

4

安徽财经大学信息工程学院本科课程论文(设计)

X1,X2 GND RST I/O SCLK VCC1

VCC2

DS1302封装图

32.768kHz晶振引

地 复位

数据输入/输出 串行时钟 电池引脚 主电源引脚

下图为内部寄存器的控制命令:

寄存器名称 秒寄存器 分寄存器 小时寄存器 日寄存器 月寄存器 星期寄存器 年寄存器 写保护寄存器 慢充电寄存器 时钟突发寄存器

7 1 1 1 1 1 1 1 1 1 1 1

6 RAM/CK 0 0 0 0 0 0 0 0 0 0

5 A4 0 0 0 0 0 0 0 0 0 1

4 A3 0 0 0 0 0 0 0 0 1 1

3 A2 0 0 0 0 1 1 1 1 0 1

2 A1 0 0 1 1 0 0 1 1 0 1

1 A0 0 1 0 1 0 1 0 1 0 1

0 RD/W

日历、时钟寄存器与控制字对照表

(3)DS18B20结构及工作原理

DS18B20数字温度计是DALLAS公司生产的1-Wire,即单总线器件,具有线路简单,体积小的特点。因此用它来组成一个测温系统,具有线路简单,在一根通信线,可以挂很多这样的数字温度计,十分方便。DS18B20 数字温度计提供 9-12 位摄氏温度测量而且有一个由高低电平触发的可编程的不因电源消失而改变的报警功能。DS18B20通过一个单线接口发送或接受信息,因此在中央处理器和 DS18B20 之间仅需一条连接线(加上地线)。它的测温范围为-55~+125℃,并且在-10~+85℃精度为±5℃。除此之外,DS18B20能直接从单线通讯线上汲取能量,除去了对外部电源的需求。

5

安徽财经大学信息工程学院本科课程论文(设计)

每个 DS18B20 都有一个独特的 64 位序列号,从而允许多只 DS18B20 同时连在一根单线总线上;因此,很简单就可以用一个微控制器去控制很多覆盖在一大片区域的 DS18B20。这一特性在 HVAC 环境控制、探测建筑物、仪器或机器的温度以及过程监测和控制等方面非常有用。

DS18B20引脚图

DS18B20详细引脚功能描述: 序号 1 2 GND DQ 地信号 数据输入/输出引脚。开漏单总线接口引脚。当被用着在寄生电源下,也可以向器件提供电源。 3 VDD 可选择的VDD引脚。当工作于寄生电源时,此引脚必须接地。 名称 引脚功能描述 DS18B20的使用方法

由于DS18B20采用的是1-Wire总线协议方式,即在一根数据线实现数据的双向传输,而对AT89S51单片机来说,硬件上并不支持单总线协议,因此,我们必须采用软件的方法来模拟单总线的协议时序来完成对DS18B20芯片的访问。 由于DS18B20是在一根I/O线上读写数据,因此,对读写的数据位有着严格的时序要求。DS18B20有严格的通信协议来保证各位数据传输的正确性和完整性。该协议定义了几种信号的时序:初始化时序、读时序、写时序。所有时序都是将主机作为主设备,单总线器件作为从设备。而每一次命令和数据的传输都是从主

6

安徽财经大学信息工程学院本科课程论文(设计)

机主动启动写时序开始,如果要求单总线器件回送数据,在进行写命令后,主机需启动读时序完成数据接收。数据和命令的传输都是低位在先。 (4)LCD160128

160128是一种图形点阵液晶显示器,它主要由行驱动器/列驱动器及格160×128全点阵液晶显示器组成。可完成图形显示,也可以显示10×8个(16×16点阵)汉字。

主要技术参数和性能:模块内自带-15负压,用于 LCD的驱动电压 1、电源VDD:+5V;

2、显示内容:160(列)×128(行)点 3、全屏幕点阵 4、十三种指令

5、与CPU接口采用8位数据总线并行输入输出 6、驱动路数 1/128

7、工作温度:0°C∽+55°C,存储温度:-20°C∽+70°C 外形尺寸

项目 模块体积 尺度 129.0×102.0×12.8 单位 mm 7

安徽财经大学信息工程学院本科课程论文(设计)

视域 行列点阵数 点距离 点大小 模块外部接口:

101.0×82.0 160×128 0.58×0.58 0.54×0..54 mm 点 mm mm

4 系统软硬件设计

4.1硬件电路设计

(1)时钟电路

单片机工作的时间基准是由时钟电路提供的。在单片机的XTAL1和XTAL2两个引脚间,接一只晶振及两只电容就构成了单片机的时钟电路,

电路中的器件选择可以通过计算和实验确定,也可以参考一些典型电路的参数。电路中,电容器C1和C2对振荡器频率有微调作用,通常的取值范围30±10pF;石英晶体选择6MHZ或12MHZ都可以。其结果只是机器周期时间不同,影响计数器的计数初值。

8

安徽财经大学信息工程学院本科课程论文(设计)

(2)温度检测电路

该电路只是利用DS18B20模拟外界环境温度的变化,从而实时显示在液晶屏上。

(3)LCD160128显示电路

9

安徽财经大学信息工程学院本科课程论文(设计)

4.2 软件设计

应用程序

//---------------LCD_160128.c---------------- //LCD_160128的C文件,内含控制函数

//------------------------------------------ #include #include #include #include #include #include #include

#define ASC_CHR_WIDTH 8 #define ASC_CHR_HEIGHT 12 #define HZ_CHR_HEIGHT 12 #define HZ_CHR_WIDTH 12 uchar code LCD_WIDTH = 20; uchar code LCD_HEIGHT = 128; uchar code ASC_MSK[96*12]={

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,

10

安徽财经大学信息工程学院本科课程论文(设计)

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,// ' ' 0x00,0x30,0x78,0x78,0x78,0x30,0x30,0x00,0x30,0x30,0x00,0x00,// '!' 0x00,0x66,0x66,0x66,0x24,0x00,0x00,0x00,0x00,0x00,0x00,0x00,// '\0x00,0x6c,0x6c,0xfe,0x6c,0x6c,0x6c,0xfe,0x6c,0x6c,0x00,0x00,// '#' 0x30,0x30,0x7c,0xc0,0xc0,0x78,0x0c,0x0c,0xf8,0x30,0x30,0x00,// '$' 0x00,0x00,0x00,0xc4,0xcc,0x18,0x30,0x60,0xcc,0x8c,0x00,0x00,// '%' 0x00,0x70,0xd8,0xd8,0x70,0xfa,0xde,0xcc,0xdc,0x76,0x00,0x00,// '&' 0x00,0x30,0x30,0x30,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,// ''' 0x00,0x0c,0x18,0x30,0x60,0x60,0x60,0x30,0x18,0x0c,0x00,0x00,// '(' 0x00,0x60,0x30,0x18,0x0c,0x0c,0x0c,0x18,0x30,0x60,0x00,0x00,// ')' 0x00,0x00,0x00,0x66,0x3c,0xff,0x3c,0x66,0x00,0x00,0x00,0x00,// '*' 0x00,0x00,0x00,0x18,0x18,0x7e,0x18,0x18,0x00,0x00,0x00,0x00,// '+' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x38,0x60,0x00,// ',' 0x00,0x00,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,// '-' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x38,0x00,0x00,// '.' 0x00,0x00,0x02,0x06,0x0c,0x18,0x30,0x60,0xc0,0x80,0x00,0x00,// '/' 0x00,0x7c,0xc6,0xce,0xde,0xd6,0xf6,0xe6,0xc6,0x7c,0x00,0x00,// '0' 0x00,0x10,0x30,0xf0,0x30,0x30,0x30,0x30,0x30,0xfc,0x00,0x00,// '1' 0x00,0x78,0xcc,0xcc,0x0c,0x18,0x30,0x60,0xcc,0xfc,0x00,0x00,// '2' 0x00,0x78,0xcc,0x0c,0x0c,0x38,0x0c,0x0c,0xcc,0x78,0x00,0x00,// '3' 0x00,0x0c,0x1c,0x3c,0x6c,0xcc,0xfe,0x0c,0x0c,0x1e,0x00,0x00,// '4' 0x00,0xfc,0xc0,0xc0,0xc0,0xf8,0x0c,0x0c,0xcc,0x78,0x00,0x00,// '5' 0x00,0x38,0x60,0xc0,0xc0,0xf8,0xcc,0xcc,0xcc,0x78,0x00,0x00,// '6' 0x00,0xfe,0xc6,0xc6,0x06,0x0c,0x18,0x30,0x30,0x30,0x00,0x00,// '7' 0x00,0x78,0xcc,0xcc,0xec,0x78,0xdc,0xcc,0xcc,0x78,0x00,0x00,// '8' 0x00,0x78,0xcc,0xcc,0xcc,0x7c,0x18,0x18,0x30,0x70,0x00,0x00,// '9' 0x00,0x00,0x00,0x38,0x38,0x00,0x00,0x38,0x38,0x00,0x00,0x00,// ':' 0x00,0x00,0x00,0x38,0x38,0x00,0x00,0x38,0x38,0x18,0x30,0x00,// ';' 0x00,0x0c,0x18,0x30,0x60,0xc0,0x60,0x30,0x18,0x0c,0x00,0x00,// '<' 0x00,0x00,0x00,0x00,0x7e,0x00,0x7e,0x00,0x00,0x00,0x00,0x00,// '=' 0x00,0x60,0x30,0x18,0x0c,0x06,0x0c,0x18,0x30,0x60,0x00,0x00,// '>' 0x00,0x78,0xcc,0x0c,0x18,0x30,0x30,0x00,0x30,0x30,0x00,0x00,// '?' 0x00,0x7c,0xc6,0xc6,0xde,0xde,0xde,0xc0,0xc0,0x7c,0x00,0x00,// '@' 0x00,0x30,0x78,0xcc,0xcc,0xcc,0xfc,0xcc,0xcc,0xcc,0x00,0x00,// 'A' 0x00,0xfc,0x66,0x66,0x66,0x7c,0x66,0x66,0x66,0xfc,0x00,0x00,// 'B' 0x00,0x3c,0x66,0xc6,0xc0,0xc0,0xc0,0xc6,0x66,0x3c,0x00,0x00,// 'C' 0x00,0xf8,0x6c,0x66,0x66,0x66,0x66,0x66,0x6c,0xf8,0x00,0x00,// 'D' 0x00,0xfe,0x62,0x60,0x64,0x7c,0x64,0x60,0x62,0xfe,0x00,0x00,// 'E' 0x00,0xfe,0x66,0x62,0x64,0x7c,0x64,0x60,0x60,0xf0,0x00,0x00,// 'F' 0x00,0x3c,0x66,0xc6,0xc0,0xc0,0xce,0xc6,0x66,0x3e,0x00,0x00,// 'G' 0x00,0xcc,0xcc,0xcc,0xcc,0xfc,0xcc,0xcc,0xcc,0xcc,0x00,0x00,// 'H' 0x00,0x78,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x78,0x00,0x00,// 'I' 0x00,0x1e,0x0c,0x0c,0x0c,0x0c,0xcc,0xcc,0xcc,0x78,0x00,0x00,// 'J' 0x00,0xe6,0x66,0x6c,0x6c,0x78,0x6c,0x6c,0x66,0xe6,0x00,0x00,// 'K'

11

安徽财经大学信息工程学院本科课程论文(设计)

0x00,0xf0,0x60,0x60,0x60,0x60,0x62,0x66,0x66,0xfe,0x00,0x00,// 'L' 0x00,0xc6,0xee,0xfe,0xfe,0xd6,0xc6,0xc6,0xc6,0xc6,0x00,0x00,// 'M' 0x00,0xc6,0xc6,0xe6,0xf6,0xfe,0xde,0xce,0xc6,0xc6,0x00,0x00,// 'N' 0x00,0x38,0x6c,0xc6,0xc6,0xc6,0xc6,0xc6,0x6c,0x38,0x00,0x00,// 'O' 0x00,0xfc,0x66,0x66,0x66,0x7c,0x60,0x60,0x60,0xf0,0x00,0x00,// 'P' 0x00,0x38,0x6c,0xc6,0xc6,0xc6,0xce,0xde,0x7c,0x0c,0x1e,0x00,// 'Q' 0x00,0xfc,0x66,0x66,0x66,0x7c,0x6c,0x66,0x66,0xe6,0x00,0x00,// 'R' 0x00,0x78,0xcc,0xcc,0xc0,0x70,0x18,0xcc,0xcc,0x78,0x00,0x00,// 'S' 0x00,0xfc,0xb4,0x30,0x30,0x30,0x30,0x30,0x30,0x78,0x00,0x00,// 'T' 0x00,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0x78,0x00,0x00,// 'U' 0x00,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0x78,0x30,0x00,0x00,// 'V' 0x00,0xc6,0xc6,0xc6,0xc6,0xd6,0xd6,0x6c,0x6c,0x6c,0x00,0x00,// 'W' 0x00,0xcc,0xcc,0xcc,0x78,0x30,0x78,0xcc,0xcc,0xcc,0x00,0x00,// 'X' 0x00,0xcc,0xcc,0xcc,0xcc,0x78,0x30,0x30,0x30,0x78,0x00,0x00,// 'Y' 0x00,0xfe,0xce,0x98,0x18,0x30,0x60,0x62,0xc6,0xfe,0x00,0x00,// 'Z' 0x00,0x3c,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x3c,0x00,0x00,// '[' 0x00,0x00,0x80,0xc0,0x60,0x30,0x18,0x0c,0x06,0x02,0x00,0x00,// '\\' 0x00,0x3c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x3c,0x00,0x00,// ']' 0x10,0x38,0x6c,0xc6,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,// '^' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x00,// '_' 0x30,0x30,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,// '`' 0x00,0x00,0x00,0x00,0x78,0x0c,0x7c,0xcc,0xcc,0x76,0x00,0x00,// 'a' 0x00,0xe0,0x60,0x60,0x7c,0x66,0x66,0x66,0x66,0xdc,0x00,0x00,// 'b' 0x00,0x00,0x00,0x00,0x78,0xcc,0xc0,0xc0,0xcc,0x78,0x00,0x00,// 'c' 0x00,0x1c,0x0c,0x0c,0x7c,0xcc,0xcc,0xcc,0xcc,0x76,0x00,0x00,// 'd' 0x00,0x00,0x00,0x00,0x78,0xcc,0xfc,0xc0,0xcc,0x78,0x00,0x00,// 'e' 0x00,0x38,0x6c,0x60,0x60,0xf8,0x60,0x60,0x60,0xf0,0x00,0x00,// 'f' 0x00,0x00,0x00,0x00,0x76,0xcc,0xcc,0xcc,0x7c,0x0c,0xcc,0x78,// 'g' 0x00,0xe0,0x60,0x60,0x6c,0x76,0x66,0x66,0x66,0xe6,0x00,0x00,// 'h' 0x00,0x18,0x18,0x00,0x78,0x18,0x18,0x18,0x18,0x7e,0x00,0x00,// 'i' 0x00,0x0c,0x0c,0x00,0x3c,0x0c,0x0c,0x0c,0x0c,0xcc,0xcc,0x78,// 'j' 0x00,0xe0,0x60,0x60,0x66,0x6c,0x78,0x6c,0x66,0xe6,0x00,0x00,// 'k' 0x00,0x78,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x7e,0x00,0x00,// 'l' 0x00,0x00,0x00,0x00,0xfc,0xd6,0xd6,0xd6,0xd6,0xc6,0x00,0x00,// 'm' 0x00,0x00,0x00,0x00,0xf8,0xcc,0xcc,0xcc,0xcc,0xcc,0x00,0x00,// 'n' 0x00,0x00,0x00,0x00,0x78,0xcc,0xcc,0xcc,0xcc,0x78,0x00,0x00,// 'o' 0x00,0x00,0x00,0x00,0xdc,0x66,0x66,0x66,0x66,0x7c,0x60,0xf0,// 'p' 0x00,0x00,0x00,0x00,0x76,0xcc,0xcc,0xcc,0xcc,0x7c,0x0c,0x1e,// 'q' 0x00,0x00,0x00,0x00,0xec,0x6e,0x76,0x60,0x60,0xf0,0x00,0x00,// 'r' 0x00,0x00,0x00,0x00,0x78,0xcc,0x60,0x18,0xcc,0x78,0x00,0x00,// 's' 0x00,0x00,0x20,0x60,0xfc,0x60,0x60,0x60,0x6c,0x38,0x00,0x00,// 't' 0x00,0x00,0x00,0x00,0xcc,0xcc,0xcc,0xcc,0xcc,0x76,0x00,0x00,// 'u' 0x00,0x00,0x00,0x00,0xcc,0xcc,0xcc,0xcc,0x78,0x30,0x00,0x00,// 'v' 0x00,0x00,0x00,0x00,0xc6,0xc6,0xd6,0xd6,0x6c,0x6c,0x00,0x00,// 'w'

12

安徽财经大学信息工程学院本科课程论文(设计)

0x00,0x00,0x00,0x00,0xc6,0x6c,0x38,0x38,0x6c,0xc6,0x00,0x00,// 'x' 0x00,0x00,0x00,0x00,0x66,0x66,0x66,0x66,0x3c,0x0c,0x18,0xf0,// 'y' 0x00,0x00,0x00,0x00,0xfc,0x8c,0x18,0x60,0xc4,0xfc,0x00,0x00,// 'z' 0x00,0x1c,0x30,0x30,0x60,0xc0,0x60,0x30,0x30,0x1c,0x00,0x00,// '{' 0x00,0x18,0x18,0x18,0x18,0x00,0x18,0x18,0x18,0x18,0x00,0x00,// '|' 0x00,0xe0,0x30,0x30,0x18,0x0c,0x18,0x30,0x30,0xe0,0x00,0x00,// '}' 0x00,0x73,0xda,0xce,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,// '~' };

uchar gCurRow, gCurCol; uchar tCurRow, tCurCol; uchar ShowModeSW; uint txthome,grhome; //LCD控制相关函数

uchar Status_BIT_01(); // 状态位STA1,STA0判断(读写指令和读写数据) uchar Status_BIT_3(); // 状态位ST3判断(数据自动写状态) uchar GetRow(); uchar GetCol();

uchar LCD_Write_Command_P2(uchar cmd,uchar para1,uchar para2); // 写双参数的指令

uchar LCD_Write_Command_P1(uchar cmd,uchar Para1); // 写单参数的指令 uchar LCD_Write_Command(uchar cmd); // 写无参数的指令 uchar LCD_Write_Data(uchar dat); // 写数据 uchar LCD_Read_Data(); // 读数据 void cls();

char LCD_Initialise;

void Set_LCD_POS(uchar row, uchar col);// 设置当前地址 void charout(uchar *str); //ASCII(8*8) 显示函数

uchar Display_Str_at_xy(uchar x,uchar y,char *fmt) reentrant;// ASCII(8*16) 及 汉字(16*16) 显示函数

void OutToLCD(uchar Dat,uchar x,uchar y);//显示辅助函数

void Line( unsigned char x1, unsigned char y1, unsigned char x2, unsigned char y2, uchar Mode) reentrant;

void Pixel(unsigned char PointX,unsigned char PointY, uchar Mode);

typedef struct typFNT_GB16 // 汉字字模显示数据结构 {

char Index[2]; char Msk[24]; };

13

安徽财经大学信息工程学院本科课程论文(设计)

//本例汉字点阵库

const struct typFNT_GB16 GB_16[] ={ /*-- 文字: 年 --*/

/*-- 宋体9; 此字体下对应的点阵为:宽x高=12x12 --*/ /*-- 宽度不是8的倍数,现调整为:宽度x高度=16x12 --*/

\年\ 0x22,0x00,0xFF,0xE0,0x02,0x00,0x02,0x00,0x02,0x00,0x00,0x00,

/*-- 文字: 月 --*/

/*-- 宋体9; 此字体下对应的点阵为:宽x高=12x12 --*/ /*-- 宽度不是8的倍数,现调整为:宽度x高度=16x12 --*/

\月\ 0x1F,0x80,0x10,0x80,0x10,0x80,0x20,0x80,0x43,0x80,0x00,0x00,

/*-- 文字: 日 --*/

/*-- 宋体9; 此字体下对应的点阵为:宽x高=12x12 --*/ /*-- 宽度不是8的倍数,现调整为:宽度x高度=16x12 --*/

\日\ 0x20,0x40,0x20,0x40,0x20,0x40,0x3F,0xC0,0x20,0x40,0x00,0x00,

/*-- 文字: 时 --*/

/*-- 宋体9; 此字体下对应的点阵为:宽x高=12x12 --*/ /*-- 宽度不是8的倍数,现调整为:宽度x高度=16x12 --*/

\时\ 0x92,0x80,0x90,0x80,0xF0,0x80,0x90,0x80,0x03,0x80,0x00,0x00,

/*-- 文字: 分 --*/

/*-- 宋体9; 此字体下对应的点阵为:宽x高=12x12 --*/ /*-- 宽度不是8的倍数,现调整为:宽度x高度=16x12 --*/

\分\ 0x08,0x80,0x08,0x80,0x10,0x80,0x20,0x80,0xC7,0x00,0x00,0x00,

/*-- 文字: 秒 --*/

/*-- 宋体9; 此字体下对应的点阵为:宽x高=12x12 --*/ /*-- 宽度不是8的倍数,现调整为:宽度x高度=16x12 --*/

\秒\ 0x69,0x40,0xA0,0x40,0xA0,0x80,0x23,0x00,0x3C,0x00,0x00,0x00,

/*-- 文字: 星 --*/

/*-- 宋体9; 此字体下对应的点阵为:宽x高=12x12 --*/ /*-- 宽度不是8的倍数,现调整为:宽度x高度=16x12 --*/

\星\ 0x3F,0xC0,0x44,0x00,0xBF,0xC0,0x04,0x00,0xFF,0xE0,0x00,0x00,

14

安徽财经大学信息工程学院本科课程论文(设计)

/*-- 文字: 期 --*/

/*-- 宋体9; 此字体下对应的点阵为:宽x高=12x12 --*/ /*-- 宽度不是8的倍数,现调整为:宽度x高度=16x12 --*/

\期\ 0x49,0xE0,0xFD,0x20,0x29,0x20,0x45,0x20,0x82,0x60,0x00,0x00,

/*-- 文字: 一 --*/

/*-- 宋体9; 此字体下对应的点阵为:宽x高=12x12 --*/ /*-- 宽度不是8的倍数,现调整为:宽度x高度=16x12 --*/

\一\ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

/*-- 文字: 二 --*/

/*-- 宋体9; 此字体下对应的点阵为:宽x高=12x12 --*/ /*-- 宽度不是8的倍数,现调整为:宽度x高度=16x12 --*/

\二\ 0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xE0,0x00,0x00,0x00,0x00,

/*-- 文字: 三 --*/

/*-- 宋体9; 此字体下对应的点阵为:宽x高=12x12 --*/ /*-- 宽度不是8的倍数,现调整为:宽度x高度=16x12 --*/

\三\ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0xFF,0xE0,0x00,0x00,

/*-- 文字: 四 --*/

/*-- 宋体9; 此字体下对应的点阵为:宽x高=12x12 --*/ /*-- 宽度不是8的倍数,现调整为:宽度x高度=16x12 --*/

\四\ 0x51,0x20,0x61,0xE0,0x40,0x20,0x7F,0xE0,0x40,0x20,0x00,0x00,

/*-- 文字: 五 --*/

/*-- 宋体9; 此字体下对应的点阵为:宽x高=12x12 --*/ /*-- 宽度不是8的倍数,现调整为:宽度x高度=16x12 --*/

\五\ 0x08,0x80,0x10,0x80,0x10,0x80,0x10,0x80,0xFF,0xE0,0x00,0x00,

/*-- 文字: 六 --*/

/*-- 宋体9; 此字体下对应的点阵为:宽x高=12x12 --*/ /*-- 宽度不是8的倍数,现调整为:宽度x高度=16x12 --*/

\六\ 0x11,0x00,0x20,0x80,0x20,0x80,0x40,0x40,0x80,0x40,0x00,0x00,

/*-- 文字: 日 --*/

/*-- 宋体9; 此字体下对应的点阵为:宽x高=12x12 --*/

15

安徽财经大学信息工程学院本科课程论文(设计)

/*-- 宽度不是8的倍数,现调整为:宽度x高度=16x12 --*/

\日\ 0x20,0x40,0x20,0x40,0x20,0x40,0x3F,0xC0,0x20,0x40,0x00,0x00,

/*-- 文字: 当 --*/

/*-- 宋体9; 此字体下对应的点阵为:宽x高=12x12 --*/ /*-- 宽度不是8的倍数,现调整为:宽度x高度=16x12 --*/

\当\ 0x00,0x40,0x7F,0xC0,0x00,0x40,0x00,0x40,0xFF,0xC0,0x00,0x00,

/*-- 文字: 前 --*/

/*-- 宋体9; 此字体下对应的点阵为:宽x高=12x12 --*/ /*-- 宽度不是8的倍数,现调整为:宽度x高度=16x12 --*/

\前\ 0x79,0x40,0x49,0x40,0x79,0x40,0x48,0x40,0x59,0xC0,0x00,0x00,

/*-- 文字: 温 --*/

/*-- 宋体9; 此字体下对应的点阵为:宽x高=12x12 --*/ /*-- 宽度不是8的倍数,现调整为:宽度x高度=16x12 --*/

\温\ 0x5F,0xC0,0x95,0x40,0x95,0x40,0x95,0x40,0xBF,0xE0,0x00,0x00,

/*-- 文字: 度 --*/

/*-- 宋体9; 此字体下对应的点阵为:宽x高=12x12 --*/ /*-- 宽度不是8的倍数,现调整为:宽度x高度=16x12 --*/

\度\ 0x40,0x00,0x5F,0x80,0x45,0x00,0x87,0x00,0xB8,0xE0,0x00,0x00,

/*-- 文字: : --*/

/*-- 宋体9; 此字体下对应的点阵为:宽x高=12x12 --*/ /*-- 宽度不是8的倍数,现调整为:宽度x高度=16x12 --*/

\:\ 0x00,0x00,0x0C,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

/*-- 文字: ℃ --*/

/*-- 宋体9; 此字体下对应的点阵为:宽x高=12x12 --*/ /*-- 宽度不是8的倍数,现调整为:宽度x高度=16x12 --*/

\℃\ 0x10,0x00,0x10,0x40,0x08,0x40,0x07,0x80,0x00,0x00,0x00,0x00, };

uchar Status_BIT_01(void) // 状态位STA1,STA0判断(读写指令和读写数据) {

uchar i;

16

安徽财经大学信息工程学院本科课程论文(设计)

for(i=5;i>0;i--) {

if((LCMCW & 0x03) == 0x03) break; }

return i; // 若返回零,说明错误 }

uchar Status_BIT_3(void) // 状态位ST3判断(数据自动写状态) {

uchar i;

for(i=5;i>0;i--) {

if((LCMCW & 0x08) == 0x08) break; }

return i; // 若返回零,说明错误 }

uchar LCD_Write_Command_P2(uchar cmd,uchar para1,uchar para2) // 写双参数的指令 {

if(Status_BIT_01() == 0) return 1; LCMDW = para1;

if(Status_BIT_01() == 0) return 2; LCMDW = para2;

if(Status_BIT_01() == 0) return 3; LCMCW = cmd;

return 0; // 返回0成功 }

uchar LCD_Write_Command_P1(uchar cmd,uchar para1) // 写单参数的指令 {

if(Status_BIT_01() == 0) return 1; LCMDW = para1;

if(Status_BIT_01() == 0) return 2; LCMCW = cmd;

return 0; // 返回0成功 }

uchar LCD_Write_Command(uchar cmd) // 写无参数的指令 {

if(Status_BIT_01() == 0)

17

安徽财经大学信息工程学院本科课程论文(设计)

return 1; LCMCW = cmd;

return 0; // 返回0成功 }

uchar LCD_Write_Data(uchar dat) // 写数据 {

if(Status_BIT_3() == 0) return 1; LCMDW = dat;

return 0; // 返回0成功 }

uchar LCD_Read_Data() // 读数据 {

if(Status_BIT_01() == 0) return 1;

return LCMDW; }

void Set_LCD_Pos(uchar row, uchar col)reentrant//设置当前地址 {

uint Pos;

Pos = row * LCD_WIDTH+ col;

LCD_Write_Command_P2(LC_ADD_POS,Pos % 256,Pos / 256); //修改 gCurRow = row; gCurCol = col; }

// 清屏

void cls(void) {

uint i;

LCD_Write_Command_P2(LC_ADD_POS,0x00,0x00); // 置地址指针 LCD_Write_Command(LC_AUT_WR); // 自动写 for(i=0;i<0x2000;i++) {

Status_BIT_3();

LCD_Write_Data(0x00); // 写数据 }

LCD_Write_Command(LC_AUT_OVR); // 自动写结束

LCD_Write_Command_P2(LC_ADD_POS,0x00,0x00); // 重置地址指针 gCurRow = 0; // 置地址指针存储变量 gCurCol = 0;

18

安徽财经大学信息工程学院本科课程论文(设计)

}

// LCM 初始化

uchar LCD_Initialise() {

RESET=0; RESET=1;

LCD_Write_Command_P2(LC_TXT_STP,0x00,0x00); // 文本显示区首地址 LCD_Write_Command_P2(LC_TXT_WID,LCD_WIDTH,0x00); // 文本显示区宽度 LCD_Write_Command_P2(LC_GRH_STP,0x00,0x00); // 图形显示区首地址 LCD_Write_Command_P2(LC_GRH_WID,LCD_WIDTH,0x00); // 图形显示区宽度 LCD_Write_Command_P1(LC_CGR_POS,CGRAMSTART >> 11); LCD_Write_Command(LC_CUR_SHP | 0x01); // 光标形状 LCD_Write_Command(LC_MOD_OR); // 显示方式设置 LCD_Write_Command(LC_DIS_SW |0x08); grhome = GRSTART;

txthome = TXTSTART;

return 0; }

// ASCII及汉字显示函数

uchar Display_Str_at_xy(uchar x,uchar y,char *fmt) reentrant {

char c1,c2,cData; uchar i=0,j,uLen; uchar k;

uLen=strlen(fmt);

while(i

c1 = fmt[i]; c2 = fmt[i+1];

Set_LCD_Pos(y,x/8); if(c1 >= 0) {

// ASCII

if(c1 < 0x20) {

switch(c1) {

19

安徽财经大学信息工程学院本科课程论文(设计)

case CR:

case LF: // 回车或换行 i++; x=0;

if(y < 112)y+=HZ_CHR_HEIGHT; continue; case BS: // 退格 i++;

if(y>ASC_CHR_WIDTH)y-=ASC_CHR_WIDTH; cData = 0x00; break; } }

for(j=0;j

if(c1 >= 0x1f) {

cData= ASC_MSK[(c1-0x1f)*ASC_CHR_HEIGHT+j]; Set_LCD_Pos(y+j,x/8); if((x%8)==0) {

LCD_Write_Command(LC_AUT_WR); // 写数据 LCD_Write_Data(cData);

LCD_Write_Command(LC_AUT_OVR); } else

OutToLCD(cData,x,y+j); }

Set_LCD_Pos(y+j,x/8); }

if(c1 != BS) // 非退格 x+=ASC_CHR_WIDTH; } else

{ // 中文

for(j=0;j

if(c1 == GB_16[j].Index[0] && c2 == GB_16[j].Index[1]) break; }

for(k=0;k

20

安徽财经大学信息工程学院本科课程论文(设计)

Set_LCD_Pos(y+k,x/8);

if(j < sizeof(GB_16)/sizeof(GB_16[0])) {

c1=GB_16[j].Msk[k*2]; c2=GB_16[j].Msk[k*2+1]; }

else c1=c2=0;

if((x%8)==0) {

LCD_Write_Command(LC_AUT_WR); LCD_Write_Data(c1);

LCD_Write_Command(LC_AUT_OVR); } else

OutToLCD(c1,x,y+k);

if(((x+2+HZ_CHR_WIDTH/2)%8)==0) {

LCD_Write_Command(LC_AUT_WR); LCD_Write_Data(c2);

LCD_Write_Command(LC_AUT_OVR); } else

OutToLCD(c2,x+2+HZ_CHR_WIDTH/2,y+k); }

x+=HZ_CHR_WIDTH; i++; } i++; }

return uLen; }

void OutToLCD(uchar Dat,uchar x,uchar y) {

uchar dat1,dat2,a,b;

b=x%8;a=8-b;

Set_LCD_Pos(y,x/8);

LCD_Write_Command(LC_AUT_RD); // 读数据 dat1=LCD_Read_Data(); dat2=LCD_Read_Data();

dat1=(dat1&(0xFF<>b);

21

安徽财经大学信息工程学院本科课程论文(设计)

dat2=(dat2&(0xFF>>b))|(Dat<

LCD_Write_Command(LC_AUT_WR); LCD_Write_Data(dat1); LCD_Write_Data(dat2);

LCD_Write_Command(LC_AUT_OVR); }

/*void SetShowMode(uchar newShowModeSW) //设置为显示模式 {

ShowModeSW=newShowModeSW;

fnPR12(LC_DIS_SW | newShowModeSW); } */

/**********************************

//= 函数原型: Pixel(unsigned char PointX,unsigned char PointY, bit Mode) //= 功 能: 在指定坐标位置显示一个点 //= 参 数: 坐标,显示点或清除点 //= 返 回 值:

//= 函数性质:私有函数

//= 如果显示屏超过了256*256,请修改这个函数 PointX,PointY的类型 //= Mode 1:显示 0:清除该点

**********************************/

void Pixel(unsigned char x,unsigned char y, uchar Mode) {

unsigned char Start_Addr,dat; Start_Addr=7-(x%8);

dat=LC_BIT_OP|Start_Addr; //生产位操作命令画点的数据 if(Mode) dat|=0x08; Set_LCD_Pos(y,x/8);

LCD_Write_Command(LC_BIT_OP|dat); // 写数据 }

void Exchange(uchar *a,uchar *b) {

uchar t;

t = *a;*a = *b;*b =t; }

/**********************************

//= 函数原型: void line( unsigned char x1, unsigned char y1, unsigned char x2, unsigned char y2, bit Mode)

22

安徽财经大学信息工程学院本科课程论文(设计)

//= 功 能: 划线函数

//= 参 数: 坐标1,坐标2,显示点或清除点 //= 返 回 值:

//= 函数性质:私有函数

//= 其它:显示点阵不超过255*255

/**********************************/

void Line( unsigned char x1,unsigned char y1, unsigned char x2,unsigned char y2, uchar Mode) reentrant {

unsigned char x,y; float k,b;

if( abs(y1-y2) <= abs(x1-x2) ) // |k|<=1 {

k=(float)(y2-y1) / (float)(x2-x1) ; b=y1-k*x1; if( x1 > x2 )

Exchange(&x1,&x2); for(x=x1;x<=x2;x++) {

y=(uchar)(k*x+b);

Pixel(x, y, Mode); } }

else {

k = (float)(x2-x1) / (float)(y2-y1); b = x1 - k*y1; if(y1 > y2)

Exchange(&y1,&y2);

for(y=y1;y<=y2;y++) {

x=(uchar)(k*y+b);

Pixel(x, y, Mode); } } }

//-------------------------------Main.c---------------------------------------------------------------------------

#include #include #include extern void LCD_Initialise();

23

安徽财经大学信息工程学院本科课程论文(设计)

extern void Display_Str_at_xy(uchar x,uchar y,char *Buffer)

reentrant;

extern void Read_Temperature(); extern void Delay (uint num);

extern float Build_Temperature_float(); extern uchar Current_Temp_Display_Buffer[]; extern bit DS18B20_IS_OK; sbit SDA = P1^0;//DS1302数据线 sbit CLK = P1^1;//DS1302时钟线 sbit RST = P1^2;//DS1302复位线 uchar tCount = 0; //星期的中文对照表

char code *WeeksTable[] = {“日”,“一”,“二”,“三”,“四”,“五”,

“六”};

//所读取的日期时间 uchar DateTime [7]; char dat_str[13];

//------------------------------------------------------------- //向DS1302写入一字节

//------------------------------------------------------------- void Write_A_Byte_To_DS1302(uchar x) {

uchar i;

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

SDA = x & 1;CLK = 1;CLK = 0;x > > = 1; } }

//------------------------------------------------------------- //从DS1302读取一字节

24

安徽财经大学信息工程学院本科课程论文(设计)

//------------------------------------------------------------- uchar Get_A_Byte_FROM_DS1302() {

uchar i,b.t;

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

b > > = 1;t = SDA;b | = t < < 7;CLK = 1;CLK = 0; }

//BCD码转换

Return b / 16 * 10 + b * % 16; }

//------------------------------------------------------------- //从DS1302指定位置读数据

//------------------------------------------------------------- uchar Read_Date(uchar addr) {

uchar dat;

RST = 0;CLK = 0;RST = 1; Write_A_Byte_To_DS1302 (addr); dat = Get_A_Byte_FROM_DS1302(); CLK = 1;RST = 0; return dat; }

//------------------------------------------------------------- //读取当前日期时间

//------------------------------------------------------------- Void GetTime () {

uchar i;

for (i = 0;i < 7;i + +)

25

安徽财经大学信息工程学院本科课程论文(设计)

{

DateTime[i] = Read_Date(0x81 + 2*1); } }

//------------------------------------------------------------- //定时器0每秒刷新LCD显示

//------------------------------------------------------------- void T0_INT() interrupt 1 {

TH0 = - 50000 / 256; TL0 = - 50000 % 256;

if (++tCount ! = 20) return; GetTime(); tCount = 0; //显示年月日

sprintf(dat_str,“20%c%c年%c%c月%c%c日”,DateTime[6]/10+‘0’,

DateTime[6]+‘0’,DateTime[4]/10+‘0’, DateTime[4]+‘0’,DateTime[3]/10+‘0’,DateTime[3]+‘0’);

Display_Str_at_xy(16,24,dat_str); //显示星期

sprintf(dat_str,“星期%s”,WeeksTable[DateTime[5] – 1]); Display_Str_at_xy(16,44,dat_str); //星期时分秒

sprintf(dat_str,“%c%c时%c%c分%c%c秒”,DateTime[2]/10+‘0’,

DateTime[2]+‘0’,DateTime[1]/10+‘0’, DateTime[1]+‘0’,DateTime[0]/10+‘0’, DateTime[0]+‘0’);

Display_Str_at_xy(16,64,dat_str); //读取并显示当前温度 Read_Temperature(); if (DS18B20_IS_OK)

26

安徽财经大学信息工程学院本科课程论文(设计)

{

sprintf (dat_str,“%4.1f”,Build_Temperature_float()); Display_Str_at_xy(16,104,dat_str); } }

//------------------------------------------------------------- //主程序

//------------------------------------------------------------- Void main() {

LCD_Initialise(); //液晶初始化 Read_Temperature(); //读取温度 Delay(50000); Delay(50000);

IE = 0x82; //允许T0中断℃ TH0 = - 50000 / 256; TL0 = - 50000 % 256; TR0 = 1;

Display_Str_at_xy(16,88,“当前温度:”); Display_Str_at_xy(60,104,“℃”); while(1); }

5 总体设计电路图

当一切电路都准备得当时,液晶屏上会显示当前时间、日期和模拟温度。而当通过改变DS18B20所测量的温度时,显示温度也会跟着改变。总体电路原理图如下:

27

安徽财经大学信息工程学院本科课程论文(设计)

6 安装与调试

6.1调试过程

将所编的软件程序输入到Keil u Vision2仿真软件中通过相应的编译来调试程序。具体步骤如下:

(1)启动uVision2,新建一个项目文件并从器件库中选择一个器件。如图所示

28

安徽财经大学信息工程学院本科课程论文(设计)

uVison2 界面

(2)新建一个源文件并把它加入到项目中。如图所示

新建项目对话框

(3)增加并设置选择的器件的启动代码。如图所示

29

安徽财经大学信息工程学院本科课程论文(设计)

选择器件

(4)针对目标硬件设置工具选项。

(5)编译项目并生成可编程PROM的HEX文件。 (6)Debug选项卡的设置,如图

Debug选项卡

这里有两类仿真形式可选:Use Simulator 和Use:Keil Monitor-51 Driver,前一种是纯软件仿真,后一种是带有Monitor-51目标仿真器的仿真。

30

安徽财经大学信息工程学院本科课程论文(设计)

本课题选择的是后一种,进入Target设置,选择串行口,波特率选择38400,这样就设置好了。

(7)开始调试

在实验箱上连接好电路。打开相关模块的电源开关(关闭不相关模块的电源开关),打开总电源开关。按下按钮@开始调试。按下复位开关将停止运行。如图所示。

调试

6.2电路仿真

利用Proteus仿真软件对设计好的电路原理图进行仿真,效果如下图所示。

31

安徽财经大学信息工程学院本科课程论文(设计)

仿真结果图

仿真结果图

32

安徽财经大学信息工程学院本科课程论文(设计)

仿真结果图

7 性能测试与分析 8 设计总结

本次课程设计是通过AT89C51单片机原理来控制电路,并利用C语言进行程序设计。基于选题要求,我们设计了温度测量、时间测量、LCD显示功能。硬件方面我们使用了PG160128ALCD、DS1302、DS18B20测温元件。这种控制电路结构简单,可靠性高,应用性强;软件程序适应范围广,对于不同的客户只需要改变相应的定时常数即可。对单片机以及日常生活中的推前事件的应用有一定的借鉴价值。

该设计主要介绍单片机在带实时日历时钟的温度检测系统中的应用。它具有电路简单、功能齐全、制作成本低、性价比高,只需要提供家用电源供电即可。该仪器采用美国Intel公司八位单片机作为控制核心,配以其他进口集成电路,加上对软件的精心设计,实现了仪表智能化。

系统软件部分采用MCS—51单片机汇编语言精心编写,其数据流程清晰地反

33

安徽财经大学信息工程学院本科课程论文(设计)

映在程序中,增强了软件的可读性,便于改进和扩充,从而为其实用提供更好的软件支持。

9 实验心得与体会

经过一个多星期的努力和付出的汗水,终于把课程设计做完了。真是不容易呀,一份耕耘,一份收获。这次课程设计给了我许多收获。本次课程设计后我对数字电子技术有了更进一步的熟悉,实际操作和课本上的知识有很大联系,但又高于课本,一个看似很简单的电路,要动手把它设计出来就比较困难了,因为是设计要求我们在以后的学习中注意这一点,要把课本上所学到的知识和实际联系起来,同时通过本次电路的设计,不但巩固了所学知识,也使我们把理论与实践从真正意义上结合起来,增强了学习的兴趣,考验了我们借助互联网络搜集、查阅相关文献资料,和组织材料的综合能力。不仅这样,还使我熟悉掌握了WORD文档的编辑。

通过设计LCD160128中文显示温度及时间的课题,让我对数字逻辑这门课有了更深刻的了解,对电子器件的认识也不再停留在字面上,实现了从理论到实践的飞跃。我了解到理论和实践是分不开的。只有理论不行,当你面对一堆元气件时,你会茫然不知所措;可只懂实践也不行,当别人问你为什么会这样,怎么样才算正确,你如果说凭感觉是不足以服人的。学习的目的就是去应用,只有实践才能将书本知识转化为实用的技能。

34

安徽财经大学信息工程学院本科课程论文(设计)

参考文献

[1] 阎石主编:《数字电子技术基础》[M],北京,高等教育出版社,2006.5 [2] 康华光主编:《电子技术基础》 [M],北京,高等教育出版社,1999.6 [3]谭浩强主编:《C语言程序设计》[M],北京,清华大学出版社,2005.7

[4]高卫东主编:《51单片机原理与实践》[M],北京,北京航空航天大学出版社,2011.1 [5]彭伟主编:《单片机C语言程序设计实训100例》[M],北京,电子工业出版社,2009.6

35

本文来源:https://www.bwwdw.com/article/mhj6.html

Top