基于STCC5RC万历毕业设计_第1页
基于STCC5RC万历毕业设计_第2页
基于STCC5RC万历毕业设计_第3页
基于STCC5RC万历毕业设计_第4页
基于STCC5RC万历毕业设计_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、成都理工大学 学生毕业设计(论文)题目名称 基于STC89C52RC万年历设计 学院名称 专业名称 应用电子技术 学生姓名 班 级 指导教师 2013 年 2 月 24 日2学生毕业设计(论文)诚信承诺书本人郑重声明所呈交的毕业设计(论文)是本人在指导教师指导下进行研究撰写的成果。据我所知,除了文中特别加以标注和致谢的地方外,论文中不包含其他人已经发表或撰写过的研究成果。与我一同工作的同学及其他技术人员对本文研究所做的贡献均已在论文中作了明确的说明并表示谢意。学生本人(签名): 年 月 日3学生毕业设计(论文)任务书学生姓名:学号:专业名称:题目类型:拟定题目:指导教师姓名:职称:题目来源:基

2、本任务与要求拟解决主要问题及预期目标选题 年 月 日 月 日实施研究、收集资料 年 月 日 月 日开题报告 年 月 日 月 日撰写论文、完成初稿 年 月 日 月 日完成修改、定稿 年 月 日 月 日阶段工作计划答辩 年 月 日 月 日接受任务时间: 年 月 日 ;要求完成时间: 年 月 日学生(签名): 指导教师(签名):专业部门审核意见:专业部负责人(签字): 年 月 日填表说明:1. 题目来源:填“教师科研课题” 、 “教师拟定” 、 “学生自拟” 、 “其它” ;题目类型:填“理论研究” 、 “应用研究” 、 “技术开发” 、 “其它” 。2. 本任务书一式二份,学生、指导教师各一份,作

3、为毕业设计(论文)中期检查及完成后检查的依据。4学生毕业设计(论文)指导教师评语对 _ 学院 专业 同学所完成的题目为: 的毕业设计(论文)选题、论文结构、论据论点、工作量、工作态度、论文质量及存在不足的综合评语: 是否同意设计(论文)提交答辩: 同意; 不同意 指导教师: _ (签名) 年 月 日5学生毕业设计(论文)评审教师评审意见书对 学院 (本科、专科、专科起点本科、高职、大专)专业 所完成的题目为: 的毕业设计(论文)选题、论文结构、论点论据、工作量、论文质量及存在不足的综合评审意见: 评审教师评审成绩: 是否同意设计(论文)提交答辩: 同意; 修改后答辩; 不同意 评审教师: (签

4、名) 年 月 日6学生毕业设计(论文)答辩委员会决议书学生 (专业 ) 题目为: 的毕业设计(论文)向专业答辩委员会提供以下材料:1毕业设计(论文)共 页;文中插图 张;附图 幅。 2指导老师 对本毕业设计(论文)的评语一份。专业答辩委员会意见(论文、报告、回答问题等情况): 专业答辩委员会决议:该学生的毕业设计(论文)总评成绩: 专业答辩委员会主任(签字): 年 月 日7摘要随着社会、科技的发展,人类得知时间,从观太阳、摆钟到现在电子钟,不断研究、创新。为了在观测时间,能够了解与人类密切相关的信息,比如星期、日期等,电子时钟诞生了,它集时间、日期、星期等功能于一身,具有读取方便、显示直观、功

5、能多样、电路简洁等诸多优点,符合电子仪器仪表的发展趋势,具有广阔的市场前景。该电子时钟主要采用 STC89C52RC 单片机作为主控核心,由 DS1302 时钟芯片提供时钟、LCD 液晶显示,DS18B20 采集温度,HS0038B 接收红外遥控器发送的信号。STC89C52RC 单片机是由宏晶公司推出的,功耗小,电压可选用 46V 电压供电;DS1302 时钟芯片是美国 DALLAS 公司推出的具有涓细电流充电功能的低功耗实时时钟芯片,它可以对年、月、日、星期、时、分、秒进行计时,还具有闰年补偿等多种功能,而且 DS1302 的使用寿命长,误差小;温度采集是采用数字式温度传感器 DS18B2

