基于c语言单片机智能电子日历课程设计_第1页
基于c语言单片机智能电子日历课程设计_第2页
基于c语言单片机智能电子日历课程设计_第3页
基于c语言单片机智能电子日历课程设计_第4页
基于c语言单片机智能电子日历课程设计_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

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

文档简介

1、精选优质文档-倾情为你奉上课程设计报告课程名称:单片机课程设计报告题目:智能电子日历学生姓名:所在学院:信息科学与工程学院专业班级:学生学号:指导教师:2013 年 12 月 25 日课程设计任务书报告题目智能电子日历完成时间2周学生姓名专业班级指导教师职称讲师总体设计要求和技术要点设计一个智能电子日历,要求如下: 以AT89C51单片机为核心,制作一个LED显示的智能电子日历。 (1)显示:年、月、日、星期。 (2)闰年自动判别。 (3)五路定日输出,可任意关断(最大可到16路)。 (4)自定任意日自动开/关屏。(5)所有功能设置均由功能键K1、K2、K3、K4完成。工作内容及时间进度安排第

2、15周:周1-周3 :立题、论证方案设计周4-周5 :预答辩第16周:周1-周3 :仿真实验周4-周5 :验收答辩课程设计成果1与设计内容对应的软件程序2课程设计总结报告摘要本设计是根据我们所学的单片机课程,按照大纲要求对我们进行的一次课程检验,是进行单片机课程训练的必要任务,也对我们掌握单片机应用有很大的帮助。单片机技术作为电子专业的基础课程之一,对我们将来的工作以及生活和学习都有很密切的联系;近年来随着电子技术和微机计算机的迅速发展,单片机的性能不断更新和提高,应用领域也不断扩大,已经在工业控制、尖端科技、智能仪器、汽车电子系统、办公自动化系统、通信产品等等领域有广泛的应用,成为现代电子系

3、统中最重要的智能化核心器件。关键词 :单片机,电子技术,智能化目录一、概述5二、方案设计与论证51单片机芯片选择52时间计算模块53显示模块6三、单元电路设计6 1单片机最小系统电路72数码管电路83按键电路9 四、程序设计101程序总体思路和分析102程序清单11五、结论与心得19六、参考文献20一、概述本系统以STC89C52单片机为控制核心,通过单片机计时器模拟时间输出,并将时间通过数码管实时显示出来,通过相应的按键调整相应的数值和功能。所以本设计可以分为以下几个模块:显示模块、按键模块、定日输出模块。下面对各个模块进行逐一分析。二、方案设计与论证时间计算模块有两种方式,一种利用现成的时

4、间计时芯片实时读取时间,然后显示;第二种是利用STC89C52单片机内部的定时/计数功能,实现时间的计算。1单片机芯片选择方案一:采用89C52作为硬件核心 采用Flash ROM,内部具有4KB ROM存储空间,能于3V的超低压工作,而且与MCS-51系列单片机完全兼容,但是运用于电路设计中时由于不具备ISP在先编程技术,当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,对芯片的多次拔插会对芯片造成一定的损坏。方案二:采用AT89S52作为硬件核心片内ROM全部采用Flash ROM;能以3V的超低压工作,同时也与MCS-51系列单片机完全该芯片内部存储器为8KB R

5、OM 存储空间,同样具有89C51的功能,且具有在线编程可擦除技术,当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,不需要对芯片多次拔插,所以不会对芯片造成一定的损坏。所以选择采用AT89S52作为主控制系统。2时间计算模块 方案一:DS1302芯片DS1302是美国DALLAS公司推出的一种高性能、低功耗的实时时钟芯片,附加31字节静态RAM,才用SPI三线接口与CPU进行通信,并可采用突发方式一次传送多个字节的时钟信号和RAM数据。实时时钟可提供秒、分、时、日、星期、月、年,一个月小于31天时可以自动调整,且具有闰年补偿功能。工作电压宽带2.55.5V。采用双电源

6、供电,可以设置备用电源充电方式,提供了对后备电源进行涓流充电的能力。利用单片机的控制功能就可以实现实时计时的功能,而且消耗的系统资源少,程序简单。方案二:单片机内部定时器/计数器STC89C52单片机内部带有定时器/计数功能,此定时功能时通过对外部晶振的脉冲进行计数,从而达到计时功能,只要使用11.0592MHz的晶振就能实现零误差的计时,因此可以利用此功能实现计时。从任务要求来看,CPU的系统消耗很少,有足够的内部资源利用定时器实现计时功能和处理其他算法。任务要求不需要有掉电保护功能,这样可以减少工作量和系统成本。3显示模块方案一:使用液晶显示屏显示时间数字液晶显示屏(LCD)具有轻薄短小、

