1、绪论
20世纪末,电子技术获得了飞速的发展,在其推动下,现代电子产品几乎渗透了社会的各个领域,有力地推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能进一步提高,产品更新换代的节奏也越来越快。
目前,单片机正朝着高性能和多品种方向发展趋势将是进一步向着CMOS化、低功耗、小体积、大容量、高性能、低价格和外围电路内装化等几个方面发展。下面是单片机的主要发展趋势。单片机应用的重要意义还在于,它从根本上改变了传统的控制系统设计思想和设计方法。从前必须由模拟电路或数字电路实现的大部分功能,现在已能用单片机通过软件方法来实现了。这种软件代替硬件的控制技术也称为微控制技术,是传统控制技术的一次革命。单片机模块中最常见的是数字钟,数字钟是一种用数字电路技术实现时、分、秒计时的装置,与机械式时钟相比具有更高的准确性和直观性,且无机械装置,具有更更长的使用寿命,因此得到了广泛的使用。
实时显示与温度报警系统是采用单片机实现对时,分,秒,数字显示的计时装置,广泛用于个人家庭,车站,码头办公室等公共场所,成为人们日常生活中不可少的必需品,由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过老式钟表,钟表的数字化与温度报警装置给人们生产生活带来了极大的方便,而且把实时显示与温度检测及报警装置一体化,实现多种功能的一个系统。利用这个系统可以为定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备、仓库的温度检测与火灾报警等的实现提供依据,所有这些,都是以实时与温度检测为基础的。因此,研究数字钟与温度检测,有着非常现实的意义。
实时显示与温度报警系统在人们日常生活中扮演着重要角色,它广泛用于个人家庭以及车站、码头、剧场、办公室、仓库等公共场所,给人们的生活、学习、工作、娱乐带来极大的方便。由于数字集成电路技术的发展和采用了先进的石英技术,使数字钟具有走时准确、性能稳定、携带方便等优点,它还用于计时自动报时及温度自动控制防火防灾以及军事领域。
2总体方案设计
2.1方案比较
2.1.1方案一:
方案完全用软件实现数字时钟。原理为:在单片机内部存储器设三个字节分别存放时钟的时、分、秒信息。利用定时器与软件结合实现1秒定时中断,每产生一次中断,存储器内相应的秒值加1;若秒值达到60,则将其清零,并将相应的分字节值加1;若分值达到60,则清零分字节,并将时字节值加1;若时值达到24,则将时字节清零。该方案具有硬件电路简单的特点,但当单片机不上电,程序将不执行。而且由于每次执行程序时,定时器都要重新赋初值,所以该时钟精度不高。温度传感器采用热敏电阻,可满足40摄氏度至90摄氏度测量范围,但热敏电阻精度、重复性、可靠性较差,对于检测小于1摄氏度的信号是不适用的。
2.1.2方案二:
方案采用Dallas公司的专用时钟芯片DS1302。该芯片内部采用石英晶体振荡器,其芯片精度不大于10ms/年,且具有完备的时钟闹钟功能,因此,可直接对其以用于显示或设置,使得软件编程相对简单。为保证时钟在电网电压不足或突然掉电等突发情况下仍能正常工作,芯片内部包含锂电池。当电网电压不足或突然掉电时,可使系统自动转换到内部锂电池供电系统。而且即使系统不上电,程序不执行时,锂电池也能保证芯片的正常运行,以备随时提供正确的时间采用温度传感器DS18B20。DS18B20可以满足从-55摄氏度到+125摄氏度测量范围,且DS18B20测量精度高,增值量为0.5摄氏度,在一秒内把温度转化成数字,测得的温度值的存储在两个八位的RAM中,单片机直接从中读出数据转换成十进制就是温度,使用方便。
2.2方案论证
单片机微型计算机是微型计算机的一个重要分支,也是颇具生命力的机种。单片机微型计算机简称单片机,特别适用于控制领域,故又称为微控制器。
通常,单片机由单块集成电路芯片构成,内部包含有计算机的基本功能部件:中央处理器、存储器和I/O接口电路等。因此,单片机只需要和适当的软件及外部设备相结合,便可成为一个单片机控制系统。
凌阳16位单片机有丰富的中断源准确度相当高,并且C语言和汇编兼容的编程环境也很方便来实现一些递归调用。I/O口功能也比较强大,方便使用。用凌阳16位单片机做控制器最有特色的就是它的可编程音频处理,可完成语音的录制播放和识别。这些都方便对设计进行扩展,使设计更加完善。成本也相对低一些。但是,在控制与显示的结合上有些复杂,显示模组资源相对有限,而且单片机的稳定性不是很高,而且就需要完成万年历这个不太复杂的设计可以不必用凌阳16位单片机来完成,采用单片机既能够实现既定功能,成本也不高。综合考虑最后选择用单片机来作为中心控制器件。
液晶显示效果出众,可以运用菜单项来方便操作,比较简单,所以,最后选择液晶显示方案。
传统的数据记录方式是隔时采样或定时采样,没有具体的时间记录,因此,只能记录数据而无法准确记录其出现的时间;若采用单片机计时,一方面需要采用计数器,占用硬件资源,另一方面需要设置中断、查询等,同样耗费单片机的资源,而且,某些测控系统可能不允许。但是,如果在系统中采用时钟芯片DS1302,则能很好地解决这个问题。
2.3方案选择
基于以上方案比较与方案论证,以及DS1302高性能、低功耗的实时时钟芯片,附加31字节静态RAM,采用SPI三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号和RAM数据。实时时钟可提供秒、分、时、日、星期、月和年,一个月小与31天时可以自动调整,且具有闰年补偿功能的优点,以及DS18B20数字温度传感器的优点,本设计采用方案二实现实时显示与温度报警的功能。
3总体方案
3.1
工作原理
本设计采用STC89C52RC单片机作为本系统的控制模块。单片机可把由DS18B20、DS1302中的数据利用软件来进行处理,从而把数据传输到显示模块,实现温度、日历和闹铃的显示。以LCD液晶显示器为显示模块,把单片机传来的数据显示出来,并且显示多样化。在显示电路中,主要靠按键来实现各种显示要求的选择与切换。
3.2总体设计
本设计采用LCD液晶屏幕显示系统,以STC89C52RC单片机为核心,由键盘、温度采集、定时闹铃、日期提醒等功能模块组成。基于题目基本要求,本系统对时间显示、闹铃和温度采集系统行了重点设计。此外本设计还介绍了DS1302时钟芯片与DS18B20温度芯片LM016L液晶显示屏的原理与应用,本系统大部分功能由软件来实现,吸收了硬件软件化的思想,大部分功能通过软件来实现,使电路简单明了,系统稳定性大大提高。本系统不仅成功的实现了基本要求的功能,各功能部分也得到了实现,而且还具有一定的创新功能。设计总体框图如图3.1
STC89C52RC
DS1302
DS18B20
键盘输入
LCD液晶显示
蜂鸣器
图3.1设计总体框图
4单元模块设计
4.1各单元模块功能介绍及电路设计
4.1.1
STC89C52RC单片机模块
单片微型计算机简称单片机,是典型的嵌入式微控制器(Microcontroller
Unit),常用英文字母的缩写MCU表示单片机,它最早是被用在工业控制领域。单片机由芯片内仅有CPU的专用处理器发展而来。最早的设计理念是通过将大量外围设备和CPU集成在一个芯片中,使计算机系统更小,更容易集成进复杂的而对体积要求严格的控制设备当中。INTEL的Z80是最早按照这种思想设计出的处理器,从此以后,单片机和专用处理器的发展便分道扬镳。
单片机自动完成赋予它的任务的过程,也就是单片机执行程序的过程,即一条条执行的指令的过程,所谓指令就是把要求单片机执行的各种操作用的命令的形式写下来,这是在设计人员赋予它的指令系统所决定的,一条指令对应着一种基本操作;单片机所能执行的全部指令,就是该单片机的指令系统,不同种类的单片机,其指令系统亦不同。为使单片机能自动完成某一特定任务,必须把要解决的问题编成一系列指令(这些指令必须是选定单片机能识别和执行的指令),这一系列指令的集合就成为程序,程序需要预先存放在具有存储功能的部件——存储器中。存储器由许多存储单元(最小的存储单位)组成,就像大楼房有许多房间组成一样,指令就存放在这些单元里,单元里的指令取出并执行就像大楼房的每个房间的被分配到了唯一一个房间号一样,每一个存储单元也必须被分配到唯一的地址号,该地址号称为存储单元的地址,这样只要知道了存储单元的地址,就可以找到这个存储单元,其中存储的指令就可以被取出,然后再被执行。
程序通常是顺序执行的,所以程序中的指令也是一条条顺序存放的,单片机在执行程序时要能把这些指令一条条取出并加以执行,必须有一个部件能追踪指令所在的地址,这一部件就是程序计数器PC(包含在CPU中),在开始执行程序时,给PC赋以程序中第一条指令所在的地址,然后取得每一条要执行的命令,PC在中的内容就会自动增加,增加量由本条指令长度决定,可能是1、2或3,以指向下一条指令的起始地址,保证指令顺序执行。单片机可以根据设计的需要组成各种小系统,如下为STC89C52RC单片机的最小系统:
图4.1
单片机系统电路图
4.1.2
DS18B20温度测量模块:
若指令成功地使DS18B20完成温度测量,数据存储在DS18B20的存储器。一个控制功能指挥指示DS18B20的演出测温。测量结果将被放置在DS18B20内存中,并可以让阅读发出记忆功能的指挥,阅读内容的片上存储器。温度报警触发器TH和TL都有一字节EEPROM的数据。如果DS18B20不使用报警检查指令,这些寄存器可作为一般的用户记忆用途。在片上还载有配置字节以理想的解决温度数字转换。写TH,TL指令以及配置字节利用一个记忆功能的指令完成。通过缓存器读寄存器。所有数据的读,写都是从最低位开始。
温度测量传感器采用DALLAS公司DS18B20的单总线数字化温度传感器,测温范围为-55℃~125℃,可编程为9位~12位A/D转换精度,测温分辨率达到0.0625℃,采用寄生电源工作方式,CPU只需一根口线便能与DS18B20通信,占用CPU口线少,可节省大量引线和逻辑电路。接口电路如图4.2所示。
图4.2
DS18B20测量电路图
4.1.3
DS1302时钟模块:
DS1302的引脚排列,其中Vcc1为后备电源,VCC2为主电源。在主电源关闭的情况下,也能保持时钟的连续运行。DS1302由Vcc1或Vcc2两者中的较大者供电。当Vcc2大于Vcc1+0.2V时,Vcc2给DS1302供电。当Vcc2小于Vcc1时,DS1302由Vcc1供电。X1和X2是振荡源,外接32.768kHz晶振。RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。RST输入有两种功能:首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据的传送手段。当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。上电运行时,在Vcc≥2.5V之前,RST必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平。I/O为串行数据输入输出端(双向),后面有详细说明。SCLK始终是输入端。
图4.3
DS1302时钟电路图
4.1.4
LCD液晶显示模块
LCD液晶显示模块采用LCD1602型号,具有很低的功耗,正常工作时电流仅2.0mA/5.0V。通过编程实现自动关闭屏幕能够更有效的降低功耗。LCD1602分两行显示,每行可显示多达16个字符。LCD1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,通过内部指令可实现对其显示多样的控制,并且还能利用空余的空间自定义字符。其接线如图4.4所示:
图4.4
LCD液晶显示图
4.1.5系统功能按钮电路:
本设计系实时显示与温度监测以及报警装置于一身,所以其功能转换需要其他按钮来调节与控制,如下为系统功能按钮电路图:
图4.5
系统功能按钮电路图
4.1.6系统电源:
双电源设计是本设计的重点。220V交流转5V直流稳压电源会更加安全、实用。当没有交流电时,系统采用干电池供电;当接通交流电时,则电路自动切换到交流电供电,并且对干电池进行慢性充电。电路图如图4.6:
图4.6
系统电源电路图
4.2特殊器件的介绍
4.2.1
DS18B20
DS18B20的数字温度计提供9至12位(可编程设备温度读数。信息被发送到/从DS18B20
通过1线接口,所以中央处理器与DS18B20只有一个一条口线连接。为读写以及温度转换可以从数据线本身获得能量,不需要外接电源。
因为每一个DS18B20的包含一个独特的序号,多个ds18b20s可以同时存在于一条总线。这使得温度传感器放置在许多不同的地方。它的用途很多,包括空调环境控制,感测建筑物内温设备或机器,并进行过程监测和控制.数字温度传感器DS18B20内部结构图:
DS18B20内部结构主要由四部分组成:64位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。该装置信号线高的时候,内部电容器
储存能量通由1线通信线路给片子供电,而且在低电平期间为片子供电直至下一个高电平的到来重新充电。
数字温度传感器DS18B20介绍
DS18B20的主要特性
1.1、适应电压范围更宽,电压范围:3.0~5.5V,在寄生电源方式下可由数
据线供电
1.2、独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯
1.3、DS18B20支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现组网多点测温
1.4、DS18B20在使用中不需要任何外围元件,全部
传感元件及转换电路集成在形如一只三极管的集成电路内
1.5、温范围-55℃~+125℃,在-10~+85℃时精度为±0.5℃
1.6、可编程的分辨率为9~12位,对应的可分辨温度分别为0.5℃、0.25℃、0.125℃和0.0625℃,可实现高精度测温
1.7、在9位分辨率时最多在93.75ms内把温度转换为数字,12位分辨率时最多在750ms内把温度值转换为数字,速度更快
1.8、测量结果直接输出数字温度信号,以“一
线总线“串行传送给CPU,同时可传送CRC校验码,具有极强的抗干扰纠错能力
1.9、负压特性:电源极性接反时,芯片不会因发热而烧毁,但不能正常工作。
2、DS18B20的外形和内部结构DS18B20内部结构主要由四部分组成:64位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。DS18B20的外形及管脚排列如下图1:
DS18B20温度数据表
4.2.2
DS1302
DS1302
是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个31×8的用于临时性存放数据的RAM寄存器。DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后背电源双电源引脚,同时提供了对后背电源进行涓细电流充电的能力。
下图为DS1302的引脚功能图:
图4.7
DS1302的内部结构
各引脚的功能为:
Vcc1:主电源;Vcc2:备份电源。当Vcc2>Vcc1+0.2V时,由Vcc2向DS1302供电,当Vcc2<
Vcc1时,由Vcc1向DS1302供电。
SCLK:串行时钟,输入;
I/O:三线接口时的双向数据线;
CE:输入信号,在读、写数据期间,必须为高。该引脚有两个功能:第一,CE开始控制字访问移位寄存器的控制逻辑;其次,CE提供结束单字节或多字节数据传输的方法。
DS1302有下列几组寄存器:
①
DS1302有关日历、时间的寄存器共有12个,其中有7个寄存器(读时81h~8Dh,写时80h~8Ch),存放的数据格式为BCD码形式,如图3所示。
小时寄存器(85h、84h)的位7用于定义DS1302是运行于12小时模式还是24小时模式。当为高时,选择12小时模式。在12小时模式时,位5是,当为1时,表示PM。在24小时模式时,位5是第二个10小时位。
秒寄存器(81h、80h)的位7定义为时钟暂停标志(CH)。当该位置为1时,时钟振荡器停止,DS1302处于低功耗状态;当该位置为0时,时钟开始运行。
②DS1302有关RAM的地址
DS1302中附加31字节静态RAM的地址如下图所示。
③
DS1302的工作模式寄存器
所谓突发模式是指一次传送多个字节的时钟信号和RAM数据。突发模式寄存器如下图所示。
④此外,DS1302还有充电寄存器等。
DS1302有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式,其日历、时间寄存器及其控制字见表1。
4.3各单元模块的联接
图4.8系统总体电路图
5软件设计
5.1软件设计原理以及软件设计工具
Keil
uVision2是美国Keil
Software公司出品的51系列兼容单片机C语言软件开发系统,使用接近于传统C语言的语法来开发,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用,而且大大的提高了工作效率和项目开发周期,他还能嵌入汇编,您可以在关键的位置嵌入,使程序达到接近于汇编的工作效率。
Keil
C51软件提供丰富的库函数和功能强大的集成开发调试工具,全WINDOWS界面,使您能在很短的时间内就能学会使用keil
c51来开发您的单片机应用程序。
另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到Keil
C51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。
5.2
DS1302软件设计原理
DS1302的程序设计包含有写单字节数据程序模块、读单字节数据程序模块、初始化设置程序模块。
5.2.1
写单字节数据程序模块:
该程序模块是对DS1302进行写一个字节数据的子程序,其工作方式:先给RST端口一个低信号,禁止数据传递。然后拉低SCLK,确保写数据前SCLK被拉低,升高RST,延时2us,稍微等待,使硬件做好准备。取出dat的第0位数据写入1302,稍微延时等待,使硬件做好准备,拉高SCLK,上升沿写入数据,再稍微等待,重新拉低SCLK,形成脉冲将dat的各数据位右移1位,准备写入下一个数据位。循环八次,传送一个字节。
5.2.2读单字节数据程序模块
该程序模块是对DS1302进行写一个字节数据的子程序,其工作方式:先给RST端口一个低信号,禁止数据传递。然后拉低SCLK,确保写数据前SCLK被拉低,升高RST,延时2us,稍微等待,使硬件做好准备。将dat的各数据位右移1位,因为先读出的是字节的最低位,稍微延时等待,使硬件做好准备,如果读出的数据是1,写在dat的最高位。将SCLK置于高电平,为下降沿读出,形成脉冲。将dat的各数据位右移1位,准备写入下一个数据位。循环八次,接受一个字节。
5.2.3
初始化设置程序模块
该程序模块是对DS1302进行初始化,根据写状态寄存器命令字,写入不保护指令,然后分别对秒、分、时、日、月、周、年
进行初始化,初始化结束后,写入保护指令。
5.3
软件流程图
5.3.1
总系统框图
开
始
初始化LCD,DS18B20,DS1302
读取温度,时间
关闭LCD显示
送LCD显示
扫描按键
节日提醒
闹铃设定
时间设定
温度显示
允许LCD显示?
YES
N
图5.1
总系统流程框图
5.3.2时间设定程序流程框图:
DS1302初始化
开
始
扫描按键
LCD模块显示时间
调用显示子程序
时间设置
从DS1302中读出数据,放入RAM
数据写回DS1302保存
返回主菜单
图5.2时间设定程序流程框图
5.3.3
按键处理
当系统在正常显示状态下要进行调整时,按一下切换键进入按键处理中断程序,并且此时默认的是调整年,在液晶显示器上显示N,此时按加或减按钮可以进行加减调整,若再按一下切换键,则跳到月上显示Y,同样可以调整加减,同样的道理,进入日(R)、时(S)、分(F)、秒(M)的调整,最后再按一下切换键时退出中断程序,星期系统自动的调整过来。
5.3.4
温度测量流程图:
DS18B20
开
始
从DS18B20中读出数据,放入RAM
LCD模块显示温度
返
回
图5.3
温度测量程序流程图
6系统硬件与软件调试
本设计采用PROTUS仿真软件进行硬件调试用keil软件进行软件调试,Proteus软件是英国Labcenter
electronics公司出版的EDA工具软件(该软件中国总代理为广州风标电子技术有限公司)。它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。它是目前最好的仿真单片机及外围器件的工具。虽然目前国内推广刚起步,但已受到单片机爱好者、从事单片机教学的教师、致力于单片机开发应用的科技工作者的青睐。Proteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,2010年即将增加Cortex和DSP系列处理器,并持续增加其他系列处理器模型。在编译方面,它也支持IAR、keil和MPLAB等多种编辑器。
6.1调试方法:
按以上程序的设计思路,把DS18B20与DS1302的程序在keil软件中编写并调试正确,生成.HEX文件。Keil软件调试步骤:
1、双击keil
uvision2图标,打开keil软件。
2、选择project
new
project创建工程,在新建文件夹中,输入工程文件名。
3、在弹出的select
device
for
target‘target
1’窗口中,选择Atem中AT89C52点击确定,这样就建好了一个工程文件。
4、单击菜单中的NEW
File
图标,创建文件,输入sheji1.c,点击确定按钮。
5、在左手边的project
workspace窗口中的target
1的下拉菜单中右击source
group
Add
File
to
group
‘source
group
1’,这样编程文件就建好了。
6、在新建的文件中用C语言汇编所需要的控制程序,汇编后进行编译与连接看是否有问题,最后直至没有错误与警告为止。
7、点击菜单中的图标在options
for
target
‘target
1’中的output,选中Create
Hex
fi;点击确定这样再编译连接后就会生成HEX文件。这样软件调试结束。
6.2
硬件调试:
硬件调试步骤如下:
1、双击ISIS7
Professional图标,打开protus软件。
2、在单击菜单中的NEW
File,并单击保存图标,在弹出的对话框中输入文件名。
3、在创建的文件中的DEVICES中点击P按钮输入你要找得器件名称,找到器件单击确定按钮。
4、在文件中合理安排空间,并对照软件应用的引脚对各个元器件进行对照连接。
5、双击单片机,在弹出的EDIT
COMPONENT对话框中单击打开文件,选择对应的HEX文件。
6、单击运行按钮,对硬件进行运行,看LCD液晶显示的结果与所要求得结果是否一致。若不一致,对硬件以及软件进行改正,直至没有问题为止。
6.3
调试与检测安全:
调试过程中,要接触各种电路和仪器设备,特别是各种电源及高压电路,高压大容量电容器等,为保护检测人员安全,防止测试设备和检测线路的损坏,除严格遵守一般安全规程外,还必须注意调试和检测工作中制定的安全措施。
6.3.1
供电安全、测量仪器安全:
大部分故障检测过程中都必须加电,所以调试检测过的设备仪器,最终都要加电检验。抓住供电安全就抓住了安全的关键。
6.3.2
几个必须记住的安全操作观念:
(1)
不通电不等于不带电。对大容量高压电容只有进行放电操作后才认为不带电。
(2)
断开电源开关不等于断开电源。可能相关部分仍然带电,只有拔下电源插头才可认为是真正断开电源。
(3)
电气设备和材料安全工作的寿命有限。如导线、插头插座、复杂的电子仪器,由于材料本身老化变质及自然腐蚀等因素,安全工作的寿命是有限的。
7系统功能与结果分析
7.1
系统功能:
实时显示与温度报警,采用液晶显示器做显示,本制作利用52单片机中的简易型产品AT89S52作为主控制器件,利用单片机外围连接器件DS1302与DS18B20进行时间和温度显示并通过相应程序对超过了设定的温度进行温度报警,当单片机开始工作,时钟启动以后,自动会进行计时操作,并与当时的温度一并将最新的时钟信息保存在其内部寄存器中,包括时、分、秒等信息。
时钟设置:时钟芯片在初次上电时,其数据都为初始值,我们必须将时钟等信息进行设定。
SB1键为设置键,按一次SB1键,蜂鸣器“嘟”的一声后,液晶显示位开始闪烁,进入时间设置,此时按SB3键、SB4键可上下调节时钟,SB4键可切换小时、分钟;10秒之内若再按下SB1键,蜂鸣器“嘟”的两声后,退出设置,每次设置后,10秒之内不按SB1键,系统
判定为设置结束,恢复正常显示。
7.2基本部分测试与分析:
(1)测试仪器:秒表、温度表、万用表
(2)基本要求部分的测试与分析:
l
系统上电后,首先显示欢迎词,接着进入显示时间和温度。按各功能键执行相应的功能。
l
显示时间时通过与秒表对比,测试的系统时钟走时准确,误差很小。
l
设定闹铃时间,当闹铃时间到时响铃。响铃长度为1分钟,期间按除E键(屏幕背光键)外的任意一键退出响铃。
l
显示温度与温度计对比,测试系统温度的精度。将温度传感器DS18B20和温度计放入不同的测试环境中进行测试,所得测试结果如表1所示。
表1
数字温度计与标准温度计测量值比较表:
温度计示值(摄氏度)
28.7
30.7
33.5
45.0
温度输出(摄氏度)
29.0
30.8
33.3
45.1
由测试知,数字钟的输出与温度计值基本上相等,误差不大于0.5度。
l
上电后记录下时间,去掉220V和干电池电源,隔5分钟过再次通电,测得系统时钟仍旧走时准确。经测试,本系统的时钟掉电保护时间长达9分钟。
7.3发挥部分测试与分析:
(1)系统可显示温度-55~﹢125摄氏度。
(2)拔掉交流电,装上干电池系统工作,说明干电池作为电源为系统供电;卸掉干电池接上交流电系统也工作,表明交流电也能适合系统使用。同时装上干电池,测得干电池回路中的二极管压降为0,表明二极管截止,干电池不作为系统的电源工作;同时测得对干电池的充电电流约为10mA,即交流电对充电池进行慢性充电。
(3)当生日和闹铃设置为开时,主显单上有标志显示(闹铃为‘A’,生日为‘B’)。当设定时间或日期到时,系统开始响铃,期间按A~D键可退出。生日响铃范围:生日当日7:00开始第一次响铃,以后每隔一小时再响铃一次,直至晚上22:00最后一次响铃;为闹铃则不受时间限制,在任意时刻只要时间到就开始响铃。
8结论
此次智能综合设计语言主要是采用C语言的自顶向下的设计方法。自顶向下的设计方法,就是在整个设计流程中各设计环节逐步求精的过程,应用Protus运行自顶向下的设计,就是使用Protus里面的现有电子器件并综合Keil
软件产生的.HEX文件对硬件进行说明、建模和仿真测试。顶层文件采用了原理图的方法设计,使各模块之间的层次关系清晰。
在时间实时显示与温度报警系统的设计过程中,所有的模块都是通过不同进制的计数器来实现其主要功能的,各模块之间是通过进位信号连接在一起的。前一级的进位信号作为下一级的计数CLK信号,通过层次关系使设计思路清晰一开始由于程序的设计考虑置位调整。没有好的思路,走了不少弯路。后来想到在程序里设置总控制端,于是解决了问题。和同学的合作使我的程序更加优化。
通过这次课设,也给我们带来以下一些收获:
1、进一步熟悉Protus
和Keil软件的使用和操作方法,以及硬件实现时的下载方法与运行方法;
2、对C语言的自顶向下设计方法有了进一步的认识;在底层文件具备的条件下,使用原理图可以使设置更加简单。使程序清晰,增加可读性。
3、锻炼了我独立思考和解决问题的能力,也认识到团队合作的重要性。
4、熟悉了写电子设计试验报告的方法,为写毕业设计论文奠定了一定的基础。
5、当然本次课程设计也存在一些不足之处,按键的功能没有设置好,很多扩展功能没有实现,比如说生日报警等等。
6、通过这次的设计使我认识到我对单片机方面的知识知道的太少了,对于书本上的很多知识还不能灵活运用,有很多我们需要掌握的知识在等着我去学习,我会在以后的学习生活中弥补我所缺少的知识。
7、本次的设计使我从中学到了一些很重要的东西,那就是如何从理论到实践的转化,怎样将我所学到的知识运用到我以后的工作中去。在大学的课堂的学习只是在给我们灌输专业知识,而我们应把所学的用到我们现实的生活中去,此次的电子时钟设计给我奠定了一个实践基础,我会在以后的学习、生活中磨练自己,使自己适应于以后的竞争。
9总结与体会
课程设计是我们专业课程知识综合应用的实践训练,着是我们迈向社会,从事职业工作前一个必不少的过程.”千里之行始于足下”,通过这次课程设计,我深深体会到这句千古名言的真正含义.我今天认真的进行课程设计,学会脚踏实地迈开这一步,就是为明天能稳健地在社会大潮中奔跑打下坚实的基础.
经过大家多天的努力,终于完成了第一次任务,设计出了汇集外观精美、方便实用、功能强大于一体的数字时钟显示与温度报警装置。该系统采用桌面式摆放设计,精美雅观;附带双电源装备,可供不时之需,而且具有温度、闹铃、生日一些列常用的附加功能,更加方便实用,符合现实要求;设计更加的人性化和智能化。经过这次的实践,也可以说是经过了多天的学习,尽管期间苦难重重,但我们还是从中学习了不少新的知识和解决困难的方法,也体验到了自主创作的快乐。
虽说课程设计确实有点累.然而,当我一着手清理自己的设计成果,回味这4周的心路历程,一种少有的成功喜悦即刻使倦意顿消.虽然这是我刚学会走完的第一步,也是人生的一点小小的胜利,然而它令我感到自己成熟的许多,另我有了一种”春眠不知晓”的感悟.
通过课程设计,使我深深体会到,干任何事都必须耐心,细致.课程设计过程中,许多计算有时不免令我感到有些心烦意乱:有2次因为不小心我计算出错,只能毫不情意地重来.但一想起周伟平教授,黄焊伟总检平时对我们耐心的教导,想到今后自己应当承担的社会责任,想到世界上因为某些细小失误而出现的令世人无比震惊的事故,我不禁时刻提示自己,一定呀养成一种高度负责,认真对待的良好习惯.这次课程设计使我在工作作风上得到了一次难得的磨练,短短4周的课程设计,使我发现了自己所掌握的知识是真正如此的缺乏,自己综合应用所学的专业知识能力是如此的不足,几年来的学习了那么多的课程,今天才知道自己并不会用.想到这里,我真的心急了,老师却对我说,这说明课程设计确实使我你有收获了.老师的亲切鼓励了我的信心,使我更加自信.
最后,我要感谢我的老师们,是您严厉批评唤醒了我,是您的敬业精神感动了我,是您的教诲启发了我,是您的期望鼓励了我,我感谢老师您这次又为我增添了一幅坚硬的翅膀.今天我为你们而骄傲,明天你们为我而自豪。
10参考文献
[1]《智能化仪器原理及应用》
主编:曹建平
西安电子科技大学出版社
2008
[2]
求是科技.单片机典型模块设计实例导航.北京:人民邮电出版社.2005.8
[3]
徐淑华,程退安等.单片微型机原理及应用.哈尔滨:哈尔滨工业大学出版社.2005.1
[4]
孙余凯.精选实用电子电路260例.北京:电子工业出版社.2007.6
[5]
殷春浩,崔亦飞.电磁测量原理及应用.徐州:中国矿业大学出版社.2003.7
[6]《LCD1602A数据手册》王树清,乐嘉谦主编
华南理工大学出版社
2009
[7]《DS1302数据手册》
杨志新主编
电子工业出版社
2008
[8]《DS18B20数据手册》
吴达金主编
电子工业出版社
2008
附录一:主程序如下:
//********写入指令数据到LCD**************//
void
write_cmd(uchar
cmd)
{
Lcd_rs=0;
Lcd_rw=0;
P1=cmd;
delay(200);
Lcd_en=1;
delay(200);
Lcd_en=0;
}
//**********写入数据子程序**************//
void
write_dat(uchar
dat)
{
Lcd_rs=1;
Lcd_rw=0;
P1=dat;
delay(200);
Lcd_en=1;
delay(200);
Lcd_en=0;
}
//*********LCD初始化********************//
void
Lcd_init()
{
write_cmd(0x38);
write_cmd(0x0c);
write_cmd(0x01);
}
//*********将字符输出到LCD显示***********//
void
Print(uchar
*str)
{
while(*str!='\0')
{
write_dat(*str);
str++;
}
//**********DS1302始终部分子程序***********//
typedef
struct
_SYSTEMTIME_
{
uchar
second,minute,hour,week,day,month,year;
uchar
DateString[11];
uchar
TimeString[9];
}SYSTEMTIME;
SYSTEMTIME
CurrentTime;
#define
DS1302_second
0x80
#define
DS1302_minute
0x82
#define
DS1302_hour
0x84
#define
DS1302_day
0x86
#define
DS1302_month
0x88
#define
DS1302_week
0x8a
#define
DS1302_year
0x8c
/**********实时时钟写入一字节****************/
void
DS1302InputByte(uchar
d)
{
uchar
i;
ACC=d;
for(i=8;i>0;i--)
{
DS1302_IO=ACC0;
DS1302_SCLK=1;
DS1302_SCLK=0;
ACC=ACC>>1;
}
}
/**********实时时钟读出一字节****************/
uchar
OutputByte(void)
{
uchar
i;
for(i=8;i>0;i--)
{
ACC=ACC>>1;
ACC7=DS1302_IO;
DS1302_SCLK=1;
DS1302_SCLK=0;
}
return(ACC);
}
void
writeDS1302(uchar
ucAddr,uchar
ucDat)
{
DS1302_RST=0;
DS1302_SCLK=0;
DS1302_RST=1;
DS1302InputByte(ucAddr);
DS1302InputByte(ucDat);
DS1302_SCLK=1;
DS1302_RST=0;
}
uchar
ReadDS1302(uchar
ucAddr)
{
uchar
ucData;
DS1302_RST=0;
DS1302_SCLK=0;
DS1302_RST=1;
DS1302InputByte(ucAddr|0x01);
ucData=OutputByte();
DS1302_SCLK=1;
DS1302_RST=0;
return(ucData);
}
/*************DS1302初始化******************/
void
DS1302_init()
{
unsigned
char
second=ReadDS1302(DS1302_second);
if(second&0x80)
{
writeDS1302(0x8e,0x00);
//写入允许
writeDS1302(0x8c,0x09);
//以下写入初始化时间
日期:07/07/25.星期:
3.时间:
23:59:55
writeDS1302(0x88,0x09);
writeDS1302(0x86,0x25);
writeDS1302(0x8a,0x05);
writeDS1302(0x84,0x14);
writeDS1302(0x82,0x03);
writeDS1302(0x80,0x55);
writeDS1302(0x8e,0x80);
//禁止写入
}
}
if(change==2)
change=0;
}
if(change==0)
{
DS1302_GetTime(&CurrentTime);
//获取时钟芯片的时间数据
TimeToStr(&CurrentTime);
//时间数据转换液晶字符
DataToStr(&CurrentTime);
GotoXY(0x80,0);
Print(CurrentTime.TimeString);
//显示时间
GotoXY(0,1);
Print(CurrentTime.DateString);
//显示日期
GotoXY(0x0d,1);
Print(week_value);
//显示星期
temp_to_str();
GotoXY(0x80+0x0a,0);
//显示温度
Print(TempBuffer);
delay(100);
//扫描延时
}
if(change==1)
{
GotoXY(0x80,0);
write_dat(alarmtab[w]);
w++;
if(w==5)
write_cmd(0x0c);
}
}
//*******闹钟**********//
/*void
t0(void)
interrupt
using
0
{
TH0=(65536-500)/256;
TL0=(65536-500)%256;
t02s++;
if(t02s==400)
{
t02s=0;
flag2=~flag2;
}
if(flag2==0)
{
BEP=~BEP;
}
}
*/
void
alarm()
{
//uchar
i;
DS1302_GetTime(&CurrentTime);
//获取时钟芯片的时间数据
TimeToStr(&CurrentTime);
//时间数据转换液晶字符
/*
for(i=0;i<5;i++)
{
if(alarmtab[i]==CurrentTime.TimeString[i])
{
BEP=1;
delay1ms(50);
BEP=0;
delay1ms(100);
BEP=1;
delay1ms(50);
BEP=0;
}
}
*/
}
西hua
大学