电子综合设计-基于单片机多功能数字时钟的设计(附完整程序)

合集下载

基于单片机的多功能数字时钟设计

基于单片机的多功能数字时钟设计

技术平台采用碱性电解液电沉积活性锌粉,选取电解液浓度1.25g/cm3,电流密度150mA/cm2,电解槽温度只需控制在室温,锌粉洗涤后真空干燥,所制得的锌粉比表面积大于0.8m2/g,具有较高的电化学活性,能满足锌银电池生产需要,生产效率也达到批量生产要求。

参考文献:[1]侯新刚,王胜,王玉棉.超细活性锌粉的制备与表征[J].粉末冶金工业,2004,14(1):10-13.[2]李永祥,黄孟阳,任锐.电解法制备树枝状锌粉工艺研究[J].四川有色金属,2011,(3):45-50.[3]胡会利,李宁,程瑾宁,等.电解法制备超细锌粉的工艺研究[J].粉末冶金工业,2007,17(1):24-29.基于单片机的多功能数字时钟设计刘晓萌(安徽职业技术学院铁道学院/合肥铁路工程学校,安徽 合肥 230011)摘 要:常见的数字钟有时间、闹钟等功能。

本文基于单片机、温度传感器、液晶显示屏、时钟芯片等硬件设计了多功能数字时钟,软件部分采用C语言编程实现。

该多功能数字时钟包含万年历、节日、节气、温度信息显示等功能,并且在断电的情况下也能正常工作。

关键词:单片机;多功能数字时钟;C语言编程0 引言人类对于时间的需求从古到今始终存在。

古代有浑天仪、日晷,近代出现了机械时钟。

如今,传统的计时工具,甚至是电子钟都已经满足不了人们多元化的时间需求。

数字时钟具有读取方便、显示直观、功能多样、电路简洁、成本低廉等诸多优点,符合电子仪器仪表的发展趋势,具有广阔的应用空间[1]。

使用数字时钟,用户可以获取精确到秒的时间信息,或是对时钟进行自定义的操作,为现代社会提供了极大的方便[2]。

然而,传统的数字时钟只包含时间显示、闹钟等功能,存在一定的局限性。

本文基于单片机、温度传感器、液晶显示屏、时钟芯片、键盘模块、闹铃模块和电力支持模块等硬件,设计了一款多功能的数字时钟。

1 系统硬件组成数字时钟的硬件由七个模块组成,包括:STC89C52单片机主控芯片、DS1302时钟芯片、DS18B20温度芯片、LCD1602液晶显示模块、闹铃模块、键盘模块和电源。

单片机多功能数字电子时钟设计设计Word

单片机多功能数字电子时钟设计设计Word

单片机多功能数字电子时钟设计绪论概述时间对人们来说是非常宝贵的,准确的掌握时间和分配时间对人们来说至关重要。

因此自从时钟发明的那刻起,就成为人类的好朋友。

随着时间的流逝,科学技术的不断发展和提高人们对时间计量的精度要求越来越高,应用越来越广。

怎样让时钟更好、更方便、更精确的显示时间,这就要求人们不断设计研发。

出新型的时钟。

高精度的计时工具大多数都使用了石英晶体振荡器,由于电子钟,石英表,石英钟都采用了石英技术,因此走时精度高稳定性好、使用方便、不需要经常调校。

数字式电子钟用集成电路计时时译码代替机械式传动,用LCD显示器代替指针进而显示时间、减小了计时误差,这种表具有时、分、秒显示时间的功能,还可以进行时和分的校对,片选的灵活性好。

时钟电路在计算机系统中起着非常重要的作用是保证系统正常工作的基础。

在单片机的应用系统中,时钟有两个方面的含义。

一是指为保障系统正常工作的基准振荡定时信号、主要由晶振和外围电路组成,晶振频率的大小决定了单片机系统工作的快慢二是指系统的标准定时时钟即定时时间。

它通常有两种实现方法:一是用软件实现,即用单片机内部的可编程定时器/计数器来实现,二是用专门的时钟芯实现。

2研究目的通过利用STC89C52单片机和DS1302芯片和DS18B20以及外围的按键和LCD显示器等部件显示完整的日历和温度,设计一个基于单片机的电子时钟。

通过设计可以很好的学习单片机的基础知识。

具有日历、时间、温度显示功能。

设计的电子时钟通过液晶显示器显示并能通过按键对时间进行设置。

第一章设计要求与方案论证1.1设计要求1具有年、月、日、星期、时、分、秒显示功能,2具有年、月、日、星期、时、分、秒校正功能,3具有12/24小时切换显示功能,4具有显示温度功能。

1.2系统基本方案选择和论证1.2.1 单片机芯片的选择方案和论证方案一:采用STC89C52芯片作为硬件核心。

STC89C52内部具有8KB ROM 存储空间,512字节数据存储空间、带有2K字节的EEPROM存储空间与MCS-51系列单片机完全兼容,STC89C52可以通过串口下载。

毕业设计(论文)-基于单片机多功能电子时钟的设计与仿真(含程序仿真)[管理资料]

毕业设计(论文)-基于单片机多功能电子时钟的设计与仿真(含程序仿真)[管理资料]

程序仿真等全套设计,联系153893706第1章绪论二十一世纪的今天,最具代表性的计时产品就是电子万年历,它是近代世界钟表业界的第三次革命。

第一次是摆和摆轮游丝的发明,相对稳定的机械振荡频率源使钟表的走时差从分级缩小到秒级,代表性的产品就是带有摆或摆轮游丝的机械钟或表。

第二次革命是石英晶体振荡器的应用,发明了走时精度更高的石英电子钟表,使钟表的走时月差从分级缩小到秒级。

第三次革命就是单片机数码计时技术的应用(电子万年历),使计时产品的走时日差从分级缩小到1/600万秒,从原有传统指针计时的方式发展为人们日常更为熟悉的夜光数字显示方式,直观明了,并增加了全自动日期、星期、温度以及其他日常附属信息的显示功能,它更符合消费者的生活需求!因此,电子万年历的出现带来了钟表计时业界跨跃性的进步……我国生产的电子万年历有很多种,总体上来说以研究多功能电子万年历为主,使万年历除了原有的显示时间,日期等基本功能外,还具有闹铃,报警等功能。

商家生产的电子万年历更从质量,价格,实用上考虑,不断的改进电子万年历的设计,使其更加的具有市场。

本设计为软件,硬件相结合的一组设计。

在软件设计过程中,应对硬件部分有相关了解,这样有助于对设计题目的更深了解,有助于软件设计。

基本的要了解一些主要器件的基本功能和作用。

除了采用集成化的时钟芯片外,还有采用MCU的方案,利用AT89系列单片微机制成万年历电路,采用软件和硬件结合的方法,控制LED数码管输出,分别用来显示年、月、日、时、分、秒,其最大特点是:硬件电路简单,安装方便易于实现,软件设计独特,可靠。

AT89C52是由ATMEL公司推出的一种小型单片机。

95年出现在中国市场。

其主要特点为采用Flash存贮器技术,降低了制造成本,其软件、硬件与MCS-51完全兼容,可以很快被中国广大用户接受。

本文介绍了基于AT89C52单片机设计的电子万年历。

选题背景及研究的目的与意义设计的目的电子钟已成为人们日常生活中必不可少的物品,广泛用于个人家庭以及车站码头、剧院、办公室等公共场所,给人们的生活、学习、工作、娱乐带来了极大的方便。

基于单片机的数字钟毕业设计(附程序全)

基于单片机的数字钟毕业设计(附程序全)

基于单片机的数字钟毕业设计(附程序全) 电子时钟设计随着现代人类生活节奏的加快,人们越来越重视起了时间观念,可以说是时间和金钱划上了等号。

对于那些对时间把握非常严格和准确的人或事来说,时间的不准确会带来非常大的麻烦,所以以数码管为显示器的时钟比指针式的时钟表现出了很大的优势。

数码管显示的时间简单明了而且读数快、时间准确性更高~数字钟是采用数字电路实现对“时”、“分”、“秒”数字显示的计时装置。

数字钟的精度、稳定度远远超过老式机械钟。

在这次设计中,我们采用LED数码管显示时、分、秒,以24小时计时方式,根据数码管动态显示原理来进行显示,用12MHz的晶振产生振荡脉冲,并且由单片机的定时器计数。

在此次设计中,电路具有显示时间的其本功能,还可以实现对时间的调整。

数字钟是其小巧,价格低廉,走时精度高,使用方便,功能多,便于集成化而受广大消费的喜爱,因此得到了广泛的使用。

关键词:数字钟;单片机;数码管;时间;准确性1目录第一章绪论1. 数字电子钟的意义和应用…………………………………………………………………… 3 第二章整体设计方案2.1 单片机的选择…………………………………………………………………………… 3 2.2 单片机的基本结构……………………………………………………………………… 5 第三章数字钟的硬件设计3.1 最小系统设计…………………………………………………………………………… 9 3.2 LED显示电路…………………………………………………………………………… 12 3.3 键盘控制电路…………………………………………………………………………… 14 第四章数字钟的软件设计4.1 系统软件设计流程图…………………………………………………………………… 15 4.2 数字电子钟的原理图…………………………………………………………………… 18 4.3 主程序…………………………………………………………………………………… 19 4.4 时钟设置子程序………………………………………………………………………… 20 4.5 定时器中断子程序……………………………………………………………………… 20 4.6 LED显示子程序………………………………………………………………………… 21 4.7 按键控制子程序………………………………………………………………………… 23 第五章系统仿真5.1 PROTUES软件介绍................................................................................. 24 5.2 电子钟系统PROTUES仿真........................................................................ 24 结束语. (2)5 参考文献 (26)2第一章绪论1.数字电子钟的意义和应用数字钟是采用数字电路实现对时、分、秒数字显示的计时装置,广泛用于个人家庭、车站、码头、办公室等公共场所,成为人们日常生活中不可少的必需品,由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过老式钟表, 钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。

