太原理工大学信息-单片机-电子万年历_第1页
太原理工大学信息-单片机-电子万年历_第2页
太原理工大学信息-单片机-电子万年历_第3页
太原理工大学信息-单片机-电子万年历_第4页
太原理工大学信息-单片机-电子万年历_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

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

文档简介

1、课程设计报告课程名称: 嵌入式程序基础 实验项目: 电子万年历设计 实验地点: 起点机房 专业班级:通信1002 学号:2010*学生姓名: 指导教师: 2013年6月22日太原理工大学信息工程学院专业班级通信1002学生姓名倪杨课程名称嵌入式系统基础设计名称电子万年历设计周数1.5指导教师温景国设计任务主要设计参数设计一个电子万年历,实现日历功能。主要设计参数:1 显示年月日时分秒及星期信息;2 日历参数可调整;3 自动识别闰年4 LED显示。设计内容设计要求1设计I2C接口电路;2设计LED显示电路;3设计I2C接口驱动程序及显示程序。要求:仿真调试硬件电路,仿真调试程序主要参考资 料1、

2、 单片机原理与接口技术,李晓林等,电子工业出版社,2011。2、 微型计算机控制技术,潘新民等,人民邮电出版社,1999。3、 单片机应用系统设计技术,张齐等,电子林业出版社,2010。学生提交归档文件课程设计说明书1份课程设计任务书注:课程设计完成后,学生提交的归档文件应按,封面任务书说明书图纸的顺序进行装订上交(大张图纸不必装订)指导教师签名: 日期:20目录一实验目的4二实验要求4三实验原理4四硬件系统设计6五电路原理图6六电路系统框图7七LED显示数码管7八程序流程图 8九设计程序10十设计体会20一实验目的1、熟悉MCS-51定时/计数器、中断的应用。2、熟悉时钟时、分、秒计时方法,

3、掌握编程技巧。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秒的定时时间

4、, 其他位均以此为基准往上累加。 同时时钟达到最大值的时候天数也增加一位,知道显示了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日总共经

5、过了31天(从表1可 看出),31对7取模是3:i901年1月1日是星期二,加三后,是星期五。因此1901年2月1日是星期五。同理,可以推算出从19012100年任何一天是星期几。表1月份123456789101112闰年312931303130313130313031非闰年3128313031303131303130312.阴历算法阴历的算法比较复杂,它包含两个部分。一部分是阳历日和阴历日的对应关系;另一部分则是阳历日和农历节气的对应关系。下面只介绍与设计有关的阴历和阳历的关系。表2比特数0123456789101112131415数据!1!1!1xxxx我们先要做一个数据表,这个数据表里面

6、每2个字节,表示T一个阴所年彝个月份的天教 2个字节(共16bit)的具体意义如表2。其中“!(01)中“0”表示30天,“1”表示29天。“x x x x(4个比特可表示数值范围015)”表示该年中是否有闰月,数值“0”表示无闰月,“ 112” 表示某一个闰月。闰月一般是29天;在200年中(19012100年),闰月是30天的,可用一个特殊语句来解决。这里2OO年需要200 x 2=400个字节,构成阴历压缩数据表。有了阴历的数据表后,主要是要确定阳历日和胡历日的对应关系。我们知道阳历年1901年1月1日,对应的阴历年是对应的阴历日,可用以下算法:(1)从阳历年1901年1月1日到1901

7、年2月1日,计算出经过了31天;(2)根据阴历数据表知道阴历年1900年11月有29天,因此3129=2天。原来阳历年1901年1月1日对应的阴历日是11日,则有11+1=13。(3)因为阴历1901年12月份有30天,而13<=30,所以阳历年1901年2月1日对应的阴历年是1900年12月13日。如果上一步相加得出的散大于当前阴历月的总的天敢,别应该继续减去当前阴历月的总的天数,直到符合条件。 对于月份增加时,还要通过数据表查看是否要经过闰月。对于其他任何一个阳历日和阴历日的对应关系,都可以通过以上算法求得结果。四硬件系统设计本电路是由 AT89C52 单片机为控制核心,具有在线编程

8、功能,低功耗,能在 3V 超低压工 作;时钟电路由 DS1302 提供,它是一种高性能、低功耗、带 RAM 的实时时钟电路,它可以 对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为 2.5V5.5V。 采用三线接口与 CPU 进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或 RAM 数据。DS1302 内部有一个 31*8 的用于临时性存放数据的 RAM 寄存器。可产生年、月、日、 周日、时、分、秒,具有使用寿命长,精度高和低功耗等特点,同时具有掉电自动保存功能。五电路原理图六电路系统框图 七LED显示数码管 常见的LED显示具有清晰明亮的特点。是显示接口也是绝大

