doc

160128中文显示温度与时间(专业设计论文)

  • 1星
  • 日期: 2018-06-25
  • 大小: 1.16MB
  • 所需积分:1分
  • 下载次数:1
  • favicon收藏
  • rep举报
  • 分享
  • free评论
标签: DS1302AT89C51DS18B20

160128中文显示温度与时间。专业设计论文,安徽财经大学。

本课程设计是利用单片机AT89C51、时钟芯片DS1302、温度传感器DS18B20以及160*128的液晶组合设计的一款模拟万年历,实现简单的显示温度、时间和日期的功能。

文档内容节选

pic 专业综合课程 设计论文 题 目 160128中文显示温度与时间 学 院 信息工程学院 专 业 电子信息工程 班 级 08 信工2班 学 号 200883080 姓 名 指导老师 老师 2011 年 10 月 摘 要 本课程设计是利用单片机AT89C51时钟芯片DS1302温度传感器DS18B20以及1601 28的液晶组合设计的一款模拟万年历,实现简单的显示温度时间和日期的功能时钟 芯片利用单片机的晶振提供脉冲以控制内部计时器,读取当前的日期与时间,并通过接 口传输给单片机予以处理同时温度传感器将产生的模拟温度传送给单片机单片机将 所接受的数据传输出到显示器160128上,以实现温度日期与时间的同时显示该系统 主要是由时钟读取模块当前温度读取模块温度与时间显示模块和控制电路四部分组 成时钟读取部分利用时......