基于单片机多功能电子钟设计

基于单片机多功能电子钟设计

《单片机原理及应用课程设计》任务书前言随着科技的快速发展,从摆钟到现在电子钟,人类不断研究,不断创新纪录。

目前,单片机技术的应用产品已经走进了千家万户,电子时钟的出现给人们的生活带来了诸多方便,随着微电子技术的高速发展,单片机在国民经济的个人领域得到了广泛的运用,单片机以体积小、功能全、性价比高等诸多优点,在工业控制、家用电器、通信设备、信息处理、尖端武器等各种测控领域的应用中独占鳌头,单片机开发技术已成为电气、通信、自动化、机电一体化等专业技术人员必须掌握的技术。

单片机单芯片的微小体积和低的成本,可广泛地嵌入到如玩具、家用电器、机器人、仪器仪表、汽车电子系统、工业控制单元、办公自动化设备、金融电子系统、舰船、个人信息终端及通讯产品中,成为现代电子系统中最重要的智能化工具,于是基于单片机的醒目而时尚的电子多功能时钟顺应而生。

基于单片机的电子多功能时钟结合了时钟和日历的功能,将其二者融为一体,在显示时间的同时还能显示日期和年、月,它主要是通过单片机来读取时钟芯片的时间、日期,然后送给显示设备显示出来。

而电子万年历作为电子类小设计不仅是市场上的宠儿,也是是单片机实验中一个很常用的题目。

因为它的有很好的开放性和可发挥性,因此对作者的要求比较高,不仅考察了对单片机的掌握能力更加强调了对单片机扩展的应用,而且在操作的设计上要力求简洁,功能上尽量齐全,显示界面也要出色,数字显示的时钟已经越来越流行,特别是适合在家庭居室、办公室、大厅、会议室、车站和广场等使用,壁挂式LED数码管显示的日历钟逐渐受到人们的欢迎。

LED数字显示的日历钟显示清晰直观、走时准确、可以进行夜视,并且还可以扩展出多种功能。

目录前言 3目录 4摘要 6ABSTRACT 71. 系统的方案设计与论证 81.1 单片机芯片设计与论证 91.2 按键控制模块设计与论证 91.3 时钟模块设计与论证 91.4 温度采集模块设计与论证 101.4.1 温度测量的步骤 101.4.2 DS18B20的操作时序 101.5 显示模块模块设计与论证 111.5.1 1602字符型LCD简介 111.5.2 1602引脚功能说明 111.5.3 1602LCD的指令说明及时序 121.5.4 1602LCD的RAM地址映射及标准字库表 14 1.5.5 1602LCD的一般初始化(复位)过程 15 1.5.6 1602LCD的电路连接 151. 6 蜂鸣器闹铃电路 162 系统硬件的设计 172.1 AT89S51单片机 172.2 时钟芯片DS1302接口设计与性能分析 20 2.2.1 DS1302性能简介 202.2.2 DS1302接口电路设计 212.3 温度芯片DS18B20接口设计与性能分析 23 2.3.1 DS18B20性能简介 231.DS18B20的主要特性 232.3.2 DS18B20接口电路设计 242.3.3 DS18B20的工作时序 242.4 LCD显示模块 272.4.1 LCD1602的特性及使用说明 272.4.2 LCD1602与MCU的接口电路 282.5 按键模块设计 282.6 复位电路的设计 283 系统的软件设计 303.1 主程序流程图的设计 30主程序流程 313.2 时间设置子程序流程 313.3 闹钟设置子程序流程 32参考文献 33附录:单片机多功能时钟程序 34心得与感悟 54摘要本文介绍了基于AT89S52单片机的多功能电子万年历的硬件结构和软硬件设计方法。

基于单片机的数字电子钟设计(含完整程序+PCB图)--课程设计

基于单片机的数字电子钟设计(含完整程序+PCB图)--课程设计

基于单⽚机的数字电⼦钟设计(含完整程序+PCB图)--课程设计基于单⽚机的数字电⼦钟设计(含完整程序+PCB图)--课程设计1 课题设计任务、功能要求及总体⽅案1.1 课题设计任务本课程设计选题⽬为:数字电⼦钟。

设计⼀个具有特定功能的电⼦钟。

1.2 功能要求设计的数字电⼦钟上电或按键复位后能⾃动显⽰系统提⽰符“P.”,进⼊时钟准备状态;第⼀次按数字电⼦钟启动/调整键,数字电⼦钟从0时0分0秒开始运⾏,进⼊时钟运⾏状态;再次按数字电⼦钟启动/调整键,则数字电⼦钟进⼊时钟调整状态,并且时间停⽌不动,此时可分别利⽤各调整键调整时、分、秒,调整结束后可按启动/调整键再次进⼊时钟运⾏状态。

1.3 设计总体⽅案介绍及⼯作原理说明本课程设计采⽤AT89S52单⽚机设计⼀个数字电⼦钟,通过两个4位LED数码管显⽰时、分、秒,并设有9个按键。

其中⼀个⽤于单⽚机的复位;⼀个为启动/调整键;两个分别为加,减键;其他键本课题暂不⽤。

电路分为5部分,分别为复位电路、键盘电路、时钟电路、显⽰电路和控制电路。

复位电路采⽤按键复位⽅式。

键盘电路采⽤独⽴式键盘。

时钟电路⽤12MHz的晶振产⽣时钟信号。

显⽰电路采⽤8个三极管驱动两个4位LED显⽰。

控制电路采⽤8位的AT89S52单⽚机作为CPU;原理是:时钟⽤T0为时钟秒加1中断,时间常数位50MS,每20次加1S,T0⽤为时间加1中断,时间常数为50MS,中断20次时间加1。

其设计框图如图1.1所⽰:复位电路AT89S52 显⽰时钟电路键盘电路下载电路图1.1 设计⽅案框图42 数字电⼦钟硬件系统的设计2.1 硬件系统各模块功能简要介绍2.1.1 复位电路复位是单⽚机的硬件初始化操作。

经复位操作后,单⽚机系统才能开始正常⼯作。

单⽚机上有复位引脚RST,⽤于外接复位电路,这⾥复位电路采⽤按键电平复位。

2.1.2 时钟电路单⽚机⼯作所需的同步时钟信号由以下两种⽅法获得:由单⽚机⽚内时钟电路结合外部晶振、电容产⽣和直接从单⽚机外部引⼊脉冲信号。

多功能数字电子时钟设计

多功能数字电子时钟设计

多功能数字式电子时钟设计说明:本设计内容是利用51单片机最小系统设计一个电子时钟,时钟采用24小时制,时、分、秒各采用2个共阳极LED数码管显示。

具体实现的的功能如下:(1)能够正常显示时钟。

六个LED数码管依次显示时钟的时、分、秒位。

(2)可以完成键盘采样,实现键值判断;(3)实现简单的键盘功能,例如运行键、暂停键处理。

(4)每当整点时,所有LED闪烁显示,显示次数等于整点数。

若为0点钟,则显示正常;(5)实现键盘功能,包括运行键、暂停键、上升键、下降键、切换健、校准健处理。

通过键盘来实现时钟的暂停、运行、调时等功能。

该电子时钟主要由硬件和软件两部分组成,其中硬件部分主要包括:六个七段LED显示器,用来显示时钟的时、分、秒、位。

集成电路74LS240(反相器)和PNP型三极管9012,用于增加驱动电流的目的.还有AT89S51单片机以及RC组成的振荡电路。

软件部分则是通过软件编程利用51单片机来控制时钟,使其正常走动及按照我们的设计想法实现上述的:暂停、运行、调时及校准等功能。

设计完成后的电子钟可实现以下功能:当通电后,时钟开始正常走动。

当按下键后,时钟暂停运行、再按键时钟开始正常走动。

按下键(六)设计思路1、显示电路51单片机与七段LED显示器的接口为动态接口,需使用2组寄存器进行控制。

其中,一组寄存器控制几个显示器的七段发光二极管,该寄存器称为段选寄存器;另一组寄存器控制这几个七段显示器的公共端,控制这几个显示器逐个循环点亮。

适当的选择循环速度,利用人眼的“视觉暂留”效应,使其看上去好像这几个显示器同时在显示一样,该寄存器称为位选寄存器。

时钟的时、分、秒各用两个共阳极的七段LED显示器来显示,因此共需外接6个七段显示器。

所有显示器相同的段并接在一起,由P1口控制。

每个显示器的公共端分别由P3口的某一位控制。

集成电路74LS240(反相器)只起到增加驱动电流的目的,PNP型三极管9012也是为了增加驱动能力。

(完整word版)基于51单片机多功能电子时钟报告

(完整word版)基于51单片机多功能电子时钟报告

