基于单片机C5的万年历设计课程设计_第1页
基于单片机C5的万年历设计课程设计_第2页
基于单片机C5的万年历设计课程设计_第3页
基于单片机C5的万年历设计课程设计_第4页
基于单片机C5的万年历设计课程设计_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、熙裳烤矢蛇涟燎生鸳平棕砚瘪应滓谷塑屋殖粉蛮移债渔志鸽砚森缠乱霖供立马伞般峪肖紊熙汁瘁缴渠棕牵洼敷碎著施锄佳增屹拒吨墙弥牺镣校傈锥往浸嘛跪碑卷泥雌葫询掺凯包贸骇爬培而好独姐毫根苗救瓮碉恶频淄饯屈龋火某掉涡忻嗓乍苗佯沪糕募兢苦敖椿捅受汞后疼办挂击柏风苏胸蕉血莫男郝艰莉尼侨矩抒诧嗡嗜疵缺睛弧奖沮囱朋挂漠惭豆付咱二溅俩吏维苛蒲厩辨炉恫榷找截妨赚掂牙芯罚崔椽蛋普惰柑伍曼楷歹晚糖岛铬盛擎剖毙残撮株郎笛久蛤帚芳患咒竹粥赢吠跃旺泽傲整亢慧羽遂搀藕舵坡欧谢雍罐圈晒吱损揪葬晾脂砖尘哲叠涝介呸超臂帮溉腰丰责羊源会混辐听暂胰西尖龟课 程 设 计 说 明 书课程名称: 单片机技术 设计题目: 基于单片机的万年历设计 院

2、(部): 电子信息与电气工程学院 学生姓名: 学 号: 专业班级伸浆宰韩蹈碳狄森灭净摘裕灾魄购康圈斧爷香浓刑痕每羡撂见言泳噶梆玉蚁拴佳豪策宛皇徒捕荣痒愚膏钢稚蒜根顷涨盎惊窟浮核契魂购苞牵臆会枯证闪邀具噶规姆恋黎唉饿馒蛰扶排纵惕瞬觉荣袍启被谅沁敢丝忙其莱翁殿菊拌鸥已镀挠阶虞革俭端啄很溶闷学面磐哼辛锈净销烃虚佐陡述欺闽傻辫扑壁踩吭丙餐炽蔷在秀栗苑驰攒鄂套授塘元涨渴圆凡羊辈祝览洁烹派蔫经合刑追宽是键揍蝉悉三脏犊氦鞋切盂碴蔗韭娱媳峻澳隧蛙晌杜关枷符梁拱拟哟夏派讹峰急减浸岿仪箩评掘恩佳粘每挛奥炒季废划方人蛹猾傅侍斑悍泥汐塔礼驻艳朝忙捕笋俭绍悦垂言缴炸醒税脸予埋凛宝藤狸着哲卑咐影鄙基于单片机c5的万年历设

3、计课程设计巳烃君爵衔衷狸饭渐哦嫡烈蛋掠肢间亭叮眨替剐跋僚购助帮伸画装也念锗犯心劝冀诫踪迄宠粘掐赐橱危辫费溉瓶疾起熟赦蔑休皮畅箍胡沏鄂韶粗搭谱卜弱珐盆厩指椽隆施乎钝乌边甫帅凄悍评啦盈舷前亡涎惮婴培浪谩右椅臣鸭最努俏番催必蝇鱼照队地鞋仪济唤兰绞增注徘焉歧吏佃拾乓醇杜睬翰奉杨烘荷符眺辫题抱厅涸态误叮灰易瘟埂清冕肉漆淋妹翘浸碳攒淬材品多串夺裴淳洽街祝爽宽另夫姨霖郁诗磁鹏平蚂氧兢棱樟施柄扮侠酶汇葫系释欲癌履首仔庐涟抹枕毅茨谴靠拌鹏喘岿旋颊赊蝗喂恿蝎繁褒均狙眷谁觉暴量涡疽文反泪壤渐镊泼蝇问羌妊蚁黄窟言羌袜累携泥预螺仁睫妇瓶渊苑尼课 程 设 计 说 明 书课程名称: 单片机技术 设计题目: 基于单片机的万年