[pic] 专业综合课程 设计论文 题 目 160128中文显示温度与时间 学 院 信息工程学院 专 业 电子信息工程 班 级 08 信工(2)班 学 号 200883080 姓 名 *** 指导老师 ** 老师 2011 年 10 月 摘 要 本课程设计是利用单片机AT89C51、时钟芯片DS1302、温度传感器DS18B20以及160*1 28的液晶组合设计的一款模拟万年历,实现简单的显示温度、时间和日期的功能。时钟 芯片利用单片机的晶振提供脉冲以控制内部计时器,读取当前的日期与时间,并通过接 口传输给单片机予以处理;同时温度传感器将产生的模拟温度传送给单片机。单片机将 所接受的数据传输出到显示器160128上,以实现温度、日期与时间的同时显示。该系统 主要是由时钟读取模块、当前温度读取模块、温度与时间显示模块和控制电路四部分组 成。时钟读取部分利用时钟芯片DS1302实时提供当前的时间,并传送给单片机;温度提 取是利用DS18b20读取当前室内温度;显示部分利用LCD160128液晶显示出万年历及温度 。整个系统利用C语言进行程序设计,经调试仿真效果均达到课程设计要求。 关键词:AT89C51;万年历;DS1302;DS18B20;LCD160128 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 目录 前言 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 前言 单片机是随着超大规模集成电路技术的发展而诞生的,由于它具有体积小、功能强、 性价比高等特点,所以广泛应用于电子仪表、家用电器、节能装置、军事装置、机器人 、工业控制等诸多领域,使产品小型化、智能化,既提高了产品的功能和质量,又降低 了成本,简化了设计。 本设计主要介绍单片机在带实时日历时钟的温度检测系统中的应用。它具有电路简单 、功能齐全、制作成本低、性价比高,只需要提供家用电源供电即可。该仪器采用美国 Intel公司八位单片机作为控制核心,配以其他进口集成电路,加上对软件的精心设计, 实现了仪表智能化。 系统软件部分采用MCS—51单片机C语言精心编写,其数据流程清晰地反映在程序中, 增强了软件的可读性,便于改进和扩充,从而为其实用提供更好的软件支持。 1 设计任务与要求 (1)利用单片机AT89C51控制整个设计电路。 (2)用实时时钟芯片DS1302对当前时间进行计时。 (3)用温度传感器DS18B20检测当前温度。 (4)在160128LCD上显示当前时间和温度。 2 总体框图 2.1 设计方案 (1)本课题所设计的显示温度与时间的液晶屏是将由单片机转送的时间、温度及日 期显示出来。 (2)时钟芯片DS1302可以实时检测当前时间。 (3)温度传感器DS18b20可以模拟外界温度的变化。当温度变化时,160128显示的数 据也会实时改变。 2.2 电路原理图 [pic] 图2.1 3 实验元器件选择及其功能 3.1实验器件 AT89C51 1片 DS1302 1片 DS18B20 1片 LCD160128 1块 3.2主要器件极其相关功能 (1)AT89C51 MCS51系列单片机是美国Intel公司于1980年推出的一种8位单片机系列。该系列的基 本型产品是8051、8031和8751。这3种产品之间的区别只是在片内程序存储器方面。805 1的片内程序存储器(ROM)是掩膜型的,即在制造芯片时已将应用程序固化进去;8031 片内没有程序存储器;8751内部包含有用作程序存储器的4KB的EPROM。由于8051的编程 需要制造商的支持,8751的价格昂贵,因此8031获得了更为广泛的使用。 MCS51系列单片机优异的性能/价格比使得它从面世以来就获得用户的认可。Intel公 司把这种单片机的内核,即8051内核,以出售或互换专利的方式授权给一些公司,如At mel、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 单片机内部结构如图所示: [pic] CPU是单片机内部的核心部件,是一个8位二进制数的中央处理单元,主要由运算器、 控制器和寄存器阵列构成。 (2)DS1302的结构与工作原理 DS1302 是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月 、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。采用 三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数 据。DS1302内部有一个31×8的用于临时性存放数据的RAM寄存器。DS1302是DS1202的升级 产品,与DS1202兼容,但增加了主电源/后背电源双电源引脚,同时提供了对后背电源进 行涓细电流充电的能力。 DS1302的外部引脚功能所示: |[pic] |X1,X2 |32.768kHz晶振引 | |DS1302封装图 | |脚 | | |GND |地 | | |RST |复位 | | |I/O |数据输入/输出 | | |SCLK |串行时钟 | | |VCC1 |电池引脚 | | |VCC2 |主电源引脚 | 下图为内部寄存器的控制命令: |寄存器名称 |7 |6 |5 |4 |3 |2 |1 |0 | | |1 |RAM/CK |A4 |A3 |A2 |A1 |A0 |RD/W | |秒寄存器 |1 |0 |0 |0 |0 |0 |0 | | |分寄存器 |1 |0 |0 |0 |0 |0 |1 | | |小时寄存器 |1 |0 |0 |0 |0 |1 |0 | | |日寄存器 |1 |0 |0 |0 |0 |1 |1 | | |月寄存器 |1 |0 |0 |0 |1 |0 |0 | | |星期寄存器 |1 |0 |0 |0 |1 |0 |1 | | |年寄存器 |1 |0 |0 |0 |1 |1 |0 | | |写保护寄存器 |1 |0 |0 |0 |1 |1 |1 | | |慢充电寄存器 |1 |0 |0 |1 |0 |0 |0 | | |时钟突发寄存器|1 |0 |1 |1 |1 |1 |1 | | 日历、时钟寄存器与控制字对照表 (3)DS18B20结构及工作原理 DS18B20数字温度计是DALLAS公司生产的1-Wire,即单总线器件,具有线路简单,体 积小的特点。因此用它来组成一个测温系统,具有线路简单,在一根通信线,可以挂很 多这样的数字温度计,十分方便。DS18B20 数字温度计提供 9-12 位摄氏温度测量而且有一个由高低电平触发的可编程的不因电源消失而改变的报警功能 。DS18B20通过一个单线接口发送或接受信息,因此在中央处理器和 DS18B20 之间仅需一条连接线(加上地线)。它的测温范围为-55~+125℃,并且在- 10~+85℃精度为±5℃。除此之外,DS18B20能直接从单线通讯线上汲取能量,除去了对外 部电源的需求。 每个 DS18B20 都有一个独特的 64 位序列号,从而允许多只 DS18B20 同时连在一根单线总线上;因此,很简单就可以用一个微控制器去控制很多覆盖在一大 片区域的 DS18B20。这一特性在 HVAC 环境控制、探测建筑物、仪器或机器的温度以及过程监测和控制等方面非常有用。 [pic] DS18B20引脚图 DS18B20详细引脚功能描述: |序号|名称 |引脚功能描述 | |1 |GND |地信号 | |2 |DQ |数据输入/输出引脚。开漏单总线接口引脚。当被用着在寄生电| | | |源下,也可以向器件提供电源。 | |3 |VDD |可选择的VDD引脚。当工作于寄生电源时,此引脚必须接地。 | DS18B20的使用方法   由于DS18B20采用的是1-Wire总线协议方式,即在一根数据线实现数据的双向传输 ,而对AT89S51单片机来说,硬件上并不支持单总线协议,因此,我们必须采用软件的方 法来模拟单总线的协议时序来完成对DS18B20芯片的访问。   由于DS18B20是在一根I/O线上读写数据,因此,对读写的数据位有着严格的时序要 求。DS18B20有严格的通信协议来保证各位数据传输的正确性和完整性。该协议定义了几 种信号的时序:初始化时序、读时序、写时序。所有时序都是将主机作为主设备,单总 线器件作为从设备。而每一次命令和数据的传输都是从主机主动启动写时序开始,如果 要求单总线器件回送数据,在进行写命令后,主机需启动读时序完成数据接收。数据和 命令的传输都是低位在先。 (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 外形尺寸 [pic] |项目 |尺度 |单位 | |模块体积 |129.0×102.0×12.8 |mm | |视域 |101.0×82.0 |mm | |行列点阵数 |160×128 |点 | |点距离 |0.58×0.58 |mm | |点大小 |0.54×0..54 |mm | 模块外部接口: [pic] 4 系统软硬件设计 4.1硬件电路设计 (1)时钟电路 单片机工作的时间基准是由时钟电路提供的。在单片机的XTAL1和XTAL2两个引脚间, 接一只晶振及两只电容就构成了单片机的时钟电路, 电路中的器件选择可以通过计算和实验确定,也可以参考一些典型电路的参数。电路 中,电容器C1和C2对振荡器频率有微调作用,通常的取值范围30±10pF;石英晶体选择6 MHZ或12MHZ都可以。其结果只是机器周期时间不同,影响计数器的计数初值。 [pic] (2)温度检测电路 该电路只是利用DS18B20模拟外界环境温度的变化,从而实时显示在液晶屏上。 [pic] (3)LCD160128显示电路 [pic] 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, 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' 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' 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]; }; //本例汉字点阵库 const struct typFNT_GB16 GB_16[] ={ /*-- 文字: 年 --*/ /*-- 宋体9; 此字体下对应的点阵为:宽x高=12x12 --*/ /*-- 宽度不是8的倍数,现调整为:宽度x高度=16x12 --*/ "年",0x20,0x00,0x3F,0xE0,0x42,0x00,0x82,0x00,0x3F,0xC0,0x22,0x00, 0x22,0x00,0xFF,0xE0,0x02,0x00,0x02,0x00,0x02,0x00,0x00,0x00, /*-- 文字: 月 --*/ /*-- 宋体9; 此字体下对应的点阵为:宽x高=12x12 --*/ /*-- 宽度不是8的倍数,现调整为:宽度x高度=16x12 --*/ "月",0x1F,0x80,0x10,0x80,0x10,0x80,0x1F,0x80,0x10,0x80,0x10,0x80, 0x1F,0x80,0x10,0x80,0x10,0x80,0x20,0x80,0x43,0x80,0x00,0x00, /*-- 文字: 日 --*/ /*-- 宋体9; 此字体下对应的点阵为:宽x高=12x12 --*/ /*-- 宽度不是8的倍数,现调整为:宽度x高度=16x12 --*/ "日",0x3F,0xC0,0x20,0x40,0x20,0x40,0x20,0x40,0x3F,0xC0,0x20,0x40, 0x20,0x40,0x20,0x40,0x20,0x40,0x3F,0xC0,0x20,0x40,0x00,0x00, /*-- 文字: 时 --*/ /*-- 宋体9; 此字体下对应的点阵为:宽x高=12x12 --*/ /*-- 宽度不是8的倍数,现调整为:宽度x高度=16x12 --*/ "时",0x00,0x80,0xF0,0x80,0x9F,0xE0,0x90,0x80,0x94,0x80,0xF2,0x80, 0x92,0x80,0x90,0x80,0xF0,0x80,0x90,0x80,0x03,0x80,0x00,0x00, /*-- 文字: 分 --*/ /*-- 宋体9; 此字体下对应的点阵为:宽x高=12x12 --*/ /*-- 宽度不是8的倍数,现调整为:宽度x高度=16x12 --*/ "分",0x11,0x00,0x11,0x00,0x20,0x80,0x20,0x80,0x40,0x40,0xBF,0xA0, 0x08,0x80,0x08,0x80,0x10,0x80,0x20,0x80,0xC7,0x00,0x00,0x00, /*-- 文字: 秒 --*/ /*-- 宋体9; 此字体下对应的点阵为:宽x高=12x12 --*/ /*-- 宽度不是8的倍数,现调整为:宽度x高度=16x12 --*/ "秒",0x31,0x00,0xE1,0x00,0x25,0x40,0xFD,0x20,0x25,0x20,0x75,0x00, 0x69,0x40,0xA0,0x40,0xA0,0x80,0x23,0x00,0x3C,0x00,0x00,0x00, /*-- 文字: 星 --*/ /*-- 宋体9; 此字体下对应的点阵为:宽x高=12x12 --*/ /*-- 宽度不是8的倍数,现调整为:宽度x高度=16x12 --*/ "星",0x3F,0xC0,0x20,0x40,0x3F,0xC0,0x20,0x40,0x3F,0xC0,0x24,0x00, 0x3F,0xC0,0x44,0x00,0xBF,0xC0,0x04,0x00,0xFF,0xE0,0x00,0x00, /*-- 文字: 期 --*/ /*-- 宋体9; 此字体下对应的点阵为:宽x高=12x12 --*/ /*-- 宽度不是8的倍数,现调整为:宽度x高度=16x12 --*/ "期",0x49,0xE0,0xFD,0x20,0x49,0x20,0x79,0xE0,0x49,0x20,0x79,0x20, 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,0x40,0xFF,0xE0, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*-- 文字: 二 --*/ /*-- 宋体9; 此字体下对应的点阵为:宽x高=12x12 --*/ /*-- 宽度不是8的倍数,现调整为:宽度x高度=16x12 --*/ "二",0x00,0x00,0x00,0x80,0x7F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xE0,0x00,0x00,0x00,0x00, /*-- 文字: 三 --*/ /*-- 宋体9; 此字体下对应的点阵为:宽x高=12x12 --*/ /*-- 宽度不是8的倍数,现调整为:宽度x高度=16x12 --*/ "三",0x00,0x80,0x7F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x80, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0xFF,0xE0,0x00,0x00, /*-- 文字: 四 --*/ /*-- 宋体9; 此字体下对应的点阵为:宽x高=12x12 --*/ /*-- 宽度不是8的倍数,现调整为:宽度x高度=16x12 --*/ "四",0x7F,0xE0,0x49,0x20,0x49,0x20,0x49,0x20,0x49,0x20,0x49,0x20, 0x51,0x20,0x61,0xE0,0x40,0x20,0x7F,0xE0,0x40,0x20,0x00,0x00, /*-- 文字: 五 --*/ /*-- 宋体9; 此字体下对应的点阵为:宽x高=12x12 --*/ /*-- 宽度不是8的倍数,现调整为:宽度x高度=16x12 --*/ "五",0x7F,0xC0,0x08,0x00,0x08,0x00,0x08,0x00,0x7F,0x80,0x08,0x80, 0x08,0x80,0x10,0x80,0x10,0x80,0x10,0x80,0xFF,0xE0,0x00,0x00, /*-- 文字: 六 --*/ /*-- 宋体9; 此字体下对应的点阵为:宽x高=12x12 --*/ /*-- 宽度不是8的倍数,现调整为:宽度x高度=16x12 --*/ "六",0x08,0x00,0x04,0x00,0x04,0x00,0xFF,0xE0,0x00,0x00,0x12,0x00, 0x11,0x00,0x20,0x80,0x20,0x80,0x40,0x40,0x80,0x40,0x00,0x00, /*-- 文字: 日 --*/ /*-- 宋体9; 此字体下对应的点阵为:宽x高=12x12 --*/ /*-- 宽度不是8的倍数,现调整为:宽度x高度=16x12 --*/ "日",0x3F,0xC0,0x20,0x40,0x20,0x40,0x20,0x40,0x3F,0xC0,0x20,0x40, 0x20,0x40,0x20,0x40,0x20,0x40,0x3F,0xC0,0x20,0x40,0x00,0x00, /*-- 文字: 当 --*/ /*-- 宋体9; 此字体下对应的点阵为:宽x高=12x12 --*/ /*-- 宽度不是8的倍数,现调整为:宽度x高度=16x12 --*/ "当",0x04,0x00,0x44,0x40,0x24,0x80,0x05,0x00,0xFF,0xC0,0x00,0x40, 0x00,0x40,0x7F,0xC0,0x00,0x40,0x00,0x40,0xFF,0xC0,0x00,0x00, /*-- 文字: 前 --*/ /*-- 宋体9; 此字体下对应的点阵为:宽x高=12x12 --*/ /*-- 宽度不是8的倍数,现调整为:宽度x高度=16x12 --*/ "前",0x11,0x00,0x0A,0x40,0xFF,0xE0,0x00,0x00,0x79,0x40,0x49,0x40, 0x79,0x40,0x49,0x40,0x79,0x40,0x48,0x40,0x59,0xC0,0x00,0x00, /*-- 文字: 温 --*/ /*-- 宋体9; 此字体下对应的点阵为:宽x高=12x12 --*/ /*-- 宽度不是8的倍数,现调整为:宽度x高度=16x12 --*/ "温",0x8F,0xC0,0x48,0x40,0x0F,0xC0,0x88,0x40,0x4F,0xC0,0x40,0x00, 0x5F,0xC0,0x95,0x40,0x95,0x40,0x95,0x40,0xBF,0xE0,0x00,0x00, /*-- 文字: 度 --*/ /*-- 宋体9; 此字体下对应的点阵为:宽x高=12x12 --*/ /*-- 宽度不是8的倍数,现调整为:宽度x高度=16x12 --*/ "度",0x02,0x00,0x7F,0xE0,0x48,0x80,0x7F,0xE0,0x48,0x80,0x4F,0x80, 0x40,0x00,0x5F,0x80,0x45,0x00,0x87,0x00,0xB8,0xE0,0x00,0x00, /*-- 文字: : --*/ /*-- 宋体9; 此字体下对应的点阵为:宽x高=12x12 --*/ /*-- 宽度不是8的倍数,现调整为:宽度x高度=16x12 --*/ ":",0x00,0x00,0x00,0x00,0x0C,0x00,0x0C,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x0C,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*-- 文字: ℃ --*/ /*-- 宋体9; 此字体下对应的点阵为:宽x高=12x12 --*/ /*-- 宽度不是8的倍数,现调整为:宽度x高度=16x12 --*/ "℃",0x00,0x00,0xE7,0x40,0xA8,0xC0,0xF0,0x40,0x10,0x00,0x10,0x00, 0x10,0x00,0x10,0x40,0x08,0x40,0x07,0x80,0x00,0x00,0x00,0x00, }; uchar Status_BIT_01(void) // 状态位STA1,STA0判断(读写指令和读写数据) { uchar i; 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) 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; } // 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= 0) { // ASCII if(c1 < 0x20) { switch(c1) { 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= 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>b); dat2=(dat2&(0xFF>>b))|(Dat< 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(); 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读取一字节 //------------------------------------------------------------- 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 + +) { 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]%10+‘0’,DateTime[4]/10+‘0’, DateTime[4]%10+‘0’,DateTime[3]/10+‘0’,DateTime[3]%10+‘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]%10+‘0’,DateTime[1]/10+‘0’, DateTime[1]%10+‘0’,DateTime[0]/10+‘0’, DateTime[0]%10+‘0’); Display_Str_at_xy(16,64,dat_str); //读取并显示当前温度 Read_Temperature(); if (DS18B20_IS_OK) { 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所测量的温度时,显示温度也会跟着改变。总体电路原理图如下: [pic] 6 安装与调试 6.1调试过程 将所编的软件程序输入到Keil u Vision2仿真软件中通过相应的编译来调试程序。具体步骤如下: (1)启动uVision2,新建一个项目文件并从器件库中选择一个器件。如图所示 [pic] uVison2 界面 (2)新建一个源文件并把它加入到项目中。如图所示 [pic] 新建项目对话框 (3)增加并设置选择的器件的启动代码。如图所示 [pic] 选择器件 (4)针对目标硬件设置工具选项。 (5)编译项目并生成可编程PROM的HEX文件。 (6)Debug选项卡的设置,如图 [pic] Debug选项卡 这里有两类仿真形式可选:Use Simulator 和Use:Keil Monitor-51 Driver,前一种是纯软件仿真,后一种是带有Monitor-51目标仿真器的仿真。 本课题选择的是后一种,进入Target设置,选择串行口,波特率选择38400,这样就 设置好了。 (7)开始调试 在实验箱上连接好电路。打开相关模块的电源开关(关闭不相关模块的电源开关), 打开总电源开关。按下按钮@开始调试。按下复位开关将停止运行。如图所示。 [pic] 调试 6.2电路仿真 利用Proteus仿真软件对设计好的电路原理图进行仿真,效果如下图所示。 [pic]仿真结果图 [pic] 仿真结果图 [pic]仿真结果图 7 性能测试与分析 8 设计总结 本次课程设计是通过AT89C51单片机原理来控制电路,并利用C语言进行程序设计。基 于选题要求,我们设计了温度测量、时间测量、LCD显示功能。硬件方面我们使用了PG1 60128ALCD、DS1302、DS18B20测温元件。这种控制电路结构简单,可靠性高,应用性强; 软件程序适应范围广,对于不同的客户只需要改变相应的定时常数即可。对单片机以及 日常生活中的推前事件的应用有一定的借鉴价值。 该设计主要介绍单片机在带实时日历时钟的温度检测系统中的应用。它具有电路简单 、功能齐全、制作成本低、性价比高,只需要提供家用电源供电即可。该仪器采用美国 Intel公司八位单片机作为控制核心,配以其他进口集成电路,加上对软件的精心设计, 实现了仪表智能化。 系统软件部分采用MCS—51单片机汇编语言精心编写,其数据流程清晰地反映在程序中 ,增强了软件的可读性,便于改进和扩充,从而为其实用提供更好的软件支持。 9 实验心得与体会 经过一个多星期的努力和付出的汗水,终于把课程设计做完了。真是不容易呀,一份 耕耘,一份收获。这次课程设计给了我许多收获。本次课程设计后我对数字电子技术有 了更进一步的熟悉,实际操作和课本上的知识有很大联系,但又高于课本,一个看似很 简单的电路,要动手把它设计出来就比较困难了,因为是设计要求我们在以后的学习中 注意这一点,要把课本上所学到的知识和实际联系起来,同时通过本次电路的设计,不 但巩固了所学知识,也使我们把理论与实践从真正意义上结合起来,增强了学习的兴趣 ,考验了我们借助互联网络搜集、查阅相关文献资料,和组织材料的综合能力。不仅这 样,还使我熟悉掌握了WORD文档的编辑。 通过设计LCD160128中文显示温度及时间的课题,让我对数字逻辑这门课有了更深刻 的了解,对电子器件的认识也不再停留在字面上,实现了从理论到实践的飞跃。我了解 到理论和实践是分不开的。只有理论不行,当你面对一堆元气件时,你会茫然不知所措 ;可只懂实践也不行,当别人问你为什么会这样,怎么样才算正确,你如果说凭感觉是 不足以服人的。学习的目的就是去应用,只有实践才能将书本知识转化为实用的技能。 参考文献 [1] 阎石主编:《数字电子技术基础》[M],北京,高等教育出版社,2006.5 [2] 康华光主编:《电子技术基础》 [M],北京,高等教育出版社,1999.6 [3]谭浩强主编:《C语言程序设计》[M],北京,清华大学出版社,2005.7 [4]高卫东主编:《51单片机原理与实践》[M],北京,北京航空航天大学出版社,2011.1 [5]彭伟主编:《单片机C语言程序设计实训100例》[M],北京,电子工业出版社,2009.6 ----------------------- 内部8位数据总线 CPU 控制器件 2个16位定时/ 计数器 数据存储器RAM 时钟芯片 时序和振荡电路 温度传感器 LCD160128中文显示温度及时间 程序存储器 ROM 中断 系统 并行 I/O口 串行I/O口 内部中断 外部中断 P0 P1 P2 P3 RXD TXD 时钟源 外部事件
更多简介内容