单片机课程设计报告多功能电子数字钟姓名:学号:班级:指导教师:目录一课程设计题目—-—-———--—--—-—--------—-——---—- 3二电路设计--------——-——---—--——---——--————-——--—- 4三程序总体设计思路概述——-------———-——--——5四各模块程序设计及流程图——--—---------——6五程序及程序说明见附录-—-——————-—-—---—-- **六课程设计心得及体会-----————-————--——--—- 11七参考资料—-—-—---—--———-———--————-—-----—----—-—12一题目及要求本次单片机课程设计在Proteus软件仿真平台下实现,完成电路设计连接,编程、调试,仿真出实验结果。

具体要如下:用8051单片机设计扩展6位数码管的静态或动态显示电路,再连接几个按键和一个蜂鸣器报警电路,设计出一个多功能电子钟,实现以下功能: (1)走时(能实现时分秒,年月日的计时)(2)显示(分屏切换显示时分秒和年月日,修改时能定位闪烁显示)(3)校时(能用按键修改和校准时钟)(4)定时报警(能定点报时)本次课程设计要求每个学生使用Proteus仿真软件独立设计制作出电路图、完成程序设计和系统仿真调试,验收时能操作演示.最后验收检查结果,评定成绩分为:(1)完成“走时+显示+秒闪”功能—-——及格(2)完成“校时修改”功能---—中等(3)完成“校时修改位闪"---—良好(4)完成“定点报警”功能,且使用资源少----优秀二电路设计(电路设计图见附件电路图)(1)采用89C51型号单片机(2)采用8位共阴数码管(3)因为单片机输出高电平时输出的电流不足以驱动数码管,所以在P0口与8位数码管之间加74LS373来驱动数码管(4)P2口与数码管选择位直接加74LS138译码器(5)蜂鸣器接P3。

7口。

电子综合课程设计多功能数字电子时钟

电子综合课程设计多功能数字电子时钟

电子综合课程设计多功能数字电子时钟一、简介本项目为电子综合课程设计,设计一款多功能数字电子时钟。

该时钟具有显示时间、日期、温度、闹钟等多种功能,配备有定时开关机、夜光和音量调节等功能。

此外,该时钟外观简约且美观,设计师充分考虑到用户的使用需求,实现了人性化设计,易于操作,成为一款功能强大、实用性高、适用范围广的电子产品。

二、设计思路1.硬件设计时钟采用STM32F0308T6单片机作为主控芯片,用DS1302实时时钟芯片作为时钟源。

为了实现多种功能,我们在主控出增加了一个9612音频电路芯片,用作时钟的音量控制,以及闹钟的提示铃声。

此外,为了使时钟更好地适应使用场景,设计师还添加了光敏电阻实现夜光功能,铺上黄色的背光板后又实现了多种颜色的配合,能够适应不同场合的需求。

2.软件设计在软件方面,使用了C语言编程。

主要功能包括时间、日期、温度显示、闹钟、夜光和音量控制等。

其中,时间及日期的显示为主界面,在时钟界面下按下“menu”可以进入温度、夜光、音量调节、闹钟设置等模式,按下确定键可进入对设置的编辑,方便用户按照自己需求进行调整。

三、功能介绍1.时间、日期显示时钟在主界面下,可显示当前时间和日期,使用户随时了解到时间和日期的变化。

2.温度显示在“menu”界面下,可显示当前的温度,方便用户了解室内温度的变化。

3.闹钟设置在“menu”模式下,用户可通过设置闹钟时间来实现定时提醒的功能。

4.夜光当环境光线较暗时,时钟的背光板将亮起,以便用户观看时间。

5.音量调整可通过音量调节的按键对音量进行调整,以方便用户按照自己的需要进行调节。

6.定时开关机在控制位置,实现了产品的定时开关机功能,可自动开机,实现了对环境的节约。

四、总结该多功能数字电子时钟的设计工艺精良,功能强大、易于操作、实用性高、适用性广泛。

整个设计过程、选材及工艺都体现了电子产品的优越性。

在真正的市场环境下,这款多功能电子时钟具备广泛的市场适应性,在现代家居、办公室等各个场合都具有很好的应用前景。

电子综合设计-基于单片机多功能数字时钟的设计

电子综合设计-基于单片机多功能数字时钟的设计

电子综合设计-基于单片机多功能数字时钟的设计下面是一个基于单片机的多功能数字时钟的完整程序示例:```c#include <reg51.h>sbit LED = P2^0; // 数码管选择位sbit DIO = P2^1; // 数码管数据输入sbit CLK = P2^2; // 数码管时钟unsigned char code duanma[16] =0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x67,0x77,0x7c,0x39,0x5e,0x79,0x71};//数码管段码unsigned char code weima[8] =0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//数码管位码unsigned int count = 0; // 计数//延时函数void delay(unsigned int n)unsigned int i, j;for (i = 0; i < n; i++)for (j = 0; j < 110; j++);}//数码管显示函数void display(unsigned char *nums) unsigned char i;for (i = 0; i < 8; i++) { // 逐位显示DIO = nums[i]; // 将段码赋值给DIO CLK=1;//时钟上升沿CLK=0;//时钟下降沿LED = weima[i]; // 选择位码delay(1); // 延时1msLED = 0xff; // 关闭显示}//复位时钟void resecount = 0;display(duanma);void maiwhile (1)display(duanma); // 显示数码管初始状态reset(; // 复位时钟while (1)reset(;}if (P1 == 0x0f) { // 检测P1口的按键状态delay(20); // 延时消抖if (P1 == 0x0f)delay(20); // 再次延时消抖if (P1 == 0x0f)count++; // 计数加一display(duanma); // 显示计数结果}}}}}```。

基于单片机设计的多功能数字钟设计报告

基于单片机设计的多功能数字钟设计报告

题目:多功能数字钟一,设计目的1培养大学生动手能力,大体了解电路设计;2掌握电子设计初步知识;3培养团队合作能力;4掌握各芯片的逻辑功能及使用方法.5了解面板结构及其接线方法.6了解数字钟的组成及工作原理.7熟悉数字钟的设计与制作.8初步了解单片机的使用与编程.二,设计要求1.设计指标时间为24小时制;显示小时与分钟; (如下图);有校时功能,可以分别对小时及分钟进行单独校时;具有设置闹铃的功能,并且能控制闹铃的开关;具备闹铃就绪灯(闹铃调整好后,就绪灯亮),且具有蜂鸣功能(到所调闹铃响时间,蜂鸣器发出声音);电源为220V供电.,具有环境温度测量、电网电压、电网频率显示等功能;报警模块由报警蜂鸣器和带音乐芯片的扬声器等可实现闹铃控制和电网电压的过压、欠压报警功能。

2.设计要求画出电路原理图(或仿真电路图);元器件及参数选择;应用计算机完成电路仿真与调试;完成PCB文件生成与打印输出.3.制作要求应用提供元件,自行进行电路装配和调试,并能发现问题和解决问题.4.编写设计报告写出电路设计与整体制作的全过程,附上有关资料和图纸和心得体会.三,基本仪器清单20MHz普通示波器(双通道,外触发输入,有X轴输入,可选带Z轴输入)60MHz双通道数字示波器低频信号发生器(1Hz~1MHz)高频信号发生器(1MHz~40MHz)标准声音源声级校准器函数发生器低频毫伏表高频毫伏表普通频率计失真度测试仪直流稳压电源2米卷尺单相自耦调压器(>200W)单片机开发系统及EDA开发系统五位半数字万用表(电压表)四位半数字万用表四,主要元器件清单单片机最小系统板(仅含单片机芯片、键盘与显示装置、存储器、A/D、D/A)A/D、D/A转换器1MHz采样频率的8位A/D转换器运算放大器、电压比较器可编程逻辑器件及其下载板显示器件小型继电器康铜、锰铜电阻丝漆包线(直径不大于1mm)光电传感器温度传感器声音传感器扬声器DC/DC转换器设计方案我们设计的系统电路由实时时钟模块、环境温度检测模块、电网检测模块、报警模块等部分组成。

电子综合设计多功能数字钟报告(附完整程序代码)

电子综合设计多功能数字钟报告(附完整程序代码)

[电子系统设计]总结报告题目:多功能数字钟专业:电子信息科学与技术班级:2010级2班姓名:XXX指导教师:评分:2012年11月19日目录1项目计划 (1)1.1方案可行性 (1)1.1.1市场可行性分析 (1)1.1.2技术分析 (1)1.1.3法律分析 (1)1.2项目执行计划 (2)1.2.1工程进度图 (2)1.2.2工程进度表 (2)1.2.3工程预算 (2)2设计说明 (3)2.1基本设计思想 (3)2.2设计原理 (4)2.3系统结构框图 (4)2.4原理图 (5)2.5各单元模块设计原理 (5)2.5.1单片机最小系统 (5)2.5.2数码显示模块 (6)2.5.3闹铃模块 (7)2.5.4接口和外部控制模块 (8)2.5.5时钟模块 (8)2.6各单元模块设计流程及部分程序代码 (9)2.6.1各单元模块设计流程图 (9)2.6.2部分程序代码 (11)2.7时钟的操作流程 (11)3调试说明 (12)3.1生产工艺 (12)3.2调试准备工作 (12)3.3调试方法及步骤 (12)3.4调试数据 (13)3.4.1未安装芯片时的点参数 (13)3.4.2安装芯片后的点参数 (13)3.5调试结果 (14)3.6注意事项 (14)3.7可能遇到的问题及解决方案 (14)4总结 (15)5附录 (15)1项目计划1.1方案可行性1.1.1市场可行性分析多功能数字钟是一种利用数字电路来显示秒、分、时的计时装置,与传统的机械钟相比,它具有走时准确、显示直观、无机械传动装置等优点,因而得到广泛应用,随着多功能数字钟在公共场合的应用和多功能数字钟数量的增多,多功能数字钟的功能和准确度更被人们所重视。