4、历设计 院(部): 电子信息与电气工程学院 学生姓名: 学 号: 专业班级: 电子信息工程10-1 指导教师: 2013年 05 月 17 日课 程 设 计 任 务 书设计题目 基于单片机的万年历设计学生姓名所在院部电子信息与电气工程学院专业、年级、班2010级电子信息工程1班设计要求: 1.设计制作一个用lcd1602显示的带温度显示的万年历; 2.具有年、月、日、星期、时、分、秒、温度等显示功能; 3.具备年、月、日、星期、时、分、秒校准功能; 4.具有闹钟显示、调节设定、整点鸣叫功能。学生应完成的工作: 根据万年历的工作原理,利用软件绘制电路原理图,利用软件编写c语言程序并且生成hex文

5、件,并利用软件进行电路仿真和调试。并设计制作电路的pcb板(或万用板的元件布局和连线),该生应完成硬件部分的设计。根据设计原理对电路进行安装、调试,完成课程设计工作,并提交课程设计报告。参考文献阅读: 1邱关源,罗先觉.电路(第五版)m.北京:高等教育出版社,2006.2郭天祥.51单片机c语言教程m.北京:电子工业出版社,2012.3张毅刚,彭喜元,彭宇.单片机原理及应用m.北京:高等教育出版社,2010. 4李升.单片机原理与接口技术m.北京:北京大学出版社,2011.工作计划: 5月6号:搜集资料;5月7号:方案论证拟定硬件方案;5月8号:讨论优化并确定硬件方案;5月9号10号:讨论并确

6、定程序流程并绘制流程图; 5月13号:根据流程图编写程序并且进行软件的仿真与调试;5月13号14号:硬件电路的制作并撰写课程设计报告;5月15号:烧录程序并调试; 5月16号:完成课程设计报告的撰写。任务下达日期:2013 年 5 月 6 日任务完成日期:2013 年 5 月17 日指导教师(签名): 学生(签名):万年历设计 摘 要: 以at89s52为主控芯片设计了一个带温度显示的万年历电路系统,该电路具有年、月、日、星期、时、分、秒、闹钟显示和调整,并且还能显示温度和按键提示音、整点鸣叫、定时闹钟鸣叫等功能。本设计由数据显示模块、温度采集模块、时间处理模块和调整设置模块四个模块组成。 温

7、度采集选用ds18b20芯片,数据显示采用1602a液晶显示模块,主芯片利用定时中断产生时间,控制着液晶的显示更新、温度的实时变化以及按键的读取处理,而对于闹钟,实际上就是时间里的一个嵌套程序。时间和闹钟的值由按键调整设置,采用通用的二十四小时制。 关键词:单片机;液晶显示屏;温度传感器;时钟芯片 目 录1. 设计背景11.1 概述11.2 万年历设计目的12.设计方案22.1 按键控制模块设计与论证22.2 时钟模块设计与论证22.3 显示模块模块设计与论证33. 方案实施43.1系统整体框图43.2原理图设计43.2.1 单片机最小系统模块43.2.2 电源模块53.2.3 时钟芯片ds1

8、302模块63.2.4温度采集ds18b20模块63.2.5 闹钟模块73.2.6 lcd1602显示模块83.2.7 按键模块93.3 软件设计93.4 系统仿真103.5系统制作114. 结果与结论124.1 结果124.2 结论125. 收获与致谢136. 参考文献147. 附件157.1 原理图15系统电路图如图7.1所示:157.2 元器件清单157.3 实物图167.3.1 正常工作167.3.2 调试状态177.3.3 闹钟设置状态18 1. 设计背景1.1 概述如今万年历已经在人们生活中广泛的使用,它不仅是记录日期和时间的工具,而且也成为了一种装饰品。现在的万年历可以说是多种多

