单片机设计电子日历和温度表的设计说明.docx
- 文档编号:24554609
- 上传时间:2023-05-28
- 格式:DOCX
- 页数:48
- 大小:2.29MB
单片机设计电子日历和温度表的设计说明.docx
《单片机设计电子日历和温度表的设计说明.docx》由会员分享,可在线阅读,更多相关《单片机设计电子日历和温度表的设计说明.docx(48页珍藏版)》请在冰豆网上搜索。
单片机设计电子日历和温度表的设计说明
长安大学
《单片机原理及接口技术》
课程设计
电子日历和温度表的设计
专业:
电气工程及其自动化
学号:
3204100121
姓名:
杏
指导老师:
段晨东、文革
时间:
2012.12.25-2013.1.6
一、任务书
题目2电子日历和温度表的设计
(一)设计要求(不能采用专用芯片):
(1)时间显示:
年、月、日(各2位)
(2)日历参数的手动设置,设置参数,每次按下按键时,应伴随有蜂鸣器提示声。
(3)实现实时温度显示功能(每秒刷新一次),温度测量围-40~+60
。
(4)每当月份和年份变化时,声光报警提,如长短声,音乐等。
(5)当温度超过38度,或低于零下-10
时,声光报警提示。
(6)设计一种用外部中断方式触发的显示或声音提示模式,当触发时,停止显示时间,显示或输出特定的模式(过程不小于1分钟),推出中断处理后,能够显示正确时间。
(二)扩充功能:
(1)防止极性接反,电压不足时,报警提示。
(2)显示星期的功能。
(3)重要节日提示功能,声光提示(声音,LED闪烁等)。
二、摘要
本设计主要分为电子日历、温度显示功能和星期显示功能三个部分,实现年月日的显示和温度的采集显示及温度报警、星期显示功能。
时间显示年月日各两位,能够手动设置日历参数,并能在月份和年份跳转以及重要日期时蜂鸣显示;温度表采集温度并每秒刷新显示。
设计时用STC89C52单片机T0以中断方式产生周期为50ms的脉冲信号,通过秒,分,时进位,实现一天,逐次累加,满该月天数进位,满12月进位一年。
用软件实现闰年的判断,并判断重要节日实现蜂鸣警报。
年月日的显示用74LS245驱动并用集成的8位数码显示管显示,温度的采集选用DS18B20温度传感器,驱动和显示和电子日历部分相同,星期的显示同电子日历。
由单片机把各个部分联系到一起,综合完成设计要求的实现。
关键字:
单片机STC89C52电子日历星期显示温度显示
三、目录
1.任务书……………………………………………………2
2.正文…………………………………………………………………………5
(1)前言…………………………………………………………………5
(2)方案分析…………………………………………………………6
原理说明…………………………………………………………6
设计时所用主要元器件……………………………………………………6
主要硬件元件分析…………………………………………………………7
方案说明…………………………………………………………7
电子日历方案………………………………………………………………6
温度表方案…………………………………………………………………12
星期显示方案………………………………………………………………14
(3)调试…………………………………………………………………15
(1)功能实现过程………………………………………………………15
(2)调试出现的问题及解决方法………………………………………17
整体显示……………………………………………………………………17
实物显示……………………………………………………………………17
结论…………………………………………………………………………………18
附录………………………………………………………………………………19
硬件原理图…………………………………………………………………19
程序清单……………………………………………………………………20
四、正文
(一)前言
电子日历和温度表的设计,主要采用51单片机74LS245,74LS138,等来实现的。
根据任务书要求,本设计大致分为三大部分,即电子日历部分、温度表部分和星期显示部分,利用设计的单片机程序和单片机外部接口等功能实现。
电子日历要求时间显示年月日各两位,且日历参数可以手动设置。
可以设置开关通过单片机接口对日期进行调解。
利用单片机部晶振计时,用软件实现满一天进位。
显示日历,用六个八段LED数码显示管显示日期六位数字,在年加一和月加一以及日期到达重要节日时通过软件设计实现警报功能。
温度表主要在于选择传感器和显示输出温度。
传感器要求测量围不小于-40~+60
且温度测量刷新时间不大于一秒钟。
单片机读取传感器温度信息,经转换和显示程序通过I/O口输出。
同样,显示输出也用四个八段LED数码显示管显示温度,当温度超过-10~+38
的围时通过软件设计实现报警功能。
星期要求通过指定的按键使星期显示一位,并且伴随着日历部分的日加一,星期也加一,显示到星期日时,天数加一时,星期自动显示一。
显示部分用一个八段LED数码显示管显示,此部分同电子日历和温度表的显示。
(二)方案分析
(1)原理说明
一、设计时所用主要元器件
1)8052芯片一个
2)74LS245芯片两个
3)DS18B20温度传感器一个
4)六位八段数码显示管一个
5)按键9个
6)74LS138一个
7)V系列仿真器集成调试软件
8)Proteus仿真模拟环境
1、主要硬件元件分析
1)STC89C52单片机
STC89C52提供以下标准功能:
8K字节重擦写Flash闪速存储器、256×8字节部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
Y
之前的方案:
年月日计时部分:
P_T1:
PUSHACC
PUSHPSW
DJNZR0,GET
MOVR0,#20
INCMIAO
CJNEA,#3,GET
MOVMIAO,#0
INCFEN
MOVA,FEN
CJNEA,#1,GET
MOVFEN,#0
MOVMIAO,#0
INCHOUR
MOVA,HOUR
CJNEA,#1,GET
MOVHOUR,#0
MOVFEN,#0
MOVMIAO,#0
MOVA,YEAR
MOVB,A
JZRUNNIAN
MOVDPTR,#TAB1
SJMPPINGNIAN
RUNNIAN:
MOVDPTR,#TAB2
PINGNIAN:
MOVA,MONTH
MOVCA,A+DPTR
MOVB,A
MOVA,DATE
CJNEA,B,GET1
MOVDATE,#1
;满月月+1
GET1:
CJNEA,#32,GET2
MOVDATE,#1
LJMPM1
GET2:
INCDATE
LJMPGET
M1:
INCMONTH
MOVP1,#11111110B
;月+1蜂鸣器响
LCALLDELAY
MOVP1,#11111111B
;灯亮
MOVA,MONTH
CJNEA,#13,GET
;年+1
MOVMONTH,#1
INCYEAR
MOVP1,#11111110B
;年+1蜂鸣器响
LCALLDELAY
MOVP1,#11111111B
;灯亮
GET:
POPPSW
POPACC
RETI
DELAY:
MOVR6,#10
;延时
y1:
MOVR7,#250
y2:
DJNZR7,Y2
DJNZR6,Y1
RET
该程序在显示是和显示程序无法匹配,因此改成:
现有程序。
2温度表方案:
温度表主要在于选择传感器和显示输出温度。
传感器要求测量围不小于-40~+60
且温度测量刷新时间不大于一秒钟。
单片机读取传感器温度信息,经转换和显示程序通过I/O口输出。
同样,显示输出也用四个八段LED数码显示管显示温度,当温度超过-10~+38
的围时通过软件设计实现报警功能。
温度表主要分为:
温度的采集、温度的处理显示及超过-10~38
时实现报警功能。
我们用DS18B20温度传感器完成对温度的采集。
DS18B20温度传感器符合我们设计对温度围的要求及刷新频率的要求。
通过单片机P1.3口将DS18B20温度传感器采集的温度传到单片机部,通过单片机部的软件程序完成温度的转换,再通过P1.0,P1.2,P1.3口和P0完成温度显示的输出。
P1.0,P1.2,P1.3口组成的74LS138译码器提供符号位的输出;P0口为温度数值的输出同时为温度单位的输出。
P0口通过74LS245SHUCH的显示。
同样,此三个八段LED显示管也由74LS245芯片驱动。
当温度超过-10~38
围时,用74138片选A6、A7实现警报功能。
显示程序温度显示子程序
N
Y
N
Y
YY
N
3星期显示方案
星期要求通过指定的按键使星期显示一位,并且伴随着日历部分的日加一,星期也加一,显示到星期日时,天数加一时,星期自动显示一。
显示部分用一个八段LED数码显示管显示,此部分同电子日历和温度表的显示。
此方案设置比较简单,是建立在日历的天加一上。
当按键5时,跳转到星期显示部分通过74138的P1.0、P1.1、P1.2片选到P0.5口显示,此段用一个八段LED显示管显示同电子日历和温度。
星期计算
N
N
Y
星期加一
N
Y
(三)调试
软件设计时应用模块化程序,单个实现每个模块的功能,与单独的硬件组合调试,均正确后再组装成一个整个的系统程序与整套硬件图族和调试。
1)电子日历的调试过程
把电子日历单独程序与硬件图结合,第一次调试时,显示的年与日相互颠倒,经设置断点检测,发现输出程序的输出顺序有问题,经过修改输出顺序实现了年月日的正确输出。
日期产生方面,因为一天较长,不利于仿真和测试,采用定时2s,代表一天,日期加一。
检验其是否自动判断闰年及各月进位加一是否正确。
经检验,完全符合实际要求。
下图为调试电路图:
温度表的调试过程
把温度表单独程序与硬件图结合,调节Proteus仿真模拟环境中DS18B20温度传感器感应的温度值,看经P1.3口输入单片机再经单片机转换后数码管是否显示与DS18B20温度传感器所示的温度相同的数值。
数码显示管能够正常地显示DS18B20温度传感器所示的温度值,及正负号和温度单位。
下图为调试电路图:
2)星期显示的调试过程
把星期显示程序和硬件结合,调节protues软件,按键“5”按下后,看能否跳到星期显示,当日历中的日加一后看星期是否也能加一,并且在显示星期日后能否自动跳到星期一,经检验,完全符合要求。
调试电路如下图:
3)整体显示
电子日历程序、温度表程序和星期显示综合为一个程序。
编辑主程序,把电子日历程序、温度表程序和星期显示作为子程序调用,完成整个程序的编译。
然后与整体电路图组合后调节,显示输出符合要求。
数码管显示年月日的时间通过K4键来切换到温度显示模式,通过K5键来切换到星期显示。
4)实物显示
本设计总框图的硬件部分如下:
日历显示:
温度显示:
星期显示:
5)结论
经过两周课程设计,终于完成了关于单片机硬件与软件的结合,实现了电子日历、温度表及星期显示的功能。
从心深处讲还是非常的高兴。
经过课设,我学到了许多课本上没有的东西,巩固了学习的知识,让我了解到实践对我了解和掌握知识的重要性,另外,这次课程设计让我对keil和protues软件的应用更熟练。
虽然这次课程设计很成功,但是我的不足之处还是很多,在以后的学习生活之中,还需继续努力,让自己更贴近实际,更好的做到理论联系实际。
把我们所学的理论知识用到实际当中,学习单机片机更是如此,程序只有在经常的写与读的过程中才能提高。
总之,这次课程设计让我受益匪浅,对我以后的生活学习有很大的促进作用。
五、附录
1、硬件原理图
2、程序清单
3、程序流程图
一、设计时所用主要元器件
FLAG1BIT00H
SIGNBIT01H
DQBITP1.3
TPHDATA3AH
TPLDATA3BH
YEAREQU20H
MONEQU21H
DAYEQU22H
MIAOEQU23H
FENEQU24H
HOUREQU25H
ORG0000H
LJMPSTART
ORG0003H
LJMPExtInt
ORG001BH
LJMPP_T1
ORG0030H
START:
MOVYEAR,#00H
MOVMON,#00H
MOVDAY,#00H
MOVSP,#60H
MOVTMOD,#10H;计时
MOVTH1,#3CH
MOVTL1,#0B0H
MOV33H,#20
SETBEA
SETBET1
SETBTR1
SETBPT1
SETBIT0
SETBEX0
SETBEA
CLRPX0
MAIN:
LCALLKEY
LCALLDIS
LCALLJIERI
SJMPMAIN
;开始计时
P_T1:
PUSHACC;中断程序计时
PUSHPSW
MOVTH1,#3CH
MOVTL1,#0B0H
DJNZ33H,LOOP;判断是否过完一秒
MOV33H,#20
INCMIAO
MOVA,MIAO
CJNEA,#3,LOOP
MOVMIAO,#0
INCFEN
MOVA,FEN
CJNEA,#1,LOOP
MOVFEN,#0
MOVMIAO,#0
INCHOUR
MOVA,HOUR
CJNEA,#1,LOOP
MOVHOUR,#0
MOVFEN,#0
MOVMIAO,#0;满一天天+1
LCALLTIANZENG
LCALLBEGIN;读取当月天数
MOVA,30H
CJNEA,DAY,LOOP;判断当月是否过完
MOVDAY,#01H
LCALLYUEZENG
LCALLFENGMING
CJNEA,#13H,LOOP
MOVMON,#01H
MOV46H,#2FH
LOOP4:
LCALLFENGMING
LCALLDIS
DJNZ46H,LOOP4
LCALLNIANZENG;判断一年是否过完
SJMPLOOP
CLREA;关中断
PUSHACC
PUSHPSW
SETBRS0;保护现场
SETBEA;恢复中断
LOOP:
CLREA;关中断
POPPSW
POPACC;恢复现场
SETBEA;开中断
RETI
;**********************************************************
;每月天数判断
;**********************************************************
BEGIN:
MOVA,MON
CJNEA,#01H,ERYUE
SJMPSANSHIYI
ERYUE:
CJNEA,#02,SANYUE
MOVA,YEAR
MOVB,#04H
DIVAB
MOVA,B;判断闰平年
JZRUNNIAN
PINGNIAN:
MOV30H,#29H;平年每月天数
RET
RUNNIAN:
MOV30H,#30H;闰年每月天数
RET
SANYUE:
CJNEA,#03,SIYUE
SJMPSANSHIYI
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 设计 电子 日历 温度表 说明