推荐帖子

如何减小SRAM读写操作时的串扰
  静态存储器SRAM是一款不需要刷新电路即能保存它内部存储数据的存储器。在SRAM 存储阵列的设计中,经常会出现串扰问题发生。那么要如何减小如何减小SRAM读写操作时的串扰,以及提高SRAM的可靠性呢,下面由宇芯电子来简单介绍。   设计结果与仿真分析 图1为脉冲产生电路通过analog Environment的仿真波形图。当地址产生变化,由于信号经过的延迟路径长短不同而产生了脉冲,
是酒窝啊 移动便携
移动通信系统中常见的RF干扰原因
     可能造成射频 干扰的原因正不断增多,有些显而易见容易跟踪,有些则非常细微,很难识别发现。虽然仔细设计基站可以提供一定的保护,但多数情况下对干扰信号只能在源头处进行控制。本文讨论射频干扰的各种可能成因,了解其根源后将有助于工程师对其进行测量 跟踪和排除。   射频干扰信号会给无线通信 基站覆盖区域内的移动通信带来许多问题,如电话掉线、连接出现噪声、信道丢失以及接收语音质量很差等
Jacktang RF/无线
汽车电子的新人先看这里!
汽车电子是近几年嵌入式开发的一个热点。为了让大家能快速了解咱们汽车电子版块,小管对汽车电子板块的内容进行了精选归类整理,列在下面。欢迎大家来汽车电子板块学习,交流讨论!   一、汽车电子入门问题解答精选 汽车电子跟其他电子有啥区别 现在汽车电子用STM32单片机的多吗? 汽车中控12V电源滤波 什么是ISO连接器? 梅赛德斯奔驰乘用车使用的三相燃油泵的电源控
高进 汽车电子
基于MSP430单片机实现的无线传输模块.c
#include "Msp430X14X.h" #define CE          BIT0 #define CS          BIT1 #define PWR_UP      BIT3 #define ADDR_INDEX  8 #define ADDR_COUNT  4 void CE_HI(void); void CE_LO(void); void CS_HI(
Jacktang 【微控制器 MCU】
什么是API?什么是SPI?
Programming Interface应用程序接口,而SPI是Service Provider Interface服务商提供接口。 在JDK是有如下描述: · the API is the description of classes/interfaces/methods/... that you call and use to achieve a goal and · the SPI
火辣西米秀 【微控制器 MCU】
天线的一些知识总结
天线的输入阻抗  天线的输入阻抗是天线馈电端输入电压与输入电流的比值。天线与馈线的连接,最佳情形是天线输入阻抗是纯电阻且等于馈线的特性阻抗,这时馈线终端没有功率反射,馈线上没有驻波,天线的输入阻抗随频率的变化比较平缓。天线的匹配工作就是消除天线输入阻抗中的电抗分量,使电阻分量尽可能地接近馈线的特性阻抗。匹配的优劣一般用四个参数来衡量即反射系数,行波系数,驻波比和回波损耗,四个参数之间有固定的数值
蓝先生 RF/无线

评论

登录/注册

意见反馈

求资源

回顶部

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版 版权声明

北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 EEWORLD.com.cn, Inc. All rights reserved
$(function(){ var appid = $(".select li a").data("channel"); $(".select li a").click(function(){ var appid = $(this).data("channel"); $('.select dt').html($(this).html()); $('#channel').val(appid); }) })