6、0,红外遥控的信号采集是采用一体化接收头 HS0038B 来将红外光信号转化为电信号,数字显示是采用的LCD1602 来显示,可以同时显示年、月、日、星期、时、分、秒和温度等信息。此外,该电子时钟还可用红外遥控器进行时间校准、闹铃设置等功能。关键词关键词:时钟电路; 时钟芯片 DS1302;LCD1602 液晶; 单片机STC89C52RC;数字式温度传感器 DS18B20;一体化接收头 HS0038B;8目 录第一章 前言.91.1 引言 101.2 功能要求10第二章 系统硬件电路的设计.142.1 电路设计142.2 系统硬件概述15第三章 系统软件设计.183.1 程序设计183.2

7、程序流程图19结论.22致 谢.23参考文献.24附录(主程序源代码).259第一章 前言 随着人们生活水平的提高和生活节奏的加快,对时间的要求越来越高,精准数字计时的消费需求也是越来越多。二十一世纪的今天,最具代表性的计时产品就是电子时钟,它是近代世界钟表业界的第三次革命。第一次是摆和摆轮游丝的发明,相对稳定的机械振荡频率源使钟表的走时差从分级缩小到秒级,代表性的产品就是带有摆或摆轮游丝的机械钟或表。第二次革命是石英晶体振荡器的应用,发明了走时精度更高的石英电子钟表,使钟表的走时月差从分级缩小到秒级。第三次革命就是单片机数码计时技术的应用,使计时产品的走时日差从分级缩小到 1/600 万秒,

8、从原有传统指标计时的方式发展为人们日常更为熟悉的夜光数字显示方式,直观明了,并增加了全自动日期、星期的显示功能,它更符合消费者的生活需求!因此,电子时钟的出现带来了钟表计时业界跨跃性的进步我国生产的电子时钟有很多种,总体上来说以研究多功能电子时钟为主,使万年历除了原有的显示时间,日期等基本功能外,还具有闹铃,报警等功能。商家生产的电子万年历更从质量,价格,实用上考虑,不断的改进电子时钟的设计,使其更加的具有市场。本设计为软件,硬件相结合的一组设计。在软件设计过程中,应对硬件部分有相关了解,这样有助于对设计题目的更深了解,有助于软件设计。基本的要了解一些主要器件的基本功能和作用。除了采用集成化的

9、时钟芯片外,还有采用 MCU 的方案,利用 STC89 系列单片机制成电子控制电路,采用软件和硬件结合的方法,控制 LCD 液晶显示,分别用来显示年、月、日、时、分、秒,其最大特点是:硬件电路简单,安装方便易于实现,软件设计独特,可靠。STC89C52RC 是由宏晶公司推出的一种小型单片机。95 年出现在中国市场。其主要特点为采用 Flash 存贮器技术,降低了制造成本,其软件、硬件与 MCS-51 完全兼容,可以很快被中国广大用户接受。本文介绍了基于 STC89C52RC 单片机设计的电子时钟。首先我们在绪论中简单介绍了单片机的发展与其在中低端领域中的优势以及课题的开发意义;接着介绍了 ST

10、C89C52RC 单片机的硬件结构和本毕业设计所要外扩的 LED 液晶显示方法,并在此基础上实现了时钟基本电路的设计;然后使用单片机 C 语言进行时钟程序的设计,程序采用模块化结构,使得逻辑关系简单明了,维护方便。 101.1 引言随着电子技术的发展,人类不断研究,不断创新纪录。目前万年历已经不再局限于以书本形式出现。以计算机软件或者电子产品形式出现的万年历被称为电子万年历。与传统书本形式的万年历相比,电子万年历得到了越来越广泛的应用,采用电子时钟作为时间显示已经成为一种时尚。目前市场上各式各样的电子时钟数不胜数,但多数是只针对时间显示,功能单一不能满足人们日常生活需求。 本文提出了一种基于

11、STC89C52RC 单片机的万年历设计方案,本方案以STC89C52RC 单片机作为主控核心,与时钟芯片 DS1302、红外接收管HS0038B、LCD 显示等模块组成硬件系统。在硬件系统中设有温度检测模块和LCD 显示器,能显示丰富的信息,根据使用者的需要可以随时对时间进行校准、选择时间等,综上所述此万年历具有读取方便、显示直观、功能多样、电路简洁、成本低廉等诸多优点,符合电子仪器仪表的发展趋势,具有广阔的市场前景。1.2 功能要求本设计准备实现的功能: (1) 显示公历日期功能(年、月、日、时、分、秒以及星期) (2) 可通过红外遥控切换年、月、日及时、分、秒的显示状态(3) 可随时调校

