ImageVerifierCode 换一换
格式:DOCX , 页数:64 ,大小:193.75KB ,
资源ID:23596535      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/23596535.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(河南科技学院毕业设计报告.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

河南科技学院毕业设计报告.docx

1、河南科技学院毕业设计报告河南科技学院2011届专科毕业设计报告基于单片机的数字万年历学生姓名:冯建勇 徐世伟所在学院: 高等职业技术学院所学专业: 应用电子技术 导师姓名: 杨枫 完成时间: 2011-5-30 一、 设计目的单片机原理及应用是一门技术性、应用性很强的学科,实践教学是它的一个极为重要的环节。不论是硬件扩展、接口应用还是编程方法、程序调试,都离不开实验教学。如果不在切实认真地抓好学生的实践技能的锻炼上下功夫,单凭课堂理论课学习,势必出现理论与实践脱节,学习与应用脱节的局面。任随书本上把单片机技术介绍得多么重要、多么实用、多么好用,同学们仍然会感到那只是空中楼阁,离自己十分遥远,或

2、者会因此而对它失去兴趣,或者会感到它高深莫测无从下手,这些情况都会令课堂教学的效果大打折扣。本次仿真设计的目的就是让同学们在理论学习的基础上,通过完成一个涉及单片机多种资源应用并具有综合功能的小系统目标板的设计与编程应用,使学生不但能够将课堂上学到的理论知识与实际应用结合起来,而且能够对电子电路、电子元器件、印制电路板等方面的知识进一步加深认识,同时在软件编程、排错调试、焊接技术、相关仪器设备的使用技能等方面得到较全面的锻炼和提高,为今后能够独立进行某些单片机应用系统的开发设计工作打下一定的基础。二、 设计任务叙述系统应该完成的功能, 系统功能包括以下几点:(1) 24小时计时功能用6位LED

3、显示器显示时、分、秒。(2) 时间调整功能用功能移位键、功能加键和功能减键实现时间的调整(3) 闹铃功能用定闹键配合功能移位键、功能加键和功能减键三个按键设定闹铃,并用蜂鸣器实现响铃功能。(4) 环境温度采集与显示功能选用温度传感器DS18B20采集环境温度,并用2位LED显示器显示环境温度。在这里我们只考虑采集室内温度,即零度以上的温度。三、 硬件设计本次设计的万年历系统以单片机为主控芯片,通过读写日历时钟芯片和温度芯片来实时的改变当前时间和温度,并通过LED显示实时数据,同时辅助以键盘来调节显示时间和定时时间,并带有蜂鸣器,当定时时间到时闹钟即打开。硬件的结构和可靠性直接影响着整个系统的可

4、靠性,所以合理的安排电路能提高电子产品的性能,但任何电子产品都必须有一个可靠的电源为其提供能量才能工作,本设计先介绍电源部分,再介绍功能电路。3. 主电路设计主电路的功能是完成年、月、日、星期、时、分、秒之间的转换,对温度传感器进行控制并读取温度转换后的值, 再送往LED显示,并且接受键盘操作,对日期和时间进行校正,同时还要判断定时时间是否到,定时到时闹铃打开。主电路原理图如图所示,显示部分用P0口做为输出数据接到LED数码管a到h,并接8个上拉电阻做为各段的驱动。 用P3口的低3位接译码器的A0,A1,A2端,用P3.3,P3.4,P3.5分别接译码器的使能端,通过控制P3口来控制LED的动

5、态扫描。单片机的18和19引脚接12MHZ的晶振,并接两个22PF的电容同时接地,单片机复位端接一极性电容并连接到电源处,在极性电容的负极接一10K的电阻,并连接至地做为放电用。本设计用到四个独立式键盘分别接到P1口的低4位,用P1口的P1.4,P1.5,P1.6接日历时钟的使能端和时钟端及数据输入输出口,并在日历时钟上接一32.768KHZ的晶振,并接两个22PF的电容终端和地相连,用P1.7接温度芯片的DQ引脚,作为温度数据或命令的读写,用单片机的P3.7接扬声器,作为发音电路,各芯片的电源部分分别接到有开关式电源产生的5V电源上,芯片的接地端都接在公共地上,在这里接电源部分就不再一一详述

6、,读者注意一下就行了。设计采用动态显示,轮流扫描各个LED使之显示相应的数型码,当扫描频率大于人眼所能识别的频率时就看不到闪烁现象。动态显示的亮度不如静态显示,但静态显示占用的I/O口资源较多,往往用移位寄存器74LS164等来扩充其I/O口不足的情况,当显示位数较多时,这样势必增加硬件开销,增大成本,不利于开阔市场。本设计的突出之处在于硬件电路简单,大大减少了硬件开销,这样又势必增加了软件开发的难度,但降低了成本有利于市场的开阔。3. 主控制器和外围器件主控芯片由单片机完成。目前市场上的单片机种类很多,如Intel公司生产的80C51系列,ATMEL公司生产的AT89系列,Microchip

7、公司生产的PIC系列,ADI公司生产的高性能ADuC84X系列单片机和ATMEL公司的高性能ATmega XXX系列单片机等等。本设计所要求的功能有限用一般的单片机即可完成任务,其中ATMEL公司生产的AT89系列单片机最为流行,它具有Flash ROM,擦写方便,且价格便宜。因此选用AT89S52为主控芯片。外围器件其中温度传感器采用美国达拉斯(DALLAS)生产的可编程的DS18B20温度传感器。它直接输出数字量的温度值,精度高,测温分辨率可达0.0625。一线制总线,接口方便,体积小等诸多优点。时钟芯片选用DS1302,DS1302是美国DALLAS公司推出的一种高性能、低功耗、带RAM

8、的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能。显示部分采用共阴极数码管LED显示,具有显示亮度高,功耗小的优点,配合译码器74HC138完成动态显示功能。3.3.1 STC12C5616AD单片机STC12C5616AD系列主要性能: 高速:1个时钟/机器周期,飞思卡尔芯片解密,增强型8051内核,速度比普通8051快812倍 宽电压:5.53.3V,2.23.6V(STC12LE5A60S2系列) 增加第二复位功能脚(高可靠复位,可调整复位门槛电压,频率12MHz时,无需此功能) 增加外部掉电检测电路,可在掉电时,及时将数据保存进EEPROM,正常工作时无需

9、操作EEP 低功耗设计:空闲模式,(可由任意一个中断唤醒) 低功耗设计:掉电模式(可由外部中断唤醒),可支持下降沿/上升沿和远程唤醒 工作频率:035MHz,相当于普通8051:0420MHz 时钟:外部晶体或内部RC振荡器可选,在ISP下载编程用户程序时设置 8/16/20/32/40/48/52/56/60/62K字节片内Flash程序存储器,擦写次数10万次以上 1280字节片内RAM数据存储器 芯片内EEPROM功能,擦写次数10万次以上 ISP / IAP,在系统可编程/在应用可编程,无需编程器/仿真器 8通道,10位高速ADC,速度可达25万次/秒,2路PWM还可当2路D/A使用

10、2通道捕获/比较单元(PWM/PCA/CCP),-也可用来再实现2个定时器或2个外部中断(支持上升沿/下降沿中断) 4个16位定时器,兼容普通8051的定时器T0/T1,2路PCA实现2个定时器 可编程时钟输出功能,T0在P3.4输出时钟,T1在P3.5输出时钟,BRT在P1.0输出时钟 硬件看门狗(WDT) 高速SPI串行通信端口 全双工异步串行口(UART),兼容普通8051的串口 先进的指令集结构,兼容普通8051指令集,有硬件乘法/除法指令 通用I/O口(36/40/44个),复位后为: 准双向口/弱上拉(普通8051传统I/O口)可设置成四种模式:准双向口/弱上拉,推挽/强上拉,仅为

11、输入/高阻,开漏每个I/O口驱动能力均可达到20mA,但整个芯片最大不得超过100mA 3.3.2 温度芯片DS18B20DS18B20数字温度计是DALLAS公司生产的1Wire,即单总线器件,具有线路简单,体积小的特点。因此用它来组成一个测温系统,具有线路简单,在一根通信线,可以挂很多这样的数字温度计,十分方便。图3-2DS1302封装 DS18B20的引脚功能描述序号名称引脚功能描述1GND接地2DQ数据输入/输出引脚。漏极开路。当被用着在寄生电源下,也可以向器件提供电源。3VDD可选择的VDD引脚。当工作于寄生电源时,此引脚必须接地。表3-1 DS18B20的引脚功能3.3.3DS18

12、B20 ROM 操作指令一旦总线主机检测到从器件的存在,它便可以发出器件ROM操作命令之一。所有ROM操作命令均为8位长。读ROM 33h :此命令允许总线主机读DS18B20的8位产品系列编码,唯一的48信序列号,以及8位的CRC。此命令只能在总线上仅有一个DS18B20的情况下使用。符合ROM 55h:此命令后继以64位的ROM数据序列,允许总线主机对多点总线上特定的DS18B20寻址。只有与64位ROM序列严格相符的DS18B20才能对后继的存储器操作命令作出响应。跳过ROM CCh:在单点总线系统中,此命令通过允许总线主机不提供64位ROM编码而直接进行存储器操作以节省时间。搜索ROM

13、F0h:当系统开始工作时,总线主机可能不知道单总线上的器件个数或不知道其64位ROM编码。搜索ROM命令允许总线控制器用排除法识别总线上的所有从器件的64位编码。警告搜索ECh:此命令的流程与搜索ROM命令相同。但是仅在最近一次温度测量出现警告的情况下,DS18B20才对此命令作出响应。3.3.4 DS18B20 RAM操作指令写暂存存储器 4Eh:这个命令向DS18B20的暂存器TH和TL中写入数据。可以在任何时刻发出复信命令来中止写入。读暂存存储器 BEh:这个命令读取暂相隔器的内容。读取将从第1个字节开始,一直进行下去,直到第9(CRC)字节读完。如果不想读完所有字节,控制器可以在任何时

14、间发出复位命令来中止读取。复制暂存存储器 48h:这个命令把暂存器的内容拷贝到DS18B20的E2ROM存储器里,即把温度报警触发字节存入非易失性存储器里。 温度变换 44h:这条命令启动一次温度转换而无需其它数据。温度转换命令被执行,而后DS18B20保持等待状态。如果总线控制器在这条命令之后跟着发出读时间隙,而DS18B20又忙于做温度转换的话,DS18B20将在总线上输出0,若温度转换完成,则输出1。如果使用寄生电顺势,总线控制器必须在发出这条命令后立即启动强上拉,并保持500ms以上时间。读忙B8h:在这条命令发出之后发出读数据隙,器件会输出温度转换忙的标识:0为忙,1为准备就绪。读电

15、源 B4h:若把这条命令发给DS18B20后,发出读时间隙,器件会返回它的电源模式:0为寄生电源,1为外部电源。 3.3.5 DS18B20的数据处理DS18B20的高速暂存存储器由9个字节组成,其分配如图2-2所示。当温度转换命令发布后,经转换所得的温度值以2字节补码形式存放在高速暂存存储器的第1、2个字节里。单片机可通过单总线接口读到该数据,读取时低位在前,高位在后。3.3.6 日历时钟芯片DS1302DS1302是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V5.5V。采用三线接口与

16、CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个318的用于临时性存放数据的RAM寄存器。DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后背电源双电源引脚,同时提供了对后背电源进行涓细电流充电的能力。 DS1302的引脚排列,其中Vcc1为后备电源,VCC2为主电源。DS1302由Vcc1或Vcc2两者中的较大者供电。X1和X2是振荡源,外接32.768kHz晶振。RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。RST输入有两种功能:首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;

17、其次,RST提供终止单字节或多字节数据的传送手段。当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。上电时,在Vcc2.5V之前,RST必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平。I/O为串行数据输入输出端(双向),后面有详细说明。SCLK始终是输入端。图3-3DS1302引脚图DS1302的控制字如图所示。控制字节的最高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入DS1302中,位6如果为0,则表示存取日历时钟数据,为1表示存取RAM数据;位5至位1指示操作单

18、元的地址;最低有效位(位0)如为0表示要进行写操作,为1表示进行读操作,控制字节总是从最低位开始输出。1RAMA4A3A2A1A0RAMCKCK表3-2DS1302控制字在控制指令字输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从低位即位0开始。同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位0位到高位7。 DS1302有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式,其日历、时间寄存器及其控制字见下表。寄存器命令码数据范围寄存器中各位的内容名称地址写读76543210秒00H80H81H00

19、59CH秒数据分01H82H83H00590分数据时02H84H85H0112或002312/24010/AP时数据日03H86H87H0128,2930,3100日数据月04H88H89H0112000月数据星期05H9AH8BH010700000星期数据年06H8CH8DH0099年数据多字节读写BEHBFH表3-3日历时间寄存器3.3.7 数码管LEDLED显示器由若干个发光二极管组成,当发光二极管导通时,相应的一个笔画或一个点就发光。控制相应的管导通,就能显示出对应字符。各段LED显示器需要由驱动电路驱动。在七段LED显示器中,通常将各段发光二极管的阴极或阳极连在一起作为公共端。将各段

20、发光二极管连在一起的叫共阳极显示器,用低电平驱动;将阴极连在一起的叫共阴极显示器,用高电平驱动。静态显示就是每一个显示器各笔画段都要独占具有一个锁存功能的输出口线,CPU把要显示的字形代码送到输出口上,就可以使显示器上显示所需的数字或符号,此后,即使CPU不在去访问它,因为各笔画段借口具有锁存功能,显示的内容也不会消失。动态显示是指显示器显示某一字符时,相应段的发光二极管恒定地导通或截止。静态显示有并行输出和串行输出两种方式。在本系统中数码管使用共阴极接法而且是用动态显示。3.3.8 译码器74HC13874HC138译码器是通过3条线来达到控制8条线的状态,就是通过3条控制线A0、A1、A2

21、不同的高低电平组合来控制Y0Y7的输出状态,其中4和5为使能地端,与8引脚共同接地,当接高电平时Y0到Y7输出高电平。6号脚为使能端,为高电平时有效。74HC138封装如图2-5。当需要级联时只需要改变使能端信号引脚即可,连接方法简单。图3-474HC138封装图 四、 软件仿真软件设计是本设计的关键,软件程序编写的好坏直接影响着系统运行情况的良好。因本程序涉及的模块较多,所以程序编写也采用模块化设计,C语言具有编写灵活、移植方便、便于模块化设计的特点,所以本系统的软件采用C51编写。4.1程序框图4.2源程序代码#include#includeunsigned char code displ

22、aywelcome= Welcome To My Lcd Timer;/欢迎界面unsigned char code displaywish= Happy Every Day _; /欢迎界面unsigned char code overtemperature=OVERTEMPERATURE!;unsigned char code digit=0123456789; /数字代码unsigned char mode,TH,TL,TN,TD,length,tempswitch,Maxtemp=40,amode,alarmmode,minutes,hours,minutea,seconds,hour

23、a=12;sbit SCLK=P10; /DS1302时钟输入sbit DATE=P11; /DS1302数据输入 sbit REST=P12; /DS1302复位端口sbit SET=P14; /DS1302设置模式选择位sbit ADD=P15; /增加sbit RED=P16; /减小sbit CANL=P17;void delay1ms(int i)/1毫秒延时 int j,k; while(i-) for(j=76;j1;j-); for(k=29;k1;k-); void delaynus(unsigned char n) /延时若干微秒 unsigned char i; for(

24、i=0;i0;i-) _nop_(); void baojing(unsigned char n) unsigned char x,i; while(n-) for(i=0;i5;i+) for(x=0;x200;x+) beep=beep; dely500(); for(i=0;i3;i+) for(x=0;x200;x+) beep=beep; dely500(); dely500(); /*DS1302模块*/ void Write1302(unsigned char date)/向1302写数据 unsigned char i; SCLK=0; delaynus(2); for(i=0

25、;i=1; void WriteSet1302(unsigned char cmd,unsigned char date) /根据相应的命令输入相应的数据 REST=0; SCLK=0; REST=1; Write1302(cmd); delaynus(5); Write1302(date);SCLK=1; REST=0; unsigned char Read1302(void) /读取1302数据 unsigned char i,date; delaynus(2); for(i=0;i=1; if(DATE=1) date|=0x80; SCLK=1; delaynus(2); SCLK=0

26、; delaynus(2); return date; unsigned char ReadSet1302(unsigned char cmd)/根据命令读取1302相应的值 unsigned char date; REST=0; SCLK=0; REST=1; Write1302(cmd); delaynus(2); date=Read1302(); SCLK=1; REST=0; return date;void IntDS1302(void) /DS1302初始化 unsigned char flag; flag= ReadSet1302(0x81); if(flag&0x80) /判断

27、时钟芯片是否关闭 WriteSet1302(0x8E,0x00); /根据写状态寄存器命令字,写入不保护指令 WriteSet1302(0x80,(0/10)4|(0%10); /根据写秒寄存器命令字,写入秒的初始值 WriteSet1302(0x82,(0/10)4|(0%10); /根据写分寄存器命令字,写入分的初始值 WriteSet1302(0x84,(0/10)4|(0%10); /根据写小时寄存器命令字,写入小时的初始值 WriteSet1302(0x86,(0/10)4|(0%10); /根据写日寄存器命令字,写入日的初始值 WriteSet1302(0x88,(0/10)4|(

28、0%10); /根据写月寄存器命令字,写入月的初始值WriteSet1302(0x8c,(10/10)4|(10%10); /根据写年寄存器命令字,写入年的初始值 WriteSet1302(0x90,0xa5); /打开充电功能 选择2K电阻充电方式 WriteSet1302(0x8E,0x80); /根据写状态寄存器命令字,写入保护指令 /*液晶显示模块*/sbit RS=P25;sbit RW=P26;sbit E=P27;sbit BF=P07; /*液晶忙检测*/bit BusyTest(void) bit result; RS=0; RW=1; E=1; _nop_(); _nop_(); _nop_(); result=BF; _nop_(); _nop_(); _nop_(); E=0; return result;/*写指令*/void Write_com(unsigned char command) while(BusyTest()!=0); RS=0; RW=0; E=0; _nop_(); _nop_(); _nop_(); P0=command; _nop_(); _nop_(); _nop_();

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1