9、多数单片机应用系统必备的部件之一。发光二极管组成的显示器是单片机应用产品中最常用的廉价输出设备。它由若干个发光二极管按一定的规律排列而成。当某一个发光二极管导通时,相应的一个点或一笔画被点亮,控制不同组合的二极管导通,就能显出各种字符。1. 显示器的结构常用的7段显示器的结构如图所示,发光二极管的阳极连在一起的称为共阳极显示器,阴极连在一起的成为共阴显示器。1位显示器由8个发光二极管组成,其中7个发光二极管Ag控制7个笔画的亮或暗,另一个控制一个小数点的亮和暗,这种笔画的七段显示器能显示的字符较少,字符的形状有些失真,但失控简单,使用方便。八程序流程图九设计程序ORG 0000HLJMP ST

10、ART ORG 0003HLJMP PROINT0 ; int0用来切换时钟调整位置ORG 0013H ;用来调整时间,只加不减LJMP PROINT1ORG 001BH ;5ms的延迟,计数200次则为1秒LJMP PROTIMEORG 0030H;主程序TABLE: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H ;0 1 2 3 4 5 6 7 8 9ORG 0050HSTART:MOV TCON,#05H ;中断初始化MOV IE ,#8DHMOV TMOD,#10HMOV TH1,#0eCH ;定时器初始化MOV TL1,#78HMOV

11、 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 DAYMOV R1,#00H ;确定在调时不按键的最长时间,10秒后返回normAl状态MOV R7,#00H ;切换标志MOV 40H,#00H ;十六进制转换BCD的高位MOV 41H,#00H ;十六进制转换BCD的低位MOV R6,#00H ;

12、调时的位闪烁的时间间隔MOV R4,#00H ;用来计数5ms的中断次数,200次则一秒 MOV R3,#00HSETB TR1 ;开始计时AGAIN:ACALL PROSHOW ;显示AJMP AGAINPROSHOW: CJNE R3,#00H,SHOWDATE ;如果r3等于1就显示日期,等于0就显示时钟CJNE R7,#04H,DATE1 ;显示程序AJMP SHOWDATE ;showdate显示年月日DATE1: CJNE R7,#05H,DATE2AJMP SHOWDATEDATE2: CJNE R7,#06H,SHOWCLOCKAJMP SHOWDATESHOWCLOCK: M

13、OV R0,33H ;showclock显示时分秒,先显示时ACALL PROHTODCJNE R7,#01H,CLK1INC R6CJNE R6,#03H,CLK2 ;若处于调时状态,则该位闪烁MOV R6 ,#00HCLK1:CLR P2.4MOV A,41HMOV P0,A ;显示时的低位ACALL DELAY3MSCLK2:SETB P2.4CLR P2.5MOV A,40HMOV P0,A ;显示时的高位ACALL DELAY3MSSETB P2.5MOV R0,32H ;显示分ACALL PROHTODCJNE R7,#02H,CLK3INC R6CJNE R6,#03H,CLK4

14、 ;若处于调时状态,则该位闪MOV R6,#00HCLK3:CLR P2.2MOV A,41HMOV P0,A ;显示分的低位ACALL DELAY3MSCLK4:SETB P2.2CLR P2.3MOV A,40HMOV P0,A ;显示分的高位ACALL DELAY3MSSETB P2.3MOV R0,31H ;显示秒ACALL PROHTODCJNE R7,#03H,CLK5INC R6CJNE R6,#03H,CLK6 ;若处于调时状态,则该位闪烁MOV R6,#00HCLK5:CLR P2.0MOV A,41HMOV P0,A ;显示秒的低位ACALL DELAY3MSCLK6:SE

15、TB P2.0CLR P2.1MOV A,40HMOV P0,A ;显示秒的高位ACALL DELAY3MSSETB P2.1RETSHOWDATE:MOV R0,36H ;显示年ACALL PROHTODCJNE R7,#04H,DAY1INC R6CJNE R6,#03H,DAY2 ;若处于调时状态,则该位闪烁MOV R6,#00HDAY1:CLR P2.4MOV P0,41H ;显示年的低位 ACALL DELAY3MSDAY2:SETB P2.4CLR P2.5MOV P0,40H ;显示年的高位ACALL DELAY3MSSETB P2.5MOV R0,35H ;显示月ACALL P