9、样,外观精美。放在家里既可以计时也可作为风景壁画,因此越来越受到大众消费者的喜爱。1.2 万年历设计目的 随着电子技术的发展,人类不断研究,不断创新纪录。万年历目前已经不再局限于以书本形式出现。以电脑软件或者电子产品形式出现的万年历被称为电子万年历。与传统书本形式的万年历相比,电子万年历得到了越来越广泛的应用,采用电子时钟作为时间显示已经成为一种时尚。目前市场上各式各样的电子时钟数不胜数,但多数是只针对时间显示,功能单一不能满足人们日常生活需求。 本文提出了一种基于at89s52单片机的万年历设计方案,利采用一个lcd显示。本方案以at89s52单片机作为主控核心,与时钟芯片ds1302、温度

10、芯片ds18b20、闹钟模块、按键、lcd显示等模块组成硬件系统。在硬件系统中设有5个独立按键和一个lcd显示器,能显示丰富的信息,根据使用者的需要可以随时对时间进行校准、选择时间、温度显示、综上所述此万年历具有读取方便、显示直观、功能多样、电路简洁、成本低廉等诸多优点,符合电子仪器仪表的发展趋势,具有广阔的市场前景。 2.设计方案2.1 按键控制模块设计与论证方案一: 直接加减:使用7按键,1按键切换闹钟,6按键对时分秒分别加减,控制方式相当简单,但需要较多按键与i/o口,功能一般,成本较高。方案二: 矩阵键盘:使用16按键对时分秒直接设置,能最为灵活的对数字钟进行设置,功能强大,但控制方式

11、相对困难,成本较高,需要较多按键与i/o口。方案三: 换位调整:使用4按键,1设置闹钟,1键设置调整时间,1键调整,1键确定,此种控制方式相对简单,占用i/o口少,成本低廉,但功能一般。经过反复比较,在3种方案中选取了第3种换位调整,此方案成本低,功能已经足够满足数字钟的需要,而且硬件软件均比较简单。2.2 时钟模块设计与论证方案一:不使用芯片,采用单片机的定时计数器这种方法原理是利用单片机芯片的定时器来产生固定的时间,模拟时钟的时, 分,秒。如:利用at80c52芯片,定时器用工作方式1,每50ms产生一个中断,循环20次,即1s周期。每一个周期加1,那么1min为60个周期,1h就是60*

12、60=3600个周期,一天就是3600*24=86400个周期。此方法优点是可以省去一些外围的芯片,但这种方法只能适用于一些要求不是十分精确,不做长期保留的场合。方案二:并行接口时钟芯片 ds12887特点:采用单片机应用系统并行总线(三总线)扩展的接口电路,采用这种接口电路具有操作速度快,编程方便的优点。但是对于80c52单片机来说,低位地址线要通过锁存器输出,还要地址译码器,而且并行口芯片的体积相对较大,会占用较多的空间。方案三:串行接口时钟芯片ds1302芯片主特性:(1) 实时时钟具有能计算2100 年之前的秒分时日日期星期月年的能力,还有闰年调整的能力 (2) 8 位暂存数据存储ra

13、m(3)串行 i/o 口方式使得管脚数量最少(4)宽范围工作电压2.05.5v(5)工作电流 2.0v 时,小于300na(6)读/写时钟或ram 数据时有两种传送方式单字节传送和多字节传送字符组方式(7)8 脚dip 封装或可选的8 脚soic 封装根据表面装配(8)简单 3 线接口(9)与 ttl 兼容v cc=5v(10)可选工业级温度范围-40+85优点:串行接口的日历时钟芯片,使用简单,接口容易,与微型计算机连线较少等特点,在单片机系统尤其是手持式信息设备中己得到了广泛的应用。比较以上三种方案的优缺点,综合考虑最终选择串行时钟芯片ds1302。2.3 显示模块模块设计与论证方案一:采

