1、 目 录摘 要 Abstract . 1 课题背景. 2 设计方案简述 . 12.1 时间生成系统. . 2 2.2 显示模块 . 3 2.3 红外遥控 . 33 详细设计. 63.1 硬件设计 . 63.2 软件设计. 84 设计结果及分析. 115总 结 . 12 参考文献 . 13 附录 主要程序代码 . 14摘 要随着电子技术的迅速发展,特别是随大规模集成电路出现,给人类生活带来了根本性的改变。尤其是单片机技术的应用产品已经走进了千家万户。电子万年历的出现给人们的生活带来的诸多方便。本文首先描述系统硬件工作原理,并附以系统结构框图加以说明,着重介绍了本系统所应用的各硬件接口技术和各个接
2、口模块的功能及工作过程,其次,详细阐述了程序的各个模块和实现过程。本设计以数字集成电路技术为基础,单片机技术为核心。本文编写的主导思想是软硬件相结合,以硬件为基础,来进行各功能模块的编写。本系统以单片机的C语言进行软件设计,增加了程序的可读性和可移植性,为了便于扩展和更改,软件的设计采用模块化结构,使程序设计的逻辑关系更加简洁明了。系统通过点阵式液晶为载体显示数据,所以具有人性化的操作和美观的页面效果。可以显示年,月,日,星期,时间本设计采用STC89C52低功耗,高性能CMOS 8位单片机作为系统的核心控制器,该系统结合了红外遥控技术,除具备传统的万年历所具有的时间显示功能之外,遥控设定年,
3、月,日,星期,时间等功能。关键字:AT89S52单片机 ;实时钟芯片 ;温度传感器 ;液晶显示 AbstractThis paper uses the AT89S52 microcontroller as the core for the control, assisted by the peripheral circuits such as the real-time clock chip and temperature sensor, realizing the display of time information like year, month, day, week and time
4、 clock by c language programming. In addition, it can display the festivals of each year . It uses 128 64 LCD screen as the display device. It can display not only the digital information but also the characters and graphics. Meanwhile, it reduces the circuit power and simplifies the hardware circui
5、ts.The used technologies include:(1)AT89S52 microcontroller application system(2)controlling the conversion of time by c language programming(3)adjusting the time by keyboard(4)LCD display technology(5)conversion algorithm between solar and lunar calendar Keywords:AT89S52 microcontroller; real-time
6、clock chip; temperature sensor; LCD display1 课题背景1.1设计背景1.1.1 时代背景随着电子信息技术的飞速发展,单片机的应用越来越广泛。单片机通过用汇编语言或者C语言编程,配以一定的外围电路,可以实现不同情况下、不同电路系统的自动控制,用它可以开发各种智能玩具,如机器人、遥控飞机、智能车等,实际生活中的很多电器也用到了单片机系统,例如电冰箱、全自动洗衣机、空调、电子日历等,还有很多测量仪器以及高科技的空间探测、宇宙探索等都以单片机为开发中心。可以说现实生活中大多数的智能物品都用到单片机的相关知识。围绕单片机以及嵌入式系统形成的电子产业将会是一个持
7、续发展,愈来愈具有竞争力,愈来愈具有生命力的高科技产业,电子世界将会更具有魅力和发展潜力。近些年,随着科技的发展和社会的进步,人们对数字钟的要求也越来越高,传统的时钟已不能满足人们的需求。多功能数字钟不管在性能还是在样式上都发生了很大的变化,已发展有电子闹钟、数字闹钟等等。单片机在多功能数字时钟中的应用已是非常普遍的,由单片机应用系统作为时钟控制系统, 单片机应用系统是指以单片机为核心,配以一定的外围电路和软件,能实现某种或几种功能的应用系统。目前,52系列单片机以其独特优越的性能,广泛应用于各行各业中。但由于应用的行业不同,设计单片机的应用系统自然要考虑其应用特点。例如对工业实时控制系统,要
8、求有较强的实时控制能力,较完善的输入输出设备。电子时钟是通过单片机系统采集实时钟芯片产生的时钟信息,将其时间数据经单片机输出,利用显示器显示出来,还可以通过按键进行时间设定、时间校验等功能。输出设备显示器可以用液晶显示技术和数码管显示技术。1.1.2 技术背景本设计以基于单片机AT89S52设计电子万年历的方案,一般的文本万年历需要每天更改日期,时间过了万年历也就失去了实际作用,而且浪费纸质资源,因此,根据这一缺点,本文介绍了电子万年历的制作方案,该方案将日历和时钟相结合,同时显示于液晶屏幕上,而且还延长了万年历的使用寿命,系统能够自动更新时间。在软件上,采用keil软件系统,控制单元采用C语
9、言编程,经过红外遥控更方便了使用者:;另外,从硬件和软件上采取了多种措施,提高系统的稳定性和可靠性。- 51 -2 设计方案简述2.1 时间生成系统方案一:采用时钟芯片DS1302。DS1302是DALLAS公司推出的串行接口实时时钟芯片。它既提供实时时钟,又把关键的数据位存储于RAM。芯片使用简单,外部连线少,在自动化控制中应用广泛,其主要特点有:(1) 简单的三线串行I/O接口;(2) 2.5V5.5V的电压工作范围(在2.5V工作时耗电小于300nA);(3) 与TTL兼容(VCC=5V时);(4) 实时时钟包括秒、分、时、日、星期、年(闰年)等信息;(5) 31 8静态RAM可供开发使
10、用;(6) 可选的涓流充电方式;(7) 工作电源和备份电源双引脚输入; 向DS1302写入数据时,数据应在时钟下降沿发生变化,上升沿将数据写入DS1302内部移位寄存器。读取DS1302数据时,数据也在时钟下降沿变化,即在下降沿数据位从移位寄存器输出,但当CLK时钟为正半周时,I/O线为高阻态,所以应在上升沿读取,否则读出的数据将全为FFH。DS1302通过把输入驱动置高电平来启动所有的数据传送。输入有两种功能:a、接通控制逻辑,允许地址/命令序列送入移位寄存器;b、提供了终止单字节或多字节的传送手段,当为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。DS1302控制字的位如表
11、2-1所示:1RAMA4A3A2A1A0RAM控制字节的最高位为有效位,必须为1;位6为0,表示存取日历时钟数据,为1,表示存取RAM数据,位5至位1指示操作单元地址,最低位如果为0,表示写操作,为1表示读操作。控制字总是从低位开始输入。DS1302的寄存器地址和命令字如表2-2所示寄存器名命令字取值范围各位内容写操作读操作76543210秒80H81H0099CH10SECSEC分钟82H83H0099010MINMIN小时84H85H0112或002312/24010/APHRHR日期86H87H0128,29,30,310010DATEDATE月份88H89H011200010MMONT
12、H周日8AH8BH010700000DAY年份8CH8DH009910 YEARYEAR方案二:采用单片机内部时钟系统。单片机AT89S52内部设有3个定时器,可以通过对定时器设定初值,当计数器溢出后产生定时中断,可用变量对中断次数进行累计,即对时间的累计,从而实现计时的功能。本设计采用方案一,由于方案二中计时系统采用单片机单一的电源供电,断电后系统复位,当再次供电后,时钟将恢复原始值,需重新调整时间。而采用方案一,由于DS1302采用双引脚电源,若系统断电,芯片可由备份电源继续供电,芯片仍可以工作,断电后无需设置时间,系统即可继续显示正常时间。2.2显示模块方案一:采用数码管显示时间。方案二
13、:采用液晶作为显示屏幕。比较二者的优劣,本设计采用方案二。用数码管显示时间,虽然数字清晰明朗,但是硬件连接复杂,如果按照要求显示所有电子日历信息,则需要的数码管比较多,从而增加了硬件焊接的难度,也增加了系统体积和质量。而采用液晶作为显示器,弥补了数码管的所有不足,大大减轻了系统复杂度,还能显示文字和图像信息,节省电路的耗能。2.3红外遥控 2402LCD 电子钟外观如图 2-1 所示。 图2-1功能特点 25 路掉电不丢失数据的用户定时功能,定时生活方方面面。 采用首创的忽略定时新概念。可以设置定时某项为忽略值,再配合 25 路定时项目使定时内容自由发挥、千变万化。 SAA3010 红外遥控器
14、输入控制,数字键输入数据,方便快捷。 精准温度显示,全息时间显示,定时器使用量显示。所有数据一目了然。 全程帮助提示和独立的帮助菜单,易学易用。 数字键输入设置内容,不只用上下键笨笨地调时了。 人性化软件设计,设计时考虑到许多使用细节。 表 2-3 所示是这个设计中所用到的元器件。单片机依然选用 AT89S52 ,只是屏幕变成了 24 列 2 行的字符型 LCD 显示屏。了解过单片机的朋友可能都听说过 1602LCD 显示屏,好像这已经成为单片机学习的必备之物。无论是杂志、网络、图书,只要是涉及单片机学习的都有 1602 显示屏介绍的部分。因为它是 LCD 显示屏模块中较常用而易学习的一款,再
15、加上价格相对便宜,吸引了不少初学者购买。现在随便在网上搜索都可以找到许多卖屏的商家,而却鲜有关于 1602LCD 显示屏精致、实用的制作。我这里选择的 2402LCD 显示屏是完全兼容 1602LCD 显示屏的产品,区别只是多了 8 列显示。用 2402LCD 显示屏学习单片机也有同工之妙,现在市场上出售的 2402LCD 的内部驱动芯片和 1602 也都是一种,这是很容易买到的,不用完全对应型号,只要是 2402LCD 显示屏都可以实现本制作,现在 2402LCD 显示屏的市场价在 30 元左右,买屏的时候别忘了索要显示屏的技术资料,这同属于产品的一部分。 表2-3 遥控器是采用现在单片机爱
16、好者学习时最常用的 SAA3010 型遥控器,除了现在用在本制作中,同时还可以用在红外遥控器解码之类的单片机实验内容中。一般卖电视机遥控器的摊位都有卖的,只要型号是 SAA3010 都可以用于本制作。 SAA3010 遥控器的外观如图 3-2 所示,市场价在 6 元左右。 图3-2型号是 TSOP1738 的家伙是一种红外一体接收芯片,它可以接收并放大红外遥控器发出的信号,最后将数据发送给单片机处理。它和 SAA3010 遥控器是天作之合,谁也离不开谁,它们也是学习单片机对红外信号处理不可缺少的组合。虽然红外遥控器和红外接收芯片是一对黄金搭档,可是通常它们并不会出现在同一柜台。 TSOP173
17、8 还得再到主营电子元器件的地方购买,市场价在 3 元左右。 这台电子钟具有 25 路掉电不丢失数据的定时功能,这种掉电不丢失来源于一片 EEPROM 芯片即 AT 24C 02 ,这是一款可以擦写 100 万次、保存数据近百年、拥有 256 字节的存储芯片。它采用 I 2 C 通信接口,一般的单片机学习教程里也会讲到它,而我在这里就已经实际应用了。参考本制作的电路连接方法和源程序中对 AT 24C 02 的驱动部分,比从书本上理论地研究更容易理解,这也是“实践出真知”的道理。一片 AT 24C 02 的价格在 2 元左右。 3 详细设计3.1 硬件设计3.1.1 单片机最小系统单片机最小系统
18、是单片机工作的基本条件,硬件电路如图3-1所示,其中晶振选择12MHz,便于定时器时间的计算。电容选择30uF,复位电路采用上电复位方式。图3-1 单片机最小系统3.1.2时钟芯片与单片机的连接实时钟芯片DS1302的连接如图3-2所示。DS1302的时钟芯片采用32.768KHz,便于时钟的生成,引脚1和8双电源供电,保证了系统断电后时钟芯片仍可以处于工作状态,以便再次上电后不需再设置时间。引脚5、6、7分别接单片机P3.3、 P3.4、 P3.5接口。左图3.-2 时钟芯片与单片机连接3-3 温度传感器的连接 DS18B20是单线温度传感器,引脚少,只有三个引脚,与单片机连接电路简单,如右
19、图3.-3所示。DS18B20是这样测温度的:用一个高温度系数的振荡器确定一个门周期,内部计数器在这个门周期内对一个低温系数的振荡器的脉冲进行计数来得到温度值。计数器被预置到对应于-55的一个值。如果计数器在门周期结束前到达0,则温度寄存器(同样被预置到-55 )的值增加,表明所测温度大于-55。同时,计数器被复位到一个值,这个值由斜坡式累加器电路确定,斜坡式累加器电路用来补偿感温振荡器的抛物线特性。然后计数器又开始计数直到0,如果门周期未结束,将重复这一过程。DS18B20可精确到0.1.3.1.4 显示系统本设计方案采用液晶显示屏12864作为显示器,其电路连接如图3-.4所示。选用单片机
20、的P0口作为液晶数据输入口,P2.1、P2.2分别接液晶的数据和时钟引脚,液晶PSB和RESET引脚分别由P3.6、P3.7控制,此外,VO引脚接变阻器,可以调节液晶的亮度。用液晶作为显示器,极大地简化了硬件电路,同时增强了系统的显示能力。 图3-4液晶连接原理图3.1.5 报警系统如图3.-5所示,电路中连接一个蜂鸣器作为报警系统,系统设置了整点报时和秒表功能,到设定的时间用音声作为提示。引用单片机的P3.1端口。其中用三极管来驱动蜂鸣器工作。 图3.-5 报警系统3.2软件设计如果说硬件是系统设计的骨架的话,那么软件就是整个系统的灵魂,所有的数据采集,数据输入,数据处理及对外部电路进行控制
21、,都是由软件完成的,软件质量的高低直接决定了系统的功能和精度。3.2.1主程序设计主程序流程图如图2.2.1所示,系统进行过相关的初始化指令之后即从万年历主程序开始执行:读取DS1302的日期时间数据信息、根据现时日期进行农历更新、查询有无功能键按下。若有,则根据遥控进行对应的处理;若无,则显示,然后一直循环下去。0初始化各变量初始化液晶显示器清屏显示欢迎字延时清屏初始化时钟芯片判断状态变量?刷新时钟显示1调用遥控识别子程序并作相应处理图2.2.1主程序流程图3.2.2万年历部分子程序的设计因为使用了实时时钟芯片DS1302,公历日期时间显示只需从DS1302各寄存器中读出年、月、日、时、分、
22、秒、星期等数据,再稍加处理即可。在首次对DS1302进行操作之前,必须对它进行初始化,然后从DS1302中读出数据,经过处理后,送给显示缓冲单元。公历日期时间显示见图5.2.2 DS1302日期时间数据读取显示流程图 开始 初始化1302 1302开始振荡从1302中读出年、周、月、日、小时、分、秒 读出数据都为BCD码,将其高低位分离,送显示缓冲单元 图2.2.2 日期时间数据读取显示流程图4 设计结果及分析4.1功能介绍控制项 (Controller 00 99) 为 00 时定时器为长达 30 秒的闹钟鸣响,为 ol 时定时器为单音鸣响,其它控制项 (02 99) 为预留功能,就是留着为
23、以后的开发做准备。定时器的启动是由每个定时器组的“秒”设置项来决定开启或关闭的。当秒项被设置为忽略,则无论其它数据如何此定时项被认为关闭。当秒项被设置成 00 到 59 时则此定时器项为开启状态。即如果使用某定时器项则该项秒值不能为忽略。 “ !AL* ”是定时器总开关,它显示在主菜单上,总有 4 种选择: !AL0 :关闭所有定时器 ( 只是关闭,定时器数据不会被删除 ) 。 !AL1 :开启闹钟定时器。 !AL2 :预留功能,不要选择此项。 !AL3 :开启闹钟定时器。 采用忽略功能的定时器可以有多种样式的组合功能 (? 表示忽略定时的项 ) : 1 :设置单一次定时闹钟: 2007 05
24、 19?12 : 00 00_00( 只在 2007 年 5 月 19 日 12 时闹钟响一次。注意: _00 是控制项数据 ) 2 :设置每日定时闹钟: ? ? ?12 : 00 00_00( 在每天的 12 时闹钟响一次 ) 3 :设置某月定时闹钟: ? 05 ?12 : 00 00_00( 每年 5 月份的 12 时闹钟响一次 ) 4 :设置星期定时闹钟: ? ? ? 五 12 : 00 00_00( 每周五的 12 : 00 00 闹钟响一次 ) 5 总结本文描述了电子万年历硬件和软件的制作方案以及选择该方案的原因,总体符合预定的要求,能够成功显示阳历、阴历的年、月、日,以及星期、环境
25、温度、时、分、秒和节日等信息,并能够实现秒表和整点报时功能。该系统两个突出的优点是:1、采用了DS1302时钟芯片,双电源供电使芯片在断电后可以保留时钟信息,并能继续工作,待加电后系统可以显示正常时间而不需对时间进行重新设定。2、采用了液晶显示技术,简化硬件外,还增加显示功能,能够显示数字、汉字和图形。3、采用红外遥控控制,使得使用方便,免去一些麻烦。有待改进的地方有:1、 可以将闹铃改装成音乐形式,增添系统的色彩;总体来说本设计符合基本要求,但也存在需要改进的地方。历时两个星期的课程设计已经基本结束了,这段时间里,我学到了很多书本上永远学不到的实践知识和技能,使我对单片机系统有了更深刻的理解
26、和认识。本设计是在游老师的耐心指导和亲切关怀下完成的,基本实现了该设计的全部内容,最终运行的时候,该系统的功能基本符合预定要求。在这里,我对游老师表示深深地感谢。经过那么长时间的制作和调试,在这即将完成的时候,心中有很多的感慨,这不是我一个人的功劳,是很多可敬的学长、同学和老师的共同完成的成果,真心的感谢每一个帮助我的人,谢谢你们!参考文献1何立民,单片机应用系统设计,北京:航天航空大学出版社,25,4650;2李广弟,单片机基础,北京:北京航空航天大学出版社,2001,5664;3何希才,新型实用电子电路400例,电子工业出版社,2000年,6065;4赵负图,传感器集成电路手册,第一版,化
27、学工业出版社,2004,590591;5陈伯时,电力拖动自动控制系统,第二版,北京:机械工业出版社,2000年6月,127130;6张毅刚,彭喜元,新编MCS-51单片机应用设计,第一版,哈尔滨工业大学出版社,2003,2527,411417;7马忠梅,籍顺心等.单片机的C语言应用程序设计M.北京:北京航空航天大学出版社,2004;21308陈明计,周立功等.嵌入式实时操作系统Small RTOS51原理及应用M.北京:北京航空航天大学出版社,2004;1022419阎石.数字电子技术基础M.北京:高等教育出版社,1998;214910庞丽萍.操作系统原理M.武汉:华中理工大学出版社,1988
28、;11121711谢红.模拟电子技术M.哈尔滨:哈尔滨工程大学出版社,2001;8118712Intel Corporation.MCS-51 Family of Single Chip Microcomputers Users ManualN.Calif,1990;4147附录 主要程序代码/*Sun-2402C 桌面控制钟应用程序 CV0.01 2008-5-15MCS-51 12MHZ C语言LCM2402 89S52 DS18B20 DS1302 AT24C02 红外接收IC*/#include #include / 包含头文件/*/typedef unsigned char uint
29、8; / 无符号8位整型变量typedef unsigned short uint16;/ 无符号16位整型变量typedef signed char int8; / 有符号8位整型变量sbit LED1=P23; / 定义LCM2402的RS控制线/*全局变量*/static unsigned char data IRCode3,IRCON,IRCON2; /遥控器中断专用static unsigned char data DT,menu,rom,alarm_con; /遥控寄存值/菜单值/定时器组值/报警开关选择/=LCM2402模块驱动=#define LCM2402_DB0_DB7 P
30、0 / 定义LCM2402的数据总线sbit LCM2402_RS = P10; / 定义LCM2402的RS控制线sbit LCM2402_RW = P12; / 定义LCM2402的RW控制线sbit LCM2402_E = P11; / 定义LCM2402的E控制线sbit LCM2402_Busy = P07; / 定义LCM2402的测忙线(与LCM2402_DB0_DB7关联)/*定义LCM2402指令集*/#defineCMD_clear0x01 / 清除屏幕#defineCMD_back0x02 / DDRAM回零位#defineCMD_dec10x04 / 读入后AC(指针)
31、减1,向左写#defineCMD_add10x06 / 读入后AC(指针)加1,向右写#defineCMD_dis_gb10x0f / 开显示_开光标_开光标闪烁#defineCMD_dis_gb20x0e / 开显示_开光标_关光标闪烁#defineCMD_dis_gb30x0c / 开显示_关光标_关光标闪烁#defineCMD_OFF_dis0x08 / 关显示_关光标_关光标闪烁#defineCMD_set820x38 / 8位总线_2行显示#defineCMD_set810x30 / 8位总线_1行显示(上边行)#defineCMD_set420x28 / 4位总线_2行显示#def
32、ineCMD_set410x20 / 4位总线_1行显示(上边行)#definelin_10x80 / 4位总线_1行显示(上边行)#definelin_20xc0 / 4位总线_1行显示(上边行)/*底层协议* 函数名称:DelayS()* 功 能:延时*/void DelayS(unsigned int a) unsigned char i; while(-a!=0) for(i=0;i125;i+); /一个 ; 表示空语句,CPU空转。 /i 从0加到125,CPU大概就耗时1毫秒void DelayS250(void) DelayS(250);/*底层协议* 函数名称:LCM2402
33、_TestBusy()* 功 能:LCM2402测忙,若LCM2402处于忙状态,本函数将继续测忙,直到LCM2402处于非忙状态。*/void LCM2402_TestBusy(void) LCM2402_DB0_DB7=0xff; /设备读状态 LCM2402_RS=0; LCM2402_RW=1; LCM2402_E=1; while(LCM2402_Busy); /等待LCM不忙 LCM2402_E=0;/*底层协议* 函数名称:LCM2402_WriteCMD()* 功 能:向LCM2402写命令。* 入口参数:LCM2402_command 要写入LCM2402的命令字节* 出口参
34、数:无*/void LCM2402_WriteCMD(uint8 LCM2402_command) LCM2402_TestBusy(); LCM2402_DB0_DB7=LCM2402_command; LCM2402_RS=0; LCM2402_RW=0; LCM2402_E=1; LCM2402_E=0;/*底层协议* 函数名称:LCM2402_WriteData()* 功 能:向LCM2402写数据。* 入口参数:LCM2402_data 要写入LCM2402的数据字节* 出口参数:无*/void LCM2402_WriteData(uint8 LCM2402_data) LCM240
35、2_TestBusy(); LCM2402_DB0_DB7=LCM2402_data; LCM2402_RS=1; LCM2402_RW=0; LCM2402_E=1; LCM2402_E=0;/* 函数名称:LCM2402_Init()* 功 能:LCM2402初始化* 入口参数:无* 出口参数:无*/void LCM2402_Init(void) LCM2402_WriteCMD(CMD_set82); / 显示模式设置:显示2行,每个字符为5*7个像素 LCM2402_WriteCMD(CMD_clear); / 显示清屏 LCM2402_WriteCMD(CMD_back); / 数据
36、指针指向第1行第1个字符位置 LCM2402_WriteCMD(CMD_add1); / 显示光标移动设置:文字不动,光标右移 LCM2402_WriteCMD(CMD_dis_gb3); / 显示开及光标设置:显示开,光标开,闪烁开/* 函数名称:print()* 功 能:向LCM发送一个字符串,长度48字符之内。应用:print(zhufating);* 入口参数:字符串* 出口参数:无*/void print(uint8 a,uint8 *str) LCM2402_WriteCMD(a); while(*str!=0) LCM2402_WriteData(*str+); *str=0;/* 函数名称:print2()* 功 能:向LCM发送一个字符串,长度48字符之内。应用:print(zhufating);* 入口参数:字符串* 出口参数:无*设置写入地址和数据*/void print2(uint8 a,uint8 t) LCM2402_WriteCMD(a); LCM2402_WriteData(t);/=AT24C02模块驱动=/应用举例/AT24C02_Write1Byte(0x02,0xaa); 向AT24C02的地址0x02写入0xaa/i = AT24C02_Read1Byte(0x02); 从AT24C02的地址0x02读出数据给变量i/*
版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如有侵权请立即联系:2622162128@qq.com ,我们立即下架或删除。
Copyright© 2022-2024 www.wodocx.com ,All Rights Reserved |陕ICP备19002583号-1
陕公网安备 61072602000132号 违法和不良信息举报:0916-4228922