本多功能数字钟属于多功能数字钟,具有功能多,成本低的特点,制作一个多功能数字钟所需材料成本约为17元,人工成本约6元,而一个多功能数字钟市场价约为60,每个多功能数字钟可净收入约37元,现在市场上数字钟的需求量大,生产商寥寥无几。

多功能数字电子钟单片机课程设计程序

多功能数字电子钟单片机课程设计程序

多功能数字电子钟单片机课程设计程序多功能数字电子钟单片机课程设计程序概要: 多功能数字电子钟功能要求:(1)电子钟具有显示年、月、日、时、分、秒及星期功能,可识别闰年(可用实验板上的I2C接口日历时钟芯片,或用软件方式模拟I2C接口日历时钟芯片功能)。

显示接口板能完整地显示月、日 ...多功能数字电子钟功能要求:(1)电子钟具有显示年、月、日、时、分、秒及星期功能,可识别闰年(可用实验板上的I2C接口日历时钟芯片,或用软件方式模拟I2C接口日历时钟芯片功能)。

显示接口板能完整地显示月、日、时、分、秒信息。

建议采用串行方式,以简化硬件、软件设计。

(2)能借助键盘设置日期、时间及报警时间等信息。

(3)具有星期报警功能;可在一天内设置多达32个报警时间(时分)。

报警时,蜂鸣器先鸣响5秒,然后停2秒,如果无人干预,蜂鸣器再鸣响5秒。

要求完成的内容:(1)完成多功能电子钟系统硬件设计,并用电子CAD软件绘制出原理图,在万能板上制作实验板上没有的10位LED显示接口电路(实验板上已提供了扩展接口插座)。

(当然,也可以采用点阵式LCD模块,显示年、月、日、时、分、秒等信息)(2)给出流程图,编写并调试程序。

(3)撰写设计报告。

程序参考:(为避免盗版,程序设有人为漏洞,不能编译,仅作参考)#include#define uchar unsigned char#define uint unsigned int//*---------------------键盘分布-----------------*/#define Key_In P2#define Enter 0x0FE#define Up 0x0FD#define Down 0x0FBsbit Key_Enter=P2^0;sbit Key_Up=P2^1;sbit Key_Down=P2^2;//----------------LCD引脚定义-------------//#define LCD_Data P0sbit LCD_RS = P1^0 ; //定义引脚sbit LCD_RW = P1^1 ;sbit LCD_EN = P1^2 ;//-------------控制蜂鸣器的引脚----------// sbit Bell=P3^7;int Year;int Month;int Day;int Week;int Hour;int Min;int Second;uchar buffer1[16];uchar buffer2[16];//--------闹钟时间定义为数组---------------// int idata Clock_Hour[32];int idata Clock_Min[32];int Clock_Sec[5];int idata Hour_BJ;int idata Min_BJ;int ClockNum; //闹钟号数uchar key_value;uchar Time_ms;uchar menu_value;uchar Week_BJ;bit Key_Flag; //键盘按下标志bit zd_flag; //正点报时标志bit Clock_Flag; //有无设置闹钟标志位bit Clock; //闹钟响应了的标志位bit XS_Flag;bit Xingqi;bit Xing;uchar code TEXT[5][17]={ "MENU""->1.Set Time""->2.Set Clock ""->3.Week alarm""->4.explanation""->5.Exit "};uchar code HELP_TEXT[5][16]={"1calendar clock""2You can alter""3Time with Key""4EnterUpDown""5Made by ""6310600…… ""7huangbeiyong"};//*********所包含的子程序************//void DelayXms(uint x); //延时子函数void LCD_Write_Command(uchar Command); //写指令void LCD_Write_Data(uchar LCDData); //写数据void LCD_Printc(uchar Xuchar Yuchar DataLCD); //送显示单字节void LCD_Prints(uchar Xuchar Yuchar *StringLCD); //送显示字符串void LCD_Init(void); //初始化LCDvoid LCD_CLR(void); //清屏void LCD_pos(uchar pos); //在那位置光标闪烁void Time_update();uchar Month_deal();uchar Year_deal();void CLSJ_Time(void);void XS_Time(void);void XS_Set_Time(void);void XS_Set_Clock(void);void Set_Time(void);void Set_Clock(void);void Clock_CL(void);void ZD_CL(void);void Syetem_init(void);void Display_menu(void);uchar Key_check(void);void Get_key(void);void Week_Baojing(void);void Week_XS(void);void Xing_CL(void);void Help(void);//***********中断子程序***************//void extern0_ISR() interrupt 0{}void timer0_ISR() interrupt 1{}void extern1_ISR() interrupt 2{}void timer1_ISR() interrupt 3{}void serial_ISR() interrupt 4{}void timer2_ISR() interrupt 5 // 50ms 定时器T2工作在16位自动重装初值方式,定时// {TF2=0; // 清除T2中断标志//if(Time_ms>20){Time_ms=1;Time_update();if(!Key_Flag) XS_Flag=1;}else{Time_ms++;if(!Key_Enter)Clock=0;if(Xingqi){if(!Key_Enter) Xing=0;}XS_Flag=0;}}//***********延时子程序***************/void DelayXms(uint x) //延时X毫秒{uint n;while(x--){for(n=0;n59){Min=Min+1;//分钟到调用闹钟比较if (Clock_Flag) //闹钟开启,调用比较{if(Hour==0&&Min==0&&Second==0){ zd_flag=1;Xing=0; Clock=0;} else{for(ClockNum=0;ClockNum59){Hour=Hour+1;Min=0;if(Hour>23){Day=Day+1;Week=Week+1;if(Week>7) {Week=1;}Hour=0;if(Day>=Month_deal()){Month=Month+1;Day=1;if(Month>12){Year=Year+1;Month=1;if(Year>9999)Year=0;}}}}if(Second==0&&Min==0)zd_flag=1;}//***********Month_deal()月处理**************// uchar Month_deal(){switch(Month){case 1:case 3:case 5:case 7:case 8:case 10:case 12:return 31;break;case 2:{if(Year_deal()) return 29;else return 28;}break;case 4:case 6:case 9:case 11:return 30; break;default:return 1; break;}//******Year_deal()判断是否为闰年**************//uchar Year_deal(){uint year;year=Year+2000;if(((year%400!=0)&&(year%4==0))||(year%400==0)) { return 1;}else return 0;}//************LCD1602子程序*******************//void LCD_Write_Command(uchar Command){LCD_RS=0; //指令LCD_RW=0; //写入LCD_Data=Command;LCD_EN=1; //准备DelayXms(1);LCD_EN=0; //下降沿有效}void LCD_Write_Data(uchar LCDData){LCD_RS=1; //数据LCD_RW=0; //写入LCD_Data=LCDData;LCD_EN=1;DelayXms(1); //准备LCD_EN=0; //下降沿有效}void LCD_Printc(unsigned char Xunsigned char YucharDataLCD) {if(Y)X|=0x0C0; //显示第二行字符,地址码+0x80X|=0x80; //X 不能大于15LCD_Write_Command(X); //发送地址码LCD_Write_Data(DataLCD);}void LCD_Prints(uchar Xuchar Yuchar *StringLCD) {uchar ListLength;ListLength=0; //长度先置0DelayXms(1);while(StringLCD[ListLength]>0x10){if(X=5){menu_value=1;}else menu_value++;Display_menu();break;case Down:if(menu_value。

基于51单片机的多功能数字电子钟的设计

基于51单片机的多功能数字电子钟的设计

目录1 绪论 (1)1.1电子时钟的研究背景 (1)1.2电子时钟的国内外研究现状 (2)2 AT89S51单片机简介 (3)3 硬件系统设计 (4)3.1系统框架设计 (4)3.2模块设计 (5)3.2.1单片机系统电路 (5)3.2.2复位电路 (6)3.2.3晶振电路 (7)3.2.4数码管显示驱动电路 (7)3.2.5定时报时电路设计 (9)3.2.6按钮设置电路 (10)4 软件系统设计 (11)4.1主程序流程图 (11)4.2系统设计的源程序 (12)总结 (20)参考文献 (21)1 绪论1.1电子时钟的研究背景20世纪末,电子技术得到了极速的发展,毫无疑问,在其推动下,现代电子产品以及各种高科技产品几乎渗透到了社会的各个领域,这有力地推动了社会生产力的发展和社会信息化程度以及综合科技水平的提高,但产品更新换代的频率也越来越快。

随着科技的发展社会的进步和全球化竞争的日益激烈,人们对数字钟的要求也越来越高,传统的时钟已不能满足人们的需求。

多功能电子钟不管在性能还是在样式亦或是用途上都发生了重大的变化,许多电子钟都已具备电子闹钟、电子秒表、温度检测等功能。

同时单片机在多功能数字钟中的应用已是非常普遍的。

多功能电子时钟除了具有时钟的功能外还可以包含对环境温度检测的功能。

温度是一种最基本的环境参数。

在各个行业生产及日常生活中,对温度的测量及控制始终占据着非常重要的地位。

目前,典型的温度检测控制系统由模拟式温度传感器、A/D转换电路和各种单片机组成。

由于模拟式温度传感器输出的模拟信号必须经过A/D转换环节转换为数字信号后才能与单片机等微处理器接口进行读写的操作,所以硬件电路会比较复杂,成本较高。