12、年、月、日或时、分、秒(4) 可每次增、减 1 进行时间调节(5) 可动态完整显示年份,实现真正的万年历显示1.3 方案论证1.3.1 技术可行性 随着国内超大规模集成电路的出现,微处理器及其外围芯片有了迅速的发展。集成技术的最新发展之一是将 CPU 和外围芯片,如程序内存、数据存储器、11并行 I/O 口、串行 I/O 口、定时/计数器、中断控制器及其它控制部件集成在一个芯片之中,制成单片计算机。而近年来推出的一些高档单片机还包括有许多特殊功能单元,如 A/D、D/A 转换器、调制解调器、通信控制器、锁相环、DMA、浮点运算单元、PWM 控制输出单元、PWM 输出时的死区可编程控制功能等。因

13、此,只要外加一些扩展电路及必要的信道接口就可以构成各种计算机应用系统,如工业流水线控制系统、作为家用电器的主控制器、分布式控制系统的终端节点或作为其主控制节点起中继的作用、数据采集系统、自动测试系统等。单片机的出现,并在各技术领域中得到如此迅猛的发展,与单片机构成计算机应用系统所形成的下述特点有关:1、单片机构成的应用系统有较大的可靠性。这些可靠性的获得除了依靠单片机芯片本身的高可靠性以及应用有最少的联接外,还可以方便地采用软、硬件技术。2、系统配置、系统扩展较典型、规范,容易构成各种规模的应用系统,应用系统有较高的软、硬件利用系数。3、由于构成的应用系统是一个计算机系统,相当多的测、控功能由

14、软件实现,故具有柔性特征,不须改变硬件系统就能适当地改变系统功能。4、具有优异的性能、价格比。1.3.2 单片机的选择方案一:采用传统的 STC89C52RC 作为万年历的控制核心。单片机算术运算功能强,软件编程灵活、自由度比较大,可用软件编程实现各种算法和逻辑控制,并且由于其体积小、功耗低、技术成熟和成本低等优点,使其在各个领域应用广泛。方案二:采用 STC10F04 单片机,还带有非易失性 Flash 程序内存。它是一种高性能、低功耗的 8 位 CMOS 微处理芯片,市场应用最多。其主要特点如下:8KB FLASH ROM,可以擦除 10000 次以上,数据保存 10 年。由于本系统对 C

15、PU 运算速度要求很高,需要执行很复杂的运算,方案一成本比较低,适合做设计,方案二运算速度高、性能好,所以两种方案都有可12取之处。选用方案一作为主方案,方案二作为备用方案。1.3.3 显示模块的选择 方案一:使用传统的 LED 数码管显示。 数码管具有:低能耗、低损耗、低压、寿命长、耐老化、防晒、防潮、防火、防高(低)温,对外界环境要求低,易于维护,同时其精度比较高,称重轻,精确可靠,操作简单。数码管采用 BCD 编码显示数字,程序编译容易,资源占用较少。方案二: 使用液晶显示屏显示时间数字。 液晶显示屏(LCD)具有轻薄短小、低耗电量、无辐射危险,平面直角显示以及影像稳定不闪烁等优势,可视

16、面积大,画面效果好,分辨率高,抗干扰能力强等特点。但由于液晶是以点阵的模式显示各种符号,需要利用控制芯片创建字符库,编程工作量大,控制器的资源占用较多,其成本稍微偏高。在使用时,不能有静电干扰,否则易烧坏液晶的显示芯片,不易维护。 根据以上的论述,采用方案二。在本系统中,我们采用了 1602 液晶显示。1.3.4 时钟芯片的选择方案与论证方案一:直接采用单片机定时计数器提供秒信号,使用程序实现年、月、日、星期、时、分、秒计数。采用此种方案虽然减少芯片的使用,节约成本,但是,实现的时间误差较大,所以不采用此方案。方案二:采用 DS1302 时钟芯片实现时钟,DS1302 芯片是美国 DALLAS

17、公司推出的一种高性能、低功耗、带 RAM 的实时时钟芯片,它可以对年、月、日、周、时、分、秒进行计时,具有闰年补偿功能,而且精度高,工作电压为2.5V5.5V,2.5V 时电流小于 300nA。采用三线接口与 CPU 进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或 RAM 数据。根据以上的论述,采用方案二。在本系统中,我采用了 DS1302 时钟芯片。131.3.5 键盘模块的选择在对日期和时间进行切换,对日期和时间进行调节校准过程中,系统需要产生激励电流,因此需要用按键。 方案一:使用红外遥控键盘。红外遥控键盘是指直接一个 I/O 口与红外接收管输出端相连构成红外接收电路。再配以

