




已阅读5页,还剩28页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
湖南涉外经济学院课程设计报告课程名称:单片机课程设计报告题目:智能电子日历学生姓名:丁心林所在学院:信息工程与工程学院专业班级:电信1102班学生学号:11430524816851指导教师:廖亦凡 曹铁军2011 年 12 月 25 日课程设计任务书报告题目智能电子日历完成时间2013/12/20学生姓名丁心林专业班级电信1102班指导教师廖亦凡职称讲师总体设计要求和技术要点题目1:智能电子日历1.任务 以AT89C51单片机为核心,制作一个LED显示的智能电子日历。2.要求 (1)显示:年、月、日、星期(方案1:星期用7个指示灯指示,方案2:分两屏显示,方案3:分三屏显示,方案4:分四屏显示)。 (2)闰年自动判别。 (3)五路定日输出,可任意关断(最大可到16路)。 (4)自定任意日自动开/关屏。(5)所有功能设置均由功能键K1、K2、K3、K4完成。工作内容及时间进度安排第15周:周1-周3 :立题、论证方案设计周4-周5 :预答辩第16周:周1-周3 :仿真实验周4-周5 :验收答辩课程设计成果1与设计内容对应的软件程序2实现程序的硬件电路3课程设计总结报告摘要本款智能电子日历以STC89C52单片机作为核心控制器件,采用七位八段数码管动态扫描显示,用四个按钮开关分别作为输出设置键、确认键和日期加减键,用5个LED做定日输出的提示。这款电子日历采用的核心控制器件STC89C52是STC公司生产的一种低功耗、高性能CMOS8位微控制器,具有 8K 在系统可编程Flash存储器。STC89C52使用经典的MCS-51内核,但做了很多的改进使得芯片具有传统51单片机不具备的功能。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。 具有以下标准功能: 8k字节Flash,512字节RAM, 32 位I/O 口线,看门狗定时器,内置4KB EEPROM,MAX810复位电路,3个16 位定时器/计数器,4个外部中断,一个7向量4级中断结构(兼容传统51的5向量2级中断结构),全双工串行口。另外 STC89C52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU 停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。最高运作频率35MHz,6T/12T可选。关键词:智能;电子日历;数显;单片机目录一、概述1二、方案设计与论证31智能电子日历系统概述32程序流程3三、单元电路设计与分析41单片机最小系统实现42按键功能实现63数码管显示实现84日期处理与输出提示实现10四、总原理图及元器件清单13五、结论与心得14六、参考文献14附录 源程序15一、概述随着电子技术的迅速发展,特别是大规模集成电路出现,给人类生活带来了根本性的改变,尤其是单片机技术的应用产品已经走进了千家万户。近年来,我国科技的不断发展,我国经济发展的支柱产业电子产业获得长足发展,各种电子产品琳琅满目,随处可见,随着电子产品的更新速度的加快,各种功能强大,款式新颖的电子产品不断问世。数字万年历便是这一发展趋势中的代表,数字万年历则顺应了人们对时间方面的要求。它的出现给人们的生活带来的诸多方便,在时间极显宝贵的现代生活中,其作用更是不言而喻。它在学校、车站、码头、剧院、医院、办公室等公共场所的应用非常广泛。但传统的数字万年历除显示时间之外,功能较为单一,逐渐失去了市场。顺应技术发展和人们生产、生活需求,各种功能的新式万年历不断涌现,且功能不断更新。数字万年历作为电子类的小产品以其方便、实用等优势成为市场上的宠儿,同时也成为单片机设计培训中一个很实用的课题。因为这个课题有很好的的开发性和可发挥性,因此对设计者的要求比较高,不仅考察了对单片机的掌握能力更加强调了对单片机扩展的应用。而且要求设计的数字万年历在操作上力求简洁,功能上尽量齐全,显示界面也要出色。所以数字万年历无论从实用的角度和培养能力的角度都很有价值。基于STC89C52单片机的数码管显示模块显示的智能LED电子钟。主要是以单片机来控制,对数据进行处理,再通过按键来进行时间和日期的调整。再通过外加八位8段LED数码管显示日期和星期。此电路对于智能LED电子日历中的LED数码管示器来说,采用以软件为主的接口方法,即不使用专门的硬件译码器,而采用软件程序使星期和日期动态扫描显示。显示模块是是比较熟悉的数码管,编写程序是相对容易,且电路造价不高。根据电子日历设计要求,能显示年、月、日、星期实现从左至右的滚动显示,要想实现上述功能,就必须将硬件系统和软件系统有机的结合在一起。硬件系统主要由STC89C52单片机为控制核心,具有在线编程功能,低功耗。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。STC89C52的输入输出口很有限,而又要完成比较复杂的变换时间显示方式,调日期,设置定日输出日期等功能,因此功能键的设置很重要。我们选用三个功能按键,根据三个键之间的切换以及按键次数来完成各种功能。显示部分为6位8段的LED数码管,通过动态扫描进行滚动显示。STC89C52单片机的内部结构如下图所示:图1 单片机内部结构图当前,数字万年历技术已经进入了优化人-家庭 -环境的整体关系的阶段,它向着超微型、超高效以及集成电路的微型化方向发展,并为数字万年历上的集中控制提供了基础。目前,市场上出售的数字万年历品种很多,其中大部分是基于单片机技术设计的电子系统。它们一般由输入脉冲电路、单片机、晶振和复位电路、外部存储器电路和LED显示电路组成。当今,数字万年历主要还是用于计时、自动报时、定时、日期查询以及自动控制等方面。由于单片机技术以及数字集成电路技术的发展和采用了先进的石英技术,使得如今的数字万年历系统具有体积小、耗电省、计时准确、性能稳定、维护方便、走时准确、携带方便等优点,此外,现在市场上已有现成的数字万年历集成电路芯片出售,而且价格便宜、使用也很方便。日历的发展经历了数千年的历史。现代日历随着使用范围的不断扩大,功能日益增加,种类也越来越多。从70年代以来,随着单片机和超大规模集成电路的发展,为数字万年历的飞速发展奠定了物质基础。近几年来,数字万年历的发展方向是朝着走时精度高、稳定性好、使用方便、耗电量小、走时延续时间长、体积小、功能多、制造成本低等方向发展。最新的数字万年历,它除了具有常见万年历功能外,而且还具有倒计时、多点定时、语音报时、实时温度测量等功能。在硬件方面它并没有太大的变化,主要是通过增加软件部分来实现倒计时、多点定时的功能。 不难想像,随着科学技术的飞速发展, 各种高新技术的出现并被广泛应用到生产、生活中,未来数字万年历产品也必将沿着体积小、耗电省、计时准确、性能稳定、维护方便、走时准确、性能稳定、携带方便等方向发展而其成本却越来越低。二、方案设计与论证1智能电子日历系统概述本设计是利用键盘模块进行输入控制,将控制指令传送到单片机,通过单片机的数据处理,配合复位电路以及时钟电路来驱动数码管和二极管显示和输出提示,从而实现该数字万年历的各项功能。单片机是整个系统的核心,它既是协调整机工作的控制器,又是数据处理器,STC公司的STC89C52系列能完成本系统所要求的所有功能,所以选用单片机STC89C52;按键电路拟采用四个按键,分别实现输出选择、确认功能,并且可以随意开关屏;显示电路采用八位七段数码管显示;本系统选用简单的LED来完成定日输出提示。最小系统数码管显示单片机系统整体设计框图如图 2-1 所示:键盘输入LED输出图2系统框图2程序流程主程序主要实现显示的初始化和调用各子程序工作的功能,读取时间的子程序主要实现初始化,时间调整设置信息的采集和显示的位与段码的存取。分别对各个器件的功能进行编程设计,根据主程序流程图(如下)进行全面的分析。时间调整主要是通过矩阵键盘按键来完成,当有按键按下时,转入相应的功能程序,再由数码管进行动态显示。人类的日常生活离不开时间,任何具有周期性变化的自然现象都可以用来测量时 间。远古时代的中国人通过观测日影的位置以确定当时的时辰或刻数,发明了古老的计 时工具日晷。日晷虽然只由一根晷针和刻有刻线的晷面组成,但是它确利用了复杂的天 体运动规律,这反映了我国古代劳动人民的智慧。随着科技的进步以及中西文化的交融 , 希腊人根据水流从一个容器滴漏到另一个容器的数量来计量时间从而发明了滴漏,在当 时得到了普遍的应用。到十四世纪,简易的机械钟开始在欧洲流行,1656 年出现了有摆 的座钟。它是以伽利略发现的摆动具有规则性这个原理为基础而发明的。自此以后人类 掌握了比较精确的计时工具,并不断改进计时方法。现在人们日常生活中广泛使用的是 机械表、电子表、电子钟等。开始其主程序执行流程图如下图:程序初始化显示日历是否有键按下NY根据按键判断所要实现的功能结束图3 主程序流程图三、单元电路设计与分析1单片机最小系统实现复位是单片机的初始化操作,只需给AT89C52的复位引脚RST加上大于2个机器周期(即24个时钟振荡周期)的高电平就可得单片机复位,复位时,PC初始化为0000H,使单片机从OUT单元开始执行程序。除了进入系统的正常初始化之外由于程序运行出错或操作错误而使系统处于死锁状态,为摆脱死锁状态,也需按复位键使得RST脚为高电平,使单片机重新启动。在系统中,有时会出现显示不正常,也为了调试方便,我们需要设计一个复位电路,STC89C52单片机复位电路共有上电复位、按键电平复位和按键脉冲复位。本系统是的复位电路主要完成系统的上电复位和系统在运行时用户的按键复位功能。复位电路可由简单的RC电路构成,也可使用其它的相对复杂,但功能更完善的电路。本系统采用的电路如图4所示。工作原理是:上电瞬间,RC电路充电,RESET引脚端出现正脉冲,只要RESET保持10ms以上高电平,就能使单片机有效的复位。当时钟频率选用12MHz时,C取10uF,R取10K。上电自动复位电路由上电瞬间C与R构成充电电路,RESET端的电位与电源Vcc相同,随着充电电流的减少,RESET的电位逐渐下降。图中RC时间常数越大,上电时RESET端保持高电平的时间越长,图中这组参数足以保证复位操作。若复位电路失效,加电后CPU从一个随机的状态开始工作,系统就不能正常运行。图中的按键S17的功能是按键复位,按下S17键时RST为高电平,只要保持10ms以上的高电平,就可以时单片机复位。按键复位用在系统运行时的复位,使系统重新运行。其复位电路原理图如下所示:图4 单片机复位电路单片机必须在时钟的驱动下才能工作。在单片机内部有一个时钟振荡电路,只要外界一个振荡源就能产生一定的时钟信号送到单片机内部的各个单元,决定单片机的工作速度。本系统使用的是内部时钟方式。一般选用石英晶体振荡器。此电路在加电大约延迟10ms后振荡器起振,在XTAL2引脚产生幅度为3V左右的正弦波时钟信号,其振荡频率主要由石英晶振的频率确定。电路中两个电容C1、C2的作用有两个:一是帮助振荡器起振;二是对振荡器的频率进行微调。本系统的C1、C2的值为30pf。其电路图如下所示:图5 单片机晶振电路2按键功能实现本系统用到的是独立键盘,键盘的扫描是动态的低电平扫描,当有个键按下时,相应的行线为高电平,扫描的结果由PC口送回。在此系统中键盘的作用是调整电子日历的日期和定日输出,通过软件设计几个键的功能。本系统是利用S1来实现定日输出的切换,按第一下是第一路输出,再按下则是第二路、第三路以此类推。软件设定S2键是确认键,S3键是日期加,S4是日期减。按键电路图如下所示:图6 按键电路课程设计使用的开发板上是独立按键,在设计按键程序时,首先要检测有没有按键按下,然后加一个短暂的延时以消除按键的抖动,还要检测没松开而且不是之前按下的按健就进入读键值,否则不作处理,最后给没一个按键按下时赋值。具体程序实现如下:unsigned char ReadKey(void)if(P3&0xfc)!=0xfc)ANJIAN_delay(30);if(oldkey!=(P3&0xfc)oldkey=P3&0xfc;if(key1=0)lkey=1;flag_led +;if(flag_led 6) flag_led = 0;else if(key2=0)lkey=2;if(flag_led = 0) SURE = 3;if(flag_led != 0)SURE+; if(SURE 1)SURE = 0; else if(key3=0)lkey=3;if(flag_led 0) day_add+;if(yue=1 | yue=3 | yue=5 | yue= 7 | yue=8 | yue= 10 | yue=12) if(day_add 31)day_add = 31;if(yue=4 | yue=6 | yue=9 | yue= 11) if(day_add 30)day_add = 30;if(yue=2) if(year%4 =0 & year%100 !=0) | (year%400 =0) ) if(day_add 28)day_add = 28;else if(day_add 29)day_add = 29;else if(key4=0)lkey=4;if(flag_led 0) if(day_add 0) day_add-;elseoldkey=0xfc;return lkey;3数码管显示实现我们使用的是8段数码管显示(包含小数点),通常在显示上我们采用的方法一般包括两种:一种是静态显示,另一种是动态显示。其中静态显示的特点是显示稳定不闪烁,程序编写简单,但占用端口资源多,所耗得电能较大。动态显示的特点是显示稳定性没静态好,程序编写复杂,但是相对静态显示而言占用端口资源少。在本设计中,为了减少端口资源,降低电能消耗,采用的是动态显示方法。电路中用了六个PNP来控制数码管的位选的开关,PNP在这起开关的作用。电路如下图所示:图7 数码管电路数码管采用的事动态显示,SMG_0是选择数码管位显(年),tableT_10 是定义好的数码管段值,在这里用法P0口输出。delay()是加入一个短暂的延时,除数码管显示,使P0=0XFF,因是共阳型,所以不是0。让SMG_0=1是关闭千位数码管。接下来的月、日和星期和年一样,实现代码如下:void SMG_XS(void) SMG_0=0;P0=tableT_10;delay();P0=0XFF;SMG_0=1;SMG_1=0;P0=tableT_11;delay();P0=0XFF;SMG_1=1;SMG_2=0;P0=tableT_12;delay();P0=0XFF;SMG_2=1;SMG_3=0;P0=tableT_13;delay();P0=0XFF;SMG_3=1;SMG_4=0;P0=tableT_14;delay();P0=0Xff;SMG_4=1;SMG_5=0;P0=tableT_15;delay();P0=0Xff;SMG_5=1;SMG_6=0;P0=tableT_16;delay();P0=0Xff;SMG_6=1;4日期处理与输出提示实现课题要求本智能电子日历系统具有至少5路定日输出功能,为了方便和降低成本,这里采用5个LED进行提示输出,通过功能键S1控制是哪一路来进行输出,然后按日期加减键设定是那一日进行输出,到了设定日期对应的LED就会点亮。这里用的是单片机开发板,所以电路有8个LED,分别接了八个1K的上拉电阻,采用的事共阳极接法,所以低电平时有效。其电路如下图所示:图8 LED提示灯电路图计算某一天是星期几?关于这个问题,有很多计算公式(两个通用计算公式和一些分段计算公式),其中最著名的是蔡勒(Zeller)公式。即w=y+y/4+c/4-2c+26(m+1)/10+d-1,首先,先要知道在想算的日子之前的一个确定的日子是星期几,拿这一天做为推算的标准,也就是相当于一个计算的 “原点”。其次,知道想算的日子和这个确定的日子之间相差多少天,用7除这个日期的差值,余数就表示想算的日子的星期在确定的日子的星期之后多少天。如果余数是 0,就表示这两天的星期相同。显然,如果把这个作为“原点”的日子选为星期日,那么余数正好就等于星期几,这样计算就更方便了。具体的程序设计如下: while(1)AN_jian = ReadKey();LED_XS();if(time = 2000) time = 0;week+;if(week = 8) week=1;day+; if(yue=1 | yue=3 | yue=5 | yue= 7 | yue=8 | yue= 10 | yue=12) if(day = 32) day = 1;yue+;if(yue = 2) if(year%4 =0 & year%100 !=0) | (year%400 =0) ) if(day = 30) day = 1;yue+;else if(day = 29) day = 1;yue+;if(yue=4 | yue=6 | yue=9 | yue= 11) if(day = 31) day = 1;yue+;if(yue = 13) yue = 1;day = 1;year+; 四、总原理图及元器件清单1总原理图图9 智能电子日历原理图五、结论与心得经过一周的课程设计,这款智能电子日历历最终实现了实时显示当前的公历年、 月、日、星期、自定任意日自动开/关屏、定定日输出等功能,预期设计目标全部实现。本万年历功能上需要改进的地方有如下几个方面:一、数码管显示由于时间仓促和条件有限,没有对年月日进行区分,有条件应该采用12位数码管,显示完整的年月及星期;二、在设计程序时没有考虑到按键的防抖问题,所以有时按键按下,会有日期的跳跃,造成与预计的误差,但所有的算法均是无误的。在软件算法的实现中遇到了很多问题,非常感谢同学们对我帮助,这次的课程设计,无论是在硬件还是软件,都使我收获很多,也让我明白付出自然会有收获,我希望能引用一句话来结束我的报告“不是你不够努力,只是你还要再努力一点。”六、参考文献1 张毅刚,彭喜元,彭宇.单片机基础M. 北京:高等教育出版社,20102 谭浩强, C程序设计教程M. 北京:清华大学电出版社,20073 胡汉才.单片机原理及其接口技术(第2版)M.北京:清华大学出版社,2004附录 源程序#include unsigned char oldkey=0xff;/保存按键接口状态unsigned char lkey=0;unsigned char SURE;unsigned char flag_led;unsigned char day_add;unsigned int year=1; /年unsigned char yue=1; /月unsigned char day=1; /日unsigned char week=1;unsigned char LED=0;unsigned char flag_led=0;unsigned char strl_led = 0,0,0,0,0,0,0,0;sbit key1 = P37;/定义按键1(输出)sbit key2 = P36;/定义按键2(确认)sbit key3 = P35;/定义按键3(日期加)sbit key4 = P34;/定义按键4(日期减)sbit SMG_0 = P10;/定义数码管位显(年)sbit SMG_1 = P11;/定义数码管位显(年)sbit SMG_2 = P12;/定义数码管位显(月)sbit SMG_3 = P13;/定义数码管位显(月)sbit SMG_4 = P14;/定义数码管位显(日)sbit SMG_5 = P15;/定义数码管位显(日)sbit SMG_6 = P16;/定义数码管位显(星期)unsigned int time = 0;unsigned char num = 3;unsigned char AN_jian = 0;unsigned char T_1= 0,1,2,3,4,5,6,7;unsigned char table=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff;/共阳数码管 0-9 void ANJIAN_delay(unsigned int time)while(time-);unsigned char ReadKey(void)if(P3&0xfc)!=0xfc)/检测所有按键是否有按下ANJIAN_delay(30);/以消除按键拌动if(oldkey!=(P3&0xfc)/检测没松开而且不是之前按下的按健就进入读键值,否则不作处理oldkey=P3&0xfc;if(key1=0)lkey=1;/第一个键按下赋值1flag_led +;if(flag_led 6) flag_led = 0;else if(key2=0)lkey=2;/第二个键按下复值2if(flag_led = 0) SURE = 3;if(flag_led != 0)SURE+; if(SURE 1)SURE = 0; else if(key3=0)lkey=3;/第三个键按下赋值3if(flag_led 0) day_add+;if(yue=1 | yue=3 | yue=5 | yue= 7 | yue=8 | yue= 10 | yue=12) if(day_add 31)day_add = 31;if(yue=4 | yue=6 | yue=9 | yue= 11) if(day_add 30)day_add = 30;if(yue=2) if(year%4 =0 & year%100 !=0) | (year%400 =0) ) if(day_add 28)day_add = 28;else if(day_add 29)day_add = 29;else if(key4=0)lkey=4;/第四个键按下赋值4if(flag_led 0) /按下模式选择键if(day_add 0) day_add-;elseoldkey=0xfc;/没有按键按下,将赋值初始状态return lkey;void LED_XS()if(LED = 1)P2 = 0xfe;else if(LED = 2)P2 = 0xfd;else if(LED = 3)P2 = 0xfb;else if(LED = 4)P2 = 0xf7;else if(LED = 5)P2 = 0xef;else if(LED = 0)P2 = 0xdf;/延时子函数,短暂延时void delay(void)unsigned char i=2;while(i-);/数码管动态显示void SMG_XS(void) SMG_0=0;/选择年位数码管P0=tableT_10;/查找1定义好的数码管段值与P0口输出,显示相应的1delay();/加入短暂延时P0=0XFF;/清除数码管显示,因是共阳型,所以不是0SMG_0=1;/关闭千位数码管SMG_1=0;P0=tableT_11;delay();P0=0XFF;SMG_1=1;SMG_2=0;P0=tableT_12;delay();P0=0XFF;SMG_2=1;SMG_3=0;P0=tableT_13;delay();P0=0XFF;SMG_3=1;SMG_4=0;P0=tableT_14;delay();P0=0Xff;SMG_4=1;SMG_5=0;P0=tableT_15;delay();P0=0Xff;SMG_5=1;SMG_6=0;P0=tableT_16;delay();P0=0Xff;SMG_6=1;void main()TMOD = 0x01;TH0 = (65535 - 800) / 256;TL0 = (65535 - 800) % 256;ET0 = 1;EA = 1;TR0 = 1;/日期处理while(1)AN_jian = ReadKey();LED_XS();if(time = 2000) time = 0;week+;if(week = 8) week=
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 重难点解析浙江省兰溪市中考数学真题分类(勾股定理)汇编章节测评试卷(附答案详解)
- 2025年小学教师资格考试《综合素质》教师礼仪与沟通能力测试题库全解析
- 2025年注册会计师考试《会计》差错更正强化模拟试题试卷
- 2025年花艺师职业资格考试花卉艺术与公共空间设计试题
- 2025年高压电工高压电器设备原理与智能电网试题
- 2025年护士执业资格考试题库(营养护理学)营养护理安全管理试题
- 2025年高压电工考试题库-高压电器设备原理与故障分析试题
- 2025年成人高考语文高频考点速记题库:古诗词鉴赏与情感理解试题
- 2025年小学教师职业道德《综合素质》考试真题及答案
- 2025年消防安全知识培训考试题库:火灾预防与逃生消防安全检查制度持续改进效果评估试题
- 国际道路旅客运输经营许可申请表
- (2023版)电信智家工程师认证必备考试题库大全(含解析)-下(判断题汇总)
- 超高层带伸臂结构巨型环桁架施工技术总结附图
- 2乳的验收与预处理解析
- 三峡大学级本科电气工程及其自动化二本培养方案
- 架桥机安装与拆除安全技术交底
- GB/T 19839-2005工业燃油燃气燃烧器通用技术条件
- 伤口造口新进展课件
- (完整版)人工智能介绍课件
- 预防校园欺凌-共创和谐校园-模拟法庭剧本
- Q∕GDW 11311-2021 气体绝缘金属封闭开关设备特高频法局部放电在线监测装置技术规范
评论
0/150
提交评论