而以DS18B20为代表的新型单线总线数字式温度传感器集温度测量和A/D转换于一体,这类传感器可以直接输出数字量,同时与单片机接口电路结构非常简单,可以广泛用于距离远、节点分布多的场合,具有较强推广应用价值。

基于51单片机的多功能电子时钟设计

基于51单片机的多功能电子时钟设计

单片机应用设计入门课程设计尹康2012029010010一. 题目利用51单片机设计一个电子时钟要求:能够用数码管显示小时、分钟、秒,各2位数字;系统应具有复位电路、电源电路等基本组成部分;能够进行时间设定;能够进行日期设定。

二. 方案设计1.系统框图直流电源复位电路独立按键控制部分STC89C51显示部分(8位共阴数码管)2.设计说明用单片机定时器完成计时功能,定时器0计时中断程序每隔0.01s中断一次并当作一个计数,设定定时1秒的中断计数初值为100,每中断一次中断计数初值减1,当减到0时,则表示1s到了,秒变量加1,同理再判断是否1min钟到了,再判断是否1h 到了。

采用动态显示法实现LED显示:通过对每位数码管的依次扫描,使对应数码管亮,同时向该数码管送对应的字码,使其显示数字。

由于数码管扫描周期很短,由于人眼的视觉暂留效应,使数码管看起来总是亮的,从而实现了各种显示。

该电子时钟由STC89C51,BUTTON,共阴数码管等构成,采用晶振电路作为驱动电路,晶振电路的晶振频率为12MHZ。

60秒为一分钟,60分钟为一小时,24小时为一天,又重00:00:00开始计时。

没有按键按键按下时,时钟正常运行。

当按下调节时钟按键change,时钟就会进入设置时间界面(时钟不会停止工作),重复按下change 键,系统状态在调整小时、调整分钟、正常显示之间切换。

按add或reduce键,就可以数值进行加1或减1操作。

三. 电路设计1.整体电路:2.8位共阴数码管电路:3.单片机系统:4.独立按键电路:5.晶振6.复位电路:7.电源电路:四. 程序设计#include<reg52.h> //包含单片机寄存的头文件sbit led1=P1^0; sbit led2=P1^2; sbit led5=P1^5; sbit du=P2^6;//段选sbit we=P2^7;//位选sbit s1=P3^4;sbit s2=P3^5;sbit s3=P3^6;sbit s4=P3^7;sbit beep=P2^3; sbit dot=P0^7; unsigned char shi,fen,miao,unit,keyv,key,av,ashi,afen,ami ao;void delay() //1ms{unsigned char a,b;for(b=102;b>0;b--)for(a=3;a>0;a--);}void delay5(void) //误差5ms{unsigned char a,b;for(b=15;b>0;b--)for(a=152;a>0;a--);}void delayhalf (void) //误差0.5s{unsigned char a,b,c;for(c=23;c>0;c--)for(b=152;b>0;b--)for(a=70;a>0;a--);}void display( unsigned char h,f,s){unsigned char codeduma[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d, 0x7d,0x07,0x7f,0x6f,0x77,0x38}; unsigned char codemawei[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0 xbf,0x7f};unsigned char shiwan,wan,qian,bai,shi,ge;shiwan=h/10;wan=h%10;qian=f/10;bai=f%10;shi=s/10;ge=s%10;P0=duma[shiwan];du=1;du=0;P0=mawei[0];we=1;we=0;delay();P0=duma[wan];dot=1;du=1;du=0;dot=0;P0=mawei[1];we=1;we=0;delay();P0=duma[qian]; du=1;du=0;P0=mawei[2];we=1;we=0;delay();P0=duma[bai]; dot=1;du=1;du=0;dot=0;P0=mawei[3];we=1;we=0;delay();if(key!=1&&key!=2) {P0=duma[shi];du=1;du=0;P0=mawei[4];we=1;we=0;delay();P0=duma[ge];du=1;du=0;P0=mawei[5];we=1;we=0;delay();}if(key==1||key==2) {P0=duma[10];du=1;du=0;P0=mawei[4]; we=1;we=0;delay();P0=duma[11]; du=1;du=0;P0=mawei[5]; we=1;we=0;delay();}P0=0xff;we=1;we=0;}passtime(){if(unit==100) {miao++;unit=0;led1=!led1;led2=!led2; }if(miao==60) {fen++;miao=0;}if(fen==60) {shi++;fen=0;}if(shi==24) {shi=0;} }void InitTimer0(void)//10ms{TMOD = 0x01;TH0 = 0x0DC;TL0 = 0x00;EA = 1;ET0 = 1;TR0 = 1;unit=0;}void Timer0Interrupt(void) interrupt 1 {TH0 = 0x0DC;TL0 = 0x00;unit++ ;//add your code here! passtime();}void adjustment(void){if(s1==0){delay5();if(s1==0){while(!s1);amiao=0;key++;led5=0;if(key==5){key=0;TR0=1;led5=1;}}}//s1 countif(s2==0){delay5();if(s2==0){while(!s2);if(key==1)//alram{ashi++;if(ashi==24){ashi=0;}}if(key==2){afen++;if(afen==60){afen=0;}}//alramif(key==4)/////{miao=0;TR0=0;fen++;if(fen==60){fen=0;}}if(key==3)///{miao=0;TR0=0;shi++;if(shi==24){shi=0;}}}}//adj +///////////////////adj-if(s3==0) {delay5();if(s3==0){while(!s3);if(key==1)//alram{ashi--;if(ashi==-1){ashi=23;}}if(key==2){afen--;if(afen==-1){afen=59;}}//alramif(key==4)//{miao=0;TR0=0;fen--;if(fen==-1){fen=59;}}if(key==3)///{miao=0;TR0=0;shi--;if(shi==-1){shi=23;}}}}//adj -}void alarm(void){if(fen!=afen){av=0;}if(av==0){if(shi==ashi&&fen==afen){beep=0;delayhalf();beep=1;delayhalf();beep=0;delayhalf();beep=1;delayhalf();}}//av==0}********************************* 主函数*********************************void main(void){ashi=7;afen=0;InitTimer0();led2=0;while(1){if(keyv==0)//close display{if(s4==0){delay5();if(s4==0){while(!s4);keyv=1;av=1;}}}if(keyv==1){if(s4==0){delay5();if(s4==0){while(!s4); keyv=0; } }}//close displayif(keyv==0){adjustment();if(key!=1&&key!=2){display(shi,fen,miao);}if(key==1||key==2){display(ashi,afen,amiao);}}if(key==0||key==3||key==4){alarm();}}//while}五. 实物仿真六. 心得体会1.单片机,是集CPU ,RAM ,ROM ,定时器,计数器和多种接口于一体的微控制器,自20世纪70年代问世以来,以其极高的性价比,受到人们的重视和关注,应用很广、发展很快。

电子综合设计(附完整程序版)基于单片机多功能数字时钟1资料

电子综合设计(附完整程序版)基于单片机多功能数字时钟1资料

课题:基于51单片机的多功能数字时钟系统设计一、概述、设计思路该设计方案是以MC51单片机为核心,采用LCD液晶屏幕显示系统,辅以闹钟模块,温度采集模块、日期提醒、键盘时间调整预设置等模块,所构建的数字时钟系统,能动态显示实时时钟的时、分、秒,数据显示(误差限制在30每天),对闹铃方式与温度调节模块进行了重点设计实现SB0、SB1、SB2、SB3四个键实现时钟正常显示,调时,及闹钟时间设置。

本系统设计大部分功能有软件来实现,使电路简单明了,系统稳定性也得大大提高。

二、系统组成与工作原理1、工作原理:本设计采用STC89C51单片机作为本次课程设计的控制模块。

单片机可把由DS18B20、DS1302、AT24C02中的数据利用软件来进行处理,从而把数据传输到显示模块,实现温度、日历和闹铃的显示。

以LCD液晶显示器为显示模块,把单片机传来的的数据显示出来,并且显示多样化,在显示电路中,主要靠按键来实现各种显示要求的选择与切换。

2、总是设计框架图:图二:系统总体电路图三、单元电路的设计与分析整个电子时钟系统电路可分为六大部分:中央处理单元(CPU)、复位电路部分、显示部分、键盘输入部分、温度采集部分。

1、MCS-51单片机89S51各引脚功能介绍:VCC:89S51 电源正端输入,接+5V。

VSS:电源地端。

XTAL1:单芯片系统时钟的反相放大器输入端。

XTAL2:系统时钟的反相放大器输出端,一般在设计上只要在XTAL1 和XTAL2 上接上一只石英振荡晶体系统就可以动作了,此外可以在两引脚与地之间加入一20PF 的小电容,可以使系统更稳定,避免噪声干扰而死机。

A T89S51RESET:89S51的重置引脚,高电平动作,当要对晶片重置时,只要对此引脚电平提升至高电平并保持两个机器周期以上的时间,AT89S51便能完成系统重置的各项动作,使得内部特殊功能寄存器之内容均被设成已知状态,并且至地址0000H处开始读入程序代码而执行程序。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

课题:基于51单片机的多功能数字时钟系统设计一、概述、设计思路该设计方案是以MC51单片机为核心,采用LCD液晶屏幕显示系统,辅以闹钟模块,温度采集模块、日期提醒、键盘时间调整预设置等模块,所构建的数字时钟系统,能动态显示实时时钟的时、分、秒,数据显示(误差限制在30每天),对闹铃方式与温度调节模块进行了重点设计实现SB0、SB1、SB2、SB3四个键实现时钟正常显示,调时,及闹钟时间设置。