18、红外遥控板构成一个红外收发系统,硬件配置简单灵活,软件结构复杂。 方案二:使用矩阵式键盘。矩阵式键盘是由行线和列线组成,按键位于行、列的交叉点上,行线、列线分别连接到按键开关的两端。其特点是简单且不增加成本,这种键盘适合按键数量较多的场合。 根据以上的论述,因本系统需要外观简化、使用方便,所以采用方案一红外遥控键盘。1.3.6 总体方案论证与选择按照系统设计功能的要求,初步确定系统由主控模块、时控模块、显示模块、红外接收模块和闹铃模块共 5 个模块组成,电路系统构成框图如图 1-1 所示。图 1-1 电子万年历电路系统构成框图主控芯片使用 51 系列 STC89C52RC 单片机,时钟芯片使用

19、美国 DALLAS公司推出的一种高性能、低功耗、带 RAM 的实时时钟 DS1302。采用 DS1302作为计时芯片,可以做到计时准确。更重要的是,DS1302 可以在很小电流的后备电源(2.55.5V 电源,在 2.5V 时耗电小于 300nA) ,而且 DS1302 可以编程14选择多种充电电流来对后备电源进行慢速充电,可以保证后备电源基本不耗电。显示模块采用普通的 LCD1602 显示屏。第二章 系统硬件电路的设计2.1 电路设计电子万年历电路原理图为如图 2-1 所示,系统由主控制器 STC89C52RC、时钟电路 DS1302、1602 液晶显示电路、闹铃控制电路及红外接收电路组成。

20、图 2-1 电子万年历电路原理图152.2 系统硬件概述2.2.1 主控制器 STC89C52RCSTC89C52RC 单片机是宏晶科技推出的新一代高速、低功耗、超强抗干扰的单片机,指令代码完全兼容传统 8051 单片机,12 时钟、机器周期和 6 时钟、机器周期可以任意选择。 主要特性如下:1、增强型 8051 单片机,6 时钟、机器周期和 12 时钟、机器周期可以任意选择,指令代码完全兼容传统 8051 单片机。2、工作电压:5.5V3.3V3、工作频率范围:044MHz。4、用户应用程序空间为 8K 字节5、片上集成 512 字节 RAM6、ISP(在系统可编程)/IAP(再应用可编程)

21、 ,无需专用编程器,无需专用仿真器,可通过串口(RXD/P3.0,TXD/P3.1 )直接下载用户程序,数秒即可完成一片。7、具有看门狗功能8、共 3 个 16 位定时器/计数器。及定时器 T0、T1、T29、工作温度范围:-40+85 度(工业级)/075 度(商业级)2.2.2 时钟电路 DS1302 DS1302 的性能特性:1、实时时钟,可对秒、分、时、日、周、月以及带闰年补偿的年进行比较;2、用于高速资料暂存的 31*8 位 RAM;3、最少引脚的串行 I/O;4、2.55.5V 电压工作范围;5、2.5V 时电流小于 300nA;6、用于时钟或 RAM 数据读/写的单字节或多字节数

22、据传送方式;7、简单的三线接口;8、可选的慢速充电(至 VCC1)的能力。16DS1302 工作方式简介及数据操作原理工作方式简介及数据操作原理DS1302可以对年、月、日、星期、时、分、秒进行计时,且具有闰年补偿功能,工作电压宽达2.55.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个33*8的用于临时性存放数据的RAM寄存器。DS1302 时钟芯片包括实时时钟/日历和 31 字节的静态 RAM。它经过一个简单的串行接口与微处理器通信。实时时钟/日历提供秒、分、时、日、周、月和年等信息。对于小于 31 天的月和月末的日期

23、自动进行调整,还包括闰年校正的功能。时钟的运行可以采用 24 小时或带 AM/PM 的 12 小时格式。采用三线接口与 CPU 进行同步通信,并可采用突发方式一次传送多字节的时钟信号或RAM 数据。2.2.3 显示模块显示部分采用普通的 1602 液晶显示,如图 2-1,以减少硬件电路。1602 液晶模块采用 hd 44780 控制器,hd44780 具有简单而功能较强的指令集,可以实现字符移动,闪烁等功能,1602 与单片机 MCU 通讯可采用 8 位或 4 位并行传输两种方式,hd44780 控制器由两个 8 位寄存器,指令寄存器(IR)和数据寄存器(DR)忙标志(BF) ,显示数 RAM