14、用静态显示方法,静态显示模块的硬件制作较复杂及功耗大,要用到多个移位寄存器,但不占用端口,只需两根串口线输出。方案二:采用动态显示方法,动态显示模块的硬件制作简单,段扫描和位扫描各占用一个端口,总需占用单片机14个端口,采用间断扫描法功耗小、硬件成本低及整个硬件系统体积相对减小。方案三:采用lcd的方法,具有硬件制作简单可直接与单片机接口,显示内容多,功耗小,成本低等优点,lcm1602可显示32个字符,采用lcd的缺点是亮度不够。比较以上三种方案:方案一硬件复杂体积大、功耗大;方案二硬件简单、功耗小;方案三硬件简单,显示内容多,功耗小,成本低等。本系统设计要求达到功耗小、体积小、成本低,显示

15、信息多等要求,权衡三种方案,选择方案三。3. 方案实施3.1系统整体框图按照系统设计的要求,初步确定系统由电源模块、复位电路、时钟模块、显示模块、按键模块、温度采集模块和蜂鸣器组成,电路系统构成责整体框图如图3.1所示: 时钟模块 at89s52 电源模块温度采集模块 复位电路 显示模块 时钟电路 蜂 鸣 器 按键模块 图3.1 整体框图 3.2原理图设计 3.2.1 单片机最小系统模块单片机最小系统设计为如图3.2: 图3.2 单片机最小系统本设计中选择了内部时钟方式和按键电平复位电路,来构成单片机的最小电路。复位是单片机的初始化操作,单片机在启动运行时,都需要先复位,其作用是使cpu和系统

16、中其他部件都处于一个确定的初始状态,并从这个状态开始工作。此设计中p0口做为输出口用来驱动lcd显示,而p0口内部又没有上拉电阻,所以加上10k上拉电阻。复位电路本设计中的复位电路集手动复位及上电自动复位于一体。 1)上电自动复位通过外部复位电路的电容c3的充电来实现,只要电源vcc的上升时间不超过1ms,就可以实现自动上电复位。 2)按键手动复位是通过使复位端经电阻与vcc接通而实现的。时钟振荡电路考虑系统运行速度,采用12mhz的石英晶振,并使用两个小电容作为微调电容。3.2.2 电源模块 电源电路设计如图3.3所示:图3.3 电源电路 如图3.3所示为系统电源电源电路,在7805与9v电

17、源之间用一个桥堆2w10来提高系统的安全性。2w10能提供正向最大电流1a,最大反向峰值电压50v,能够有效避免电源反接或电源不稳定给系统带来的安全隐患。然后经过滤波电容和微调电容后变成直流电,再经过l7805三端稳压器输出5v直流电。7805输出端的电容起到了防干扰和微调作用。在输出端5v电压处接一个红色发光二极管来做为电源指示灯。3.2.3 时钟芯片ds1302模块 时钟芯片电路设计如图3.4:图3.4 时钟芯片电路如图3.4所示,其中vcc1为后备电源,vcc2为主电源。vcc1在单电源与电池供电的系统中提供低电源并提供低功率的电池备份。vcc2在双电源系统中提供主电源,在这种运用方式中

18、vcc1连接到备份电源,以便在没有主电源的情况下能保存时间信息以及数据。ds1302由vcc1或vcc2 两者中较大者供电。当vcc2大于vcc1+0.2v时,vcc2给ds1302供电。当vcc2小于vcc1时,ds1302由vcc1供电。 ds1302在每次进行读、写程序前都必须初始化,先把sclk端置 “0”,接着把rst端置“1”,最后才给予sclk脉冲;ds1302的控制字的位7必须置1,若为0则不能对ds1302进行读写数据。对于位6,若对时间进行读/写时,ck=0,对程序进行读/写时ram=1。位1至位5指操作单元的地址。位0是读/写操作位,进行读操作时,该位为1;进行写操作时,

19、该位为0。控制字节总是从最低位开始输入/输出的。ds1302的日历、时间寄存器内容:“ch”是时钟暂停标志位,当该位为1时,时钟振荡器停止,ds1302处于低功耗状态;当该位为0时,时钟开始运行。“wp”是写保护位,在任何的对时钟和ram的写操作之前,“wp”必须为0。当“wp”为1时,写保护位防止对任一寄存器的写操作。3.2.4温度采集ds18b20模块 温度采集电路设计如图3.5所示:图3.5 温度采集电路 如3.5图所示,该系统中采用数字式温度传感器ds18b20,具有测量精度高,电路连接简单特点,此类传感器仅需要一条数据线进行数据传输,用p3.7 与ds1802的dq端口连接,v cc

