重大综合设计课程设计报告.docx
《重大综合设计课程设计报告.docx》由会员分享,可在线阅读,更多相关《重大综合设计课程设计报告.docx(72页珍藏版)》请在冰豆网上搜索。
重大综合设计课程设计报告
1、目的………............................................................................................2
2、课题内容…………….…..…………………………………………….2
3、课题分析………………………………………………………………2
4、硬件电路设计原理……………………………………………………3
5、总体系统框图…………………………………………………………4
6、方案设计讨论及元件选取依据………………………………………5
7、软件设计依据与分析………………………….....................................9
8、附录…………………………………………………………………..12
9、附录一设计总结与体会…………………………………………....12
10、附录二元器件清单………………………………………………..13
11、附录三系统调试记录........................................................................14
12、附录四参考文献................................................................................21
13、附录五整机电路图............................................................................23
14、附录六源程序清单............................................................................24
多功能数字电子表设计报告
一、目的
1、使学生将所学的“数字电子技术”和“单片机原理”等相关知识应用于实践。
培养学生理论联系实际的工作作风,提高学生的动手能力。
2、学会用“计算机辅助分析设计软件”对该题目进行分析、设计与仿真,并打印出仿真结果,提高学生对计算机的应用水平。
3.、掌握电路的焊接、安装、调试技术,培养学生的工程意识,提高学生分析并解决实际问题的能力,激发学生对产品开发的兴趣,培养学生的科技创新精神。
二、课题内容
设计并制作符合以下要求的“多功能数字电子表”,并撰写分析设计报告。
1、基本要求:
(1)、计时功能:
显示时、分、秒;
(2)、定闹功能;
(3)、秒表功能;
(4)、倒计时功能。
2、提高要求:
(1)、增加“语音报时”功能;
(2)、增加“电子日历”功能。
3、主要技术指标
1、计时精度:
±2秒/月;
2、功能设置按键不得多于3个。
三、课题分析
在进行课题设计前,我们应该确定一些基本的设计原则,然后再根据这些原则去寻找思路。
在设计系统时,我们主要考虑以下一些原则:
节约元器件,尽量降低系统实现的成本;硬件电路尽量简单,使得硬件实现、问题检查、软件编程以及系统调试的难度都降低;能在软件上实现的,不采取软件实现,使芯片利用率尽可能高;软件设计方案要优化,使得编程尽可能简单,方便仿真与测试;设计方案要和当前的试验平台相应;充分利用各种资料,尽量采用成熟与经典的电路。
要实现一个系统,先要明确该系统的功能和要求。
设计的系统必须要能实现基本的功能,再考虑实现其他的功能。
为了取得比较好的实践成绩,我们必须实现课程设计的提高要求。
我们可以从老师给出来的两个提高方案种选一个或两个都选,也可以自己拟定一个方案。
首先考虑“语音报时”。
由于语音报时要用到语音芯片,使用语音芯片后,系统的电路复杂性增加,不仅在电路设计和硬件电路实现方面难度加大,而且系统调试的难度也加大。
因而,经过综合考虑,我们决定选择仅通过蜂鸣器来实现报时功能。
再考虑“电子日历”。
由于电子表显示时分秒需要六位数码管,日历显示的年月日也可以采用六位显示,而且日历设计在数学原理上和钟表设计一样。
因而,可以在不增加硬件的条件下实现“电子日历”,而系统的功能按键少,必然增加了软件实现的难度;从另外一方面看,这相当于提高了硬件的利用率。
为了锻炼自己,我们决定选择实现“电子日历”功能。
其次,从日常生活中所使用的电子表来看,我们还可以尝试实现“星期”功能,考虑到自身知识积累与时间限制,不选择实现该功能。
综上所述,我们要设计的电子表,其所能实现的功能为:
计时、闹钟、秒表、倒计时、报时与日历。
四、硬件电路设计原理
多功能电子表的实现方式有多种,从软件和硬件的角度来看,可以分成硬件实现方式与软硬件结合的实现方式。
本次课程设计是基于单片机的设计,因而是软硬件结合的实现方式。
软硬件结合的实现方式比硬件实现方式更具有优点。
从电子表的用户角度来看,一个电子表可划分为三个部分:
用户面对的显示界面;用户切换电子表各种功能的按键;用户无需关心的电子表内部控制部分。
从这三方面我们可以综合出本次实践所需要设计的系统的框图,如图1所示。
电子表的关键秒信号的产生与秒计数,利用单片机内部的定时器和计数器,无需外加日历芯片,即可以实现所要求的各种功能。
经过综合考虑,我们选择AT89C52单片机来设计系统。
AT89C51是一种带4K字节FLASH存储器(FPEROM—FlashProgrammableandErasableReadOnlyMemory)的低电压、高性能CMOS8位微处理器,俗称单片机。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器。
AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
其主要特点有:
·与MCS-51兼容
·4K字节可编程FLASH存储器
·寿命:
1000写/擦循环
·数据保留时间:
10年
·全静态工作:
0Hz-24MHz
·三级程序存储器锁定
·128×8位内部RAM
·32可编程I/O线
·两个16位定时器/计数器
·5个中断源
·可编程串行通道
·低功耗的闲置和掉电模式
·片内振荡器和时钟电路
根据AT89C51的引脚功能,我们选择P1口(P1.0,P1.1与P1.2)为功能切换输入口,P0口为显示电路的段选输出口,P2口提供地址使语音芯片完成寻址,对P3口,P3.2,P3.3,P3,4接时钟芯片,P3.5接蜂鸣器,P3.6接语音芯片的REC管脚,PXTAL接一个12MHz的外围晶振。
LCD1602采用标准的14脚接口,其中VCC接5V正电源,GND接地,VSS接可变电阻,RS,RW,EN为控制引脚,D0~D7为双向数据线。
五、总体系统框图
该系统使用AT89C51单片机作为核心,通过读取时钟日历芯片DS1302的数据,完成此电子时钟的主要功能——时钟/日历数据的采集。
使用比较通用1602LCD液晶显示屏,分别显示年月日、时分秒、星期等数据。
键盘是为了完成时钟/日历的校对和的显示功能。
由于此电子时钟要求具有闹铃功能,所以设计有闹铃电路,用蜂鸣器进行声音响铃。
语音芯片ISD1420外接麦克风与扬声器,构成录放音电路,再与单片机相连,受单片机调度控制,用于语音整点报时。
六、方案设计讨论及元件选取依据
1、方案选择
①单片机芯片的方案选择和论证
方案一:
用飞思卡尔16位单片机设计。
飞思卡尔16位单片机有丰富的中断源和时基,它的准确度高,并且C语言和汇编兼容的编程环境也很方便来实现一些递归调用。
I/O口功能也比较强大,但端口较多,本设计用的很少,造成资源浪费,成本增加。
方案二:
对于AT89C51,是一种带4K字节闪存可编程可擦除只读存储器(FPEROM—FlashProgrammableandErasableReadOnlyMemory)的低电压,高性能CMOS8位微处理器,128×8位内部RAM,32可编程I/O线,两个16位定时器/计数器,5个中断源等主要特性。
完全可以满足本设计的要求,而且成本较低。
综合以上各点考虑,AT89C51单片机所提供的硬件资源已足够胜任本次电子
时钟的设计,故决定采用AT89C51单片机为本次设计的MCU。
②时钟脉冲的的方案选择和论证
方案一:
不使用时钟芯片,而直接用AT89C51单片机中断来实现电子万年历设计。
利用一个16位定时器/计数器每50ms产生一个中断信号,中断20次后产生一个秒信号,然后根据时间进制关系依次向分、时、日、星期、月、年进位。
这样就实现了直接用单片机来实现电子万年历设计。
但是精度不够高,误差较大,掉电后丢失所有数据,软件编程较复杂。
方案二:
采用DS1302时钟芯片实现时钟,DS1302芯片是一种高性能的时钟芯片,可自动对秒、分、时、日、周、月、年以及闰年补偿的年进行计数,而且精度高,位的RAM做为数据暂存区,工作电压2.5V~5.5V范围内,2.5V时耗电小于300nA。
由于在系统设计时,需要考虑以下几点因素:
功耗低、精确度高、软件编程较简单,芯片的体积小、芯片成本低等,而DS1302芯片有上面所述的诸多优点,所以本设计采用方案二。
AT89C51管脚图
DS1302时钟芯片
表1DS1302控制字(即地址及命令字节)
BIT7
BIT6
BIT5
BIT4
BIT3
BIT2
BIT1
BIT0
1
RAM
A4
A3
A2
A1
A0
RD
表2DS1302有关日历、时间的寄存器
读寄
存器
写寄
存器
BIT7
BIT6
BIT5
BIT4
BIT3
BIT2
BIT1
BIT0
范围
81H
80H
CH
10秒
秒
00-59
83H
82H
10分
分
00-59
85H
84H
0
10
时
时
1-12
0-23
AM/PM
87H
86H
0
0
10日
日
1-31
89H
88H
0
0
10月
月
1-12
8BH
8AH
0
0
0
0
0
周日
1-7
8DH
8CH
10年
年
00-99
8FH
8EH
WP
0
0
0
0
0
0
0
—
③语音模块的方案选择和论证
在众多的语音芯片中,我们选取了ISD1420这款语音芯片,因为这款芯片价
格相对较低,电路连接简单,控制程序亦简单,能够录制160段共20秒的分段语音,播放时可以随便组合使用,在功能上已经足够满足整点报时与闹钟的需求。
ISD1420为美国ISD公司出品的优质单片语音录放电路,由振荡器、语音存储单元、前置放大器、自动增益控制电路、抗干扰滤波器、输出放大器组成。
一个最小的录放系统仅由一个麦克风、一个喇叭、两个按钮、一个电源、少数电阻电容组成。
录音内容存入永久存储单元,提供零功率信息存储,这个独一无二的方法是借助于美国ISD公司的专利--直接模拟存储技术(DASTTM)实现的。
利用它,语音和音频信号被直接存储,以其原本的模拟形式进入EEPROM存储器.直接模拟存储允许使用一种单片固体电路方法完成其原本语音的再现.仅语音质量优胜,而且断电语音保护.
④显示模块的方案选择和论证
方案一:
采用点阵式数码管显示,点阵式数码管是由八行八列的发光二极管组成,对于显示文字比较适合,如采用在显示数字显得太浪费,且价格也相对较高,所以也不用此种作为显示。
方案二:
采用LED数码管显示,需要用驱动电路来驱动数码管的各个段码,从而显示出我们要的数字。
根据数码管的驱动方式的不同,可以分为静态式和动态式两类。
当采用静态显示时,显示的数字会比较稳定,但是会浪费大量的I/O口。
动态驱动是将所有数码管的8个显示笔划“a,b,c,d,e,f,g,dp”的同名端连在一起,另外为每个数码管的公共极增加位选通控制电路,位选通由各自独立的I/O线控制。
当单片机输出字形码时,所有数码管都接收到相同的字形码,此时哪个数码管会显示出字形,取决于单片机对片选信号的控制。
这种控制方式可以连接多个数码管,但是考虑到程序运行的时间和延时问题,会造成数码管闪烁,延时时间不好控制。
方案三:
采用LCD1602液晶显示,1602LCD的特性有:
+5V电压,对比度可调,内含复位电路,提供各种控制命令,如:
清屏、字符闪烁、光标闪烁、显示移位等多种功能,有80字节显示数据存储器DDRAM,内建有192个5X7点阵的字型的字符发生器CGROM,8个可由用户自定义的5X7的字符发生器CGRAM,微功耗、体积小、显示内容丰富、超薄轻巧,常用在袖珍式仪表和低功耗应用系统中。
由于方案三的LCD1602具有前两者所不具有的明显优势,且成本不是高出很多,特选择第三种显示方案。
1602LCD的指令说明
序号
指令
RS
R/W
D7
D6
D5
D4
D3
D2
D1
D0
1
清显示
0
0
0
0
0
0
0
0
0
1
2
光标返回
0
0
0
0
0
0
0
0
1
*
3
置输入模式
0
0
0
0
0
0
0
1
I/D
S
4
显示开/关控制
0
0
0
0
0
0
1
D
C
B
5
光标或字符移位
0
0
0
0
0
1
S/C
R/L
*
*
6
置功能
0
0
0
0
1
DL
N
F
*
*
7
置字符发生存贮器地址
0
0
0
1
字符发生存贮器地址
8
置数据存贮器地址
0
0
1
显示数据存贮器地址
9
读忙标志或地址
0
1
BF
计数器地址
10
写数到CGRAM或DDRAM)
1
0
要写的数据内容
11
从CGRAM或DDRAM读数
1
1
读出的数据内容
最终选择方案
经过方案比较和论证,选择AT89C51作为主控芯片,时钟芯片选择DS1302,显示模块用LCD1602,语音芯片用ISD1420,另外用四个独立式按键,三个用于电子时钟的设置,一个用于系统复位,除此之外,选用蜂鸣器来作为闹钟闹铃,麦克风与扬声器和ISD1420配套作为语音模块。
为了保证蜂鸣器和扬声器能够正常驱动发出较大声音,分别使用PNP三极管来做驱动电路。
同时,为了使得到单片机和DS1302的工作时钟,还需要电容和晶振来构成时钟产生电路。
七、软件设计依据与分析
(1)主程序
主程序主要完成LCD初始化,DS1302初始化和T0\T1的初始化(完成默认情况下为正常显示);之后进入无限循环来完成键盘扫描,其中KEY1键完成程序的切换;KEY2和KEY3在调时、闹钟设定以及倒计时程序完成加减功能,在秒表和倒计时开始程序完成开始、暂停或清零功能。
(2)正常显示程序
正常显示程序包括年月日时分秒以及星期的显示,若从调时程序进入正常显示程序的话,就相当于日期和星期校正程序。
程序会自动校正日期满足闰年和相应月的日期数并同时会自动更改星期数。
正常显示程序是使用的独立的画面,为了不与倒计时和秒表的画面冲突,只能设置FLAG标志位来屏蔽在T0定时器中的显示代码。
同时还要屏蔽T1定时器的工作。
由于我们的硬件设计采用了DS1302,所以在离开正常显示程序要打开写保护,并把当前的秒数写入DS1302,在关闭写保护。
(4)闹钟时间设定功能程序
闹钟程序分为闹钟设定和闹钟执行,在闹钟设定时(屏幕显示“ALARM”),光标处于闪烁状态,KEY23完成加减操作(屏幕第二行显示“00:
00”),但此时的加减变量不是最终的保存闹钟时分的变量,只是中间变量。
此时要屏蔽正常显示的显示代码完成清屏,并且保证时间后台计时。
再按下KEY1,完成中间变量向保存时钟的变量赋值,这就是设定确定操作(屏幕显示“OK”)。
但时间进入闹钟时间,T0定时器的相关判断为真,进入蜂鸣器鸣叫程序(注意也要有显示代码),理论鸣叫时间为一分钟,按下KEY2键,将通过对ALARM_EN的置位来屏蔽蜂鸣器鸣叫程序(注意此处要也成触发的按键判断经典代码)
(6)调时功能程序
调试程序从秒、分、时、星期、日、月、年来依次调节,KEY23完成加减操作,光标处于闪烁状态,此处软件设计思路是,通过KEY1触发来增加KEY1N
并通过SWITCH语句来完成跳转,完成相应的位置光标来闪烁才BREAK出去;之后判断一次KEY23触发(去抖动代码不能少,并且要调试稳定)通过KEY1N来进入相关位置的相关操作,注意此时FLAG要维持高位,并屏蔽T0和T1。
(8)秒表功能程序
秒表功能程序要先完成清屏,第一行显示“STOPWATCHREADY”,第二行显示“00:
00:
00:
00”,通过KEY2完成开始,“READY”处该显示“START”;通过KEY3完成暂停“START”变“PAUSE”,并将暂停的时间存入某变量,最多可存三次。
再按KEY1清零,再按则显示三个保存的秒数。
(9)倒计时功能程序
倒计时程序分为设定、开始、暂停、清零四段代码,先完成设定,通过KEY1移位,KEY23完成设定时间的加减,再按KEY1完成开始倒计时,KEY23完成暂停和清零,当秒数倒计时到0时,出现“TIMEISNOW!
”的从左往右的移动显示动画,再移到屏的最右边是,出现“00”完成跳出倒计时程序操作。
(10)语音报时程序
语言报时程序完成在任意时间的报时,只要按下KEY2便会通过扬声器发出语音报时“现在是北京时间。
。
。
点。
。
。
分”,并且第一行显示“THETIMEISNOW”
(3)定时器T0中断服务程序
在T0定时器中断中,要完成每秒对正常显示模式的时间的修改,整点报时、闹钟程序的扫描。
整点报时程序每秒被扫描一次,若满足整点条件,便会进入报时阶段扬声器语音报时“现在是北京时间。
。
。
。
点整”。
语音报时的原理是ISD1420里已经录好19秒的语音元素,这些存储单元存有不同长度的语音,大致分为3秒的“现在是北京时间”,7秒的“点、分0、1、2、两、3、4、5、6、7、8、9、10”,1秒的“点整”,1秒的“凌晨”,1秒的“早上”,1秒的“上午”,在通过不同的组合来完成播放。
(5)定时器T1中断服务程序
定时器T1中断服务程序完成秒表和倒计时,通过FLAG1来完成if语句的选择。
秒表的最小单位是十毫秒,由于TH1,TL1的设定使COUNT05为2毫秒,每五次HAOMIAO加一,接着每一百次秒加一,后面的代码依次。
注意T1和T0不能同时打开,要避免优先级的选定。
(6)生日显示程序
设定生日的月和日,当按下KEY1时,若是生日那天,则屏幕显示中文字幕“生日快乐”(第一行),若不为生日那天,则在第二行显示“HAPPYALLDAYS”。
显示汉字时,首先要查资料找到相应汉字的字模,其次修改LCD命令,在依次输入相对应的字模显示。
显示汉字主要就是字模很复杂,若自定义的字符还要通过软件自己制作。
附录
附录一设计总结与体会
多功能数字时钟设计的课题难点不在于硬件电路的实现,相反,功能的软件实现才是重点;如何实现计时功能、整点语音报时、闹钟的调整清除、万年历、倒计时、秒表等等许多繁杂的功能堆积。
第一周:
策略:
在整个团队的进度上,前期采取了双管齐下的策略;对软件的功能流程图,算法流程图,参考程序等的收集和筛选与硬件平台上电路的绘制以及硬件参考电路以及典型电路的收集同时进行。
不足:
但由于对设计流程的了解不够,没有对硬件方面更加重视,反而在软件上纠缠过多,导致最后的也硬件图稿问题多多,语音芯片的选取没有考虑,相关的电路不符合电路原理,连线不规范(连线没有直连),连线的考虑与实际的连线不一致,器件管脚随意连接…..诸如此类的问题都在于对于电路的设计方面不够严谨,方案的讨论不够,科研态度也有待改正。
在方案讨论的不充分直接导致设计图稿的参考价值大打折扣,也延缓了日后电路布线和焊接的进度。
经验:
在以后的设计中,我相信我们的团队在设计的前期首先会在组内讨论后做足充分的准备,在通过功能的选择、实现功能的器件的选择、实现功能算法的选择、编程语言的选择、为主线做到分而治之——软硬件之分,功能算法之分,硬件绘制与器件参数之分,做到组内成员各司其职。
实现什么功能,怎样实现功能,拿什么实现功能
第二周:
策略:
第一周的完成情况有限,硬件设计基本完成,但是,软件设计还是止步不前,原因是硬件的完成需要整个团队的合力参谋,而且软件的设计也是基于硬件平台的,现在没有完成的部分有硬件电路的检测(预计下周完成),简单程序的下载调试,硬件图纸的修改,软件任务的分配,子程序的编写几大部分。
时间相对紧迫,同志还需努力!
在编写子程序实现计时功能、秒表功能和倒计时功能时,前者要使用T0,后两个使用T1,通过标志位FLAG1来完成秒表和倒计时的功能切换。
主函数采用无限循环查询按键的方式,其中KEY1完成子程序的切换,KEY2,KEY3在调整时间和闹钟设置时完成加减操作,在秒表和倒计时完成开始和暂停操作。
编程策略:
增加一个功能,就调试一个
不足:
在对简单程序的调试时,由于忽略了LCD1602的RW管脚的设置,盲目参照他人的程序(参考程序的对应电路并没有连接RW到单片机),致使调试一度陷入僵局,并错误的认为是硬件连线上的问题,耽误了不少时间。
并且硬件布局不合理,差点导致仿真器与LCD之间相互挨着而无法插进插座,以及语音芯片的录音,放音的相关管脚并不需要与单片机的管脚连接,只需要设计拨位开关即可,由于此处设计的不合理,使得单片机的管脚减少,并且还加大了编程的工作量,以及连线上的浪费。
同时单片机的连线不仅可以从外面连接,也可从单片机的两头(没有管脚的一面)引出一簇连线,不仅美观也可以完成很多其他功能。
同时也应该采用74LS138来完成三八译码可以增加流水灯等功能。
经验:
尽管我们组在硬件上已经很小心,但是还是出现一些纰漏,下一次设计时,经验告诉我们要先布局合理后,在考虑连线的美观和简洁。
同时,连线尽量紧凑,不能分的太开。
软件方面,调试是重中之重。
先实现相对容易实现的功能,也有利于工作的开展。
第三,四周:
策略:
第三周的基本功能也实现,考虑在一周内完成语音芯片的功能实现,并且完善基本功能模块。
还准备添加开机动画。
组内两人继续完成以上工作,另外两人则完成设计报告。
同时还考虑在硬件上添加指示灯以及时钟芯片掉电不丢失需要的纽扣电池插座。
不足:
在基本功能上,有以下问题需要解决(方敏老师提出):
1.日期与星期的对应问题2.复位指示灯的添加3.开机画面的添加4.倒计时能不能确定时间确定。
我们自己提出的改进问题有:
1.12—24时间切换2.闹钟功能的开关3.时钟芯片的掉电不丢失功能。
由于程序相对较大,AT89C51的4KROM已无法满足,预计要换成C52或其他。
经验:
对于基本功能的完成还是比较顺利的,但是要改进就需要通过各种渠道去了解,使功能更加完善。
由于在布局上并没有做到极致,使我们组相对于其他个别组在硬件上的指示灯等硬件功能来说,显得薄弱。
我们在开机动画方面和时钟芯片方面做了相关工作,更加有自己特色。
通过这次为期四个星期的单片机课程设计,我们组四人基本掌握了Proteus和Keil的基本功能和使用方法,对80C51单片机系统有了一定的了解,使我们得到了一次用专业知