本系统设计大部分功能有软件来实现,使电路简单明了,系统稳定性也得大大提高。

二、系统组成与工作原理1、工作原理:本设计采用STC89C51单片机作为本次课程设计的控制模块。

单片机可把由DS18B20、DS1302、AT24C02中的数据利用软件来进行处理,从而把数据传输到显示模块,实现温度、日历和闹铃的显示。

以LCD液晶显示器为显示模块,把单片机传来的的数据显示出来,并且显示多样化,在显示电路中,主要靠按键来实现各种显示要求的选择与切换。

2、总是设计框架图:图二:系统总体电路图三、单元电路的设计与分析整个电子时钟系统电路可分为六大部分:中央处理单元(CPU)、复位电路部分、显示部分、键盘输入部分、温度采集部分。

1、MCS-51单片机89S51各引脚功能介绍:VCC:89S51 电源正端输入,接+5V。

VSS:电源地端。

XTAL1:单芯片系统时钟的反相放大器输入端。

XTAL2:系统时钟的反相放大器输出端,一般在设计上只要在XTAL1 和XTAL2 上接上一只石英振荡晶体系统就可以动作了,此外可以在两引脚与地之间加入一20PF 的小电容,可以使系统更稳定,避免噪声干扰而死机。

A T89S51RESET:89S51的重置引脚,高电平动作,当要对晶片重置时,只要对此引脚电平提升至高电平并保持两个机器周期以上的时间,AT89S51便能完成系统重置的各项动作,使得内部特殊功能寄存器之内容均被设成已知状态,并且至地址0000H处开始读入程序代码而执行程序。

EA/Vpp:"EA"为英文"External Access"的缩写,表示存取外部程序代码之意,低电平动作,也就是说当此引脚接低电平后,系统会取用外部的程序代码(存于外部EPROM中)来执行程序。

因此在8031及8032中,EA引脚必须接低电平,因为其内部无程序存储器空间。

如果是使用8751 内部程序空间时,此引脚要接成高电平。

此外,在将程序代码烧录至8751内部EPROM时,可以利用此引脚来输入21V的烧录高压(Vpp)。

ALE/PROG:端口3的管脚设置:P3.0:RXD,串行通信输入。

P3.1:TXD,串行通信输出。

P3.2:INT0,外部中断0输入。

P3.3:INT1,外部中断1输入。

P3.4:T0,计时计数器0输入。

P3.5:T1,计时计数器1输入。

P3.6:WR:外部数据存储器的写入信号。

P3.7:RD,外部数据存储器的读取信号。

2、复位电路MCS-51单片机的复位是由外部的复位电路来实现的。

复位引脚RST通过一个斯密特触发器与复位电路相连,斯密特触发器用来抑制噪声,在每个机器周期的S5P2,斯密特触发器的输出电平由复位电路采样一次,然后才能得到内部复位操作所需要的信号。

上电复位:上电复位电路是—种简单的复位电路,只要在RST复位引脚接一个电容到VCC,接一个电阻到地就可以了。

上电复位是指在给系统上电时,复位电路通过电容加到RST 复位引脚一个短暂的高电平信号,这个复位信号随着VCC对电容的充电过程而回落,所以RST引脚复位的高电平维持时间取决于电容的充电时间。

为了保证系统安全可靠的复位,RST 引脚的高电平信号必须维持足够长的时间。

电路图如下:上电自动复位是通过外部复位电路的电容充电来实现的。

只要Vcc的上升时间不超过1ms,就可以实现自动上电复位。

3、时钟电路时钟是单片机的心脏,单片机各功能部件的运行都是以时钟频率为基准,有条不紊的一拍一拍地工作。

因此,时钟频率直接影响单片机的速度,时钟电路的质量也直接影响单片机系统的稳定性。

常用的时钟电路有两种方式:一种是内部时钟方式,另一种为外部时钟方式。

本文用的是内部时钟方式。

电路图如下:MCS-51单片机内部有一个用于构成振荡器的高增益反相放大器,该高增益反向放大器的输入端为芯片引脚XTAL1,输出端为引脚XTAL2。

这两个引脚跨接石英晶体振荡器和微调电容,就构成一个稳定的自激振荡器。

4、显示电路采用LCD显示,LCD显示具有丰富多样性,灵活性,电路简单、易于控制而且功耗小,对于信息量多的系统,是比较适合的,LCD液晶显示模块采用LCD1602型号,具有很低的功耗,正常工作室电流仅 2.0mA/5.0V。

通过编程实现总动关闭屏幕能够更有效地降低功耗。

LCD1602分两行显示,每行可现实多达16个字符,其内部的字符发生器已经存储了160个不同的点阵字符图形,通过内部指令可实现对其显示多样的控制。

5、按键电路按键的开关状态通过一定的电路转换为高、低电平状态。

按键闭合过程在相应的I/O 端口形成一个负脉冲。

闭合和释放过程都要经过一定的过程才能达到稳定,这一过程是处于高、低电平之间的一种不稳定状态,称为抖动。

抖动持续时间的常长短与开关的机械特性有关,一般在5-10ms之间。

为了避免CPU多次处理按键的一次闭合,应采用措施消除抖动。

本文采用的是独立式按键,直接用I/O口线构成单个按键电路,每个按键占用一条I/O口线,每个按键的工作状态不会产生互相影响。

电路图如下:P1.0口表示功能移位键,按键选择要调整的时十位、时个位、分十位或分个位。

P1.1口表示数字“+“键,按一下则对应的数字加1。

P1.2口表示数字“-”键,按一下则对应的数字减1。

P1.3口表示时间表的切换,程序默认为日常时间表,当按下该开关,使输入为低电平时,表示当前执行的是考试时间表,并有绿发光二极管显示。

再按键,使键抬起,输入维高电平时,表示当前执行的是日常作息时间表,用红发光二级管显示。

6、温度采集部分此部分选用DS18B20 传感器,主要由四部分组成:64 位ROM、温度传感器、非挥发的温度报警触发器TH 和TL、配置寄存器。

有三个管脚:DQ 为数字信号输入/输出端;GND 为电源地;VDD 为外接供电电源输入端。

电源有两种接法:1)远端因入;2)寄生电源方式。

它是支持“一线总线”接口的温度传感器,测量温度范围为-55°C~+125°C,在-10~+85°C 范围内,可编程为9 位—12 位A/D 转换精度,工作电压在3V—5V 之间。

现场温度直接以“一线总线”的数字方式传输,大大提高了系统的抗干扰性。

