当前位置: 焊接设备 >> 焊接设备发展 >> 基于单片机的多功能时钟设计
项目成果报告
基于单片机的多功能时钟设计
一、项目任务说明
(一)专案背景
从时钟的发展历史看,它经历了机械表到电子表再到晶体管,再到现在的数字时钟等几个阶段。想知道时间,手表当然是个很好的选择,但是,在忙碌当中,我们还需要一个‘助理’及时给我们提醒时间。所以,计时器最好能拥有一个定时系统,随时提醒容易忘时间的人.最早能够定时、报时的时钟属于机械式钟表,但这种时钟受到机械结构、动力和体积的限制,在功能、性能以及造价上都没办法和电子时钟相比。
在日常生活和工作中经常使用时间控制,例如在打印过程中的曝光时间。早期使用的一些时间控制单元是使用模拟电路设计和制造的,它们的定时精度和可重复性都不理想。随着单片机技术的进步和成本的下降,新一代产品的应用也变得越来越普遍。它功能强大,体积小,重量轻,灵活易用,并带有适当的接口微电路,可以组成具有各种功能的各种微电子产品。基于此,本文开发了具有一个单片机的多功能系统,该系统具有时间的基本功能以及秒表和闹钟的功能。它也可以扩展为其他电器的自动控制电器,例如家用电器,从而避免使用多个控制器。
电子钟是采用电子电路实现对时、分、秒进行数字的计时装置,广泛应用于个人家庭,车站、码头办公室等公共场所,成为人们日常中不可少的必需品,由于电子时钟数字集成电路的发展和石英晶体震荡器的广泛使用,使得数字钟的精准度远远超过老式钟表,钟表的数字化给人们带来了极大的方便,而且大大的扩展了钟表原有的报时功能。诸如定时自动报警、按时自动打铃、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备。甚至各种定时电气的自动启用等,所有这些,都是以钟表数字化为基础的。因此,研究数字钟及扩大其应用,有着非常现实的意义。
(二)功能要求
该项目设计一种基于STC15W4K48S4系列单片机的电子时钟,在数码管上显示对应的时,分,秒,以及日期的显示。同时具有时间校对功能。利用LCD和DS实现实时时间的读取和显示。通过按键的加减来选择调整对象和调整相应数据。使用按键进行闹钟的设定。同时使用DS18B20检测温度并显示在屏幕上。
1.时间校对设置功能
主要是利用4位按键,分别为功能选择键,加/减键,确认键构成,按下功能选择键后,可以选择调整对象:秒,分,时,日期,而加/减键则是对调整对象进行数值的加减,时间以24小时为一个周期,00-59的60进制显示分、秒。00-23的24进制显示时。设置时间功能,可以分别对日、时、分、秒进行单独校时,使其校正到目前所设置的时间。
2.闹钟功能
闹钟可以直接采用蜂鸣器闹铃,当前时刻与闹钟时间相同时,单片机向蜂鸣器送出高电平,此时蜂鸣器开始响,通过按键“+”“-”可以对闹钟进行关闭,从而实现闹钟功能。
3.温度显示功能
通过DS18B20温度数据传送给单片机处理转换,液晶屏显示实时温度并更新。通过用手触摸DS18B20可以看到当时温度的升高,当手拿走时,温度慢慢又恢复室内温度。在液晶屏上可以看到温度的变化。
4.整点报时功能
当前时间的分和秒同时为0时,此时蜂鸣器开始工作,发出响声。响的时间为2s,2s后蜂鸣器停止工作。蜂鸣器不再发出声响,恢复初始蜂鸣器状态。完成整点报时。
二、项目开发过程
根据所选元器件绘画PCB原理图和PCB模板样图
图2-1PCB原理图和PCB模板样图
(一)时钟模块
1.硬件设计
在电子时钟设计中,常用的时钟芯片有DS、DS、DS、DS.。每种芯片的主要时钟功能基本相同,只是在引脚数量,备用电池的安装方式、计时精准度等方面略微不同。DS与DS芯片都有内嵌锂电池作为备用电池;X引脚少,没有嵌入锂电池,与DS芯片功能相似,DS为带有全功能时钟8KX8K非易性SRAM,集成了非易性SRAM、实现时钟、晶振、电源掉电控制电路和锂电池电源。BCD码表示的年、月、日、星期、分、秒。同样DS拥有28只管脚,硬件连接起来占用微处理器I/O口较多,不方便系统设计。
DS是美国DALLAS公司推出的一种高性能、低消耗的实时时钟芯片。附加31字节静态RAM,采用SPI三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字符的时钟信号和RAM数据。实时时钟可提供秒、分、时、日、、月、和年。一个月小于31天可以自动调整。工作电压宽度为2.5v-5.5v。采用双电源供电(主电源和备用电源),可设置备用电源充电模式,为后端电源提供充电能力。
对比功能效果,本次设计采用DS时钟芯片实现时钟,DS芯片是一种高性能的时钟芯片,可自动对秒、分、时、进行计时,而且精准度高,RAM作为数据暂存区。硬件图连接简单,程序更容易实现。
时钟模块有DS时钟芯片组成,DS可以提供分、秒、小时、天、周、月、年的信息,AM/PM模式可通过选择小时寄存器来选择,即12小时或24小时系统,每月不足31天,可自动调节,工作电压为2.5v-5.5v宽。双电源(主、备用电源)
图2-2DS芯片图
2.软件设计
在编程过程中要注意DS的读写时序。DS是SPI总线驱动方式,它不仅要向寄存器写入控制字,还需要读取相应寄存器的数据。要想与DS通信,首先要先了解DS的控制字。
图2-3DS控制表图
为了启动数据的传输,CE引脚信号应由低变高,当把CE驱动器至逻辑1状态时,SCLK必须为逻辑0,数据在SCLK上的上升沿串行输入。无论是读取周期还是写周期,也就是无论发送方式是单字节传送还是多字节传送,都要通过控制位指定40个字节中的那个将被访问。在开始8个时钟周期把命令码(具有地址和控制信息的8位数据)装入移动寄存器之后,另外的时钟在读操作事输出数据,在写的时候输入数据,所有的数据在时钟下降沿变化。所有写入或读出都是先向芯片发送一个命令字节。对于时钟模式操作,每次为7个字节,需要72个时钟,而对于RAM多字节模式操作,每次则为32字节,需要多达个时钟。下图为单字节读写时序,多字节操作方式与其相似,只是后面跟的程序字数不只一个。
图2-4单字节读取时序图
DS与单片机之间的数据通信采用串行方式,数据通过SPI三线端口进行控制和传输,芯片外部晶体振荡器电路采用HZ晶体振荡器,应特别注意保证外部晶体振荡器的正常工作,当外部晶体振荡器停止震荡时,DS的定时将停止。二是保证备用电源BT1能够长期供电,虽然DS在主电源关闭是耗电量很小,而且在主电源打开可以对涓滴电流进行充电,但是如果长期正常运行,最好选择小型充电电池,在读取和写入每个程序之前,必须初始化DS,我们可以先将芯片的SCK设置为‘0,然后再将芯片的SCLK设置为“0”。将RST终端设为‘1’,最后给SCK脉冲,初始化后,可以调整报警程序的调整时间和读取。在写操作时,控制寄存器的位7(WP)是保护位,其他七位均置0,在任何时钟和RAM中进行写都是为0,否则不可写入当WP为1时,DS_WriteData(0X8E,0X80)就是对位7的进行保护。写保护位防止对任意一对寄存器的写操作。
图2-5时钟流程图
首先对定时器进行初始化,选择定时器0工作在模式1,每间隔2ms溢出中断一次,则循环中断次的延时时间即为1s,上述过程重复60次为一分,分计时60次为一个小时,小时计时24次则重新回到00:00:00;ES=1;打开中断开关,下一步进行时钟显示程序的读取,当读取的温度与所设置的闹钟相同时,闹钟开始响,标志位nzx_flag打开,当j=10时,时间为3s,这次闹钟标志位进行关闭。在3s内,按下按键的加键和减键也可以让闹钟标志位关闭。当时间到达整点,即m==0;s==0同时满足时这是给蜂鸣器一个高电压,蜂鸣器开始响,2s后进行关闭。可以显示当前时间。通过%16+0x30进行转化为阿斯特码值在LCD页面显示出来。
进行年月日以及DS的初始化,开始读取DS某地址的数据,判断RST为0还是为1,高电平选择数据寄存器,低电平为选择指令寄存器。8个字节为一个循环,地址进行右移动。顺序蔓延,当RST=1时,可以往DS中写入数据,地址依次右移动,数据也向右移动。然后数据从DSRAM中读取出来,这时,地址进行左移动。再把数据保存在DSRAM,然后读取当前时间。
图2-6为DS的读取程序图
(二)显示模块
1.硬件设计
采用LED数码管显示虽然清晰,但是由于设计要求时钟功能比较重要,闹钟相关的设定不能够实行出来因此如用LED进行显示会使得硬件电路比较复杂,且在软件实现方面也比较难,为实现功能带来了一定的困难。
采用LCD,电路比较简单,且在软件设计上也相对简单,具有低消耗功能,能够满足设计的最优要求,因此在本次设计中,我采用的是LCD进行显示时间和闹钟的调试。
本系统采用LCD芯片液晶也叫字符型液晶,它是一种专门用来显示字母数字、符号等的点阵型液晶模块。它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此所以它不能很好地显示图形(用自定义CGRAM,显示效果也不好)。同时系统采用蜂鸣器作为报警电路,当达到预设报警报警时间时,报警报时功能工作即蜂鸣器发出声音,系统通过按键进入功能菜单界面,选择报警设置,可以同时设置四种不同的报警时间。设定闹钟后,将当前时钟时间和闹钟时间进行对比,当报警时间不相等时,不会发生任何动作。一旦程序相等,程序自动转跳到报警程序。此时单片机端口输出低电平使蜂鸣器能够工作,从而实现报警功能,同时,工作时间、报警时间可通过调整按键按钮来设定。
图2-7LCD芯片图
2.软件设计
(1)读状态,输入RS=1;RW=H,EH输出D0-D7=状态字
图2-8LCD读状态的程序图
(2)写状态输入RS=1,RW=L,D0-D7=指示码,E=高脉冲输出无
(3)读数据输入RS=H,RW=H,E=H输出D0-D7数据
图2-9LCD写状态的程序图
(4)写数据输入RS=H,RW=L,D0-D7=数据,E=高脉冲输出无
开关光标当指令码为DCB时,D=1开显示,D=0关显示,C=1显示光标;C=0不显示光标;B=1;光标闪烁,B=0光标不闪烁
(三)温度模块
1.硬件设计
采用AD,AD测量到不同温度后,把应温度转化为线性电流输出,正比与热力学温度,该传感器宽量程,为负55度到正度;精度高,但是由于它只能将采集来的温度转化为电流输出,所以在实际应用中,需要先将电流转化为电压,再利用A/D转换元件进行模数,将模拟量转化为数字量,最后送入单片机
DS18B20的数字温度计提供9至12位(可编程设备温度读数)。由于DS18B20是一条口线通信,所以中央微处理器与DS18B20只有一个一条口线连接。为读写以及温度转换可以从数据线本身获得能量,不需要外接电源。本次设计采用DS18B20数字温度传感器,把应温度转换成串行数字信号输出,供单片机处,既节省了硬件,又避免了模拟方式的干扰问题,还具备微型化、低消耗、高性能等优点。
综上所述最终选择方案为STC15W4K48S4芯片、显示芯片LCD、时钟电路DS、温度传感器DS18B20、能够实现时钟显示的功能,利用DS时钟芯片生成时间,DS内置RTC功能,单片机可以实时读取当前时间,并且具有掉电存储功能,单片机读取时间后,在液晶屏幕显示当前时间与日期。
采用DS18B20数字温度传感器,把应温度转换成串行数字信号输出,供单片机处,既节省了硬件,又避免了模拟方式的干扰问题,还具备微型化、低消耗、高性能等优点。描述该DS18B20的数字温度计提供9至12位(可编程设备温度读数)。由于DS18B20是一条口线通信,所以中央微处理器与DS18B20只有一个一条口线连接。为读写以及温度转换可以从数据线本身获得能量,不需要外接电源。因为每一个DS18B20的包含一个独特的序号,多个ds18b20s可以同时存在于一条总线。这使得温度传感器放置在许多不同的地方。DS18B20采用一线通信接口。因为一线通信接口,必须在先完成ROM设定,否则记忆和控制功能将无法使用。主要首先提供以下功能命令之一:1读ROM、2ROM匹配,3搜索ROM、4跳过ROM、5报警检查。这些指令操作作用在没有一个器件的64位光刻ROM序列号,可以在挂在一线上多个器件选定某一个器件,同时,总线也可以知道总线上挂有有多少,什么样的设备。
图2-10DS18B20芯片图
2.软件设计
若指令成功地使DS18B20完成温度测量,数据存储在DS18B20的存储器。一个控制功能指挥指示DS18B20的演出测温。测量结果将被放置在DS18B20内存中,并可以让阅读发出记忆功能的指挥,阅读内容的片上存储器。温度报警触发器TH和TL都有一字节EEPROM的数据。如果DS18B20不使用报警检查指令,这些寄存器可作为一般的用户记忆用途。在片上还载有配置字节以理想的解决温度数字转换。写TH,TL指令以及配置字节利用一个记忆功能的指令完成。通过缓存器读寄存器。所有数据的读,写都是从最低位开始。
数据的写入;读取DS18B20内的数据先拉低电平,等待DS18B20接受总线上的命令,数据进行右移动溢出寄存器,溢出寄存器赋值给数据总线,等待一段时间后,恢复总线。
数据的读取,一共需要循环8次,如果是0的话直接移动位置,这时读时序开始命令,拉低总线,然后进行延时,确保数据写到总线上,恢复总线,此时DS18B20的数据写到总线上。如果是1的话,就在数据上进行高位置1.
图2-11为DS18B20数据的写入程序图
三、总体完成情况
1.时间设置功能
主要是利用4位按键,分别为功能选择键,加/减键,确认键构成,按下功能选择键后,可以选择调整对象:秒,分,时,日期,而加/减键则是对调整对象进行数值的加减,确认键就是确认当前设定信息,并使系统继续运行。设置时间的操作为:点击“设置”键,年针闪烁,此时可以通过“加键”和“减键”进行增减调整,月针设置。月针的设置,光标闪烁。月针设置完成后。点击“设置”键,天针闪烁,此时可以通过“加键”和“减键”进行增减调整,天针的设置,光标闪烁。天针设置完成后时针设置完成后。点击“设置”键,时针闪烁,此时可以通过“加键”和“减键”进行增减调整,时针的设置,光标闪烁。时针设置完成后。点击“设置”键,秒针闪烁,此时可以通过“加键”和“减键”进行增减调整,秒针设置。秒针的设置,光标闪烁。秒针设置完成后,再次点击“设置”键,分针闪烁,继续通过加减键进行设置,时间全部设置完成后,再次按下“设置”键,退出时间的设置,回到LCD正常显示界面。
2.正点报时功能
主要是利用DS和有源蜂鸣器,当单片机读取到整点信息时,则驱动有源蜂鸣器发声,进而实现整点报时功能。
3.闹钟功能
主要采用0蜂鸣器闹铃,当前时刻与闹钟时间相同时,单片机向蜂鸣器送出高电平,采用蜂鸣器闹铃结构,控制方便简单主要使用功能按键选择调节对象,选择闹钟功能并且使用加减键设置时和分闹钟,使用确认键确认闹钟设置完成。主要是利用DS和有源蜂鸣器,当当前时间达到闹钟时间时,则驱动有源蜂鸣器发声,进而实现闹钟功能。设置闹钟操作为:在当前闹钟显示界面下,点击“设置”键,闹钟的小时数闪烁,通过“加键”和“减键”调整小时数,小时数设置好后,再次点击“设置”键,分钟闪烁,进入分钟数的设置。同理,分钟数设置好后,再次点击“设置”键,需要注意的是,在设定闹钟开关时,没有光标闪烁。点击“加键”或“减键”,设置闹钟的打开与关闭,ON与OFF之间切换。例如,设置闹钟时间为早上8:30,闹钟打开,状态为ON,设置闹钟时间为8:30闹钟定时到后,蜂鸣器发声,闹钟响;闹钟可以通过点击“加键”或“减键”来关闭。
4.温度显示功能
通过DS18B20温度数据传送给单片机处理转换,实现液晶屏显示实时温度并更新。通过触摸DS18B20可以看到当时温度的升高,当手拿走时,温度慢慢又恢复室内温度。在液晶屏上可以看到温度的变化。
电路掉电后无需重新设置时间和日期。电路采用直流供电电源,交流供电为主,直流电源为后备辅助电源,并能自动切换。
图3-1实物图正面与实物图反面图
四、项目开发过程中遇到的问题
刚开始接到这个项目任务,难免心里紧张。查阅了相关的电子作品经验。决定做这个电子时钟时,我就拿着原理图列出元件清单,并查找这些元器件是否在市场上有销售,如果没有该怎么办?做了元件的性价比,我就拿来有关这个电子时钟电路的资料,分析电路的工作原理,弄清它是怎么工作的,为什么这样工作和改进方法,我进行了以下做法:把这个电子时钟所用的每一个元器件进行分类,对它们参数功能进行分析。对每个元器件查相关书籍资料或者上网查找元器件工作原理。上网查找有关器件型号不同但功能相同或者类似的替代品。例如电子时钟芯片该选择哪个?
最终确定了方案,认为STC15W4K60S4作为核心元器件,用LCD来显示时间,显示时间格式为年、月、日、时、分、秒。时间的显示是24小时制,把编好的程序载入到芯片中,用两个按键来调节时间,进行加减调节,通过选择模式来进行单个日期的和时间的修改,如调节月,需要先选择月的模式,再按按键进行调节,每12为一个循环。这种方案理论是可行的。先把原理图画好然后画需要用的封装,最后画好pcb检查没有问题发给网上店家进行制作。在这个过程中,在检查电气元件出现了几十处错误,又重新检查,反反复复好多次才把这些错误消除,这才完成了一小部分任务,更多困难还在后面,在生成pcb的时候又出现了问题,元器件离得太近,连线错综复杂。元器件的排列问题,我又重新布线布局,把那些线与线之间距离过小的用手一条一条的布好,还有那些走线不太好走的线路也进行了修改,其中有的焊盘过小的我也一一进行修改。在焊接电路过程中,有些元器件太小容易接触不良,我又进行了第二次焊接。焊接好还要进行上电检查。后续书写程序遇到了很多困难,写好初步程序c文件,h文件无法下拉出来,无法导入,问了同学才发现初始化应该是config.h中调用h文件才能导入进c文件。程序中有很多语序错误,第一次写好程序有58个警告,因为对DS程序还不太清楚,我又上网查了相关程序如何操作,重新定义了变量。最后改的剩20处错误,我反复几检查,发现自己很多小细节没有注意到,比如h中没有定义c文件,所用到的变量没有在开头进行定义。最终书写好了程序,第一次显示的时候只能正常显示时间,不能进行闹钟的报时。后面查看程序发现是自己粗心在闹钟到达时写的居然是蜂鸣器关闭,难怪不进行报警。DS18B20不能在页面显示实时温度刚开始就没有显示温度让我怀疑是板子出现了问题,因为程序运行是没有错误的,把板用万用表检查完毕是正常能够使用的状态,我开始放心,查看程序发现DS18B20当时写好了程序但是可能因为当时手误删了这块。所以才无法显示,最后又重新加上了这块,可以实时显示温度了又。后面发现有时按键并不是很好用,因为虚焊导致接触不良,我又进行了二次焊接,解决了这个问题,闹钟的定时刚开始到达闹钟时间后一直在响,按键无法停止它,后面我检查程序又让“-”“+”键控制关闭蜂鸣器。切换调整时间模式刚无法调整出来,后面反复进行调试发现是因为自己按的时间太长,第一次按会出时间调整状态,第二次会进行返回,当时只是按得时间太长了导致出现这个情况。后面程序就可以正常显示和运行了。
五、项目的收获
(一)技术方面
其实我在这个模块遇到的最大的问题就是,一开始对这块模块到底实现的功能与细节分析得不彻底,所以在开始编程的时候就手足无措。于是这部分的代码就出现了许多漏洞,然后在运行程序的时候就不停地修补漏洞。接着就对这个界面的功能进行不停地完善,在修改的过程中也就浪费了许多时间。通过学习信号的获取与处理、电厂设备信息系统等方面的专业知识,受到电子与信息工程实践的基本训练,具备设计、开发、应用和集成电子设备和信息系统的基本能力。
了解关于DS18B20的工作原理,由于DS18B20单线通信功能是分时完成的,他有严格的时隙概念,因此读写时序很重要。系统对DS18B20的各种操作必须按协议进行。操作协议为:初始化DS18B20(发复位脉冲)→发ROM功能命令→发存储器操作命令→处理数据。各种操作的时序图与DS相同。
通过这次学习锻炼了我的焊接技术和焊接工艺,使我的焊接技能上了一个台阶。培养了我们自主学习和利用网上这个广阔平台的学习能力。学会和加深了使用画图工具和画图软件的使用。同时也加深了对芯片的了解和使用,将书本上学习到的内容和现实结合在一起。在对于芯片的使用,我们应该在了解他的前提下灵活巧妙的运用。具体芯片资料和图片我们可以查阅相关的书籍,在网上能够很方便的寻找。
(二)非技术方面
单片机作为我们主要的专业课程之一,我觉得单片机课程设计很有必要,而且很有意义。但当拿到题目时,确实不知道怎么着手,有些迷茫,上网查资料,问老师,在老师的帮助下,历时一个学期,解决一个又一个的困难,终于完成任务。
在这次课程设计中,运用到了很多以前的专业知识,虽然过去从未独立应用过它们,但在学习的过程中带着问题去学我发现效率很高,这是我做这次课程设计的一大收获。另外,要做好一个课程设计,就必须做到:在设计程序之前,对所用单片机的内部结构有一个系统的了解,知道该单片机内有哪些资源;要有一个清晰的思路和一个完整的的软件流程图;在设计程序时,不能妄想一次就将整个程序设计好,反复修改、不断改进是程序设计的必经之路;要养成注释程序的好习惯,一个程序的完美与否不仅仅是实现功能,而应该让人一看就能明白你的思路,这样也为资料的保存和交流提供了方便;在设计课程过程中遇到问题是很正常德,但我们应该将每次遇到的问题记录下来,并分析清楚,以免下次再碰到同样的问题的课程设计结束了,但是从中学到的知识会让我受益终身。发现、提出、分析、解决问题和实践能力的提高都会受益于我在以后的学习、工作和生活中。设计过程,好比是我们人类成长的历程,常有一些不如意,但毕竟这是第一次做,难免会遇到各种各样的问题。在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,不能灵活运用。
通过这次设计,我懂得了学习的重要性,了解到理论知识与实践相结合的重要意义,学会了坚持、耐心和努力,这将为自己今后的学习和工作做出了最好的榜样。我学会对困难无所畏惧,以及对问题的一些很重要的思考方法。
六、参考文献
[1]张奕刚单片机原理及应用北京;高等教育出版社第一版
[2]徐君毅单片机微型计算机原理设计上海科技技术出版社
[3]何立民单片机应用系统设计北京航空大学出版社第一版
[4]李广滴单片机基础北京:北京航空大学出版社
[5]丁向荣单片微机原理与接口设计电子工业出版社
[6]李珍单片机原理与应用技术北京:清华大学出版社
[7]王淑珍单片机原理与接口设计北京:科学出版社
[8]丁向荣stc系列增强单片机原理与系统开发北京:清华大学出版社
[9]李光飞传感器技术与应用北京:北京航空航天大学出版社20-27
[10]陈连坤单片机原理和时间北京:清华大学出版社北京交通大学出版社
[11]雷旭何万强新型家用防盗报警系统西安:现代电子技术出版社
[12]李全利单片机原理与接口设计北京:北京航空航天大学-37
[13]姚年春电路基础北京人民邮电出版社
[14]王丽君,杨伟丰.电机无线遥控系统设计的研究大众科技,,11
[15]刘守义.单片机应用技术,西安电子科技大学出版社,
[16]瞿贵荣.电动窗帘红外遥控电路.家庭电子,
[17]刘小成单片机原理及应用上海:华东理工大学出版社-25
[18]李珍单片机原理与应用技术北京:清华大学出版社
[19]王淑珍单片机原理与接口设计北京:科学出版社