智能仪器仪表综合设计与实训报告书.docx
《智能仪器仪表综合设计与实训报告书.docx》由会员分享,可在线阅读,更多相关《智能仪器仪表综合设计与实训报告书.docx(36页珍藏版)》请在冰豆网上搜索。
![智能仪器仪表综合设计与实训报告书.docx](https://file1.bdocx.com/fileroot1/2023-8/19/acab8411-1cec-49f2-8bb7-9f906b624a0f/acab8411-1cec-49f2-8bb7-9f906b624a0f1.gif)
智能仪器仪表综合设计与实训报告书
成绩:
课程设计报告书
所属课程名称智能仪器仪表综合设计与实训
题目作息时间控制器的设计
分院机电学院
专业、班级测控技术与仪器B1003
学号0614100328
学生姓名张思琪
指导教师杨亮周春明赵娜
2013年12月06日
辽东学院
1课程设计任务书
课程设计题目:
作息时间控制器的设计
课程设计时间:
自2013年11月15日起至2013年12月6日
课程设计要求:
(1)通过按键设定上下课作息时间;
(2)根据已设定作息时间表进行到时提示;
(3)设定广播时间,并播放一小段音乐;
(4)利用数码管或液晶块显示上下课状态。
学生签名:
2013年12月06日
课程设计评阅意见
项目
课程设计态度评价
10%
出勤情况评价10%
任务难度
、量评价10%
创新性评价
10%
综合设计
能力评价20%
报告书写规范评价20%
答辩
20%
成绩
综合评定等级
评阅教师:
2013年月日
2总体设计方案
2.1总体设计方案框图
设计实现的功能主要有:
使用4位七段显示器来显示现在的时间,显示格式为“时分”,由LED小数点闪动作为秒计数表示。
可以设定作息时间,并进行到时提示。
能够根据预先设定好的作息时间表自动启停控制电路,完成对外部设备的实时控制。
由按键输入控制设置年月日以及当前时间、并可设置闹钟定时,时间到由蜂鸣器发出响声并作出相应动作:
二极管闪亮,同时播放音乐。
2.2芯片介绍
2.2.1AT89C51芯片
1.特性概述
AT89C51是一种带4K字节闪烁可编程可擦除只读存储器)的低电压,高性能CMOS8位微处理器,俗称单片机。
AT89C2051是一种带2K字节闪烁可编程可擦除只读存储器的单片机。
单片机的可擦除只读存储器可以反复擦除100次。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。
AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
2.管脚说明
VCC:
供电电压。
GND:
接地。
P0口:
P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。
当P0口的管脚第一次写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的低八位。
在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须接上拉电阻。
P1口:
P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。
P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
在FLASH编程和校验时,P1口作为低八位地址接收。
P2口:
P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。
并因此作为输入时,P2口的管脚被外部拉低,将输出电流。
这是由于内部上拉的缘故。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。
P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:
P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。
当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。
作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
3.管脚备选功能
P3.0RXD(串行输入口)
P3.1TXD(串行输出口)
P3.2/INT0(外部中断0)
P3.3/INT1(外部中断1)
P3.4T0(计时器0外部输入)
P3.5T1(计时器1外部输入)
P3.6/WR(外部数据存储器写选通)
P3.7/RD(外部数据存储器读选通)
P3口同时为闪烁编程和编程校验接收一些控制信号。
RST:
复位输入。
当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:
当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的低位字节。
在FLASH编程期间,此引脚用于输入编程脉冲。
在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。
因此它可用作对外部输出的脉冲或用于定时目的。
然而要注意的是:
每当用作外部数据存储器时,将跳过一个ALE脉冲。
如想禁止ALE的输出可在SFR8EH地址上置0。
此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。
另外,该引脚被略微拉高。
如果微处理器在外部执行状态ALE禁止,置位无效。
PSEN:
外部程序存储器的选通信号。
在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。
但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
EA/VPP:
当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。
注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。
在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
XTAL1:
反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:
来自反向振荡器的输出。
2.2.28051简介
单片微型计算机简称为单片机,又称为微型控制器,是微型计算机的一个重要分支。
单片机是70年代中期发展起来的一种大规模集成电路芯片,是CPU、RAM、ROM、I/O接口和中断系统于同一硅片的器件。
80年代以来,单片机发展迅速,各类新产品不断涌现,出现了许多高性能新型机种,现已逐渐成为工厂自动化和各控制领域的支柱产业之一。
1.管脚说明
VCC - 芯片电源,接+5V;
VSS - 接地端;
XTAL1、XTAL2 - 晶体振荡电路反相输入端和输出端。
2.控制线
控制线共有4根;
ALE/PROG:
地址锁存允许/片内EPROM编程脉冲;
①ALE功能:
用来锁存P0口送出的低8位地址 ;
②PROG功能:
片内有EPROM的芯片,在EPROM编程期间,此引脚输入编程脉冲。
PSEN:
外ROM读选通信号;
RST/VPD:
复位/备用电源。
① RST(Reset)功能:
复位信号输入端;
② VPD功能:
在Vcc掉电情况下,接备用电源。
EA/Vpp:
内外ROM选择/片内EPROM编程电源。
① EA功能:
内外ROM选择端;
② Vpp功能:
片内有EPROM的芯片,在EPROM编程期间,施加编程电源Vpp。
3.I/O线
80C51共有4个8位并行I/O端口:
P0、P1、P2、P3口,共32个引脚。
P0口有三个功能:
①外部扩展存储器时,当做数据总线(如图1中的D0~D7为数据总线接口);
②外部扩展存储器时,当作地址总线(如图1中的A0~A7为地址总线接口) ;
③不扩展时,可做一般的I/O使用,但内部无上拉电阻,作为输入或输出时应在外部接上拉电阻。
P1口只做I/O口使用:
其内部有上拉电阻。
P2口有两个功能:
①扩展外部存储器时,当作地址总线使用;
②做一般I/O口使用,其内部有上拉电阻。
P3口有两个功能:
除了作为I/O使用外(其内部有上拉电阻),还有一些特殊功能,由特殊寄存器来设置。
3硬件电路设计
3.1复位电路
位电路采用上电+按钮电平复位,其中电阻的选取R1约为0.2k左右R2约为1k左右。
保证加载RST引脚上的高电平持续两个机器周期,才能使单片机有效地复位如图3-1所示。
图3-
1复位电路
3.2时钟电路
单片机内部有一个用于构成振荡器的高增益反响放大器,此放大器的输入和输出端分别是引脚XTAL1和XTAL2,在XTAL1和XTAL2上接外接时钟源即可构成时钟电路,如图3-2所示。
图3-2时钟电路
参数选取:
C2,C3对频率有微调作用,当外接晶振时,C2和C3通常选取10~30pF,当外接陶瓷振荡器时,C2和C3的典型值约为20~50pF。
振荡频率范围一般是1.2~12MHz。
3.3数码管显示模块
图3-3显示模块
时间显示模块主要由四位七段数码管来显示,配合按键控制模块的校正与设定时间,相应的显示。
时间正常显示时,LED每闪动60次,分钟自动加一;每六十分钟小时自动加一;每24小时天自动加一。
3.4闹钟模块
图3-4闹钟模块
闹钟模块快的主要功能即闹铃。
当设定时间与当前时间一致时,则闹钟自动闹铃进行提示,同时二极管闪亮一分钟后,自动退出响铃状态,若按K3键,闹钟退出响铃状态。
3.5按键控制模块
图3-5按键控制
按键设定部分比较简单,因为本系统按键少,所以在设计上采用了独立按键方式,程序的编制上也采用了简单的扫描方式。
按键控制模块主要有由四个按键组成:
K1、K2、K3、K4、。
其中K1的功能是模式切换键;K2的作用是加一;K3的作用是闹钟使能;K4的作用是减一。
闹钟设定:
当我们需要闹钟提醒时即可使用此功能,连续按三下K1键即可进入闹钟小时设定状态,通过K2键加一或K4键减一,进行小时设定,再按一次K1键即可进行分钟设定,其设定原理与小时设定原理相同,按一下K3键,则时间设定完毕,到时会自动响铃。
闹钟响铃:
当我们设定的时间与当前时间一致时,则闹钟就会自动响铃提示,与此同时发光二极管闪亮,一分钟后响铃停止,发光二极管熄灭,若在此期间按下闹钟使能键K3同样能使响铃停止,发光二极管熄灭。
日期校正:
当我们需要与当前日期保持一致时,则可以使用日期校正功能,连续按动五次K1键,则进入月份校正状态,通过K2加一键或K4减一键进行校正月份,再按一次K1键,则可进行日期校正,校正原理同月份校正原理相同。
时间校正:
当我们需要正确的显示时间即可进行时间校正,按一下K1即进入小时校正状态,通过K2加一或K4减一来进行小时校正,再按一次K1键即可进行分钟校正,校正原理同小时校正相同
年份校正:
当我们需要保持年份与当前年份一一致时,则可以进行年份校正。
连续按动七次K1键,即进入年份校正状态,通过K2加一键或K4减一键进行校正。
4程序设计
本系软件设计中,利用单片机定时器设计时间计时处理,采用单片机内部的T0定时器溢出中断来实现,工作在T1方式下,定时50微妙,则连续中断20次即为一秒,得到了我们所需时间的最小单位
该设计用C51编写程序,由于汇编语言的移植性比较差,而C语言则比较灵活。
许多子函数都可以直接移植过去。
在程序中除了有主函数外还包含许多子函数,如延时函数、按键扫描函数、初始化函数、时间显示函数、设定闹钟显示函数、设定日期显示函数、设定年份显示函数、月份选择函数、年份显示辅助函数。
4.1主程序设计
在主控程序循环中主要工作为扫描是否有按键,若有按键则应做相应的功能处理,同时也扫描显示器显示时间数据,并检查所设置的时间是否到了,时间计时处理程序是等过了1S后,则更新时间数据,将最新的时,分,秒的数据转换为数字数据并显示在七段显示器上。
程序中是这样判断是否过了1S的:
设一旧秒数变量,当新旧秒数变量不一样时,则表示已过了1S,要做相关程序时间处理了。
图4-1主程序流程图
4.2中断子程序
中断子程序的主要功能:
提供时间基准。
当连续中断20次时,即为一秒,此时秒加一;当秒值为60时,分钟加一,同时秒清零;当分钟值为60时,小时加一,同时分钟值清零;当小时为24时,天值加一,同时小时清零;由于每月天数不定,1、3、5、7、8、10、12月为31天,当计数到此类月份时,天值为32时,月值加一,同时天值为1;4、6、9、11月为30天,当计数到此类月份时,天值为31时,月值加一,同时天值为1;如果是闰年,则2月为29天,当计数到此类月份时,天值为30时,月值加一,同时天值为一;如果不是闰年,则2月为28天,当计数此类月份时,天值为29时,月值加一,同时天值为一;当月值为13时,则年值加一,同时月值为一。
图4-2定时器中断函数
4.3按键扫描子程序
按键扫描子程序是程序计中相当重要的一部分。
按键扫描子程序的功能是:
扫描是否有按键按下,若有键按下,则执行相应功能。
图4-3按键扫描子程序
5结果验证
5.1装置调试
1.设定的初始时间如图5-1-1所示
图5-1-1时间显示
2.设定闹钟时间图5-1-2所示
图5-1-2闹钟设定时间
3.设定的闹钟时间与当前时间相同,闹钟音乐播放图5-1-3
图5-1-3闹钟音乐播放
5.2Proteus软件仿真
初始界面:
启动Proteus进行仿真时显示的初始化时间。
设定时间初始值是20:
05:
59仿真时时间跳转到20:
06。
初始界面仿真图如图5-2-1所示。
图5-2-1时间显示仿真图
时间校正:
当我们需要正确的显示时间即可进行时间校正,按一下K1即进入小时校正状态,通过K2加一或K4减一来进行小时校正,再按一次K1键即可进行分钟校正,校正原理同小时校正相同。
其仿真图如图5-2-2所示。
图5-2-2时间校正仿真图
闹钟设定:
当我们需要闹钟提醒时即可使用此功能,连续按三下K1键即可进入闹钟小时设定状态,通过K2键加一或K4键减一,进行小时设定,再按一次K1键即可进行分钟设定,其设定原理与小时设定原理相同,按一下K3键,则时间设定完毕,到时会自动响铃。
调试时将时间设定为20.08。
其仿真图如图5-2-3所示。
图5-2-3闹钟设定仿真图
日期校正:
当我们需要与当前日期保持一致时,则可以使用日期校正功能,连续按动五次K1键,则进入月份校正状态,通过K2加一键或K4减一键进行校正月份,再按一次K1键,则可进行日期校正,校正原理同月份校正原理相同。
其仿真图如图5-2-4所示
图5-2-4日期显示仿真图
年份校正:
当我们需要保持年份与当前年份一一致时,则可以进行年份校正。
连续按动七次K1键,即进入年份校正状态,通过K2加一键或K4减一键进行校正。
其仿真图如图5-2-5所示
图5-2-5年份显示仿真图
闹钟响铃:
当我们设定的时间与当前时间一致时,则闹钟就会自动响铃提示,与此同时发光二极管闪亮,一分钟后响铃停止,发光二极管熄灭,若在此期间按下闹钟使能键K3同样能使响铃停止,发光二极管熄灭。
其仿真图如图5-2-6所示。
图5-2-6闹钟音乐播放仿真图
6结论
两个星期的课程设计结束了,从中我们学到了很多东西且感悟良多,体会到了课本联系实际,学以至用,设计思想,实际动手能力都有所提高。
作为一名大四学生,我觉得做单片机课程设计是十分有意义的,而且是十分必要的。
回顾起此次课程设计,至今我仍感慨颇多,的确,从从拿到题目到完成整个编程,从理论到实践,在整整半个学期的日子里,可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说结构体……通过这次课程设计之后,一定把以前所学过的知识重新温故。
要做好一个课程设计,就必须做到:
在设计程序之前,对所用单片机的内部结构有一个系统的了解,知道该单片机内有哪些资源;要有一个清晰的思路和一个完整的的软件流程图;在设计程序时,不能妄想一次就将整个程序设计好,反复修改、不断改进是程序设计的必经之路;要养成注释程序的好习惯,一个程序的完美与否不仅仅是实现功能,而应该让人一看就能明白你的思路,这样也为资料的保存和交流提供了方便;在设计课程过程中遇到问题是很正常德,但我们应该将每次遇到的问题记录下来,并分析清楚,以免下次再碰到同样的问题。
这次课程设计使我懂得了同学间的团结合作,懂得了理论联系实际,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才是正确的理论,从而提高自己实际动手能力和独立思考的能力。
在设计的过程中遇到问题,可以说得是困难重重,遇到了各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,并决心在以后的学习中加以改正,努力练习,提高自己的动手能力。
7参考文献
1.余发山,王福忠,徐州,中国矿业大学出版2008年
2.彭为,黄科,雷道仲,单片机典型系统设计实例讲解,2006年
3.王法能,单片机原理及应用,科学出版,2004
4.张友德、赵志英等编单片微型机原理、应用与实验,上海:
复旦大学出版2003,第四版
5.钱晓揭.16/32位微机原理、汇编语言及接口技术[M].机械工程出版社2005年
6.吴金,8051单片机实践与应用[M],清华大学出版社,2002年
7.谢自美,电子线路设计试验测试(第二版),华中科技出版社2002年
8.张疑坤,陈善久,裘雪红,单片微型计算机原理及应用,西安电子科技大出版社,2003年
9.马忠梅编著《单片机的C语言应用程序设计》北京航空航天大学出版社,1999年
附一:
源程序代码
#include
#defineuintunsignedint
#defineucharunsignedchar
ucharcodea[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//*************************************************************************************
sbitK1=P1^4;
sbitK2=P1^5;
sbitK3=P1^6;
sbitK4=P1^7;
sbitsd=P1^0;
sbitBEEP=P3^6;
ucharm=5,h=20,sec=58,cnt=0,x,y,qian,bai,shi,ge;
ucharset_h=12;
ucharset_m=58;
ucharmonth=7;
ucharday=5;
ucharth0_f;
uchartl0_f;
uintyear=2010;
voiddelay(uchart);//延时函数
voidscankey(void);//按键扫描函数
voidinit(void);//初始化函数
voiddisplay(void);//显示函数
voidset_time(void);//设定时间显示辅助函数
voidset_day(void);//设定日期显示辅助函数
voidm_choose(void);//月份选择函数
voidbianhuan(void);//年份显示辅助函数
voidbianhuan1(void);//时间显示辅助函数
changedata(uchar*song,uchar*diao,uchar*jie);
voidplay(uchar*songdata);//奏乐函数
//世上只有妈妈好
ucharcodemamahao[]={
"6.5_35|`16_5_6-|35_6_53_2_|1_,6_5_3_2-|"
"2.3_55_6_|321-|5.3_2_1_,6_1_|,5--"
};
ucharcodefreq[36*2]={
0xA9,0xEF,//00220HZ,1//0
0x93,0xF0,//00233HZ,1#
0x73,0xF1,//00247HZ,2
0x49,0xF2,//00262HZ,2#
0x07,0xF3,//00277HZ,3
0xC8,0xF3,//00294HZ,4
0x73,0xF4,//00311HZ,4#
0x1E,0xF5,//00330HZ,5
0xB6,0xF5,//00349HZ,5#
0x4C,0xF6,//00370HZ,6
0xD7,0xF6,//00392HZ,6#
0x5A,0xF7,//00415HZ,7
0xD8,0xF7,//00440HZ1//12
0x4D,0xF8,//00466HZ1#//13
0xBD,0xF8,//00494HZ2//14
0x24,0xF9,//00523HZ2#//15
0x87,0xF9,//00554HZ3//16
0xE4,0xF9,//00587HZ4//17
0x3D,0xFA,//00622HZ4#//18
0x90,0xFA,//00659HZ5//19
0xDE,0xFA,//00698HZ5#//20
0x29,0xFB,//00740HZ6//21
0x6F,0xFB,//00784HZ6#//22
0xB1,0xFB,//00831HZ7//23
0xEF,0xFB,//00880HZ`1
0x2A,0xFC,//00932HZ`1#
0x62,0xFC,//00988HZ`2
0x95,0xFC,//01046HZ`2#
0xC7,0xFC,//01109HZ`3
0xF6,0xFC,//01175HZ`4
0x22,0xFD,//01244HZ`4#
0x4B,0xFD,//01318HZ`5
0x73,0xFD,//01397HZ`5#
0x98,0xFD,//01480HZ`6
0xBB,0xFD,//01568HZ`6#
0xDC,0xFD,//01661HZ`7//35
};
//******************************
//音乐符号串解释函数
changedata(uchar*song,uchar*diao,uchar*jie)
{
uchari,i1,j;
chargaodi;
ucharbanyin;
ucharyinchang;//
ucharcodejie7[8]={0,12,14,16,17,19,21,23};
*diao=*song;
for(i=0,