7、低耗电量、无辐射危险,平面直角显示以及影响稳定不闪烁等优势,可视面积大,画面效果好,分辨率高,抗干扰能力强的特点。但由于液晶是以点阵的模式显示各种符号,需要利用控制芯片创建字符库,编程工作量大,控制器的资源占用较多,其成本也偏高。在使用时,不能有静电干扰,否则易烧坏液晶的显示芯片,不易维护。方案二:使用传统的LED数码管显示数码管具有:低能耗、低损耗、低压、寿命长、耐老化、防晒、防潮、防火、防高(低)温,对外界环境要求低,易于维护,同时其精度比较高,称重轻,精度可靠,操作简单。数码管采用BCD编码显示数字,程序编译容易,资源占用较少。根据以上的论述,采用方案二。我们采用八段四位一体数码管动态显

8、示,由于显示位数较多,故应使用显示驱动,在本设计中采用三极管来作为驱动。4按键模块方案一:使用独立式键盘独立式键盘是指直接用I/O口线构成的单个按键电路。独立式按键电路配置灵活,软件结构简单。方案二:使用矩阵式键盘矩阵式键盘是由行线和列线组成,按键位于行、列交叉点上,行线、列线分别连接到按键开关的两端。其特点是简单且不增加成本,这种键盘适合按键数目较多的场合。根据以上的论述,所以采用方案二。三、单元电路设计1单片机系统介绍AT89S52是一种低功耗高性能CHMOS 8位单片机,管脚如图所示。片内含4Kbytes ISP的可反复擦写1000次Flash只读程序存储器,128bytes的随机存取数

9、据存储器(RAM)。其特点如下:-兼容MCS-51指令系统;-最大的工作频率为33MHz;-具有双工UART串行通道;-内部集成看门狗计时器,不需要再外接看门狗计时器单元电路;-双数据指示器;-支持ISP(在线更新程序)功能,其优势在于改写单片机存储器内的程序不需要把芯从工作环境中剥离;-电源关闭标识;-全新的加密算法,使程序的保密性大大加强;-电压范围宽达4-5.5V,而89C52在低于4.8V或高于5.3V则无法工作;-烧写寿命长,其标称为1000次,实际至少是1000-10000次,这样有利于初学者反复烧写,减低学习成本;AT89S52 是一种低功耗、高性能的CMOS 8位单片机。它带有

10、8K Flash 可编程和擦除的只读存储器(EPROM),该器件采用ATMEL的高密度非易失性存储器技术制造,与工业上标准的80C51和82C52的指令系统及引脚兼容,片内Flash 集成在一个芯片上,可用与解决复杂的问题,且成本较低。AT89S52提供了8K字节Flash ,256字节RAM,32线I/O口,3个16位定时器/计数器,6向量两极中断,一个双工串行口,片内根据振荡器和始终电路等标准功能。此外,AT89S52设有静态逻辑,并支持软件选择的两种节电运行方式、空闲方式使CPU停止工作,而允许RAM、定时器/计数器、串行口和中断系统继续工作。掉电方式下,片内振荡器停止工作,由于之中被冻

11、结,一切能都停止,只有片内RAM的内容被保存,直到硬件复位才恢复正常工作。AT89S52结构框图:1 数码管电路介绍由于七段数码显示器在显示字形代码时需要有足够的功率,单片机口线的驱动能力明显不够,所以需在显示器前加显示驱动器,以提高其输出功率,满足显示器的需求。在本设计中,我采用三极管作为显示电路的8路正向驱动器。LED显示器俗称数码管,在其内部是由8个发光二极管加限流电阻组成,其连接方式有共阴和共阳两种,在共阴极接法中,因公共端接地,只要给某一段加高电平,该段就会亮。而在本设计中采用的是共阳极接法,公共端接+5V电源,在某一段上加低电平,该段就会亮。在本次设计中,为了使硬件电路更简单化,我

12、采用四位一体的LED数码管,显示原理与单个LED的显示原理完全相同。但在它的内部把四个数码管的段控端对应的连在了一起与单个的数码管相比其外部电路连接更加简单,故它只有8个段控端和4个位控端,4个位控端分别对四个数码管进行控制。 3按键模块 在单片机控制电路中,可把单片机使用的键盘分为独立式和矩阵式两种。独立式实际上就是一组独立的按键,这些按键可直接与单片机的I/O口连接,即每个按键独占一条口线,这种接法简单。矩阵式键盘也称行列式键盘,因为键的数目较多,所以键按行列组成矩阵。本设计中键盘数目较少,且为安装方便,因此在本设计中采用独立式接法。如图所示。控制电路按从一个键到键的功能被执行主要应包括两