24、(DDRAM) ,字符发生器ROM(CGOROM)字符发生器 RAM(CGRAM) ,地址计数器 RAM(AC)。IR用于寄存指令码,只能写入不能读出,DR 用于寄存数据,数据由内部操作自动写入 DDRAM 和 CGRAM,或者暂存从 DDRAM 和 CGRAM 读出的数据,BF 为 1 时,液晶模块处于内部模式,不响应外部操作指令和接受数据,DDRAM 用来存储显示的字符,能存储 80 个字符码,CGROM 由 8 位字符码生成 5*7 点阵字符 160 中和 5*10 点阵字符 32 种 8 位字符编码和字符的对应关系。2.2.4 红外接收模块红外接收电路采用 HS0038B 红外接收头接

25、受红外线信号,硬件电路如图172-1 所示,HS0038B 是标准 IR 遥控接收器系列,支持所有主要的传输码,主要特点如下:1、光检测器及前置放大器包装在一起2、低功耗3、TTL 和 CMOS 兼容性4、改进对电场的屏蔽干扰5、连续数据传输可能(800 比特/每秒)6、对环境光抗干扰能力强HS0038B 内部框图如图 2-3 所示图 2-3 HS0038B 内部框图红外线遥控简介红外线遥控简介红外线遥控就是将基带二进制信号调制为一系列的脉冲串信号,通过红外发射管发射波长为 0.761.5m 之间的近红外线来传送控制信号的。红外发光二极管一般有黑色、深蓝、透明三种颜色。我们所使用的遥控器为普通

26、车载遥控器,采用 NEC 协议传输信号NEC 协议标准:遥控载波的频率为 38KHz(占空比为 1:3);当某个按键按下时,系统首先发射一个完整的全码,如果键按下超过 108ms 仍未松开,视为按键一直按下,接下来发射的代码(连发代码)将仅由起始码(9ms)和结束码(2.5ms)组成。 一个完整的全码=引导码+用户码+用户反码+数据码+数据反码。 其中,引导码高电平 4.5ms,低电平 4.5ms;系统码 8 位,数据码 8 位,共 32 位;其中前 16 位为用户识别码,能区别不同的红外遥控设备,防止不同机种遥控码互相干扰。后 16 位为 8 位的操作码和 8 位的操作反码,用于核对数据是否

27、接收准确。收端根据资料码做出应该执行什么动作的判断。其发射码值格式为图 2-4 所示18图 2-4 NEC 标准下的发射码表示图发射资料时 0 用“0.56ms 高电平0.565ms 低电平=1.125ms”表示,资料1 用“高电平 0.56ms低电平 1.69ms=2.25ms”表示即发射码“0”表示发射 38khz 的红外线 0.56ms,停止发射 0.565ms,发射码“1”表示发射 38khz 的红外线 0.56ms,停止发射 1.69ms2.2.5 温度采集模块温度采集电路采用 DS18B20 作为温度检测传感器,硬件电路如图 2-1 所示,DS18B20 特点如下1、 “一线总线”

28、数字化温度传感器2、3V 到 5.5V 的宽电压工作范围3、分辨率 912 位可设定,即精度可以设定 0.5, 025, 0.125, 0.06252.2.6 闹铃控制模块闹铃控制电路采用,商业闹钟的闹铃芯片作为发声主芯片,只需将闹铃芯片输出端与扬声器相连,触发端与单片机 I/O 口相连,由单片机控制其触发,硬件电路如图 2-1 所示。2.2.7 电源模块电源模块采用 78 系列集成稳压器之 7805 作为主芯片,硬件电路如图 2-1 所示,其电路原理为由变压器将市电降为 AC 7.5V,再经桥式整流,电容滤波,7805稳压,及得到系统工作电压 DC 5V。第三章 系统软件设计3.1 程序设计

29、电子万年历的程序主要包括 4 个方面的内容:一是 DS1302 从单片机中读取数据进行计数,二是利用外部中断检测红外接收头接收到的数据进行时间的19调整,三是控制 1602 显示时间,四是读取 DS18B20 的温度检测信号。STC89C52RC 单片机主要 I/O 口的分配,P2.5P2.7 分别接 1602 的RS,RW,E 三个功能端,P0 口接 1602 的 8 位数据总线,P2.0 接闹铃芯片触发端,P2.1P2.3 分别接 DS1302 的 IO,SCLK,RST 端,P2.4 接 DS18B20 输出端,P3.3 接 HS0038 输出端。本系统采用多.C 文件编写,*.h 文件

