1、目 录第一部分 设计任务与调研11、 设计任务11.1设计内容与结构11.2方案比较与选择11.2.1 系统方案选择1第二部分设计说明31 系统硬件电路32 单片机电路32.1单片机最小系统电路3图2-1最小单片机系统电路43.1 时钟电路43.1.1 DS1307简介4 3.2 时钟电路设计63.3 按键电路63.4 显示电路73.5 打铃电路84系统软件设计94.1 软件设计流程图94.2 读取DS1307时间程序设计94.3显示程序设计114.4 按键设定程序设计13第三部分设计成果141、 主电路图14见附录一142、 源程序14见附录二143、实物14第四部分总结16第五部分致谢17
2、第六部分参考文献18附录19附录一:电路图19附录二:源程序20I第一部分 设计任务与调研1、 设计任务设计一个能够实现上下班的自动打铃模拟系统,熟悉单片机的控制功用和系统原理应用。对系统设计与实用编程有进一步强化。了解设计产品的要求和产品工作要求、分析电路流程、分析电路设计程序流程、分析转换开关的工作原理、绘制电路图编译测试电路程序、测试电路程序工作是否正常、完善测试电路程序。1.1设计内容与结构本设计是以AT89S51单片机为核心的一款自动打铃系统,以时钟芯片来实现计时功能,然后单片机负责将时间送入显示电路显示,整个系统不是很复杂,其设计主要包括单片机控制模块、时钟电路和显示电路三个模块的
3、设计,在设计前本人在学校图书馆看了很多关于单片机方面的书,也在网上查了不少资料,也查阅过跟此设计相似的论文或者期刊,得到了不少启发和经验,对本人的设计工作有很大的帮助,能很好的把握设计的整体方向和细节,设计的结构如下:一、系统的设计方案,根据系统所要实现的功能,确定设计的基本方案。二、系统的硬件设计,主要介绍了硬件的电路图,各模块电路的设计,硬件元器件的结构,特点,引脚功能等。三、系统软件部分的设计,主要是对系统的主程序的结构图和流程图的解说。四、系统的调试,主要是介绍下系统硬件和软件调试过程中的问题和解决方案,还有调试步骤的细节问题的说明。1.2方案比较与选择1.2.1 系统方案选择方案一:
4、采用数字电路来搭建,利用555时基电路构成振荡器产生100Hz频率的振荡电路,再通过分频器得到1Hz频率,即产生1秒计时时间,显示部分通过锁存器和驱动芯片将计时时间送入数码管显示。设计框图如图2-1所示。这种方案电路结构比较复杂,芯片使用比较多,灵活性不高,而且准确度不够精确,不利于系统的扩展。而且这种电路中需要使用独立式的数码管,每一个数码管都需要连接一个数据锁存器和数码管驱动芯片,连接线比较多,制作的过程中很容易出错。NE555时基电路分频器100Hz信号数据锁存器1Hz信号数码管驱动数码管显示图2-1 方案一设计框图方案二:采用AT89S51单片机作为系统控制单元,通过时钟芯片来实现计时
5、功能,单片机负责将时间送入显示电路显示。设计框图如图2-2所示。这种方案电路设计简单,时间精确,使用方便。而且单片机的强大功能使得系统方便扩展,有利于提高智能性。时钟芯片秒计时单片机液晶显示器显示计时时间图2-2 方案二设计框图本设计系统框图如图2-3所示。系统以AT89S51单片机为控制器,通过DS1307来为系统提供标准时间,单片机读取DS1307时间后送液晶显示器显示,通过按键来设置打铃时间。当打铃时间到时,系统实现蜂鸣器和LED灯声光提示。系统设计框图如下:时钟电路按键设定打铃时间单片机控制显示电路打铃电路第二部分设计说明1 系统硬件电路根据系统设计框图,本设计硬件电路主要由时钟电路、
6、按键设定电路、单片机电路、显示电路和打铃电路组成,电路原理图见附录一所示。系统工作原理:系统时间由时钟芯片DS1307来提供,单片机通过P3口读取了DS1307的时间数据后,经过处理得到时间显示模式的时钟数据,并通过P2口送液晶显示器显示出来。再通过扫描P1口是否有按键按下,有按键按下时,通过液晶显示器显示来设置定时时间、打铃时间间隔,通过设定、移位、加数来实现。当到达打铃时间时,单片机引脚启动蜂鸣器和LED灯电路工作以声光形式实现打铃功能。2 单片机电路2.1单片机最小系统电路单片机最小系统由晶振电路和复位电路组成。电路如图2-1 2-2所示。晶振电路用于产生单片机工作时所需要的时钟信号,单
7、片机的指令必须在时钟信号下按照时序执行。晶振电路通常用两种设计方式:内部振荡方式和外部振荡方式。内部振荡方式是在单片机的XTAL1和XTAL2引脚外接一个晶体振荡器,与单片机内部的振荡器组成时钟信号;外部振荡方式是在外部将已有的脉冲信号引入单片机内,一般用于使单片机的时钟与外部信号保持同步。本设计选用内部振荡方式,在XTAL1和XTAL2引脚之间连接一个12MHz的晶振,再分别外接30p的对地电容。单片机在启动时需要复位,使系统各器件处于初始状态。复位引脚为RST,当系统上电后晶振电路稳定后,RST引脚有一个高电平且持续2个机器周期以上,单片机系统就可以实现复位功能。复位一般有手动复位和上电复
8、位功能。手动复位是在RST引脚设置按键,当按键按下时,RST引脚会有高电平,即可实现复位功能;上电复位是在RST引脚连接一个电解电容接至电源,再接一个电阻接地,系统上电时,电容充电,只要电源的上升时间不超过1ms,就可以实现复位功能。本设计选用按键复位。图2-1最小单片机系统电路图2-2 单片机最小系统电路3.1 时钟电路3.1.1 DS1307简介DS1307是I2C总线接口的日历时钟芯片,片内有8个特殊寄存器和56字节的非易失性RAM,是一种低功耗、BCD码的8引脚实时时钟芯片。它的主要特点:可对秒、时、分、每月的天数、月份、每周的天数进行计数,并具有闰年补偿功能,记年上线为2100年;5
9、6字节非易失性RAM;两线串行接口;可编程方波输出;自动掉电检测和切换电路;在电池备份模式下,功耗小于50nA;工业级工作温度:-40-80;8引脚DIP和SOIC封装。DS1307的引脚排列如图3-1所示,引脚说明如下: X1、X2:接入32.768kHz的石英晶振;VBAT:+3V电源输入;GND:地;SDA:数据线,输入输出数据,需要外接上拉电阻;SCL:时钟线,用来同步数据;SQW/OUT:方波信号输出端,可输出供选择的频率方波,1Hz、4 KHz、8K Hz、32K Hz,需外接上拉电阻。VCC:+5V电源;图3-1 DS1307引脚图3.2.2 时钟电路设计 时钟电路如图3-2所示
10、。时钟芯片的SCL引脚和SDA引脚分别由单片机的P3.1和P3.2引脚控制,单片机只需按照DS1307的工作时序来控制DS1307即可实现时间的写入和读取,其中DS1307的时钟端与数据端需外接上拉电阻,本设计选用5针排阻来充当上拉电阻。 图3-2时钟电路3.3 按键电路键盘是单片机应用中常用的一种输入器件,键盘的按键有触点式和非触点式之分,按接口原理有编码键盘和非编码键盘之分。编码键盘主要用硬件来实现对按键的识别,非编码键盘是由软件来实现键盘的定义与识别。常用的按键一般为触点式按键,根据按键所连接的单片机引脚的电平高低来判断其是否按下。按功能分,键盘有独立按键和矩阵按键之分,独立按键每一路按
11、键就占用单片机的一个控制引脚,单片机直接获取其信息;矩阵按键将按键排成由行和列组成的行列式,通过确认按键的行号和列号来确定每一路按键,利用少的单片机引脚控制更多的按键。本设计中按键电路如图3-3所示,由单片机的P1口控制按键电路。本设计中按键用于设定定时时间、打铃时间间隔,所以只需4路按键即可实现所需功能,采用独立式按键即可。由于按键是机械式触点,所以在断开或闭合时,一般都有抖动产生,虽然这个抖动时间在我们看来非常短,但是单片机执行指令的速度为微秒级别,很容易会读取这个时间而将其判断为真正的工作状态,从而引起误判。因此,在设计中必须考虑到按键抖动的影响。常用的去抖动的方法有两种:硬件方法和软件
12、方法。硬件方法一般是加电容或者RS触发器;软件方法是在单片机在检测引脚所连接的按键的工作状态时加一个延时程序再次确认,通过2次的确认就可以确保按键的工作状态不受机械抖动的影响了。图3-3 按键电路3.4 显示电路LCD1602为字符型液晶显示器,分为带背光和不带背光两种,主要技术参数:显示容量,162个字符;芯片工作电压,4.5V-5.5V;工作电流,2.0mA;模块最佳工作电压,5V;字符尺寸,2.954.35mm。LCD1602共有16个引脚,引脚说明如下:1脚,VSS,电源地;2脚,VDD,电源正极,接+5V;3脚,VL,液晶显示偏压,接正电源时对比度较弱,接地时对比度最高;4脚,RS,
13、数据/命令选择,高电平时选择数据寄存器,低电平时选择指令寄存器;5脚,R/W,读/写选择,高电平时进行读操作,低电平时进行写操作,当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据;6脚,E,使能信号,当E端由高电平跳变为低电平时,液晶块执行命令;7-14脚,D0-D7,8位双向数据线;15脚,BLA,背光源正极;16脚,BLK,背光源负极。本设计中显示电路如图3-4所示。单片机的P2口作为LCD1602的数据线端口,P3口控制LCD1602的使能端。单片机读取数据后,通过控制LCD1602的读写端、复位
14、端和使能端将其设置为写入数据状态,再将数据通过P2口送入LCD1602实现显示功能。3-4 显示电路图3.5 打铃电路 打铃电路一般用声音或音乐作为提醒,本设计选用蜂鸣器和LED灯实现声光双重打铃功能,电路如图3-5所示。打铃时间到时,单片机P3.3引脚置高,三极管9013导通,继而蜂鸣器和LED灯导通,实现蜂鸣和灯亮打铃功能。图3-5 打铃电路4系统软件设计4.1 软件设计流程图 系统软件设计流程图如图4-1所示。图4-1 软件设计流程图 程序设计过程:首先要定义单片机的引脚,然后初始化器件,再利用DS1307的读写时序读取时间数据。再利用按键进入时间设定状态,设定完时间后单片机通过比较时间
15、是否到达设定的时间来确定是否到打铃时间,如果达到打铃时间,则控制蜂鸣器响LED灯亮。4.2 读取DS1307时间程序设计DS1307中的时间寄存器地址编码为00H-07H,而具有掉电保护的RAM寄存器的地址编码为08H-3FH。当地址指针指向RAM的最后一个地址3FH时,若进行多字节操作,则地址指针将会复位而指向00H,这样原来存在00H的数据将会丢失。DS1307的各类时间数据均以BCD码的格式存储在相应的时间寄存器中,具体分配如表4-1所示:表4-1 DS1307寄存器分配00H01H02H03H04H05H06H07H秒分小时星期日期月年控制字单片机通过读取DS1307相应的寄存器字节,
16、可以获取时钟和日历信息。时钟和日历信息以BCD码的形式存放在寄存器中,寄存器0的第7位为时钟停止位,振荡器停止工作。由于在初次上电时,所有寄存器的状态是不确定的,所以在初始化时必须将寄存器0中的第7位设为0。DS1307可运行在12/24小时模式下,并由时间控制器中的相应位来进行控制。根据小时寄存器的第6位是0还是1,置为1时,是工作于12小时模式下,此时,小时寄存器的第5位为AM/PM标志。在24小时模式中,小时寄存器的第5位和第4位共同组成小时的十位数。时钟模块设计流程:单片机按如下顺序将数据写入到DS1307 寄存器或内部RAM 中:1、START 信号2、写SLA+W(0xd0)字节,
17、DS1307 应答(ACK);3、写1 字节内存地址(在以下第四步写入的第一字节将存入到DS1307 内该地址处,DS1307应答);4、写数据(可写多个字节,每一字节写入后DS1307 内部地址计数器加一,DS1307 应答);5、STOP 信号单片机读取DS1307子程序流程图如图4-2所示:图4-2 单片机读取DS1307子程序流程图4.3显示程序设计LCD1602的基本操作时序:读状态:输入:RS=L,RW=H,E=H;输出:D0-D7=状态字。写指令:输入:RS=L,RW=L,D0-D7=指令码,E=高脉冲;输出:无。读数据:输入:RS=H,RW=H,E=H;输出:D0-D7=数据。
18、写数据:输入:RS=H,RW=L,D0-D7=数据,E=高脉冲;输出:无。LCD1602初始化过程:延时15ms;写指令38H(不检测忙信号);延时5ms;写指令38H(不检测忙信号);延时5ms;写指令38H(不检测忙信号);以后每次写指令、读/写数据操作均需要检测忙信号;写指令38H,显示模式设置;写指令08H,显示关闭;写指令01H,显示清屏;写指令06H,显示光标移动设置;写指令0CH,显示开及光标设置。LCD有11条控制指令,如表4-2所示。表4-2LCD1602控制指令表序号指令RSR/WD7D6D5D4D3D2D1D01清显示00000000012光标返回000000001*3置
19、输入模式00000001I/DS4显示开/关控制0000001DCB5光标或字符移位000001S/CR/L*6置功能00001DLNF*7置字符发生存储器地址0001字符发生存储器地址8置数据存储器地址001显示数据存储器地址9读忙标志或地址01BF计数器地址10向CGRAM或DDRAM写数10要写的数据内容11从CGRAM或DDRAM读数11读出的数据内容LCD1602内部自带有808位的RAM缓冲区,RAM地址映射如表4-3所示。00010203040506070809404142434445464748490A0B0C0D0E0F10274A4B4C4D4E4F5067表4-3 LCD
20、1602的RAM地址映射表LCD1602写操作时序如图4-3所示。图4-3 LCD1602写操作时序向LCD1602写数据程序子程序流程图如图4-4所示:图4-4 向LCD1602写数据程序子程序流程图4.4 按键设定程序设计单片机读取按键的方式有2种:查询方式和中断方式。查询方式是利用单片机引脚不断查询是否有按键按下,如果有按键按下,利用延时程序去除抖动再次确认后,进入该按键对应的子程序执行命令。中断方式是利用单片机的外部中断功能来检测是否有按键按下。利用中断功能可以不用在主程序中不断的执行查询命令,有中断产生即有按键按下时,再进入中断子程序中进行处理。本设计选用查询方式处理按键设定程序。每
21、个独立式按键直接接至单片机引脚,每个按键的键值与单片机端口的8个引脚的8位二进制码相对应。本设计为P1.0-P1.3引脚控制4路按键。单片机控制按键子程序流程图如图4-5所示:图4-5 单片机控制按键子程序流程图第三部分设计成果1、 主电路图见附录一2、 源程序见附录二3、实物 制作调试过程中所用仪器有:数字万用表、电烙铁,焊锡丝、焊锡膏、剥线钳、尖嘴钳、圆口钳、镊子,吸锡器等,另外准备尽量多的导线。制作与调试过程如下:1、按照元器件清单准备好所需要用到的元器件。2、按照电路原理图焊接硬件电路板,先焊接芯片的底座,再焊接其外围电路。实物电路图如图5-1所示:图5-1 实物电路图 3、编译软件程
22、序,将生成的.hex文件烧写入单片机内。4、给系统上电,液晶显示器显示时间,利用按键,可设置定时时间和打铃时间间隔。图5-2 时间显示5、当定时时间到时,蜂鸣器响,LED灯亮。6、每隔设置的打铃时间间隔,蜂鸣器响,LED灯亮,实现打铃功能。经上述调试,系统工作正常,实现设计要求的功能。第四部分总结经过这段时间的努力,毕业设计也接近了尾声。本文从选题目的及意义开始,介绍了系统的方案设计,其中提供了两种设计方案,经过互相之间的比较后选择了简单易行的一种方案,后面还列出了其他两种模块的设计方案,并经比较后选择了合适的方案,然后对系统的硬件设计进行了阐述,包括电路图和元器件的介绍,对它们实现的功能和内
23、部结构都进行了说明,接着是软件部分的设计,这也是此设计的关键部分,有很详细的说明。本设计是针对学校的作息时间而设计的一种自动打铃系统,但是它同样可以用于其他的场所,如工厂,生厂车间等等,它能很好的起到时钟提醒的作用,方便了人们的日常生活。在硬件设计部分,显示器件选的是液晶显示器,它具有功耗和工作电压低的特点,而且它的显示质量高,可视面积大,能很好的达到设计要求,还降低了软件的编程难度。本设计的自动打铃系统还存在不足和缺点,主要表现在这些方面:虽然系统能够很好的实现打铃的要求,但是能够设定的打铃时间只有六个,这是因为想降低编程时的难度,在不影响其功能的前提下,降低了要求;还有就是其扩展性不强,后
24、续的发展比较困难,制约了系统的升级,在商品竞争中没什么优势,需要进一步的研究和开发。通过此次毕业设计,我对所学专业的知识有了很好的回顾和实践,提高了自己的动手和思考能力,这对我自身的发展有很大的帮助,同时在此期间我查阅了很多的书籍和资料,从中学到了很多课本上没有的知识,拓展了自己的知识面,如果没有前期的准备工作是没法很好的完成此次设计的,所以多学、多看、多想、多动手才是学好知识的必要素质,这对我未来的发展和进步有着至关重要的作用。第五部分致谢回顾这次毕业设计的过程,感慨良多,收获颇丰,首先要感谢我的导师。在这段时间里老师经常给提醒我们在做毕业设计过程中应当注意的事项,并在百忙之中特地抽出时间为
25、我们讲课,讲解论文的排版及写作技巧,使我们受益不浅,还不忘督促我们按步骤完成每一项内容,可以说从毕业设计的开始到完成都能看见老师的身影,没有老师的辛勤辅导和对学生的责任心就没有我现在这样一篇毕业论文。同时我还要感谢大学四年所有教导过我的老师,是他们的谆谆教诲给了我大学四年的专业知识,在学习的道路上,他们就是我的领路人,真的非常感谢,还要感谢陪伴了我四年的每一个同学,因为他们,我的大学才不苍白,因为他们,我的大学才精彩,也是因为他们,我的大学才有意义。毕业设计告一段落了,但是我的人生却迎来了另一个出发点,毕业并不意味着结束,它同时是一个新的开始,我会带着老师们的希冀,朋友们的祝福和友谊走得更远、
26、更高、更坚定,谢谢你们第六部分参考文献1曾屹,刘辉.单片机原理与应用.长沙:中南大学出版社,2009.5:244263. 2刘传玺,毕训银,袁照平.传感器与检测技术.北京:机械工业出版社,2011.8:30169. 3刘文涛.单片机应用开发实列.北京:清华大学出版社,2005.9:276303.4刘建辉,冀常鹏.单片机智能控制技术.北京:国防工业出版社,2007.4:199265.5康华庚.电子技术基础.模拟部分:华中科技大学电子技术课程组编.5版.北京:高等教育出版社,2006.1(2011.11重印).6康华庚.电子技术基础.数字部分:华中科技大学电子技术课程组编.5版.北京:高等教育出版
27、社,2006.1(2011.11重印).7周立功等.51单片机新技术M.北京:北京航空航天大学出版社,2003:11-16.8邱关源,罗先觉.电路.5版.北京:高等教育出版社,2006.5(2011.12重印).9杨立.微型计算机原理与接口技术.北京:中国水利水电出版社,2005(2008重印).10赵文博,刘文涛.单片机语言C51程序设计M.北京:人民邮电出版社,2005:1-10. 附录附录一:电路图附录二:源程序#include#include#include#define uchar unsigned char#define uint unsigned intsbit LCD_EN=P
28、35;sbit LCD_RS=P37;sbit LCD_RW=P36;sbit sda=P12;sbit sclk=P11;sbit FMQ=P34;#define LCD_DATA 1#define LCD_COMMAND 0#define LCD_PORT P2uchar DISP_up16;uchar DISP_dw16;uchar LCD_NO; uchar TBA=0123456789;uchar temp5,count_1,temp6;uchar D13073;uchar flag;uchar time_tab24;uchar t_count;uchar key_board_t;u
29、char key_count;uchar save_data8;uchar opt_time;void delay(uint tt) uchar i; for(;tt0;tt-) for(i=0;i10;i+);bit LCD_BUSY()bit result;LCD_RS=0;LCD_RW=1;LCD_EN=1;_nop_();result=(bit)(LCD_PORT&0x80);LCD_EN=0;return result;void LCD_Write(uchar dat,uchar type)uchar i;while(LCD_BUSY()&i99)LCD_NO=1;LCD_RS=ty
30、pe;LCD_RW=0;LCD_EN=0;void LCD_INITIALIZE()LCD_Write(0x06,LCD_COMMAND);LCD_Write(0x38,LCD_COMMAND);LCD_Write(0x0c,LCD_COMMAND);void LCD_Prints(uchar *dat,uchar add,uchar lens)uchar i;LCD_Write(add|0x80,LCD_COMMAND);for(i=0;ilens;i+)LCD_Write(dati,LCD_DATA);void INIT_DISP_up(void) DISP_dw11=TBAsave_da
31、ta5; DISP_dw12=:; DISP_dw13=TBAsave_data6; DISP_dw14=TBAsave_data7; DISP_dw15= ;void write_temp(uchar add,uchar dat)/向LCD写温度数据,并指定显示位置uchar gw,sw; gw=dat%10;/取得个位数字 sw=dat/10;/取得十位数字write_1602com(er+add);/er是头文件规定的值0x80+0x40 write_1602dat(0x30+sw);/数字+30得到该数字的LCD1602显示码 write_1602dat(0x30+gw);/数字+30
32、得到该数字的LCD1602显示码 write_1602dat(0xdf);/显示温度的小圆圈符号,0xdf是液晶屏字符库的该符号地址码 write_1602dat(0x43); /显示C符号,0x43是液晶屏字符库里大写C的地址码 时分秒显示子函数 void write_sfm(uchar add,uchar dat)/向LCD写时分秒,有显示位置加、现示数据,两个参数 uchar gw,sw; gw=dat%10;/取得个位数字 sw=dat/10;/取得十位数字 write_1602com(er+add);/er是头文件规定的值0x80+0x40write_1602dat(0x30+sw)
33、;/数字+30得到该数字的LCD1602显示码 write_1602dat(0x30+gw);/数字+30得到该数字的LCD1602显示码 年月日显示子函数 void write_nyr(uchar add,uchar dat)/向LCD写年月日,有显示位置加数、显示数据,两个参数 uchar gw,sw; gw=dat%10;/取得个位数字 sw=dat/10;/取得十位数字 write_1602com(yh+add);/设定显示位置为第一个位置+add write_1602dat(0x30+sw);/数字+30得到该数字的LCD1602显示码 write_1602dat(0x30+gw);
34、/数字+30得到该数字的LCD1602显示码 void write_week(uchar week)/写星期函数 write_1602com(yh+0x0c);/星期字符的显示位置 switch(week) case 1:write_1602dat(M);/星期数为1时显示 write_1602dat(O); write_1602dat(N); case 2:write_1602dat(T);/星期数据为2时显示 write_1602dat(U); write_1602dat(E); case 3:write_1602dat(W);/星期数据为3时显示 write_1602dat(E); wr
35、ite_1602dat(D);case 4:write_1602dat(T);/星期数据为4是显示 write_1602dat(H); write_1602dat(U);case 5:write_1602dat(F);/星期数据为5时显示 write_1602dat(R); write_1602dat(I); case 6:write_1602dat(S);/星期数据为6时显示 write_1602dat(T); write_1602dat(A); case 7:write_1602dat(S);/星期数据为7时显示 write_1602dat(U); write_1602dat(N); /*
36、键盘扫描有关函数* void keyscan() if(key1=0)/-key1为功能键(设置键)-delay(9);/延时,用于消抖动 if(key1=0)/延时后再次确认按键按下 buzzer=0;/蜂鸣器短响一次 delay(20); buzzer=1; while(!key1); key1n+; if(key1n=9) key1n=1;/设置按键共有秒、分、时、星期、日、月、年、返回,8个功能循环 switch(key1n) case 1: TR0=0;/关闭定时器 /TR1=0; write_1602com(er+0x09);/设置按键按动一次,秒位置显示光标 write_1602
37、com(0x0f);/设置光标为闪烁 temp=(miao)/10*16+(miao)%10;/秒数据写入DS1302 write_1302(0x8e,0x00); write_1302(0x80,0x80|temp);/miao write_1302(0x8e,0x80); break; case 2: write_1602com(er+6);/按2次fen位置显示光标 /write_1602com(0x0f); case 3: write_1602com(er+3);/按动3次,shi /write_1602com(0x0f); case 4: write_1602com(yh+0x0e)
38、;/按动4次,week /write_1602com(0x0f); case 5: write_1602com(yh+0x0a);/按动5次,ri /write_1602com(0x0f); case 6: write_1602com(yh+0x07);/按动6次,yue /write_1602com(0x0f); case 7: write_1602com(yh+0x04);/按动7次,nian /write_1602com(0x0f); case 8: write_1602com(0x0c);/按动到第8次,设置光标不闪烁 TR0=1;/打开定时器 void init() /定时器、计数器
39、设置函数 TMOD=0x11; /指定定时/计数器的工作方式为3 TH0=0; /定时器T0的高四位=0 TL0=0; /定时器T0的低四位=0 EA=1; /系统允许有开放的中断 ET0=1; /允许T0中断 TR0=1; /开启中断,启动定时器 /*主函数*/void main() lcd_init(); /调用液晶屏初始化子函数 ds1302_init(); /调用DS1302时钟的初始化子函数 init(); /调用定时计数器的设置子函数 led=0; /打开LCD的背光电源buzzer=0;/蜂鸣器长响一次 while(1) /无限循环下面的语句:keyscan(); /调用键盘扫描
40、子函数 void timer0() interrupt 1 /取得并显示日历和时间Init_DS18B20();/温度传感器DS18b2初始化子函数,在头文件中 flag=ReadTemperature();/将18b2头文件运行返回的函数结果送到变量FLAG中,用于显示 /读取秒时分周日月年七个数据(DS1302的读寄存器与写寄存器不一样): miao = BCD_Decimal(read_1302(0x81); fen = BCD_Decimal(read_1302(0x83); shi = BCD_Decimal(read_1302(0x85); ri = BCD_Decimal(rea
41、d_1302(0x87); yue = BCD_Decimal(read_1302(0x89); nian=BCD_Decimal(read_1302(0x8d); week=BCD_Decimal(read_1302(0x8b); /显示温度、秒、时、分数据: write_temp(12,flag);/显示温度,从第二行第12个字符后开始显示 write_sfm(8,miao);/秒,从第二行第8个字后开始显示(调用时分秒显示子函数) write_sfm(5,fen);/分,从第二行第5个字符后开始显示 write_sfm(2,shi);/小时,从第二行第2个字符后开始显示 /显示日、月、年数据: write_nyr(9,ri);/日期,从第二行第9个字符后开始显示 write_nyr(6,yue);/月份,从第二行第6个字符后开始显示 write_nyr(3,nian);/年,从第二行第3个字符后开始显示 write_week(week);25
©2010-2024 宁波自信网络信息技术有限公司 版权所有
客服电话:4008-655-100 投诉/维权电话:4009-655-100