单片机设计电子日历和温度表的设计.doc_第1页
单片机设计电子日历和温度表的设计.doc_第2页
单片机设计电子日历和温度表的设计.doc_第3页
单片机设计电子日历和温度表的设计.doc_第4页
单片机设计电子日历和温度表的设计.doc_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

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

文档简介

长安大学电气工程及其自动化课程设计 长安大学单片机原理及接口技术课程设计电子日历和温度表的设计 专 业: 电气工程及其自动化 学 号: 3204100121 姓 名: 赵杏 指导老师: 段晨东、张文革 时 间: 2012.12.25-2013.1.6 一、 任务书题目2 电子日历和温度表的设计(一)设计要求(不能采用专用芯片):(1)时间显示:年、月、日(各2位)(2)日历参数的手动设置,设置参数,每次按下按键时,应伴随有蜂鸣器提示声。(3)实现实时温度显示功能(每秒刷新一次),温度测量范围4060。(4)每当月份和年份变化时,声光报警提,如长短声,音乐等。(5)当温度超过38度,或低于零下-10时,声光报警提示。(6)设计一种用外部中断方式触发的显示或声音提示模式,当触发时,停止显示时间,显示或输出特定的模式(过程不小于1分钟),推出中断处理后,能够显示正确时间。(二)扩充功能:(1)防止极性接反,电压不足时,报警提示。(2)显示星期的功能。(3)重要节日提示功能,声光提示(声音,LED闪烁等)。二、 摘要 本设计主要分为电子日历、温度显示功能和星期显示功能三个部分,实现年月日的显示和温度的采集显示及温度报警、星期显示功能。时间显示年月日各两位,能够手动设置日历参数,并能在月份和年份跳转以及重要日期时蜂鸣显示;温度表采集温度并每秒刷新显示。设计时用STC89C52单片机T0以中断方式产生周期为50ms的脉冲信号,通过秒,分,时进位,实现一天,逐次累加,满该月天数进位,满12月进位一年。用软件实现闰年的判断,并判断重要节日实现蜂鸣警报。年月日的显示用74LS245驱动并用集成的8位数码显示管显示,温度的采集选用DS18B20温度传感器,驱动和显示和电子日历部分相同,星期的显示同电子日历。由单片机把各个部分联系到一起,综合完成设计要求的实现。关键字:单片机STC89C52 电子日历 星期显示 温度显示三、 目录1. 任务书22. 正文5 (1) 前言5 (2) 方案分析 6 原理说明 6设计时所用主要元器件6主要硬件元件分析7 方案说明7电子日历方案6温度表方案12星期显示方案14 (3)调试15(1)功能实现过程15(2)调试出现的问题及解决方法17 整体显示17实物显示17结论18附录19硬件原理图19程序清单20 4、 正文 (一)前言 电子日历和温度表的设计,主要采用51单片机74LS245,74LS138,等来实现的。 根据任务书要求,本设计大致分为三大部分,即电子日历部分、温度表部分和星期显示部分,利用设计的单片机程序和单片机外部接口等功能实现。 电子日历要求时间显示年月日各两位,且日历参数可以手动设置。可以设置开关通过单片机接口对日期进行调解。利用单片机内部晶振计时,用软件实现满一天进位。显示日历,用六个八段LED数码显示管显示日期六位数字,在年加一和月加一以及日期到达重要节日时通过软件设计实现警报功能。 温度表主要在于选择传感器和显示输出温度。传感器要求测量范围不小于-40+60且温度测量刷新时间不大于一秒钟。单片机读取传感器温度信息,经转换和显示程序通过I/O口输出。同样,显示输出也用四个八段LED数码显示管显示温度,当温度超过-10+38的范围时通过软件设计实现报警功能。 星期要求通过指定的按键使星期显示一位,并且伴随着日历部分的日加一,星期也加一,显示到星期日时,天数加一时,星期自动显示一。显示部分用一个八段LED数码显示管显示,此部分同电子日历和温度表的显示。(2) 方案分析 (1) 原理说明一、设计时所用主要元器件1)8052芯片一个2)74LS245芯片两个3)DS18B20温度传感器一个4)六位八段数码显示管一个5)按键9个6)74LS138一个7)V系列仿真器集成调试软件8)Proteus仿真模拟环境1、主要硬件元件分析1)STC89C52单片机 STC89C52提供以下标准功能:8K字节重擦写Flash闪速存储器、2568字节内部RAM、32个可编程I/O口线、一个6向量两级中断结构,一个全双工串行通信口,片内振荡及时钟电路。同时,STC89C52可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。空闲方式停止CPU的工作,但允许RAM、定时/计数器、串行通信口及中断系统继续工作。掉电方式保存RAM中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位。 图一 图二 图表一(1)电源及时钟引脚如图三,Vcc:电源接入引脚;GND:接地引脚;XTAL1:晶体振荡器接入的一个引脚(采用外部振荡器时,此引脚接地);XTAL2:晶体振荡器接入的另一个引脚(采用外部振荡器时,此引脚作为外部振荡信号的输入端)。 图三(2)控制线引脚,RST:复位信号输入引脚。(3)并行I/O口引脚P0.0-P0.7:一般I/O口引脚或数据/低位地址总线复用引脚;P1.0-P1.7:一般I/O口引脚P2.0-P2.7:一般I/O口引脚或数据/高位总线引脚; P3.0-P3.7:一般I/O口引脚或第二功能引脚。 在控制数码管显示时,用P1口的P1.0-P1.3来控制数码管的选通信号,当其中一个引脚输出高电 平时,其对应的数码管被选通用来显示时间。在设置STC89C52的振荡频率时,采用内部时钟方式,如图所示。在单片机内部有一振荡电路,只要在单片机XTAL1和XTAL2引脚外接石英晶体(简称晶振),就构成了自激振荡器并在单片机内部产生时钟脉冲信号。图中电容器C1和C2的作用是稳定频率和快速起振,电容值在5-30pF,典型值为30pF。晶振CYS的振荡频率范围为1.2-12MHz,典型值为12MHz和6MHz。本次设计选择了12MHz。2)74LS138译码器如图,74LS138的引脚图,译码器74LS138有三个输入端A2、A1、A0,八个输出端Y0-Y8,S3、S2、S1为三个控制输入端(使能控制端)只有控制输入端处于有效状态时,输入和输出之间才有相应的逻辑关系。 图四 真值表3)74LS245驱动器 如图二74LS245的引脚图,图表一为其功能表。图中G为使能端,DIR为方向控制端,A1-A8为A端的数据输入/输出,B1-B8为B端的数据输入/输出。74LS245是一种三态输出的8总线收发驱动器,无锁存功能。当G为低电平时,如果DIR为高电平,则74LS245将A端的数据传送至B端;如果DIR为低电平,则74LS245将B端的数据传送至A端。在其他情况下不传送数据,输出呈高阻态。3)DS18B20温度传感器美国DALLAS公司生产的单线数字温度传感器DS1820见图三把温度信号直接转换成串行数字信号供微机处理。由于每片DS1820含有唯一的硅串行数所以在一条总线上可挂接任意多个DS1820芯片。从DS1820读出的信息或写入DS1820的信息,仅需要一根口线(单线接口)。读写及温度变换功率来源于数据总线,总线本身也可以向所挂接的DS1820供电,而无需额外电源。DS1820提供九位温度读数,构成多点温度检测系统而无需任何外围硬件。DS1820的测温原理:内部计数器对一个受温度影响的振荡器的脉冲计数,低温时振荡器的脉冲可以通过门电路,而当到达某一设置高温时振荡器的脉冲无法通过门电路。计数器设置为-55时的值,如果计数器到达0之前,门电路未关闭,则温度寄存器的值将增加,这表示当前温度高于-55。同时,计数器复位在当前温度值上,电路对振荡器的温度系数进行补偿,计数器重新开始计数直到回零。如果门电路仍然未关闭,则重复以上过程。温度表示值为9bit,高位为符号位。 图五 图六4)DS18B20温度传感器美国DALLAS公司生产的单线数字温度传感器DS1820见图六把温度信号直接转换成串行数字信号供微机处理。由于每片DS1820含有唯一的硅串行数所以在一条总线上可挂接任意多个DS1820芯片。从DS1820读出的信息或写入DS1820的信息,仅需要一根口线(单线接口)。读写及温度变换功率来源于数据总线,总线本身也可以向所挂接的DS1820供电,而无需额外电源。DS1820提供九位温度读数,构成多点温度检测系统而无需任何外围硬件。DS1820的测温原理:内部计数器对一个受温度影响的振荡器的脉冲计数,低温时振荡器的脉冲可以通过门电路,而当到达某一设置高温时振荡器的脉冲无法通过门电路。计数器设置为-55时的值,如果计数器到达0之前,门电路未关闭,则温度寄存器的值将增加,这表示当前温度高于-55。同时,计数器复位在当前温度值上,电路对振荡器的温度系数进行补偿,计数器重新开始计数直到回零。如果门电路仍然未关闭,则重复以上过程。温度表示值为9bit,高位为符号位。5)数码显示管8段LED数码管是一种显示设备,见图五。它是由若干个发光二极管组成的显示字段,a-g和dp为显示字段控制端。有共阳极和共阴极两种连接方式,在此设计中我们都用共阴极连接,即把所有的发光二极管的阴极连接一起。共阴数码管的公共端COM接低电平,当某个显示字段控制端接高电平时,对应的字段就点亮,当显示字段控制端接低电平时,该显示字段熄灭。由于每个显示字段显示通常需要十到几十毫安的驱动电流,因此显示控制信号必须经过驱动电路(即通过74LS245)才能使显示器正常工作。本设计中的显示器有两种,六位集成的和四位集成的,他们功耗低,可靠性高。阴极通过CMOS管4010与单片机连接。(二)方案说明 根据任务书要求,本设计大致分为三大部分,即电子日历部分、温度表部分和星期显示部分,利用设计的单片机程序和单片机外部接口等功能实现。 电子日历方案: 电子日历要求时间显示年月日各两位,且日历参数可以手动设置。可以设置开关通过单片机接口对日期进行调解。利用单片机内部晶振计时,用软件实现满一天进位。显示日历,用六个八段LED数码显示管显示日期六位数字,在年加一和月加一以及日期到达重要节日时通过软件设计实现警报功能。 电子日历的方案主要分为手动设置日期、计满一天日期调整、年加一及月加一时及重要日期报警提醒、显示输出等步骤。手动设置日期:开关通过单片机P1.2,P1.3,P1.5,P1.6,P1.7组成的矩阵式键盘输入到单片机,通过软件实现区分闰年、平年,查询各个月份的天数及判断相关进位事宜实现进位日期调节。其中本次实验,开关“1”控制年的修改。开关“2”控制月的修改,开关“3”控制日的修改,开关“4”是显示温度的按钮,而开关“5”控制星期的显示。计满一天日期调整:通过单片机内部定时器/计数器产生1S定时,进而进位到 分,时,扩大到一天,用软件实现闰年的判断及各月份总计天数的判断,以便完成日满进月,月满进年的过程。报警提醒:用软件设置在月加一、年加一或者重要日期时实现警报功能。显示输出:用六个八段LED显示管六位数字。显示管为共阴极,由74LS245芯片驱动。阴极通过74LS245与单片机相连。完成输出显示。 电子日历流程图定时进入中断计数器结束? 天加一 Y最大天数?Y月加一天置一警报 Y最大月数?年加一月置一警报Y到100?年置零月置一天置一Y 返回之前的方案:年月日计时部分:P_T1: PUSH ACC PUSH PSWDJNZ R0,GET MOV R0,#20INC MIAOCJNE A,#3,GET MOV MIAO ,#0 INC FEN MOV A,FEN CJNE A,#1,GETMOV FEN ,#0 MOV MIAO ,#0 INC HOURMOV A,HOUR CJNE A,#1,GETMOV HOUR,#0MOV FEN ,#0MOV MIAO ,#0 MOV A,YEAR MOV B,AJZ RUNNIANMOV DPTR,#TAB1 SJMP PINGNIANRUNNIAN: MOV DPTR ,#TAB2 PINGNIAN : MOV A,MONTH MOVC A,A+DPTRMOV B,AMOV A,DATE CJNE A,B,GET1MOV DATE,#1 ;满月 月+1GET1: CJNE A,#32,GET2 MOV DATE ,#1 LJMP M1 GET2: INC DATE LJMP GETM1: INC MONTH MOV P1,#11111110B ;月+1 蜂鸣器响LCALL DELAY MOV P1,#11111111B ;灯亮 MOV A,MONTH CJNE A,#13,GET ;年+1 MOV MONTH,#1INC YEARMOV P1,#11111110B ; 年+1 蜂鸣器响 LCALL DELAY MOV P1,#11111111B; 灯亮 GET: POP PSW POP ACC RETI DELAY: MOV R6,#10 ; 延时 y1: MOV R7,#250 y2: DJNZ R7,Y2 DJNZ R6,Y1 RET该程序在显示是和显示程序无法匹配,因此改成:现有程序。 2 温度表方案:温度表主要在于选择传感器和显示输出温度。传感器要求测量范围不小于-40+60且温度测量刷新时间不大于一秒钟。单片机读取传感器温度信息,经转换和显示程序通过I/O口输出。同样,显示输出也用四个八段LED数码显示管显示温度,当温度超过-10+38的范围时通过软件设计实现报警功能。温度表主要分为:温度的采集、温度的处理显示及超过-1038时实现报警功能。我们用DS18B20温度传感器完成对温度的采集。DS18B20温度传感器符合我们设计对温度范围的要求及刷新频率的要求。通过单片机P1.3口将DS18B20温度传感器采集的温度传到单片机内部,通过单片机内部的软件程序完成温度的转换,再通过P1.0,P1.2,P1.3口和P0完成温度显示的输出。P1.0,P1.2,P1.3口组成的74LS138译码器提供符号位的输出;P0口为温度数值的输出同时为温度单位的输出。P0口通过74LS245SHUCH的显示。同样,此三个八段LED显示管也由74LS245芯片驱动。当温度超过-1038范围时,用74138片选A6、A7 实现警报功能。 显示程序 温度显示子程序开始开始取显示首地址取输出地址取低四位输出输出地址减一输出完?取高四位翻转、输出输出地址减一输出完?读转换温度负数?N 输出十位Y输出符号位“-” 输出各位 输出十位数输出单位 输出个位数 大于38摄氏度? 输出单位 修改地址警报低于负十摄氏度N 警报 Y返回Y Y结束N 结束 3 星期显示方案 星期要求通过指定的按键使星期显示一位,并且伴随着日历部分的日加一,星期也加一,显示到星期日时,天数加一时,星期自动显示一。显示部分用一个八段LED数码显示管显示,此部分同电子日历和温度表的显示。此方案设置比较简单,是建立在日历的天加一上。当按键5时,跳转到星期显示部分通过74138的P1.0、P1.1、P1.2片选到P0.5口显示,此段用一个八段LED显示管显示同电子日历和温度。 星期计算是否算到当前年闰年取月单元的值对应月的天数除七取余,余数赋给R3调用星期加一程序到当前月?调用星期加一程序取当前月的日期调用星期加一程序DJNZ R3DJNZ R3开 始 数据初始化 N N Y 月单元加一星期加一结束星期加一年单元加一除七取余,将余数赋给R3 开始 星期加一星期单元赋一结束 星期加一 星期大于七 N Y (三)调试软件设计时应用模块化程序,单个实现每个模块的功能,与单独的硬件组合调试,均正确后再组装成一个整个的系统程序与整套硬件图族和调试。1) 电子日历的调试过程把电子日历单独程序与硬件图结合,第一次调试时,显示的年与日相互颠倒,经设置断点检测,发现输出程序的输出顺序有问题,经过修改输出顺序实现了年月日的正确输出。日期产生方面,因为一天较长,不利于仿真和测试,采用定时2s,代表一天,日期加一。检验其是否自动判断闰年及各月进位加一是否正确。经检验,完全符合实际要求。下图为调试电路图:温度表的调试过程把温度表单独程序与硬件图结合,调节Proteus仿真模拟环境中DS18B20温度传感器感应的温度值,看经P1.3口输入单片机再经单片机转换后数码管是否显示与DS18B20温度传感器所示的温度相同的数值。数码显示管能够正常地显示DS18B20温度传感器所示的温度值,及正负号和温度单位。下图为调试电路图:2) 星期显示的调试过程把星期显示程序和硬件结合,调节protues软件,按键“5”按下后,看能否跳到星期显示,当日历中的日加一后看星期是否也能加一,并且在显示星期日后能否自动跳到星期一,经检验,完全符合要求。调试电路如下图:3) 整体显示电子日历程序、温度表程序和星期显示综合为一个程序。编辑主程序,把电子日历程序、温度表程序和星期显示作为子程序调用,完成整个程序的编译。然后与整体电路图组合后调节,显示输出符合要求。数码管显示年月日的时间通过K4键来切换到温度显示模式,通过K5键来切换到星期显示。4) 实物显示本设计总框图的硬件部分如下:日历显示:温度显示:星期显示:5) 结论经过两周课程设计,终于完成了关于单片机硬件与软件的结合,实现了电子日历、温度表及星期显示的功能。从内心深处讲还是非常的高兴。经过课设,我学到了许多课本上没有的东西,巩固了学习的知识,让我了解到实践对我了解和掌握知识的重要性,另外,这次课程设计让我对keil和protues软件的应用更熟练。虽然这次课程设计很成功,但是我的不足之处还是很多,在以后的学习生活之中,还需继续努力,让自己更贴近实际,更好的做到理论联系实际。把我们所学的理论知识用到实际当中,学习单机片机更是如此,程序只有在经常的写与读的过程中才能提高。总之,这次课程设计让我受益匪浅,对我以后的生活学习有很大的促进作用。五、附录1、硬件原理图2、程序清单 3、程序流程图一、设计时所用主要元器件FLAG1 BIT 00HSIGN BIT 01HDQ BIT P1.3 TPH DATA 3AH TPL DATA 3BH YEAR EQU 20H MON EQU 21H DAY EQU 22H MIAO EQU 23H FEN EQU 24H HOUR EQU 25H ORG 0000H LJMP START ORG 0003H LJMP ExtInt ORG 001BH LJMP P_T1 ORG 0030HSTART: MOV YEAR,#00H MOV MON,#00H MOV DAY,#00H MOV SP ,#60H MOV TMOD,#10H ;计时 MOV TH1 ,#3CHMOV TL1,#0B0HMOV 33H,#20SETB EASETB ET1SETB TR1 SETB PT1SETB IT0SETB EX0SETB EACLR PX0 MAIN:LCALL KEY LCALL DISLCALL JIERI SJMP MAIN ;开始计时 P_T1: PUSH ACC;中断程序 计时 PUSH PSW MOV TH1 ,#3CH MOV TL1,#0B0H DJNZ 33H,LOOP;判断是否过完一秒 MOV 33H,#20 INC MIAO MOV A,MIAO CJNE A,#3,LOOP MOV MIAO ,#0 INC FEN MOV A,FEN CJNE A,#1,LOOP MOV FEN ,#0 MOV MIAO ,#0 INC HOUR MOV A,HOUR CJNE A,#1,LOOP MOV HOUR,#0 MOV FEN ,#0 MOV MIAO ,#0 ;满一天 天+1 LCALL TIANZENG LCALL BEGIN ;读取当月天数 MOV A,30H CJNE A,DAY,LOOP ;判断当月是否过完 MOV DAY,#01H LCALL YUEZENG LCALL FENGMING CJNE A,#13H,LOOP MOV MON,#01H MOV 46H,#2FH LOOP4:LCALL FENGMING LCALL DIS DJNZ 46H,LOOP4 LCALL NIANZENG ;判断一年是否过完 SJMP LOOP CLR EA;关中断 PUSH ACC PUSH PSW SETB RS0;保护现场 SETB EA;恢复中断 LOOP: CLR EA ;关中断 POP PSW POP ACC ;恢复现场 SETB EA ;开中断 RETI ;*;每月天数判断;* BEGIN:MOV A,MON CJNE A,#01H,ERYUE SJMP SANSHIYI ERYUE:CJNE A,#02,SANYUE MOV A,YEAR MOV B,#04H DIV AB MOV A,B ;判断闰平年 JZ RUNNIAN PINGNIAN:MOV 30H,#29H ;平年每月天数 RET RUNNIAN:MOV 30H,#30H ;闰年每月天数 RET SANYUE: CJNE A,#03,SIYUE SJMP SANSHIYI SIYUE:CJNE A,#04,WUYUE SJMP SANSHI WUYUE:CJNE A,#05,LIUYUE SJMP SANSHIYI LIUYUE:CJNE A,#06,QIYUE SJMP SANSHI QIYUE:CJNE A,#07,BAYUE SJMP SANSHIYI BAYUE:CJNE A,#08,JIUYUE SJMP SANSHIYI JIUYUE:CJNE A,#09,SHIYUE SJMP SANSHI SHIYUE:CJNE A,#10,SHIYIYUE SJMP SANSHIYI SHIYIYUE:CJNE A,#11,SHIERYUE SJMP SANSHI SHIERYUE:SJMP SANSHIYI SANSHIYI:MOV 30H,#32H RET SANSHI:MOV 30H,#31H RET;日期处理部分 TIANZENG:MOV A,DAY :天+1 ADD A,#01 DA A MOV DAY,A RET YUEZENG:MOV A,MON ;月+1 ADD A,#01 DA A MOV MON,A RET NIANZENG:MOV A,YEAR;年+1 ADD A,#01 DA A MOV YEAR,A RET;按键处理部分 KEY:ACALL KEY_SCAN KEY1:CJNE R5,#01H,KEY2 ;判断按下的键 LCALL NIANZENG ;1键。修改年份 LJMP KEY LJMP KEY7 ;不是,跳出扫描 KEY2:CJNE R5,#02H,KEY3 ;判断按下的键 LCALL YUEZENG ;2键。修改月份 CJNE A,#13H,KEY MOV MON,#01H LJMP KEY LJMP KEY7 ;不是,跳出扫描 KEY3:CJNE R5,#03H,KEY4 ;判断按下的键 LCALL TIANZENG ;3键。修改 LJMP KEY LJMP KEY7 KEY4:CJNE R5,#04H,KEY5 LCALL WENDU ;温度 LJMP KEY6_PRSD KEY5:CJNE R5,#05H,KEY6 LCALL KEY5_PRSD ; 星期 LJMP KEY7 KEY6:CJNE R5,#06H,KEY7 ; LCALL P_T0 KEY7:LJMP KEY6_PRSD KEY_SCAN2:LJMP KEY KEY5_PRSD:LCALL WEEK MOV 46H,#1FH LOOP3:MOV 45H,#9FH NEXT:MOV R0,#42H ;存星期 MOV R2,#01H ACALL NEXT1 DJNZ 45H,NEXT DJNZ 46H,LOOP3 KEY6_PRSD:RET ;存星期 MOV R2,#01H ACALL NEXT1 DJNZ 45H,NEXT DJNZ 46H,LOOP3 WENDU:MOV R4,#01H WENDU1:LCALL D1820 LCALL TEMPDISP ;温度显示 INC R4 CJNE R4,#7FH,WENDU1 ;调回温度子程序 LJMP MAIN ;跳到电子日历子程序 D1820: CALL DS18B20_Reset ;设备复位 MOV A,#0CCH ;跳过ROM命令 CALL DS18B20_WriteByte ;送出命令 MOV A,#044H ;开始转换 CALL DS18B20_WriteByte ;送出命令 JNB DQ,$ ;等待转换完

温馨提示

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

评论

0/150

提交评论