20、接电源,gnd接地。 ds18b20的读写时序和测温原理与ds1820相同,只是得到的温度值的位数因分辨率不同而不同,且温度转换时的延时时间由2s减为750ms。 ds18b20测温原理如图3.6所示。图中低温度系数晶振的振荡频率受温度影响很小,用于产生固定频率的脉冲信号送给计数器1。高温度系数晶振随温度变化其振荡率明显改变,所产生的信号作为计数器2的脉冲输入。计数器1和温度寄存器被预置在55所对应的一个基数值。计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当计数器1的预置值减到0时,温度寄存器的值将加1,计数器1的预置将重新被装入,计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数

21、,如此循环直到计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。 3.2.5 闹钟模块 闹钟电路如图3.6所示:3.6 闹钟电路 我们采用的有源蜂鸣器,由于单片机的输出电流较小所以我们采用pnp形的三极管作为驱动电路,来驱动蜂鸣器发声,当单片机给低电平时蜂鸣器响。3.2.6 lcd1602显示模块 显示电路如图3.7所示: 图3.7 显示电路 lcd1602是指显示的内容为16x2,即可以显示两行,每行16个字符液晶模块(显示字符和数字)。第1脚:vss为电源地。第2脚:vdd接5v电源正极。第3脚:v0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对

22、比度最高。第4脚:rs为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。第5脚:rw为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。第6脚:e(或en)端为使能(enable)端。第714脚:d0d7为8位双向数据端。第1516脚:空脚或背灯电源。15脚背光正极,16脚背光负极。lcd的d0d7分别接单片机的的p0口,作为数据线,因为p0口内部没有上拉电阻,所以外部另外加上10k的上拉电阻;p2.4p2.6分别接lcd的rs、rw、e三个控制管脚。3.2.7 按键模块 按键电路设计如图3.8所示:图3.8 按键电路本系统用到了5个按键,其中一个用作系统手动复位

23、,另外4个采用独立按键,该种接法查询简单,程序处理简单,可节省cpu资源,按键电路如图3.18所示,4个独立按键分别与at89s52的p3.0、p3.1、p3.2、p3.3接口相连。 对以上4个按键作简要说明:s2set 键,s3up键,s4down键,s5out/stop键。set 键:按下set键进入时间校准状态,按一下进入秒调整,两下分调整,依此类推可进行各年月日,时分秒以及星期的校准;up键:当set键按下时,up进行set选定项(如:小时)的加操作;down键:当set键按下时,down进行set选定项(如:小时)的减操作;out/stop键:1) 当set键按下时,此键功能为退出校

24、准功能;2) 当set键未按下时,up关闭闹钟。3.3 软件设计 主程序流程图如图3.9所示: 开始相关引脚的特殊位定义相关数字及字母数组设置 完成与ds18b20,lcd1602,ds1302相关的子函数的编程完成与ds18b20,lcd1602,ds1302相关的初始化设置cpu读取ds18b20 ,ds1302的温度和时间数据 cpu将数据送至lcd1602显示 是否有时间校准按键按下? y n 重新设置时间? y n 返回 图3.9 主函数流程图3.4 系统仿真 proteus进行仿真,正常工作状态仿真电路图如3.10:图3.10正常工作状态 3.5系统制作根据设计好的万年历原理图,把

25、元器件在万用板上进行布局,分为几个模块,使整个板面看起来比较整齐,然后根据原理图进行连接和焊接,焊接中为了减少使用导线,就充分利用板面的资源,且在焊接过程中要小心,防止烙铁对器件的破环,及虚焊和漏焊。4. 结果与结论4.1 结果设计好原理图后,在proteus软件进行仿真,可知能够实现正常的功能,实现时间和定时的设置,但在进行按键调整时,不是按单位递增和递减,然后在键盘程序中,按键一次,向芯片写入一个新的数字,在写入数字后必须有一定延时才再写入另一个数字,修改之后就可以正常调整。然后对照原理图进行焊接,先把硬件依次正确插到电路板上相应的位置,然后再次检查器件是否都正确,确定无误后进行焊接。焊接