16、ROHTODCJNE R7,#05H,MONTH1INC R6CJNE R6,#03H,MONTH2 ;若处于调时状态,则该位闪烁MOV R6,#00HMONTH1:CLR P2.2MOV P0,41H ;显示月的低位ACALL DELAY3MSMONTH2:SETB P2.2CLR P2.3MOV P0,40H ;显示月的高位ACALL DELAY3MSSETB P2.3MOV R0,34H ;显示日ACALL PROHTODCJNE R7,#06H,YEAR1INC R6CJNE R6,#03H,YEAR2 ;若处于调时状态,则该位闪烁MOV R6,#00HYEAR1:CLR P2.0MO

17、V P0,41HACALL DELAY3MSYEAR2:SETB P2.0CLR P2.1MOV P0,40HACALL DELAY3MSSETB P2.1RETPROHTOD:PUSH ACC ;十六进制数转换成bcd码,且可以直接输出p0口MOV A,R0MOV B,#0AHDIV ABMOV DPTR,#0030HMOVC A,A+DPTRMOV 40H,AMOV A,BMOVC A,A+DPTRMOV 41H,APOP ACCRETDELAY3MS:DELAY3MSMOV 45H,#08HDELAY1:MOV 46H,#0FFHDELAY2: DJNZ 46H,DELAY2DJNZ 4

18、5H,DELAY1RETPROINT0:R EX0 ;切换键中断程序MOV R3,#00HACALL PROSHOWMOV C,P3.2JC IEXIT0MOV R1,#00HINC R7CJNE R7,#07H,IEXIT0MOV R7,#00HINT01:V C,P3.2JC INT02ACALL PROSHOWAJMP INT01INT02:ALL PROSHOWIEXIT0:B EX0RETIPROINT1C:X1ACALL PROSHOWMOV C,P3.3JC IEXIT1LCALL ISYEAR ;判断平年闰年LCALL ISMONTH ;判断月份,确定最大日数MOV R1,#0

19、0HCJNE R7,#00H,NEXT1;若不是调时状态,按此键就是切换显示日期、时钟INC R3CJNE R3,#02H,IEXIT1MOV R3,#00HAJMP IEXIT1NEXT1:OV R3, #00HCJNE R7,#03H,NEXT2 ;修改秒位INC 31HMOV A,31HCJNE A,#3CH,INT11 ;遇60变0MOV 31H,#00HAJMP IEXIT1NEXT2:NE R7,#02H,NEXT3 ;修改分位INC 32HMOV A,31HCJNE A,#3CH,INT11 ;遇60变0MOV 31H,#00HAJMP IEXIT1NEXT3:CJNE R7,#

20、01H,NEXT4 ;修改时位INC 33HMOV A,33HCJNE A,#18H,INT11 ;遇24变0MOV 33H,#00HAJMP IEXIT1NEXT4:CJNE R7,#06H,NEXT5 ;修改日INC 34HMOV A,34HCJNE A,49H,INT11 ;到月底就返回月初MOV 34H,#01HAJMP IEXIT1NEXT5:CJNE R7,#05H,NEXT6 ;修改月INC 35HMOV A,35HCJNE A,#0DH,INT11 ;十二月过后就跳回1月MOV 35H,#01HAJMP IEXIT1NEXT6:CJNE R7,#04H,INT11 ;修改年IN

21、C 36HMOV A,36HCJNE A,#64H,INT11MOV 36H,#00HINT11:MOV C,P3.3JC INT12ACALL PROSHOWAJMP INT11INT12:ACALL PROSHOWIEXIT1:SETB EX1RETIPROTIME:MOV TMOD,#10HMOV TH1,#3CH ;定时器初始化MOV TL1,#60HSETB TR1NC R4CJNE R4,#0c8H,EXITMOV R4,#00H ;计满1秒则清零CJNE R7,#00H,DIAOSHIAJMP NORMALDIAOSHI:INC R1 ;调时不按键的最长时间为10秒,在此期间又键

22、按下重新计时CJNE R1,#0AH,EXITMOV R7,#00H ;到10秒则返回正常显示状态MOV R1,#00HAJMP EXITNORMAL:ACALL ISYEAR ;判断平闰年,返回标志48H,0为平年,1为闰年ACALL ISMONTH ;判断哪个月,返回该月的最大日数,存放在49HNC 31HMOV A,31H;秒加一CJNE A,#3CH,EXITMOV 31H,#00HINC 32H;分加一MOV A,32HCJNE A,#3CH,EXITMOV 32H,#00HINC 33H;时加一MOV A,33HCJNE A,#18H,EXITMOV 33H,#00HINC 34H;日加一MOV A,34HCJNE A,49H,EXITMOV 34H,#01HINC 35H;月加一MOV A,35HCJNE A,#0DH,EXITMOV 35H,#01HINC 36H

温馨提示

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

评论

0/150

提交评论