30、用来声明,*.c 文件用来实现功能,具有较强的模块化。3.2 程序流程图程序结构图主程序流程图20中断流程图2122结论在三月份,我开始了我的毕业论文工作,时至今日,论文基本完成。从最初的茫然,到慢慢的进入状态,再到对思路逐渐的清晰,整个写作过程难以用语言来表达。历经了一个多月的努力,紧张而又充实的毕业设计终于落下了帷幕。回想这段日子的经历和感受,在这次毕业设计的过程中,我拥有了无数难忘的回忆和收获。在设计过程中,充分发挥人的主观能动性,自主学习,学到了许多没学到的知识。较好的完成了设计,达到了预期的目的,完了最初的设想。对电路的设计、布局要先有一个好的构思,才显得电路板美观、大方。程序编写中

31、,由于思路不清晰,开始时遇到了很多的问题,经过静下心来思考,和同学讨论,理清了思路,反而得心应手。在此次设计中,知道了做凡事要有一颗平常的心,不要想着走捷径,一步一脚印。也练就了我的耐心,做什么事都在有耐心。此次毕业设计中学到了很多很多东西,这是最重要的。总之,这次毕业设计使我的能力得到了全方位的提高,使得我的操作能力和专业技能都有了很大的提高。这次毕业设计的制作过程是我的一次再学习,再提高的过程。在论文中我充分地运用了大学期间所学到的知识。23致 谢通过这次毕业设计使我对电子技术的领悟更上一层楼了,在这里要非常感谢金沙滩工作室以及我的指导老师李老师,是你的细心指导和关怀,使我能够顺利的完成毕

32、业论文。在此我要向李老师致以最衷心的感谢和深深的敬意。在今后的学习生活中我将更加勤奋努力,不辜负老师和同学们的一片期望和关心。本设计在李老师的悉心指导和严格要求下完成,从课题选择、方案论证到具体设计,无不凝聚着李老师的心血和汗水。在此向李老师表示深深的感谢和崇高的敬意。通过这次设计,我学到了许多书本上学不到的知识,增强了自己的动手能力和自信心。通过这次设计使我能力有了很大的提高,最后在老师的指导下完成了自己的设计任务,但由于自己的知识水平有限,有许多不足之处,恳请老师多多指教!24参考文献1 刘建辉,翼常鹏等.单片机智能控制技术M.国防工业大学出版社,2007.4 2 李朝青单片机&D

33、SP 外围数字 IC 技术手册M北京航空航天大学出版社,2005.103 关德新,冯文全单片机外围器件实用手册 电源分册M北京航空航天大学出版社,1998.6 4 蔡美琴等.MCS-51 单片机系统及其应用M.高等教育出版社,1992.35 HellDale Chip Weems Mark Headington M.PROGRAMMING IN CFF 6 陈明荧.8051 单片机课程设计实训教程M清华大学出版社7 郁慧娣.微机系统及其接口技术M.东南大学出版社,1999 8 何立民.单片机高级教程M.北京航空航天大学出版社,2003 9 王毓银.数字电路逻辑设计M.高等教育出版社10 陈志旺

34、.51 系列单片机系统设计与实践M.电子工业出版社,20100111 李广弟.单片机原理及应用M.北京航空航天大学出版社,2004 12 谢嘉奎.电子线路M.高等教育出版社,199913 谭浩强.C 程序设计M.清华大学出版社 2004.625附录(主程序源代码)MAIN.C 文件代码如下/*时 间:2013 年 2 月 4 日 22:45:02*产 品:万年历*功能说明:红外遥控设定当前时间、日期;可设置闹铃,可显示当前温度值*CPU 作用:51 读写 1302、1602、18B20、检测 HS0038B 高低电平变换;对所读取的数据进行处理*/#includemain.huint8 sho

35、w_1602_addr = 20 - - MON: ; /1602 第一排显示初始化uint8 show_1602_addr1 = : : TEMP: ; /1602 第二排显示初始化uint8 show_Alarm_Clock = Alarm Clock:;uint8 show_Alarm_Clock1 = : ;int8 TIME17=55,59,23,31,12,7,12;/初始化 1302 时间值 12-9-30 星期日 23:59:55int8 clock2= 0,0;uint8 USER = 0;/进入校时 标志uint8 IR_TIM = 0; /红外按键 加、减校时 标志uin

