收藏 分销(赏)

太原理工大学信息-单片机-电子万年历.doc

上传人:仙人****88 文档编号:9400082 上传时间:2025-03-24 格式:DOC 页数:20 大小:326KB 下载积分:10 金币
下载 相关 举报
太原理工大学信息-单片机-电子万年历.doc_第1页
第1页 / 共20页
太原理工大学信息-单片机-电子万年历.doc_第2页
第2页 / 共20页


点击查看更多>>
资源描述
课程设计报告 课程名称: 嵌入式程序基础 实验项目: 电子万年历设计 实验地点: 起点机房 专业班级:通信1002 学号:2010****** 学生姓名: 指导教师: 2013年6月22日 太原理工大学信息工程学院 专业班级 通信1002 学生姓名 倪杨 课程名称 嵌入式系统基础 设计名称 电子万年历 设计周数 1.5 指导教师 温景国 设计 任务 主要 设计 参数 设计一个电子万年历,实现日历功能。 主要设计参数: 1. 显示年月日时分秒及星期信息; 2. 日历参数可调整; 3. 自动识别闰年 4. LED显示。 设计内容 设计要求 1.设计I2C接口电路; 2.设计LED显示电路; 3.设计I2C接口驱动程序及显示程序。 要求:仿真调试硬件电路,仿真调试程序 主要参考 资 料 1、 单片机原理与接口技术,李晓林等,电子工业出版社,2011。 2、 微型计算机控制技术,潘新民等,人民邮电出版社,1999。 3、 单片机应用系统设计技术,张齐等,电子林业出版社,2010。 学生提交 归档文件 课程设计说明书1份 课程设计任务书 注: 课程设计完成后,学生提交的归档文件应按,封面—任务书—说明书—图纸的顺序进行装订上交(大张图纸不必装订) 指导教师签名: 日期: 20 目录 一.实验目的 4 二.实验要求 4 三.实验原理 4 四.硬件系统设计 6 五.电路原理图 6 六.电路系统框图 7 七.LED显示数码管 7 八.程序流程图 8 九.设计程序 10 十.设计体会 20 一.实验目的 1、熟悉MCS-51定时/计数器、中断的应用。 2、熟悉时钟时、分、秒计时方法,掌握编程技巧。 3、掌握七段码LED显示器的结构,七段码LED显示器的工作方式和显示程序的编程。 二.设计要求 1.设计I2C接口电路; 2.设计LED显示电路; 3.设计I2C接口驱动程序及显示程序。 设计参数 设计一个电子万年历,实现日历功能。 主要设计参数: 1、 显示年月日时分秒及星期信息; 2、 日历参数可调整; 3、 自动识别闰年 4、 LED显示。 三.设计原理 显示部分设计 基本显示原理:时钟开始显示为0时0分0秒,也就是数码管显示000000,然后每秒秒位加1 ,到9后,10秒位加1,秒位回0。10秒位到5后,即59秒 ,分钟加1,10秒位回0。依次类推,时钟最大的显示值为23小时59分59秒。这里只要确定了1秒的定时时间, 其他位均以此为基准往上累加。 同时时钟达到最大值的时候天数也增加一位,知道显示了7后再变为1,同时阴历和阳历的天数也加1,根据不同的月份显示的天数阳历有28,29,30,31天,阴历就要经过计算得到,到了12个月后,年数自动增加1,以此类推,显示万年历的现实。 万年历优化算法 1.阳历算法 阳历的算法比较简单,每十月的总的天数相对来说是固定的。只有2月份,在闰年是29天,在非闰年是28天。每个月的日历排法.主要是确定每个月第一天是星期几。我们知道1901年1月1日是星期二,星期的变化是7天一个周期,比如说要计算1901年2月1日是星期几,可以这样推算:从1901年1月1日到1901年2月1日总共经过了31天(从表1可 看出),31对7取模是3:i901年1月1日是星期二,加三后,是星期五。因此1901年2月1日是星期五。同理,可以推算出从1901—2100年任何一天是星期几。 表1 月份 1 2 3 4 5 6 7 8 9 10 11 12 闰年 31 29 31 30 31 30 31 31 30 31 30 31 非闰年 31 28 31 30 31 30 31 31 30 31 30 31 2.阴历算法 阴历的算法比较复杂,它包含两个部分。一部分是阳历日和阴历日的对应关系;另一部分则是阳历日和农历节气的对应关系。下面只介绍与设计有关的阴历和阳历的关系。 表2 比特数 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 数据 ! ! ! ! ! 1 ! ! ! 1 ! 1 x x x x 我们先要做一个数据表,这个数据表里面每2个字节,表示T一个阴所年彝个月份的天教 2个字节(共16bit)的具体意义如表2。其中“!(0/1)中“0”表示30天,“1”表示29天。“x x x x(4个比特可表示数值范围0~15)”表示该年中是否有闰月,数值“0”表示无闰月,“ 1~12” 表示某一个闰月。闰月一般是29天;在200年中(1901~2100年),闰月是30天的,可用一个特殊语句来解决。这里2OO年需要200 x 2=400个字节,构成阴历压缩数据表。 有了阴历的数据表后,主要是要确定阳历日和胡历日的对应关系。我们知道阳历年1901年1月1日,对应的阴历年是对应的阴历日,可用以下算法: (1)从阳历年1901年1月1日到1901年2月1日,计算出经过了31天; (2)根据阴历数据表知道阴历年1900年11月有29天,因此31—29=2天。原来阳历年1901年1月1日对应的阴历日是11日,则有11+1=13。 (3)因为阴历1901年12月份有30天,而13<=30,所以阳历年1901年2月1日对应的阴历年是1900年12月13日。如果上一步相加得出的散大于当前阴历月的总的天敢,别应该继续减去当前阴历月的总的天数,直到符合条件。 对于月份增加时,还要通过数据表查看是否要经过闰月。对于其他任何一个阳历日和阴历日的对应关系,都可以通过以上算法求得结果。 四.硬件系统设计 本电路是由 AT89C52 单片机为控制核心,具有在线编程功能,低功耗,能在 3V 超低压工 作;时钟电路由 DS1302 提供,它是一种高性能、低功耗、带 RAM 的实时时钟电路,它可以 对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为 2.5V~5.5V。 采用三线接口与 CPU 进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或 RAM 数据。DS1302 内部有一个 31*8 的用于临时性存放数据的 RAM 寄存器。可产生年、月、日、 周日、时、分、秒,具有使用寿命长,精度高和低功耗等特点,同时具有掉电自动保存功能。 五.电路原理图 六.电路系统框图 七.LED显示数码管 常见的LED显示具有清晰明亮的特点。是显示接口也是绝大多数单片机应用系统必备的部件之一。 发光二极管组成的显示器是单片机应用产品中最常用的廉价输出设备。它由若干个发光二极管按一定的规律排列而成。当某一个发光二极管导通时,相应的一个点或一笔画被点亮,控制不同组合的二极管导通,就能显出各种字符。 1. 显示器的结构 常用的7段显示器的结构如图所示,发光二极管的阳极连在一起的称为共阳极显示器,阴极连在一起的成为共阴显示器。1位显示器由8个发光二极管组成,其中7个发光二极管A~g控制7个笔画的亮或暗,另一个控制一个小数点的亮和暗,这种笔画的七段显示器能显示的字符较少,字符的形状有些失真,但失控简单,使用方便。 八.程序流程图 九.设计程序 ORG 0000H LJMP START ORG 0003H LJMP PROINT0 ; int0用来切换时钟调整位置 ORG 0013H ;用来调整时间,只加不减 LJMP PROINT1 ORG 001BH ;5ms的延迟,计数200次则为1秒 LJMP PROTIME ORG 0030H ;主程序 TABLE: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H ;0 1 2 3 4 5 6 7 8 9 ORG 0050H START: MOV TCON,#05H ;中断初始化 MOV IE ,#8DH MOV TMOD,#10H MOV TH1,#0eCH ;定时器初始化 MOV TL1,#78H MOV 31H,#0AH ;10秒 MOV 32H,#1EH ;30分 MOV 33H,#09H ;9点 MOV 34H,#0AH ;10号 MOV 35H,#06H ;6月 MOV 36H,#0CH ;2012年 MOV 37H,#14H ;R7 存放切换标志 0 NORMAL , 1 HOUR ,2 MINUTE ,3 SECOND ,4 YEAR,5 MONTH,6 DAY MOV R1,#00H ;确定在调时不按键的最长时间,10秒后返回normAl状态 MOV R7,#00H ;切换标志 MOV 40H,#00H ;十六进制转换BCD的高位 MOV 41H,#00H ;十六进制转换BCD的低位 MOV R6,#00H ;调时的位闪烁的时间间隔 MOV R4,#00H ;用来计数5ms的中断次数,200次则一秒 MOV R3,#00H SETB TR1 ;开始计时 AGAIN: ACALL PROSHOW ;显示 AJMP AGAIN PROSHOW: CJNE R3,#00H,SHOWDATE ;如果r3等于1就显示日期,等于0就显示时钟 CJNE R7,#04H,DATE1 ;显示程序 AJMP SHOWDATE ;showdate显示年月日 DATE1: CJNE R7,#05H,DATE2 AJMP SHOWDATE DATE2: CJNE R7,#06H,SHOWCLOCK AJMP SHOWDATE SHOWCLOCK: MOV R0,33H ;showclock显示时分秒,先显示时 ACALL PROHTOD CJNE R7,#01H,CLK1 INC R6 CJNE R6,#03H,CLK2 ;若处于调时状态,则该位闪烁 MOV R6 ,#00H CLK1: CLR P2.4 MOV A,41H MOV P0, A ;显示时的低位 ACALL DELAY3MS CLK2: SETB P2.4 CLR P2.5 MOV A,40H MOV P0,A ;显示时的高位 ACALL DELAY3MS SETB P2.5 MOV R0,32H ;显示分 ACALL PROHTOD CJNE R7,#02H,CLK3 INC R6 CJNE R6,#03H,CLK4 ;若处于调时状态,则该位闪 MOV R6,#00H CLK3: CLR P2.2 MOV A,41H MOV P0, A ;显示分的低位 ACALL DELAY3MS CLK4: SETB P2.2 CLR P2.3 MOV A,40H MOV P0,A ;显示分的高位 ACALL DELAY3MS SETB P2.3 MOV R0,31H ;显示秒 ACALL PROHTOD CJNE R7,#03H,CLK5 INC R6 CJNE R6,#03H,CLK6 ;若处于调时状态,则该位闪烁 MOV R6,#00H CLK5: CLR P2.0 MOV A,41H MOV P0, A ;显示秒的低位 ACALL DELAY3MS CLK6: SETB P2.0 CLR P2.1 MOV A,40H MOV P0,A ;显示秒的高位 ACALL DELAY3MS SETB P2.1 RET SHOWDATE: MOV R0,36H ;显示年 ACALL PROHTOD CJNE R7,#04H,DAY1 INC R6 CJNE R6,#03H,DAY2 ;若处于调时状态,则该位闪烁 MOV R6,#00H DAY1: CLR P2.4 MOV P0,41H ;显示年的低位 ACALL DELAY3MS DAY2: SETB P2.4 CLR P2.5 MOV P0,40H ;显示年的高位 ACALL DELAY3MS SETB P2.5 MOV R0,35H ;显示月 ACALL PROHTOD CJNE R7,#05H,MONTH1 INC R6 CJNE R6,#03H,MONTH2 ;若处于调时状态,则该位闪烁 MOV R6,#00H MONTH1: CLR P2.2 MOV P0,41H ;显示月的低位 ACALL DELAY3MS MONTH2: SETB P2.2 CLR P2.3 MOV P0,40H ;显示月的高位 ACALL DELAY3MS SETB P2.3 MOV R0,34H ;显示日 ACALL PROHTOD CJNE R7,#06H,YEAR1 INC R6 CJNE R6,#03H,YEAR2 ;若处于调时状态,则该位闪烁 MOV R6,#00H YEAR1: CLR P2.0 MOV P0,41H ACALL DELAY3MS YEAR2: SETB P2.0 CLR P2.1 MOV P0,40H ACALL DELAY3MS SETB P2.1 RET PROHTOD: PUSH ACC ;十六进制数转换成bcd码,且可以直接输出p0口 MOV A,R0 MOV B,#0AH DIV AB MOV DPTR,#0030H MOVC A,@A+DPTR MOV 40H,A MOV A,B MOVC A,@A+DPTR MOV 41H,A POP ACC RET DELAY3MS: DELAY3MS MOV 45H,#08H DELAY1: MOV 46H,#0FFH DELAY2: DJNZ 46H,DELAY2 DJNZ 45H,DELAY1 RET PROINT0: R EX0 ;切换键中断程序 MOV R3,#00H ACALL PROSHOW MOV C,P3.2 JC IEXIT0 MOV R1,#00H INC R7 CJNE R7,#07H,IEXIT0 MOV R7,#00H INT01: V C,P3.2 JC INT02 ACALL PROSHOW AJMP INT01 INT02: ALL PROSHOW IEXIT0: B EX0 RETI PROINT1C: X1 ACALL PROSHOW MOV C,P3.3 JC IEXIT1 LCALL ISYEAR ;判断平年闰年 LCALL ISMONTH ;判断月份,确定最大日数 MOV R1,#00H CJNE R7,#00H,NEXT1;若不是调时状态,按此键就是切换显示日期、时钟 INC R3 CJNE R3,#02H,IEXIT1 MOV R3,#00H AJMP IEXIT1 NEXT1: OV R3, #00H CJNE R7,#03H,NEXT2 ;修改秒位 INC 31H MOV A,31H CJNE A,#3CH,INT11 ;遇60变0 MOV 31H,#00H AJMP IEXIT1 NEXT2: NE R7,#02H,NEXT3 ;修改分位 INC 32H MOV A,31H CJNE A,#3CH,INT11 ;遇60变0 MOV 31H,#00H AJMP IEXIT1 NEXT3: CJNE R7,#01H,NEXT4 ;修改时位 INC 33H MOV A,33H CJNE A,#18H,INT11 ;遇24变0 MOV 33H,#00H AJMP IEXIT1 NEXT4: CJNE R7,#06H,NEXT5 ;修改日 INC 34H MOV A,34H CJNE A,49H,INT11 ;到月底就返回月初 MOV 34H,#01H AJMP IEXIT1 NEXT5: CJNE R7,#05H,NEXT6 ;修改月 INC 35H MOV A,35H CJNE A,#0DH,INT11 ;十二月过后就跳回1月 MOV 35H,#01H AJMP IEXIT1 NEXT6: CJNE R7,#04H,INT11 ;修改年 INC 36H MOV A,36H CJNE A,#64H,INT11 MOV 36H,#00H INT11: MOV C,P3.3 JC INT12 ACALL PROSHOW AJMP INT11 INT12: ACALL PROSHOW IEXIT1: SETB EX1 RETI PROTIME: MOV TMOD,#10H MOV TH1,#3CH ;定时器初始化 MOV TL1,#60H SETB TR1 NC R4 CJNE R4,#0c8H,EXIT MOV R4,#00H ;计满1秒则清零 CJNE R7,#00H,DIAOSHI AJMP NORMAL DIAOSHI: INC R1 ;调时不按键的最长时间为10秒,在此期间又键按下重新计时 CJNE R1,#0AH,EXIT MOV R7,#00H ;到10秒则返回正常显示状态 MOV R1,#00H AJMP EXIT NORMAL: ACALL ISYEAR ;判断平闰年,返回标志48H,0为平年,1为闰年 ACALL ISMONTH ;判断哪个月,返回该月的最大日数,存放在49H NC 31H MOV A,31H ;秒加一 CJNE A,#3CH,EXIT MOV 31H,#00H INC 32H ;分加一 MOV A,32H CJNE A,#3CH,EXIT MOV 32H,#00H INC 33H ;时加一 MOV A,33H CJNE A,#18H,EXIT MOV 33H,#00H INC 34H ;日加一 MOV A,34H CJNE A,49H,EXIT MOV 34H,#01H INC 35H ;月加一 MOV A,35H CJNE A,#0DH,EXIT MOV 35H,#01H INC 36H ;年加一 MOV A,36H CJNE A,#64H,EXIT MOV 36H,#00H EXIT: RETI ISYEAR: MOV A,36H ;判断平闰年 MOV B,#04H DIV AB MOV A,B CJNE A,#00H,EXITYEAR1 MOV 48H,#01H ;闰年 SJMP EXITYEAR EXITYEAR1: MOV 48H,#00H ;平年 EXITYEAR: RETI MOV A,35H ;开始检查月份 CJNE A,#02H,NEXTMON1 ;判断二月 CJNE R2,#00H,RUNNIAN MOV 49H,#1DH ;平年为28天,赋29给49H AJMP EXITMONTH RUNNIAN: MOV 49H,#1EH ;闰年为29天,赋30天给49H AJMP EXITMONTH NEXTMON1: CJNE A,#04H,NEXTMON2 AJMP XIAOYUE NEXTMON2: CJNE A,#06H,NEXTMON3 AJMP XIAOYUE NEXTMON3: CJNE A,#09H,NEXTMON4 AJMP XIAOYUE NEXTMON4: CJNE A,#0BH,DAYUE XIAOYUE: MOV 49H,#1FH ;四,六,九,十一月是小月,30天,但应该赋31天给比较值49H AJMP EXITMONTH DAYUE: MOV 49H,#20H ;其他月份为大月,31天,赋32天给49H EXITMONTH: RETI END 十.设计体会 本次课程设计,我学会了系统地设计一个具体的工程设计样品;了解了具体的设计过程。他包括前期的设计准备知识、相关电路和器件特性、具体实现算法的设计、相关程序实现、调试等过程。在这个过程中,我知道了查阅相关资料的重要性,也累计了许多电路和逻辑器件的知识。
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 教育专区 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服