基于单片机的简易灯光时钟毕业设计.doc

上传人:知****量 文档编号:43228481 上传时间:2022-09-17 格式:DOC 页数:93 大小:3.28MB
返回 下载 相关 举报
基于单片机的简易灯光时钟毕业设计.doc_第1页
第1页 / 共93页
基于单片机的简易灯光时钟毕业设计.doc_第2页
第2页 / 共93页
点击查看更多>>
资源描述

《基于单片机的简易灯光时钟毕业设计.doc》由会员分享,可在线阅读,更多相关《基于单片机的简易灯光时钟毕业设计.doc(93页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、 基于单片机的简易灯光时钟毕业设计目录摘要IABSTRACTII第一章绪论11.1 目的和意义11.2 本系统实现的主要功能1第二章总体方案论证与设计22.1主控模块的选型和论证22.2显示模块的选型和论证22.3时钟芯片的选型和论证22.4温度检测模块的选型和论证32.5整点报时模块的选型和论证32.6 电源模块32.7系统整体设计概述3第三章.系统硬件电路设计53.1主控模块53.1.1 单片机的最小系统设计53.2 LCD液晶显示器简介63.2.1 液晶原理介绍63.2.2液晶模块简介63.2.3液晶显示部分与STC89C52的接口63.3键盘模块设计73.4蜂鸣器模块设计83.5时钟模

2、块的设计83.6温度检测模块设计103.6.1温度传感器工作原理103.6.2 DS18B20硬件电路设计113.7 语音模块设计11第四章.系统软件设计124.1系统软件总体设计124.2程序设计原理165.系统调试185.1硬件调试185.2软件调试18参考文献20致谢21附录22系统整体原理图22系统PCB图22元件清单24系统源程序25第一章 绪论1.1 目的和意义现代社会已经迈上了信息化的步伐,微电子技术的发展也越来越快,单片机的运用也日渐广泛。无论是通信业的学生,老师或者是研发人员,对于单片机的运用均青睐有加,因此单片机已成为研发人员必须掌握的能力之一,而且单片机也会发展成为一个高

3、薪行业。而时钟作为电子类的一个小设计,不仅深受人们的喜爱,也是单片机实验中一个非常常见的题目。由于单片机给人有很大的发挥空间,是以会对制作人以高要求对待,并且在掌握设计的同时程序要以简洁为主,功能上要能满足人们需求,显示界面要大胆创新,标新立异。LCD显示的数字时钟清晰直观的显示准确时间、而且精度很是高、并且有夜视功能,还扩展出多种与人方便功能。本设计中的简易灯光时钟既是一个时间控制系统,又包含温度检测系统,既能准确无误的显示出正确的高精度的时间又能检测当前的温度本文提出了以STC51系列单片机为核心,采用DS1302作为电子时钟的核心芯片的设计方案,与温度传感器DS18B20、LED显示、时

4、钟芯片DS1302、按键等模块组成硬件的电子电路系统。显示采用LCD,以实现显示年、月、日、时、分钟、秒、星期、温度。设计过程中使用Keilc51软件,采用C语言编程;此外,还要从多方面保障系统的稳定性,提高系统的性能指标本设计可以对时间进行实时的校准,读取时间方便、能直观显示实时时间、功能方面表达多样话、简单明了的电路、低廉的成本都是该设计的优点,满足未来电子设计的发展要求,市场前景好。1.2本系统实现的主要功能本系统设计制作一个基于单片机的简易灯光时钟。能实现以下几种功能:(1)键盘扫描,设计按键扫描程序下载到单片机,每个按键赋予一个功能,单片机通过扫描程序检测用户按键,确定后实现功能。(

5、2)通过单片机的ds1302的数据采集,并实时显示年,月,日,时,分,秒,和星期在液晶屏上,并且可以设置时间,系统不供电的情况时钟芯片依然可以由后备纽扣电池供电,使其掉电时间保存。(3)用户可以设定闹钟时间,当时间到了之后,系统自动驱动蜂鸣器发响。(4)系统附带有整点报时功能,以与任何时候通过按键报时功能。(5)系统还带有测温功能,单片机可以实时读取DS18B20的温度数据并在液晶上显示。第二章 总体方案论证与设计本系统可以由主控、显示、时钟、温度检测、电源等模块组成,以下是讨论这几个模块的选型和论证。2.1主控模块的选型和论证方案一:采用MSP430F149,MSP430F169系列单片机,

6、该单片机是TI公司1996年开始推向市场的一种16位超低功耗的混合信号处理器。其部集成了很多模拟电路、数字电路和微处理器,提供12位ADC,具有采样、保持、自动扫描,有2个16位计数器等强大的功能。但芯片价格昂贵,不适合一般的设计和开发。方案二采用52系列的单片机,该单片机具有可靠性高,价格成本低,解密难,高性能的特点,32个IO口,且STC系列的单片机可以在线编程、调试。因此选用方案二中的52系列单片机作为主控芯片。2.2显示模块的选型和论证方案一:用点阵式数码管显示,它是由发光二极管八行和八列显示文本,更适合用于显示文字,如进行数字显示使用就太浪费了,而且价格比较高,所以不用此种作为显示。

7、方案二:使用LED数码管动态扫描,LED数码管虽然价格适中,最适合数字显示,采用动态扫描的方法与单片机连接,单片机口线占用得少。但是由于数码管动态扫描需要借助74LS164移位寄存器,74LS164在调试的时候,电路方面常出故障,所以不采用LED数码管作为显示。方案三:选用LCD液晶显示屏,它可以清晰可见的显示文字,图像,功能很是强大,关于本设计的要求,我们使用一个LCD1602即能满足要求,成本低,虽然接口线有点多,但是调试会很方便。所以本设计中方案三中的LCD1602液显示屏作为显示模块。2.3时钟芯片的选型和论证方案一:用程序控制单片机实现时间计数。采取该方案虽然能够缩小时钟芯片的使用量

8、,节省成本开支,但是,误差会非常大。方案二:采用DS1302时钟芯片实现时钟,DS1302是美国DALLAS公司推出的一种性能比较高、性价比高,功耗较低、带RAM的实时时钟电路,它可以对年、月、日、时钟、分钟、秒以与星期进行计时,还能进行闰年补偿,工作电压为2.5V5.5V。DS1302里面含有一个8*31的RAM存储器,用于临时存放数据。DS1302主要特点是采用串行数据传输,具有可编程充电和掉电保护功能,采用普通32.768KHz晶振作为标准时钟。因此本设计中采用方案二中的DS1302作为时钟模块2.4温度检测模块的选型和论证方案一:AD590感温电流源的输出电流与绝对温度成比例。电源电压

9、在4 V30 V围,AD590可充当一个高阻抗,调节系数为1 A/K为恒流调节器。通过激光调整的片薄膜电阻,用于校准装置,使该器件在25C时有298.2 A的输出电流。由于该芯片输出为模拟量还同时需要AD转换器对其进行采集。因此不适用于本设计方案二:DS18B20数字温度传感器耐磨耐碰,体积小,主要根据应用场合的不同而外观不同,DS18B20用途广泛,如电缆沟测温,机房测温,弹药库测温、农业大棚测温,高炉水循环测温,锅炉测温,洁净室测温等场合。使用场合广,价格低,实用性强。因此本设计采用方案二中的DS18B20芯片进行温度采集。2.5整点报时模块的选型和论证整点报时模块集成的语音芯片NY3P0

10、35,NY3P035是一款具有PWM输出的OTP语音标准芯片,该芯片部集成了09以与一些常用单位的录音。使用时只要根据录音存放的位置依次读出就能播报出当前的重量和价格。2.6 电源模块方案一: 选用以下两块芯片LM337和LM317自制一个可调的电源模块,LM317和LM337分别是三端可调式输出正电压稳压器和三端可调式输出负电压稳压器。通过这2块芯片,我们可以很容易的得到正负5V,正负12V和正3V电压,但由于本设计需求各模块体积小,而自制电源体积较大,故不采用此方案。方案二: 采用USB接口供电,既能够下载程序,也能供电,一举两得,故采用此方案。2.7系统整体设计概述图2.7 系统结构框图

11、本系统是以STC89C52单片机为核心,首先要对系统进行初始化,然后单片机对键盘,DS18B20等模块进行扫描,实现对键盘的响应,实时显示分钟、秒等,对1602液晶显示,闹钟、温度测量等功能,其中,单片机起到控制和协调各功能模块的工作。系统的结构框图见图2.7。第三章.系统硬件电路设计3.1主控模块单片机在全部设计中起到了统领全局,承前启后的作用,在该设计中单片机需要完成的任务主要有对键盘扫描,对DS18B20进行与时的检测,驱动蜂鸣器,驱动液晶显示需要显示的容,所以,在本设计中我们选用52系列的单片机作为系统的总控制模块。如图3.1所示为STC89C52单片机的结构框图。图3.1 STC89

12、C52单片机结构框图3.1.1 单片机的最小系统设计图3.1.1 单片机最小系统电路图图3.1.1所示的电路图是单片机在本设计中的最小系统,时钟电路选用12M的晶振,作用是为单片机提供一个时钟基准,其执行一条指令需要一个机械周期,单片机的复位电路是让单片机的状态回到刚上电的状态,因为P0口是一个漏极准双向的I/O口,所以需要上拉电阻才能正常工作。3.2 LCD液晶显示器简介由于本设计中要求显示界面显示一些参数,因此这里选用了LCD1602作为界面显示,可以把一些相关的参数进行显示。 3.2.1 液晶原理介绍显示部分选用LCD1602字符型液晶,辅以必要的外接电路组成显示模块,单片机控制带字符的

13、LCD1602查找其字符库,从中选出要显示的字符,设置光标,将之前查找到的字符在此对应即可。3.2.2液晶模块简介LCD1602液晶模块的引脚图如图3.2.2所示。图3.2.2LCD1602引脚图液晶寄存器选择控制如表1。表1寄存器选择控制RSR/W操作说明00写入指令寄存器(清除屏幕容显示等)01读位地址计数器(DB0DB6)和busy flag(DB7)10写入数据寄存器(显示各字型等)11从数据寄存器读取数据3.2.3液晶显示部分与STC89C52的接口如图3.2.3所示。用STC89C52的P0口作为数据线,用P1.2、P1.1、P1.0分别作为LCD的EN、R/W、RS。其中EN作为

14、片选信号,在出现下降沿的时候触发,RS是寄存器选择信号,R/W是读写信号,在整个显示模块中,我们主要设计步骤如下:首先进行清屏,显示模块初始化。然后将接口数据位设置为8位,显示行数设置为2行,设定字型为57点阵,然后取消光标和字体闪烁, 显示设置为整体显示,最后设置为正向增量方式且不移位。将要显示的字符送到对应的数组中,最后进行统一显示。图3.2.3LCD1602与STC89C52的接口3.3键盘模块设计本按键模块按键一端接单片机的I/O口,另一端接地,由于单片机的I/O口部都有上拉电阻,所以在没有按键按下的时候,我们会检测到高电平,当按键被按下,I/O口与地面等电势,此时为低电平,因此通过I

15、/O端口的状态变化检测即可知道按下了哪个按键。4个按键分别代表以下功能,第一为功能选择按键,可以切换不同参数设置界面,第二个为切换按键,可以切换时、分、秒等参数进行设置,第三个为增加按键,第四个为减少按键。其中按键还可以设置闹钟,重置时间等功能。键盘模块电路图如图3.3所示。图3.3键盘模块电路图3.4蜂鸣器模块设计本设计还带有闹钟功能,用户可以通过按键设定好闹钟,当当前时间跟闹钟时间一致的时候,单片机就可以驱动蜂鸣器发声。通过试验,发现单片机的I/O口无法直接驱动蜂鸣器,是因为蜂鸣器的工作电流一般比较大,所以我们利用三极管开关电路来提供足够大的驱动电流。本处选用的是8550三极管,它是一个P

16、NP型的三极管,当基极给低电平的时候三极管导通,这时候蜂鸣器发声,当给高电平的时候,三极管关闭,蜂鸣器不发声。蜂鸣器模块的电路图如图3.4所示。图3.4 蜂鸣器驱动电路电路图3.5时钟模块的设计在本设计中,时钟模块的设计,我们把DS1302这块串行日历时钟芯片作为核心,因为DS1302具有与单片机的连线很少,节省单片机的系统资源的有点,单片机通过I/O读取DS1302上的数据可以得到实时时间。由于采用单片机作为计时模块会占用硬件资源,而且采用中断、查询等方式也要耗费单片机的资源,可能会造成很大的浪费,而采用DS1302却可以很好的解决这类问题。DS1302是美国DALLAS公司推出的一种带RA

17、M、高性能、能对年、月、日、星期、时、分、秒进行计时,并且低功耗,可以进行闰年补偿的时钟电路,工作电压为2.5V5.5V。采用24小时或是12小时的格式。此外,DS1302采用双电源供电,主电源和备用电源,VCC1作为备用电源,在模块整体供电中提供电压相对低的电压,而VCC2作为主电源,VCC1和VCC2的供电模式决定如下:VCC2VCC1+0.2时 由VCC2供电 VCC2VCC1时 由VCC1供电图3.5.1 DS1302引脚示意图如图3.5.1为DS1302的引脚图。X1和X2是震荡源,外接32.76KHz的晶振,GND为接地端,RST为复位端,低电平有效,图3.5.2为DS1302的引

18、脚功能图引脚号引脚名称功能1VCC2主电源2,3X1,X2振荡源,外接32768HZ晶振4GND地线5RST复位/片选线6I/O串行数据输入/输出端(双向)7SCLK串行数据输入端8VCC1后备电源图3.5.2 DS1302引脚功能表在3.5.3中,最高位控制字(第七位)必须是一个符合逻辑的,即必须为逻辑1,第六位控制字为0是日历时钟对数据的访问,第六位是1表示存取RAM数据,第五位地址到第一位(A4-A0)表示指针指向操作单元地址,电平1或0分别表示写操作是读操作。图3.5.3 DS1302控制字DS1302共有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式,其日

19、历、时间寄存器与其控制字见表2,其中奇数为读操作,偶数为写操作。总共有12个寄存器DS1302,与日历 ,时钟相关寄存器共7个,都存储为BCD格式,日历,时钟寄存器和相关联的控制字的数据位如表2所示,其特征在于所述奇数读操作,写操作是偶数。表2 DS1302的日历、时钟寄存器与其控制字寄存器名命令字取值围各位容写操作读操作76543210秒寄存器80H81H00-59CH10秒秒分钟寄存器82H83H00-59010分分小时寄存器84H85H01-12或00-2312/24010时时AM/PM日期寄存器86H87H131010日日月份寄存器88H89H01-1200010月周日寄存器8AH8B

20、H01-0700000周日年份寄存器8CH8DH00-9910年年从表2我们可以发现,小时寄存器的第七位为1是12小时计时模式,在12小时计时模式下,第五位为高电平表示AM,低电平表示PM,第七位为0是24小时模式,这是位5为第二个十小时位标志。暂停位位于秒寄存器的第七位,当该位被设置为1时,时钟振荡器停止工作,然后DS1302工作在低功率模式,该位为0时,时钟正常运行。控制寄存器地址是8FH,8EH,其第七位是写保护位,其余七位均要置0,在对时钟进行的任何写操作时,写保护位WP必须是0,否则,写保护位禁止任何一个寄存器进行写操作。3.6温度检测模块设计本设计还带有一个温度检测的功能,系统可以

21、通过读取DS18B20的温度数据并在LCD1602上显示,使整个时钟的功能更加丰富。3.6.1温度传感器工作原理温度传感器DS18B20测温在-55至+125摄氏度围,具有12位的精度。它有0.0625摄氏度的测温分辨率,可设置存储在EEPROM中,用户自定义的报警温度在掉电后仍然可以保存。另外,多个温度传感器可以并联连接,但只需要使用CPU上的一个端口就可以与温度传感器电路进行通信,这样微控制器端口占用最少。它可以节省大量的端口和逻辑电路就能构成温度测量系统。图3.6.1是DS18B20的引脚图。图3.6.1 DS18B20引脚图我在实验中发现,当使用DS18B20,VCC电压应保持在5V,

22、否则,如果电压太低,降低了温度传感器的精度。而且,温度传感器从测量温度完毕后,将温度传出到转换到数字量的时候,需要一定的延时时间,否则会导致转换错误,总是显示一个时间不动。3.6.2 DS18B20硬件电路设计图3.6.2 DS18B20温度检测电路图如图3.6.2所示的是DS18B20的硬件设计,DQ作为温度传感器DS18B20数据输出端口,单片机通过检测可以实时输出温度值的数据,由于该温度传感器是单线通信,所以当发送数据时为低电平有效,接收数据是为高电平有效,即输出逻辑1,但是,在接收状态下,必须外接上拉电阻将其拉为高电平,才能正常输出逻辑1.3.7 语音模块设计语音模块设计采用NY3P0

23、35芯片,该芯片部含有一个ROM表。单片机通过对该芯片发送序列的脉冲信号来查找该ROM的地址,以此来发出声音。图3.7.1语音芯片引脚图单片机控制原理是:先发送一个复位脉冲到 RST(Rest)脚,接着发送 10 个脉冲到 DATA 脚。芯片即刻工作,播放第十段的声音;如果需要播放第五段的声音,则是:先发送一个复位脉冲到 REST 脚,接着发送 5 个脉冲到 DATA 脚。芯片即刻工作,播放第 5 段的声音;第四章.系统软件设计4.1系统软件总体设计图4.1.1主程序流程图主程序流程图如图4.1.1所示,首先系统经过初始化,清除系统中原有的一些冗余信息后,读取时钟芯片DS1302的部相关信息,

24、例如:年、月、日等时间参数,紧接着判断当前信息是不是和设定的闹钟信息一致,如果是的话,单片机就发出驱动信号驱动蜂鸣器发出声音,如果不是,则单片机将读取温度传感器DS18B20的相关信息,然后将读取的时间信息和温度信息传入LCD1602进行显示,单片机在每个循环时都会检测是否有用户按键,如果有按键的话,将自动跳转到相应的子程序。图4.1.2 时钟模块子函数程序流程图时钟模块的流程图如图4.1.2所示,首先先让时钟芯片的复位引脚置高,然后开始数据传输,然后写一个指令字节,然后发送串行时钟脉冲信号,一直循环,直到发送了8个命令字节为止。当发送完8个命令字节时,写数据进时钟芯片,首先写入一位数据字节,

25、然后给SCLK引脚发送脉冲,一直循环写入8次,这样数据写入完成,最后将复位引脚拉为低电平,这样就可以完成时钟芯片的一次操作。图4.1.3 按键扫描程序流程图键盘扫描程序流程图如图4.1.3所示,当进入到按键扫描子函数后,首先判断按下的是哪个按键,如果是按键1的话,则检测单片机是否处于闹钟的触发状态,是的话,将闹钟标志位清0,不是0的话,那么变量 gFunctioncount加1,进入时钟设置界面,如果是的话重新检测按键,如果是按键2的话,则用于选定不同的所需的时间参数,按键3和按键4实现时间参数的确定,如果仍然是按键1时,则变量gFunctioncount加1,进入闹钟设置模式,此时通过按键确

26、定并设置闹钟参数。继续按键1,则gFunctioncount加1,进入复位模式,按下确认键,则使当前时间参数全部复位。并且gFunctioncount清0,以与清除屏幕显示,最后跳出设置功能。按键2的功能是切换对应菜单,按键3是用于增加相应值,按键4是用于减少相应值。图4.1.4 LCD1602初始化子程序函数流程图LCD1602子程序函数流程图如图4.1.4所示,首先先调用液晶自定义的字库,设置好DDRAM地址后在第一行显示,根据程序中的数据,设置显示数据的首地址,并设置循环量,在循环过程中不断的取字符代码直到终止,第二行的显示过程同理,两行显示完毕后便完毕子程序图4.1.5 温度传感器DS

27、18B20温度检测子程序流程图温度传感器DS18B20温度检测子程序流程图如图4.1.5所示,进入温度读取子函数时,首先初始化DS18B20温度传感器的参数,单片机发送跳过ROM命令给DS18B20,然后发送温度转换命令并且延时一定时间等待转换完毕,等转换完毕后单片机在再次初始化DS18B20,发送跳过ROM命令,温度到缓冲区,最终温度处理子程序调用达到存储实时温度的目的。4.2程序设计原理软件设计是基于硬件设计的基础之上,首先要明确硬件设计的原理,区分哪些是需要硬件设计的,哪些是软件设计的畴,软件设计要明确设计容的真正目的,设计程序最好要简单明了,尽量减少多余的冗余信息,减少CPU的负担。软

28、件分析方面的任务是软件设计的一个总体规划。从软件的功能的角度可以分为两大类:一类是在软件的设计,可以完成各种实质性的功能,如测量,计算,显示,打印,导出控制和通信,以与其他的监控软件,其目的是作为软件调度软件的组织来执行模块的作用和运作之间的关系。这两种类型的软件设计方法都有其自身的特点,专注于算法的软件设计,不断提高软件完成功能效率,以与与之密切相关的硬件,都有不断变化的可能性,关键就在于我们设计者是怎么进行操作的。软件需求分析的任务,应该将执行模块一一的列表,定义每个执行模块的输入和输出,并绘制了相应的程序流程图,并制定可执行模块的引脚和功能。5.系统调试5.1硬件调试在制作硬件电路之前,

29、我们先根据实际需要的功能划分硬件模块,并且在 PROTEL里面画出其硬件原理图和PCB图,检查无误后开始先在万用板上焊接,调试无误后在腐蚀板上制作焊接。在本万年历的硬件调试中遇到过许多常见的问题,现在回想这类问题,只要在当时认真一些,多思考,多查下资料,这些问题都是可以避免的,以下为主要的问题:问题1:刚开始的时候以为单片机I/O口可以直接驱动蜂鸣器发出声响,后来调试了很久都不能发出声音。解决:经过多方面的查找相关资料,如进入图书馆查找历年来的设计资料,或者进入相关资源的数据库,或者在商家处寻求相关芯片的PDF资料文件,最终我知道了单片机的I/O口给蜂鸣器提供不了足够的驱动电流,所以我们采用三

30、极管放大器来将电流放大,用以驱动蜂鸣器工作,实验证明,把三极管放大器加在系统上后蜂鸣器就可以正常工作,发出声音了。问题2:单片机一直读取DS18B20的温度总是错误,显示的时候不是乱码就是总显示24摄氏度或者85。解决: 经过查找芯片手册,知道DS18B20的输出端是漏极开路结构,需要加上拉电阻才能读取数据正常.问题3:本设计要实现语言实时报时,但是在用万用版做出来的时候,不管怎么做,都没有语音发出声音。 解决:刚开始怀疑是对语音芯片设计有问题,但是通过查找芯片手册,发现对于语言报时模块中的核心芯片设计没有任何问题,接着怀疑是程序方面有问题,因为要实现语音报时,必须要进行的步骤是要单片机对语音

31、芯片的部ROM进行查表,但是通过分步骤的对程序进行检查发现,程序也没有问题,最后仔细检查了一下整个电路设计,发现忘记在电路中设计喇叭了,误以为电路中有蜂鸣器就可以发声,由于模块已经设计完,只好用跳线外接了一个小喇叭,测试发现,问题得到解决,语音报时容为:“今天是XX年X月X日”“现在是X时X分X秒,星期X”。5.2软件调试本系统是一个较为复杂的数字系统,程序更为复杂,所以在编程和调试出现了相对更多的问题。首先为了更好的测试效果,我最开始是一个模块一个模块单独做成电路板,然后直接用跳线连接组成的系统,在确定无误后,再把程序烧录到实物中运行。在系统中调试号确定无误后,再将每个模块全部集中在一个腐蚀

32、板上,再进过一番调试,问题得到解决,功能得到实现。在该过程中主要遇到的问题如下:问题1:烧入程序,LCD液晶出现显示永远闪烁,和不均匀的亮度。解决:刚开始的时候怀疑是程序的延时部分有问题,所以在程序中修改对调用的子程序的延时,结果我们发现屏幕显示闪动频率明显降低,找到问题点后,继续增大延时,最终达到解决显示闪动问题的目的。由于该系统采用数字动态扫描显示,动态扫描快,人眼无法看到,但是当调用显示程序,如果没有返回的最后一个值,就会显得非常明亮或亮度不均匀的现象,所以在显示指令的后面加一个屏蔽子令,最终的问题得到解决。问题2:当用户按下按钮,设定的数值与单片机读取的值跟不对应,而且有时候按键失灵或

33、者是出现某些关键功能有时候不对应有时候对应的情况。解决:重新检查矩阵键盘电路的连接,发现焊接键盘电路时有虚焊,重新焊接好矩阵键盘按键没有反应的问题得到解决。然后检查键盘扫描程序,重新建立一个新的对应关系。最终问题得到解决。参考文献1 彭伟.单片机C语言程序设计实训100例.电子工业.2009年2 吴运昌模拟电子线路基础:华南理工大学,2004年3 阎石数字电子技术基础:高等教育,1997年4 晓丽等数据结构与算法:机械工业,2002年5 马忠梅等 ARM & Linux嵌入式系统教程:航空航天大学,2004年6 建忠单片机原理与应用:电子科技大学,2002年7韩志军等.单片机应用系统设计M.机

34、械工业,20048周润景等. Proteus在MCS-51&ARM7系统中的应用百例M.电子工业,20069马忠梅等.单片机的C语言应用程序设计M.航空航天大学,200610树中,书膺,王春平.单片机和液晶显示驱动器串行接口的实现J.微计算机信息,2007致谢通过此次简易灯光时钟的毕业设计,我学到了很多东西,并且,将许多以前在书本上学到的东西运用到实际生活中,在以前的专业课书本中,很多概念的模糊的,例如:在以前的学习过程中,一直不明白温度传感器是怎么进行工作的,与单片机是怎么进行通信,单片机的I/O口采集温度传感器DS18B20的数据后是怎么转换数据将之对应为实时的温度的。而且通过此次设计,我

35、学会了如何点亮液晶,怎么制作功能菜单,会设计单片机最小系统,将许多模糊的概念彻底的搞清楚,同时,在这段时间里,我明白了我们专业在以后的生活工作中的运用方向,也为我在以后工作中需要学习,掌握的工作技能奠定基础。在这次设计当中,我学会使用STC52系列单片机,并会熟练使用protel,keilC51等软件,能够独立的搭建一些简单的硬件设计,能够检查出一些简单、常见的问题,动手能力有所提高,对所学知识运用加深。感谢在这次设计中对我提供帮助的老师,同学,谢谢教我怎样查找芯片关键资料,教会我使用protel的老师,谢谢你们。附录系统整体原理图系统PCB图实物图元件清单名称数量STC89C52130PF电

36、容210UF电容11000UF电容110K电阻310K电位器1DIP40插座1LCD16021轻触按键512M晶振1DS18B2018550三极管1DS13021蜂鸣器1语音芯片NY3P035AP632401D1扬声器1DIP8插座2板子1铜柱4螺帽4USB座子1系统源程序/说明:第一个键:按一下,当前时间设置;通过第二个键来选择年月日时分秒/按第二下,闹钟1设置;通过第二个键选择时分秒/添加头文件#include/单片机头文件#includeLCD1602.h/液晶#includeDS1302.h/时钟#includekey.h/按键#includeDS18B20.h/温度传感器void D

37、isplayInit(void)/初始化LCD和时钟的显示,初始化定时器LCDInit(); /初始化液晶 void Display1(void)/显示正常界面,时间的函数DS1302_read_time(); /读取DS1302时间LCDDispNum(1,1,(Nian4); /在液晶上显示年的十位LCDDispNum(2,1,(Nian&0x0f);/在液晶上显示年的个位LCDDispChar(3,1,-);/在液晶上显示字符-LCDDispNum(4,1,(Yue4);/在液晶上显示月的十位LCDDispNum(5,1,(Yue&0x0f);/在液晶上显示月的个位LCDDispChar

38、(6,1,-);/在液晶上显示字符-LCDDispNum(7,1,(Ri4);/在液晶上显示日的十位LCDDispNum(8,1,(Ri&0x0f);/在液晶上显示日的个位LCDDispNum(1,2,(Shi4); /在液晶上显示十的十位LCDDispNum(2,2,(Shi&0x0f);/在液晶上显示十的个位LCDDispChar(3,2,:); /在液晶上显示显示字符:LCDDispNum(4,2,(Fen4); /在液晶上显示分的十位LCDDispNum(5,2,(Fen&0x0f);/在液晶上显示分的个位LCDDispChar(6,2,:);/在液晶上显示显示字符:LCDDispNu

39、m(7,2,(Miao4);/在液晶上显示秒的十位LCDDispNum(8,2,(Miao&0x0f);/在液晶上显示秒的个位XingQi = (XingQi & 0x0f)+(XingQi4) * 10); /星期if(XingQi = 1) /判断并显示星期的字符LCDDispString(12,1,Mon.); /如果星期等于1则显示Mon.else if(XingQi = 2)LCDDispString(12,1,Tues); /如果星期等于2则显示Tueselse if(XingQi = 3)LCDDispString(12,1,Wed.); /如果星期等于3则显示Wed.else

40、if(XingQi = 4)LCDDispString(12,1,Thu.); /如果星期等于4则显示Thu.else if(XingQi = 5)LCDDispString(12,1,Fri.); /如果星期等于5则显示Fri.else if(XingQi = 6)LCDDispString(12,1,Sat.); /如果星期等于6则显示Sat.else if(XingQi = 7)LCDDispString(12,1,Sun.); /如果星期等于7则显示Sun.FenA = (Fen & 0x0f) + (Fen4) * 10);/把分的BCD码转成10进制ShiA = (Shi & 0x

41、0f) + (Shi4) * 10);/把时的BCD码转成10进制/闹铃,判断是否有闹铃。如果时间到,则蜂鸣器响,否则不响if(AlarmFlag0 = 1 & DoneFlag0 = 1 & ShiA = AlarmClock00 & FenA = AlarmClock01)BEEP = 0;else BEEP = 1;/转点时的闹钟标志位要清零if(Shi = 0 & Fen = 0 & Miao = 0)if(AlarmFlag0 = 1)DoneFlag0 = 1;if(Fen = 0 & Miao = 0)Music(L_beijing);if(Shi4)!=0)if(Shi4)=1

42、)Music(L_shi);elseMusic(Shi4)+1);Music(L_shi);if(Shi&0x0f)=0)if(Shi4)=0)Music(L_0);elseMusic(Shi&0x0f)+1);Music(L_dian);Music(L_zheng);/读取温度的值ReadTemperature();/显示温度的值LCDDispString(12,2,temperatureDate);void main(void)/初始化操作DisplayInit();Music(L_1);while(1)/死循环if(gFunctionCount = 0)/判断是否为正常显示界面Displ

43、ay1();/显示子函数1KeyScan(); /按键扫描子函数#include#includelcd1602.h/* Function: void DelayN40us(unsigned int n)Description: 延时函数,延时40us的整数倍,传入值n代表延时 时间到n *40us,不能实现准确延时,只能实现大 概时间的延时,利用的是指令实现延时功能。 Calls: 没有调用其它函数 Called By: void LCDWriteCommand(unsigned char dat); void LCDWriteData(unsigned char dat); Input: unsigned int n - 用于延时时间的确定,取值、 为165535 Output: 无 Return

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > 工作计划

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