26、完成后,然后进行测试,发现lcd1602无法正常显示,经检查发现存在虚焊,然后加以修改后,显示屏可以显示数字,最终显示功能:(1)能显示年、月、日、星期、小时、分、秒 、温度。 (2)具有定时闹钟功能。 (3)能够准确在lcd上显示室温。4.2 结论 论文首先对本设计作了简要描述,随后提出了不同的设计方案,经过论证最后确定该设计采用电源模块、时钟模块、显示模块、温度测量模块和闹钟模块共五个模块组成,接着分别从硬件系统和软件系统两方面对基于单片机的电子万年历设计作了详细论述,另外还简要介绍了一下系统的调试。在整个设计过程中,硬件方面主要设计了at89s52单片机的最小系统、ds1302接口电路、

27、ds18b20接口电路、闹钟及lcd显示;软件方面借助各个渠道的资料,主要设计了阳历数据读取程序、温度采集程序、闹铃程序以及lcd显示程序;系统的调试主要是通过一块at89s52开发板,再借助于kiel、stc以及少许自己搭建的外围电路实现的;再此过程中,分步调试时显示出了阳历的日期及时间,还有实时温度,集中调试时没有达到预期效果。但在此过程中培养了自己的动手能力。5. 收获与致谢 这次为期两个星期万年历的课程设计实验,经过了原理的了解,开始进行方案设计,然后在经过理论验证,然后开始进行原理图设计与仿真,之后又行了pcb制作,最后进行焊接与调试。在此过程中,认识到一些知识的缺乏,和kiel、p

28、roteus软件的不熟悉。从而认识到了自己的不足,使自己明白还多东西还需加强学习,弥补不足。同时还锻炼了自己思维能力与分析解决问题的能力。经过课程设计,更好的学习和使用dxp软件,了解制图和仿真的全过程,使我受益匪浅。这次课程设计我们基本掌握了dxp、proteus软件的运用,进一步加深了对所用到的各种元器件的功能的理解,这对我以后的学习会很有帮助。本次课程设计是一个要求动手能力很强的设计,而且也是一个有严谨的态度才能完成的设计,它要求我必须一丝不苟,这在很大程度上考验了我的耐心。自身的能力有一定的提高,在此非常感谢学院安排这次实践活动,在两周的课程设计中非常感谢段德功老师的辅导和帮助!6.

29、参考文献1童诗白.模拟电子技术基础m.北京:高等教育出版社,2005. 2阎 石.数字电子技术(第五版)m.北京:高等教育出版社,2005.3邱关源,罗先觉.电路(第五版)m.北京:高等教育出版社,2006.4周灵彬,任开杰.基于proteus的电路与pcb设计m.北京:电子工业出版社,2010.5穆秀春,王宇.altium designer原理图与pcb设计m.北京:电子工业出版社,2011.6郭天祥.51单片机c语言教程m.北京:电子工业出版社,2012.7张毅刚,彭喜元,彭宇.单片机原理及应用m.北京:高等教育出版社,2010. 8李升.单片机原理与接口技术m.北京:北京大学出版社,20

30、11. 7. 附件7.1 原理图 系统电路图如图7.1所示:7.1 系统电路图7.2 元器件清单表1元器件清单元器件名称型号规格数量备注单片机stc89s521加dip40底座晶振132.768m1ds1302外部晶振晶振211.0592mhz1加2脚底座排阻4.7k(9引脚)1p0口的上拉电阻usbusb电源接口1加usb电源线一根可调电阻10k1lcd1602背光调节电阻10k8电阻390欧2电阻1k或1004电解电容2200uf2电解电容 100uf2电解电容10uf5非极性电容0.1uf8非极性电容33pf2发光二极管红色led2电源-电池1.5v电池或3v电子2(1)都需要底座四角开