36、t8 CLOCK_TIM = 0;/红外按键设置闹钟 加、减校时 标志uint8 CLOCK_MODE = 0;/进入闹钟校时 标志uint8 CLOCK_KG = 0;/闹钟开关 标志void timing(void);/时间校准模块void Alarm_Clock(void);/闹铃时间校准模块void clock_on_off(void);/闹铃开关模块/*模块名称:INT1_init*功 能:打开外部中断*输 入:无*输 出:无*全局变量:无*/void INT1_init(void)TMOD = 0X01;IT1 = 1; /下降沿触发中断26EX1 = 1;EA = 1;void

37、main(void)uint8 ans;INT1_init();init_1602(show_1602_addr,show_1602_addr1); /1602 初始化set_time(TIME1);/1302 初始化while(1)read_time(TIME1); /读取时间值start_temp(); /启动温度传感器show_time(0 x82,TIME16); / 送与 1602 显示 年show_time(0 x85,TIME14); / 送与 1602 显示 月show_time(0 x88,TIME13); / *。 。 。 。 。 。 。 。 。 。 。日show_time

38、(0 xc0,TIME12); / 。*。 。 。 。 。 。 。 。 。时show_time(0 xc3,TIME11); / 。 。 。*。 。 。 。 。 。 。分show_time(0 xc6,TIME10); / 。 。 。 。 。*。 。 。 。 。秒show_mon(TIME15); / 。 。 。 。 。*。 。 。星期ans = read_temp(); /读取温度值write_1602_temp(0 xce,ans); /将读取的温度值送与 1602 显示if(USER != 0)/进入校时timing();if(CLOCK_MODE != 0) / 进入闹铃校时Alarm

39、_Clock();if(CLOCK_KG != 0) /打开或关闭闹钟clock_on_off();/*模块名称:timing(void)*功 能:数字钟校时*输 入:无*输 出:无*全局变量:USER TIME1 IR_TIM27*/void timing(void)uint8 val;while(USER != 0) / 进入校时 /*年 校 时*/if(USER = 1) val = read_temp(); /读取温度值write_1602_temp(0 xce,val); /将读取的温度值送与 1602 显示twinkle_com(0 x82); /校时对象闪烁while(USER

40、= 1)/校时对象为年switch(IR_TIM)case 1 : if(TIME16=99)TIME16 = 0; /加校时 show_time(0 x82,+TIME16); IR_TIM = 0; break;default :break;/*月 校 时*/if(USER = 2) val = read_temp(); /读取温度值write_1602_temp(0 xce,val); /将读取的温度值送与 1602 显示twinkle_com(0 x85); /校时对象闪烁while(USER = 2)/校时对象为月switch(IR_TIM)case 1 : if(TIME14=1)

41、 TIME14 = 13;28 show_time(0 x85,-TIME14);/减校时 IR_TIM = 0; break;case 2 : if(TIME14=12)TIME14 =0; /加校时 show_time(0 x85,+TIME14); IR_TIM = 0; break;default :break;/ *日 校 时*/if(USER = 3) val = read_temp(); /读取温度值write_1602_temp(0 xce,val); /将读取的温度值送与 1602 显示twinkle_com(0 x88); /校时对象闪烁while(USER = 3)/校时

42、对象为日switch(IR_TIM)case 1 : if(TIME13=1) TIME13 = 32; show_time(0 x88,-TIME13);/减校时 IR_TIM = 0; break;case 2 : if(TIME13=31)TIME13 = 0; /加校时 show_time(0 x88,+TIME13); IR_TIM = 0; break;default :break;/*星 期 校 时*/if(USER = 4) val = read_temp(); /读取温度值write_1602_temp(0 xce,val); /将读取的温度值送与 1602 显示twinkl

43、e_com(0 x8f); /校时对象闪烁29while(USER = 4)/校时对象为星期switch(IR_TIM)case 1 : if(TIME15=1) TIME15 = 8; write_1602(0 x8f,-TIME15);/减校时 twinkle_com(0 x8f); IR_TIM = 0; break;case 2 : if(TIME15=7)TIME15 = 0; /加校时 write_1602(0 x8f,+TIME15); IR_TIM = 0; twinkle_com(0 x8f); break;default :break;/*小时 校 时*/if(USER =

44、 5) val = read_temp(); /读取温度值write_1602_temp(0 xce,val); /将读取的温度值送与 1602 显示twinkle_com(0 xc0); /校时对象闪烁while(USER = 5)/校时对象为小时switch(IR_TIM)case 1 : if(-TIME12=24)TIME12 = 0; /加校时 show_time(0 xc0,TIME12); IR_TIM = 0; break;30default :break;/*分 校 时*/if(USER = 6) val = read_temp(); /读取温度值write_1602_tem