13、项工作:一是键的识别,即在键盘中找出被按的是哪个键,另一项是键功能的实现。第一项工作是使用接口电路实现的,而第二项工作则是通过执行中断服务程序来完成。四、程序总体思路和分析1程序总体思路和分析主函数的流程图: 开始 星期加一日期加一判断星期是否>7判断闰年和日期数是否超过月数加一,日期清零判断月数是否超过年数加一,日期清零判断年数是否超过星期数清零NYNYNYYN全部清零 2 程序清单#include <reg52.h>#include <intrins.h>unsigned int time=0;unsigned char num=0;unsigned char

14、 key=0;unsigned char time_key=0;/*/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;unsigned char day_add;unsigned char SURE;/*/unsigned char code str = 0xc0,0xf9,0xa4,0x

15、b0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff;unsigned char su = 10,10,10,10,10,10,10,10;void delay_SMG(unsigned char t)unsigned char d;for(;t>0;t-)for(d=0;d<50;d+);/*/*DIS_LED*/void DIS_play()unsigned char k; unsigned char dis;dis = 0x01;for(k=0;k<8;k+)P0 = dis;P2 |= 0xc0;P2 &= 0x1f;if(k=2 | k

16、=4 | k=6)P0 = strsuk & 0x7f;else P0 = strsuk; P2 |= 0xe0;P2 &= 0x1f;dis = dis << 1;delay_SMG(4);P0 = 0xff;P2 |= 0xe0;P2 &= 0x1f;void init_all()P0 = 0x00;P2 = 0xa0;P2 = 0x00;P0 = 0x00;P2 = 0xa0;P2 = 0x00;P0 = 0xff;P2 = 0x80;P2 = 0x00;P0 = 0x00;P2 = 0xc0;P2 = 0x00;void DIS_led()if(LE

17、D = 1)P0 = 0xfe;P2 = 0x80;P2 = 0x00;else if(LED = 2)P0 = 0xfd;P2 = 0x80;P2 = 0x00;else if(LED = 3)P0 = 0xfb;P2 = 0x80;P2 = 0x00;else if(LED = 4)P0 = 0xf7;P2 = 0x80;P2 = 0x00;else if(LED = 5)P0 = 0xef;P2 = 0x80;P2 = 0x00;else if(LED = 0)P0 = 0xff;P2 = 0x80;P2 = 0x00;/*/*void IN_key()unsigned char han

18、g,lei;unsigned char zong;P3 = 0x0f;if(P3 != 0x0f)time_key+;if(time_key = 50)if(P3 != 0x0f)hang = P3 & 0x0f;P3 = 0xf0;lei = P3 & 0xf0;zong = hang | lei;switch (zong)case 0x7e:key = 1; /模式选择按键flag_led +;if(flag_led > 6) flag_led = 0;break;case 0xbe:key = 2;if(flag_led = 0) SURE = 3;if(flag_

19、led != 0)SURE+; /确定按键 if(SURE > 1)SURE = 0; break;case 0xde:key = 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 &&a

20、mp; year%100 !=0) | (year%400 =0) ) if(day_add > 28)day_add = 28;else if(day_add > 29)day_add = 29;break;case 0xee:key = 4;if(flag_led > 0) /按下模式选择键if(day_add > 0) day_add-;break;else if(time_key > 50)time_key = 100; else time_key = 0;void main()TMOD = 0x01;TH0 = (65536 - 1000) / 256;

21、TL0 = (65536 - 1000) % 256;EA = 1;ET0 = 1;TR0 = 1;init_all();while(1) DIS_play();DIS_led();void time_1() interrupt 1TH0 = (65536 - 1000) / 256;TL0 = (65536 - 1000) % 256;time+;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(da

22、y = 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+;IN_key();if(SURE = 1) /按下确认键确认日期 if(flag_led > 0) strl

23、_ledflag_led = day_add;flag_led = 0;SURE = 0;day_add = 0;if(strl_led1 = day) if(SURE = 3) LED = 0; /按下关断键else LED = 1;else if(strl_led2 = day) if(SURE = 3) LED = 0; /按下关断键else LED = 2;else if(strl_led3 = day) if(SURE = 3) LED = 0; /按下关断键else LED = 3;else if(strl_led4 = day) if(SURE = 3) LED = 0; /按下关断键else LED = 4;else if(strl_led5 = day) if(SURE = 3) LED = 0; /按下关断键else LED = 5;else if(strl_led6 = day) if(SURE = 3) LED = 0; /按下关断键else LED = 6;else LED = 0;SURE = 0;if(LED

温馨提示

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

评论

0/150

提交评论