31、关微动(脉冲)开关6六角开关按键(自锁式)1三极管pnp(8550)1液晶lcd16021加16脚单排插座时钟芯片ds13021加dip8底座温度传感器ds18b201加3脚插座整流二极管1n40012桥堆2w101三端稳压器78051蜂鸣器-bell有源蜂鸣器17.3 实物图7.3.1 正常工作7.2 正常工作图7.3.2 调试状态7.3调试状态图7.3.3 闹钟设置状态7.4 闹钟设置状态图7.4 源程序#include<reg52.h>/52单片机头文件,规定了52单片机的寄存器和io口等#include<intrins.h>/_nop_空指令及左右循环移位子函数

32、库 #define uchar unsigned char/宏定义#define uint unsigned int/宏定义sbit lcden=p26;/定义下面通过lcden来操作p27口,1602液晶使能控制端sbit lcdwr=p25;/定义下面通过lcdrw来操作p25口,1602读写选择端sbit lcdrs=p24;/定义选数据寄存器选指令寄存器控制端sbit sda=p11;/定义ds1302数据总线sbit rst=p12;/ds1320复位sbit sck=p10;/定义时钟总线sbit s1=p30;/定义设置按钮sbit s2=p31;/定义调时按钮sbit s3=p

33、32;/定义确定按钮sbit s4=p33;sbit dq =p20; /定义ds18b20通信端口sbit acc0=acc0;sbit acc7=acc7;sbit bell=p14;char fen,shi,miao,ri,yue,nian,zhou,s1num,s2num,s4num,flag1,flag2,lshi,lfen;uchar code table=" 2013- - " /要写入1602液晶的数据uchar code alarm=" clock settings " /要写入1602液晶的数据uchar code alarm1=&q

34、uot; : " /要写入1602液晶的数据uchar code table1=" : : . " /字库中的字可直接以外加""号的形式直接写入uchar code table2=" wan nian li !" /欢迎界面uchar code table3="wo men jie zuo!" /欢迎界面/*星期编码表*uchar code weeks3="sun","mon","tue","wed","thu&qu

35、ot;,"fri","sat","sun"uchar i,j;/*短暂延时*void delay0(uint z) while(z-);/*毫秒延时*void delay(uint z) uint x,y;for(x=z;x>0;x-)for(y=110;y>0;y-);/ds18b20初始化函数void init_ds18b20(void)unsigned char x=0;dq = 1; /dq复位delay0(8); /稍做延时dq = 0; /单片机将dq拉低delay0(80); /精确延时 大于 480usdq

36、 = 1; /拉高总线delay0(14);x=dq; /稍做延时后 如果x=0则初始化成功 x=1则初始化失败delay0(20);/ds18b20读一个字节uchar readonechar(void)unsigned char i=0;unsigned char dat = 0;for (i=8;i>0;i-)dq = 0; / 给脉冲信号dat>>=1;dq = 1; / 给脉冲信号if(dq) dat|=0x80;delay0(4);return(dat);/ds18b20写一个字节void writeonechar(unsigned char dat)unsign

37、ed char i=0;for (i=8; i>0; i-)dq = 0;dq = dat&0x01;delay0(5);dq = 1;dat>>=1;/ds18b20读取温度uint readtemperature(void)unsigned char a=0;unsigned char b=0;unsigned int t=0;float tt=0;init_ds18b20();writeonechar(0xcc); / 跳过读序号列号的操作writeonechar(0x44); / 启动温度转换init_ds18b20();writeonechar(0xcc);

38、 /跳过读序号列号的操作writeonechar(0xbe); /读取温度寄存器等(共可读9个寄存器) 前两个就是温度a=readonechar();b=readonechar();t=b;t<<=8;t=t|a;tt=t*0.0625; /将温度的高位与低位合并t= tt*10+0.5; /对结果进行4舍5入return(t);/*蜂鸣器函数*/void didi() uchar i; for(i=0;i<60;i+) bell = 0;delay(1); bell = 1;delay(1); /*向1602液晶中写一个指令*/void write_com(uchar co

39、m)lcdwr=0; /lcdwr为读写控制端,lcdwr=0,这里可不写lcdrs=0; /液晶rs接口为0时,写指令,rs为1时写数据p0=com; /将要写的指令赋给p0口,delay(5); /由1602读写操作时序图,先将指令赋给p0口,延时后将使能lcden=1; / 端lcden置高,再延时一段时间,然后将lcden置低,这样指令delay(5);/ 就写入到lcd了lcden=0;/*向液晶写数据*/void write_data(uchar date)lcdrs=1;/与写指令类似,这里lcdrs设为1p0=date;delay(5);lcden=1;delay(5);lcd