45、p(0 xce,val); /将读取的温度值送与 1602 显示twinkle_com(0 xc3); /校时对象闪烁while(USER = 6)/校时对象为分switch(IR_TIM)case 1 : if(-TIME11=60)TIME11 = 0; /加校时 show_time(0 xc3,TIME11); IR_TIM = 0; break;default :break;/*秒 校 时*/if(USER = 7) val = read_temp(); /读取温度值write_1602_temp(0 xce,val); /将读取的温度值送与 1602 显示twinkle_com(0

46、xc6); /校时对象闪烁while(USER = 7)/校时对象为秒switch(IR_TIM)case 1 : if(-TIME10=60)TIME10 = 0; /加校时 show_time(0 xc6,TIME10); IR_TIM = 0; break;default :break;if(USER = 8)USER = 0;write_com(0 x0c);set_time(&TIME1);return; void Alarm_Clock(void) /闹铃时间设定if(CLOCK_MODE = 1)show_clock_zfc(0 x80,show_Alarm_Clock)

47、;/ 第一行显示为Alarm_Clock:show_zfc(0 xca,show_Alarm_Clock1); / 第二行显示为 : show_time(0XCA,clock0); show_time(0XCD,clock1);twinkle_com(0 xca); /校时对象闪烁while(CLOCK_MODE = 1) /闹铃小时设置 switch(CLOCK_TIM)case 1 : if(-clock0=24)clock0 = 0; /加校时 show_time(0 xca,clock0); CLOCK_TIM = 0; break;default :break;if(CLOCK_MO

48、DE = 2)twinkle_com(0 xcd); /校时对象闪烁while(CLOCK_MODE = 2) / 闹铃分钟设置switch(CLOCK_TIM)case 1 : if(-clock1=60)clock1 = 0; /加校时 show_time(0 xcd,clock1); CLOCK_TIM = 0; break;default :break;if(CLOCK_MODE = 3)show_clock_zfc(0 x80,show_1602_addr); /恢复正常时钟显示show_zfc(0 xC0,show_1602_addr1);CLOCK_MODE = 0;void c

49、lock_on_off(void)switch(CLOCK_KG)33case 1 : /打开闹钟if(clock0 = TIME12&clock1 = TIME11) / 比较 1302时间与设置的闹铃是否相同BUZZ = 0; /若闹铃到了执行相应功能 elseBUZZ = 1;CLED = 0;break;case 2 : /关闭闹钟CLOCK_KG = 0;BUZZ = 1;CLED = 1;break;default : break;/*模块名称:interrupt_INT1(void)*功 能:当有按键按下时进入中断*输 入:无*输 出:无*全局变量:IR_BUF USER

50、 IR_OK*/void interrupt_INT1(void) interrupt 2uint16 time;uint8 IR_BUF4; /红外键值缓存uint8 i,j;/*红外解码*/ time = IR_LOW();if(time 9000)/检测引导脉冲低电平持续时间为 85009000USreturn;time = IR_HIGH();if(time 5000) / 检测引导脉冲高电平持续时间为 4000-5000USreturn;for(i = 0; i 4; i+)for(j = 0; j 8; j+)time = IR_LOW();if(time 800) /200800

51、usreturn;34time = IR_HIGH();if(time 1680) /2001680usreturn;IR_BUFi = 1;if(time 1120) /1120usIR_BUFi |= 0X80;if(IR_BUF2 = (IR_BUF3) /判断解码是否正确switch(IR_BUF2)case 0X07 : USER+; break; /进入校时case 0X15 : IR_TIM = 1; break; /减校时case 0X09 : IR_TIM = 2; break; /加校时case 0 x47 : CLOCK_KG+; break; / 开闹钟case 0 x46 : CLOCK_MODE+; break; / 进入闹铃时间设定case 0 x40 : CLOCK_TIM = 1; break; / 闹铃时间减校时case 0 x43 : CLOCK_TIM = 2; break; /闹铃时间加校时default : break;*.h 函数声明文件代码如下Main.h 文件源代码如下#ifndef _main_h_#define _main_h_

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论