###软件设计:#include <REG51.H>#include <intrins.h>//#include "LCD1602.h"//#include "DS1302.h"#define uint unsigned int#define uchar unsigned charsbit DS1302_CLK = P1^7; //实时时钟时钟线引脚sbit DS1302_IO = P1^6; //实时时钟数据线引脚sbit DS1302_RST = P1^5; //实时时钟复位线引脚sbit wireless_1 = P3^0;sbit wireless_2 = P3^1;sbit wireless_3 = P3^2;sbit wireless_4 = P3^3;sbit ACC0 = ACC^0;sbit ACC7 = ACC^7;char hide_sec,hide_min,hide_hour,hide_day,hide_week,hide_month,hide_year; //秒,分,时到日,月,年位闪的计数sbit Set = P2^0; //模式切换键sbit Up = P2^1; //加法按钮sbit Down = P2^2; //减法按钮sbit out = P2^3; //立刻跳出调整模式按钮sbit DQ = P1^0; //温度传送数据IO口char done,count,temp,flag,up_flag,down_flag;uchar temp_value; //温度值uchar TempBuffer[5],week_value[2];void show_time(); //液晶显示程序/***********1602液晶显示部分子程序****************///Port Definitions**********************************************************sbit LcdRs = P2^5;sbit LcdRw = P2^6;sbit LcdEn = P2^7;sfr DBPort = 0x80; //P0=0x80,P1=0x90,P2=0xA0,P3=0xB0.数据端口//内部等待函数************************************************************************** unsigned char LCD_Wait(void){LcdRs=0;LcdRw=1; _nop_();LcdEn=1; _nop_();LcdEn=0;return DBPort;}//向LCD写入命令或数据************************************************************ #define LCD_COMMAND 0 // Command#define LCD_DATA 1 // Data#define LCD_CLEAR_SCREEN 0x01 // 清屏#define LCD_HOMING 0x02 // 光标返回原点void LCD_Write(bit style, unsigned char input){LcdEn=0;LcdRs=style;LcdRw=0; _nop_();DBPort=input; _nop_();//注意顺序LcdEn=1; _nop_();//注意顺序LcdEn=0; _nop_();LCD_Wait();}//设置显示模式************************************************************#define LCD_SHOW 0x04 //显示开#define LCD_HIDE 0x00 //显示关#define LCD_CURSOR 0x02 //显示光标#define LCD_NO_CURSOR 0x00 //无光标#define LCD_FLASH 0x01 //光标闪动#define LCD_NO_FLASH 0x00 //光标不闪动void LCD_SetDisplay(unsigned char DisplayMode){LCD_Write(LCD_COMMAND, 0x08|DisplayMode);}//设置输入模式************************************************************#define LCD_AC_UP 0x02#define LCD_AC_DOWN 0x00 // default#define LCD_MOVE 0x01 // 画面可平移#define LCD_NO_MOVE 0x00 //defaultvoid LCD_SetInput(unsigned char InputMode){LCD_Write(LCD_COMMAND, 0x04|InputMode);}//初始化LCD************************************************************ void LCD_Initial(){LcdEn=0;LCD_Write(LCD_COMMAND,0x38); //8位数据端口,2行显示,5*7点阵LCD_Write(LCD_COMMAND,0x38);LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR); //开启显示, 无光标LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN); //清屏LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE); //AC递增, 画面不动}//液晶字符输入的位置************************void GotoXY(unsigned char x, unsigned char y){if(y==0)LCD_Write(LCD_COMMAND,0x80|x);if(y==1)LCD_Write(LCD_COMMAND,0x80|(x-0x40));}//将字符输出到液晶显示void Print(unsigned char *str){while(*str!='\0'){LCD_Write(LCD_DATA,*str);str++;}}///////////////////////////////////////////////////////////////////////////////////////////////////***********DS1302时钟部分子程序******************/typedef struct __SYSTEMTIME__{unsigned char Second;unsigned char Minute;unsigned char Hour;unsigned char Week;unsigned char Day;unsigned char Month;unsigned char Year;unsigned char DateString[11];unsigned char TimeString[9];}SYSTEMTIME; //定义的时间类型SYSTEMTIME CurrentTime;#define AM(X) X#define PM(X) (X+12) // 转成24小时制#define DS1302_SECOND 0x80 //时钟芯片的寄存器位置,存放时间#define DS1302_MINUTE 0x82#define DS1302_HOUR 0x84#define DS1302_WEEK 0x8A#define DS1302_DAY 0x86#define DS1302_MONTH 0x88#define DS1302_YEAR 0x8Cvoid DS1302InputByte(unsigned char d) //实时时钟写入一字节(内部函数) {unsigned char i;ACC = d;for(i=8; i>0; i--){DS1302_IO = ACC0; //相当于汇编中的RRCDS1302_CLK = 1;DS1302_CLK = 0;ACC = ACC >> 1;}}unsigned char DS1302OutputByte(void) //实时时钟读取一字节(内部函数) {unsigned char i;for(i=8; i>0; i--){ACC = ACC >>1; //相当于汇编中的RRCACC7 = DS1302_IO;DS1302_CLK = 1;DS1302_CLK = 0;}return(ACC);}void Write1302(unsigned char ucAddr, unsigned char ucDa) //ucAddr: DS1302地址, ucData: 要写的数据{DS1302_RST = 0; // Write1302(0x8e,0x00);DS1302_CLK = 0;DS1302_RST = 1;DS1302InputByte(ucAddr); // 地址,命令DS1302InputByte(ucDa); // 写1Byte数据DS1302_CLK = 1;DS1302_RST = 0;}unsigned char Read1302(unsigned char ucAddr) //读取DS1302某地址的数据{unsigned char ucData;DS1302_RST = 0;DS1302_CLK = 0;DS1302_RST = 1;DS1302InputByte(ucAddr|0x01); // 地址,命令ucData = DS1302OutputByte(); // 读1Byte数据DS1302_CLK = 1;DS1302_RST = 0;return(ucData);}void DS1302_GetTime(SYSTEMTIME *Time) //获取时钟芯片的时钟数据到自定义的结构型数组{unsigned char ReadValue;ReadValue = Read1302(DS1302_SECOND);Time->Second = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F); //高三位取出读出乘⑩ReadValue = Read1302(DS1302_MINUTE);Time->Minute = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);ReadValue = Read1302(DS1302_HOUR);Time->Hour = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);ReadValue = Read1302(DS1302_DAY);Time->Day = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);ReadValue = Read1302(DS1302_WEEK);Time->Week = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);ReadValue = Read1302(DS1302_MONTH);Time->Month = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);ReadValue = Read1302(DS1302_YEAR);Time->Year = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);}void DateToStr(SYSTEMTIME *Time) //将时间年,月,日,星期数据转换成液晶显示字符串,放到数组里DateString[]{if(hide_year<2) //这里的if,else语句都是判断位闪烁,<2显示数据,>2就不显示,输出字符串为2007/07/22{Time->DateString[0] = '2';Time->DateString[1] = '0';Time->DateString[2] = Time->Year/10 + '0';Time->DateString[3] = Time->Year%10 + '0';}else{Time->DateString[0] = ' ';Time->DateString[1] = ' ';Time->DateString[2] = ' ';Time->DateString[3] = ' ';}Time->DateString[4] = '/';if(hide_month<2){Time->DateString[5] = Time->Month/10 + '0';Time->DateString[6] = Time->Month%10 + '0';}else{Time->DateString[5] = ' ';Time->DateString[6] = ' ';}Time->DateString[7] = '/';if(hide_day<2){Time->DateString[8] = Time->Day/10 + '0';Time->DateString[9] = Time->Day%10 + '0';}else{Time->DateString[8] = ' ';Time->DateString[9] = ' ';}if(hide_week<2){week_value[0] = Time->Week%10 + '0'; //星期的数据另外放到week_value[]数组里,跟年,月,日的分开存放,因为等一下要在最后显示}else{week_value[0] = ' ';}week_value[1] = '\0';Time->DateString[10] = '\0'; //字符串末尾加'\0' ,判断结束字符}void TimeToStr(SYSTEMTIME *Time) //将时,分,秒数据转换成液晶显示字符放到数组TimeString[]; {if(hide_hour<2){Time->TimeString[0] = Time->Hour/10 + '0';Time->TimeString[1] = Time->Hour%10 + '0';}else{Time->TimeString[0] = ' ';Time->TimeString[1] = ' ';}Time->TimeString[2] = ':';if(hide_min<2){Time->TimeString[3] = Time->Minute/10 + '0';Time->TimeString[4] = Time->Minute%10 + '0';}else{Time->TimeString[3] = ' ';Time->TimeString[4] = ' ';}Time->TimeString[5] = ':';if(hide_sec<2){Time->TimeString[6] = Time->Second/10 + '0';Time->TimeString[7] = Time->Second%10 + '0';}else{Time->TimeString[6] = ' ';Time->TimeString[7] = ' ';}Time->DateString[8] = '\0';}void Initial_DS1302(void) //时钟芯片初始化{unsigned char Second=Read1302(DS1302_SECOND);if(Second&0x80) //判断时钟芯片是否关闭{Write1302(0x8e,0x00); //写入允许Write1302(0x8c,0x07); //以下写入初始化时间日期:07/07/25.星期: 3. 时间: 23:59:55 Write1302(0x88,0x07);Write1302(0x86,0x25);Write1302(0x8a,0x07);Write1302(0x84,0x23);Write1302(0x82,0x59);Write1302(0x80,0x55);Write1302(0x8e,0x80); //禁止写入}}//----------------------/////////////////////////////////////////////////////////////////////////***********ds18b20子程序*************************//***********ds18b20延迟子函数(晶振12MHz )*******/void delay_18B20(unsigned int i){while(i--);}/**********ds18b20初始化函数**********************/void Init_DS18B20(void){unsigned char x=0;DQ = 1; //DQ复位delay_18B20(8); //稍做延时DQ = 0; //单片机将DQ拉低delay_18B20(80); //精确延时大于480usDQ = 1; //拉高总线delay_18B20(14);x=DQ; //稍做延时后如果x=0则初始化成功x=1则初始化失败delay_18B20(20);}/***********ds18b20读一个字节**************/unsigned char ReadOneChar(void){uchar i=0;uchar dat = 0;for (i=8;i>0;i--){DQ = 0; // 给脉冲信号dat>>=1;DQ = 1; // 给脉冲信号if(DQ)dat|=0x80;delay_18B20(4);}return(dat);}/*************ds18b20写一个字节****************/void WriteOneChar(uchar dat){unsigned char i=0;for (i=8; i>0; i--){DQ = 0;DQ = dat&0x01;delay_18B20(5);DQ = 1;dat>>=1;}}/**************读取ds18b20当前温度************/void ReadTemp(void){unsigned char a=0;unsigned char b=0;unsigned char t=0;Init_DS18B20();WriteOneChar(0xCC); // 跳过读序号列号的操作WriteOneChar(0x44); // 启动温度转换delay_18B20(100); // this message is wery importantInit_DS18B20();WriteOneChar(0xCC); //跳过读序号列号的操作WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器)前两个就是温度delay_18B20(100);a=ReadOneChar(); //读取温度值低位b=ReadOneChar(); //读取温度值高位temp_value=b<<4;temp_value+=(a&0xf0)>>4;}void temp_to_str() //温度数据转换成液晶字符显示{TempBuffer[0]=temp_value/10+'0'; //十位TempBuffer[1]=temp_value%10+'0'; //个位TempBuffer[2]=0xdf; //温度符号TempBuffer[3]='C';TempBuffer[4]='\0';}void Delay1ms(unsigned int count){unsigned int i,j;for(i=0;i<count;i++)for(j=0;j<120;j++);}//////////////////////////////////////////////////////////////////////////////////////////////*延时子程序*/void mdelay(uint delay){ uint i;for(;delay>0;delay--){for(i=0;i<62;i++) //1ms延时.{;}}}void outkey() //跳出调整模式,返回默认显示{ uchar Second;if(out==0||wireless_1==1){ mdelay(8);count=0;hide_sec=0,hide_min=0,hide_hour=0,hide_day=0,hide_week=0,hide_month=0,hide_year=0;Second=Read1302(DS1302_SECOND);Write1302(0x8e,0x00); //写入允许Write1302(0x80,Second&0x7f);Write1302(0x8E,0x80); //禁止写入done=0;while(out==0);while(wireless_1==1);}}////////////////////////////////////////////////////////////////////////////////////////////////////////////void Upkey()//升序按键{Up=1;if(Up==0||wireless_2==1){mdelay(8);switch(count){case 1:temp=Read1302(DS1302_SECOND); //读取秒数temp=temp+1; //秒数加1up_flag=1; //数据调整后更新标志if((temp&0x7f)>0x59) //超过59秒,清零temp=0;break;case 2:temp=Read1302(DS1302_MINUTE); //读取分数temp=temp+1; //分数加1up_flag=1;if(temp>0x59) //超过59分,清零temp=0;break;case 3:temp=Read1302(DS1302_HOUR); //读取小时数temp=temp+1; //小时数加1up_flag=1;if(temp>0x23) //超过23小时,清零temp=0;break;case 4:temp=Read1302(DS1302_WEEK); //读取星期数temp=temp+1; //星期数加1up_flag=1;if(temp>0x7)temp=1;break;case 5:temp=Read1302(DS1302_DAY); //读取日数temp=temp+1; //日数加1up_flag=1;if(temp>0x31)temp=1;break;case 6:temp=Read1302(DS1302_MONTH); //读取月数temp=temp+1; //月数加1up_flag=1;if(temp>0x12)temp=1;break;case 7:temp=Read1302(DS1302_YEAR); //读取年数temp=temp+1; //年数加1up_flag=1;if(temp>0x85)temp=0;break;default:break;}while(Up==0);while(wireless_2==1);}}////////////////////////////////////////////////////////////////////////////////////////////////////////////void Downkey()//降序按键{Down=1;if(Down==0||wireless_3==1){mdelay(8);switch(count){case 1:temp=Read1302(DS1302_SECOND); //读取秒数temp=temp-1; //秒数减1down_flag=1; //数据调整后更新标志if(temp==0x7f) //小于0秒,返回59秒temp=0x59;break;case 2:temp=Read1302(DS1302_MINUTE); //读取分数temp=temp-1; //分数减1down_flag=1;if(temp==-1)temp=0x59; //小于0秒,返回59秒break;case 3:temp=Read1302(DS1302_HOUR); //读取小时数temp=temp-1; //小时数减1down_flag=1;if(temp==-1)temp=0x23;break;case 4:temp=Read1302(DS1302_WEEK); //读取星期数temp=temp-1; //星期数减1down_flag=1;if(temp==0)temp=0x7;;break;case 5:temp=Read1302(DS1302_DAY); //读取日数temp=temp-1; //日数减1down_flag=1;if(temp==0)temp=31;break;case 6:temp=Read1302(DS1302_MONTH); //读取月数temp=temp-1; //月数减1down_flag=1;if(temp==0)temp=12;break;case 7:temp=Read1302(DS1302_YEAR); //读取年数temp=temp-1; //年数减1down_flag=1;if(temp==-1)temp=0x85;break;default:break;}while(Down==0);while(wireless_3==1);}}void Setkey()//模式选择按键{Set=1;if(Set==0||wireless_4==1){mdelay(8);count=count+1; //Setkey按一次,count就加1done=1; //进入调整模式while(Set==0);while(wireless_4==1);}}void keydone()//按键功能执行{ uchar Second;if(flag==0) //关闭时钟,停止计时{ Write1302(0x8e,0x00); //写入允许temp=Read1302(0x80);Write1302(0x80,temp|0x80);Write1302(0x8e,0x80); //禁止写入flag=1;}Setkey(); //扫描模式切换按键switch(count){case 1:do //count=1,调整秒{outkey(); //扫描跳出按钮Upkey(); //扫描加按钮Downkey(); //扫描减按钮if(up_flag==1||down_flag==1) //数据更新,重新写入新的数据{Write1302(0x8e,0x00); //写入允许Write1302(0x80,temp|0x80); //写入新的秒数Write1302(0x8e,0x80); //禁止写入up_flag=0;down_flag=0;}hide_sec++; //位闪计数if(hide_sec>3)hide_sec=0;show_time(); //液晶显示数据}while(count==2);break;case 2:do //count=2,调整分{hide_sec=0;outkey();Upkey();Downkey();if(temp>0x60)temp=0;if(up_flag==1||down_flag==1){Write1302(0x8e,0x00); //写入允许Write1302(0x82,temp); //写入新的分数Write1302(0x8e,0x80); //禁止写入up_flag=0;down_flag=0;}hide_min++;if(hide_min>3)hide_min=0;show_time();}while(count==3);break;case 3:do //count=3,调整小时{hide_min=0;outkey();Upkey();Downkey();if(up_flag==1||down_flag==1){Write1302(0x8e,0x00); //写入允许Write1302(0x84,temp); //写入新的小时数Write1302(0x8e,0x80); //禁止写入up_flag=0;down_flag=0;}hide_hour++;if(hide_hour>3)hide_hour=0;show_time();}while(count==4);break;case 4:do //count=4,调整星期{hide_hour=0;outkey();Upkey();Downkey();if(up_flag==1||down_flag==1){Write1302(0x8e,0x00); //写入允许Write1302(0x8a,temp); //写入新的星期数Write1302(0x8e,0x80); //禁止写入up_flag=0;down_flag=0;}hide_week++;if(hide_week>3)hide_week=0;show_time();}while(count==5);break;case 5:do //count=5,调整日{hide_week=0;outkey();Upkey();Downkey();if(up_flag==1||down_flag==1){Write1302(0x8e,0x00); //写入允许Write1302(0x86,temp); //写入新的日数Write1302(0x8e,0x80); //禁止写入up_flag=0;down_flag=0;}hide_day++;if(hide_day>3)hide_day=0;show_time();}while(count==6);break;case 6:do //count=6,调整月{hide_day=0;outkey();Upkey();Downkey();if(up_flag==1||down_flag==1){Write1302(0x8e,0x00); //写入允许Write1302(0x88,temp); //写入新的月数Write1302(0x8e,0x80); //禁止写入up_flag=0;down_flag=0;}hide_month++;if(hide_month>3)hide_month=0;show_time();}while(count==7);break;case 7:do //count=7,调整年{hide_month=0;outkey();Upkey();Downkey();if(up_flag==1||down_flag==1){Write1302(0x8e,0x00); //写入允许Write1302(0x8c,temp); //写入新的年数Write1302(0x8e,0x80); //禁止写入up_flag=0;down_flag=0;}hide_year++;if(hide_year>3)hide_year=0;show_time();}while(count==8);break;case 8: count=0;hide_year=0; //count8, 跳出调整模式,返回默认显示状态Second=Read1302(DS1302_SECOND);Write1302(0x8e,0x00); //写入允许Write1302(0x80,Second&0x7f);Write1302(0x8E,0x80); //禁止写入done=0;break; //count=7,开启中断,标志位置0并退出default:break;}}void show_time() //液晶显示程序{DS1302_GetTime(&CurrentTime); //获取时钟芯片的时间数据TimeToStr(&CurrentTime); //时间数据转换液晶字符DateToStr(&CurrentTime); //日期数据转换液晶字符ReadTemp(); //开启温度采集程序temp_to_str(); //温度数据转换成液晶字符GotoXY(12,1); //液晶字符显示位置Print(TempBuffer); //显示温度GotoXY(0,1);Print(CurrentTime.TimeString); //显示时间GotoXY(0,0);Print(CurrentTime.DateString); //显示日期GotoXY(15,0);Print(week_value); //显示星期GotoXY(11,0);Print("Week"); //在液晶上显示字母weekDelay1ms(400); //扫描延时}main(){flag=1; //时钟停止标志LCD_Initial(); //液晶初始化Init_DS18B20( ) ; //DS18B20初始化Initial_DS1302(); //时钟芯片初始化up_flag=0;down_flag=0;done=0; //进入默认液晶显示wireless_1=0;wireless_2=0;wireless_3=0;wireless_4=0;while(1){while(done==1)keydone(); //进入调整模式while(done==0){show_time(); //液晶显示数据flag=0;Setkey(); //扫描各功能键}}}功能实现图:(为完善出:闹钟设计还未实现,带编程)四、元器件明细表元器件名称参数备注单片机AT89S51(12MHZ) 1晶体DRYSTAL 12MHZ 1晶体DRYSTAL 32.768MHZ 1 温度测量芯片DS18B20 1 时钟模块DS1302 1存储器模块AT24C02 1LCD显示模块LCD1602 1 三极管PNP9012 1闹铃------ 1电容47μF 1五、调试所需的仪器设备基本测试仪器:万用电表、秒表、电源、温度表六、设计的难点和可能出现的问题1、设计难点:(1):温度设计模块的设计,(2):LCD显示模块的设计(3):闹铃设计模块的实现设计(4):单片机个功能模块的综合设计(5):电路总体设计,元器件选择及焊接,调试2、可能出现的问题:(1):温度显示,与实际偏差大(2):LCD显示模块的功能显示不正常(3):闹铃设计与其他时间功能设计冲突(4):软件程序设计功能不完善,系统无法正常运转七、预期达到的性能指标1、预期达到的性能指标:能动态显示实时时钟的时、分、秒,数据显示(误差限制在30每天),对闹铃方式与温度调节模块进行了重点设计实现SB0、SB1、SB2、SB3四个键实现时钟正常显示,调时,及闹钟时间设置。

相关文档
最新文档