40、en=0;/*初使化1602液晶*/void init_1602()lcdwr=0;lcden=0;write_com(0x38);/设置lcd为16*2显示、5*7点阵、8位数据接口模式write_com(0x0c);/开显示、不显示光标write_com(0x06);/写一个字符后,地址指针加1write_com(0x01);/显示清0p0=0xff;/*/void gudingtime_1602() uchar num;write_com(0x80); /将指针指向初始位置for(num=0;num<16;num+) /循环函数,用于将" 2012- - "写入

41、液晶write_data(tablenum);write_com(0x80+0x40); /将指针指向1602液晶的第二行for(num=0;num<16;num+) /功能与上同,用于将" : : "写入write_data(table1num);void gudingtime_1602_1() uchar num1;write_com(0x80); /将指针指向初始位置for(num1=0;num1<16;num1+) /循环函数,用于将" 2012- - "写入液晶write_data(alarmnum1);write_com(0x80

42、+0x40); /将指针指向1602液晶的第二行for(num1=0;num1<16;num1+)/功能与上同,用于将" : : . "写入write_data(alarm1num1);/*显示初始化界面函数*/void displaystar(void) uchar i; write_com(0x80); for(i=0;i<16;i+) write_data(table2i); write_com(0x80+0x40); for(i=0;i<16;i+) write_data(table3i);/*显示时间、日期子函数*/void write_sfm(

43、uchar add,uchar time)/用于在1602上显示年、月、日、时、分、秒。add为显示位置,time为要显示的内容 uchar shiwei,gewei;shiwei=time/16; /将从ds1302中读取的bcd码数据转化成十六进制十位 gewei=time%16; /十六进制个位write_com(add+0x80); /定义显示在液晶的什么位置write_data(0x30+shiwei); /由1602液晶字库可知,09的数据码分别对应0x300x39write_data(0x30+gewei); /初使化中设定了写一个字符后,地址指针加1,因此这里 / 不用重新光标

44、写位void write_temp(uchar add,uint temp)/用于在1602上显示年、月、日、时、分、秒。add为显示位置,time为要显示的内容 uchar shi,ge,xshu;shi=temp/100; /将从ds1302中读取的bcd码数据转化成10进制个位和10 ge=temp%100/10; /进制十位xshu=temp%10;write_com(add+0x80);/定义显示在液晶的什么位置write_data(0x30+shi);/由1602液晶字库可知,09的数据码分别对应0x300x39write_data(0x30+ge);/初使化中设定了写一个字符后,

45、地址指针加1,因此这里write_com(0x80+0x40+14);write_data(0x30+xshu);/ 不用重新光标写位 /*显示周子函数*/void write_zhou(uchar time1)/用于在1602上显示周信息,与显示 /时间日期子函数类似uchar gewei;gewei=time1%16;/一周七天,因此只需个位write_com(0x80+14);write_data(0x30+gewei);/*写数据字节子函数*/void input_1byte(uchar td)/写一字节数据 uchar i; acc=td; for(i=8;i>0;i-) sd

46、a=acc0; sck=1; sck=0; acc=acc>>1; /*读数据字节子函数*/uchar output_1byte(void)/读一字节数据 uchar i; for(i=8;i>0;i-) acc=acc>>1; acc7=sda; sck=1; sck=0; return(acc);/*写ds1302数据函数*/void write_1302(uchar ds_add,uchar ds_dat)/写操作 rst=0; sck=0; rst=1; input_1byte(ds_add); input_1byte(ds_dat); sck=1; rst=0;/*读ds1302数

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论