




已阅读5页,还剩20页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
课程设计(论文)题 目 名 称 电子万年历 课 程 名 称 单片机原理与应用 学 生 姓 名 谭 海 清 学 号 0640842135 系 、专 业 信息工程系电子信息工程 指 导 教 师 顾思思 2008年 12 月 15 日摘要随着科技的快速发展,人们对时间的观察,从原始的观测太阳到摆钟再到如今的电子钟,不断创新纪录。本次设计的电子万年历系统采用AT89S52单片机为控制核心,能够显示从2000至2099年的年、月、日、星期、时、分、秒并进行整点报时。同时还可显示一年中的公历节日并对当前环境温度进行实时测量。系统具有读取方便、显示直观、功能多样、电路简洁、成本低廉等诸多优点,符合电子仪器仪表的发展趋势,具有广阔的市场前景。关键词:单片机;多功能万年历。ABSTRACTAlong with technical fast development, the people to the time observation, from primitive observed the sun to pendulum clock until now electron clock, innovated unceasingly the record. This designs electronic ten thousand calendar system uses at89S52 monolithic integrated circuit is the control core, can demonstrate from 2000 to 2099 year, month, Japan, week, divides, the second and carries on the integral point to report time. Simultaneously may also demonstrate that one year the solar calendar holiday and carries on the real-time measurement to the current ambient temperature. The system has the read to be convenient, the demonstration is direct-viewing, the function is diverse, the electric circuit is succinct, cost inexpensive and so on many merits, conforms to the electronic instrumentation measuring appliances trend of development, has the broad market prospect.KEY WORDS: monolithic integrated circuit; multi-purpose ten thousand calendars.目 录 一、设计要求与方案论证 11.1 设计要求 11.2 系统基本方案选择和论证 11.2.1单片机芯片的选择方案和论证 11.2.2 显示模块选择方案和论证 11.2.3 时钟芯片的选择方案和论证 21.2.4 温度传感器的选择方案与论证 2二.系统硬件设计 2 2.1 电路设计框图22.2 系统硬件概述32.3 主要单元电路的设计32.3.1单片机主控制模块的设计32.3.2时钟电路模块的设计42.3.3温度采集模块设计42.3.4 电路原理及说明52.3.5液晶显模块12864的设计及其控制62.3.6稳压电源设计 7三、系统软件设计 73.1程序设计流程图 73.2时钟程序段的程序设计 9 3.3温度程序段的程序设计 133.4主程序段的调试程序 15四. 系统测试与仿真 174.1仿真 17 4.2测试 184.3测试结果分析与结论 18五结束语句 185.1设计总结 185.2致谢词 19参考文献 19附录一:系统电路图 20附录二:元器件清单 21一、设计要求与方案论证1.1设计要求: 系统具有年、月、日、星期、时、分、秒等功能; 系统具有温度计功能; 系统具备年、月、日、星期、时、分、秒校准功能;1.2 系统基本方案选择和论证1.2.1单片机芯片的选择方案和论证:方案一: 采用89C51芯片作为硬件核心,采用Flash ROM,内部具有4KB ROM 存储空间,能于3V的超低压工作,而且与MCS-51系列单片机完全兼容,但是运用于电路设计中时由于不具备ISP在线编程技术, 当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,对芯片的多次拔插会对芯片造成一定的损坏。方案二: 采用AT89S52,片内ROM全都采用Flash ROM;能以3V的超底压工作;同时也与MCS-51系列单片机完全该芯片内部存储器为8KB ROM 存储空间,同样具有89C51的功能,且具有在线编程可擦除技术,当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,不需要对芯片多次拔插,所以不会对芯片造成损坏。综合选择所以采用方案二作为主控制系统。1.2.2 显示模块选择方案和论证:方案一: 采用LCD液晶显示屏,液晶显示屏的显示功能强大,可显示大量文字,图形,显示多样,清晰可见,但是价格昂贵,需要的接口线多,所以在此设计中不采用LCD液晶显示屏。方案二: 采用点阵式数码管显示,点阵式数码管是由八行八列的发光二极管组成,对于显示文字比较适合,如采用在显示数字显得太浪费,且价格也相对较高,所以也不用此种作为显示。方案三:采用LED数码管动态扫描,LED数码管价格适中,对于显示数字最合适,而且采用动态扫描法与单片机连接时,占用的单片机口线少。所以采用了LED数码管作为显示。 综合以上方案,考虑实际价格因素,降低设计难度,使整个设计达力求完美,最后决定选用LCD12864液晶模块。1.2.3时钟芯片的选择方案和论证:方案一: 直接采用单片机定时计数器提供秒信号,使用程序实现年、月、日、星期、时、分、秒计数。采用此种方案虽然减少芯片的使用,节约成本,但是,实现的时间误差较大。所以不采用此方案。方案二: 采用DS1302时钟芯片实现时钟,DS1302芯片是一种高性能的时钟芯片,可自动对秒、分、时、日、周、月、年以及闰年补偿的年进行计数,而且精度高,位的RAM做为数据暂存区,工作电压2.5V5.5V范围内,2.5V时耗电小于300nA. 1.2.4温度传感器的选择方案与论证:方案一:使用热敏电阻作为传感器,用热敏电阻与一个相应阻值电阻相串联分压,利用热敏电阻阻值随温度变化而变化的特性,采集这两个电阻变化的分压值,并进行A/D转换。此设计方案需用A/D转换电路,增加硬件成本而且热敏电阻的感温特性曲线并不是严格线性的,会产生较大的测量误差。方案二:采用数字式温度传感器DS18B20,此类传感器为数字式传感器而且仅需要一条数据线进行数据传输,易于与单片机连接,可以去除A/D模块,降低硬件成本,简化系统电路。另外,数字式温度传感器还具有测量精度高、测量范围广等优点。1.3 电路设计最终方案决定综上各方案所述,对此次作品的方案选定: 采用AT89S52作为主控制系统; DS1302提供时钟;数字式温度传感器;LCD12864液晶显示屏完成显示。二.系统的硬件设计与实现2.1 电路设计框图LCD液晶显示模块AT89S52主控制模 块温度采集模块 DS1302时钟模块2.2 系统硬件概述本电路是由AT89S52单片机为控制核心,具有在线编程功能,低功耗,能在3V超低压工作;时钟电路由DS1302提供,它是一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,工作电压为2.5V5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个31*8的用于临时性存放数据的RAM寄存器。可产生年、月、日、周日、时、分、秒,具有使用寿命长,精度高和低功耗等特点,同时具有掉电自动保存功能;温度的采集由DS18B20构成;显示部份由LCD12864液晶显示模块完成显示任务。2.3 主要单元电路的设计2.3.1单片机主控制模块的设计AT89S52单片机为40引脚双列直插芯片,有四个I/O口P0,P1,P2,P3, MCS-51单片机共有4个8位的I/O口(P0、P1、P2、P3),每一条I/O线都能独立地作输出或输入。单片机的最小系统如下图所示,18引脚和19引脚接时钟电路,XTAL1接外部晶振和微调电容的一端,在片内它是振荡器倒相放大器的输入,XTAL2接外部晶振和微调电容的另一端,在片内它是振荡器倒相放大器的输出.第9引脚为复位输入端,接上电容,电阻及开关后够上电复位电路,20引脚为接地端,40引脚为电源端. 如图-1 所示:图2.1 主控制系统2.3.2时钟电路模块的设计图-2示出DS1302的引脚排列,其中Vcc1为后备电源,Vcc2为主电源。在主电源关闭的情况下,也能保持时钟的连续运行。DS1302由Vcc1或Vcc2两者中的较大者供电。当Vcc2大于Vcc1+0.2V时,Vcc2给DS1302供电。当Vcc2小于Vcc1时,DS1302由Vcc1供电。X1和X2是振荡源,外接32.KHz晶振。RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。RST输入有两种功能:首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据的传送手段。当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。如果在传送过程中RSTS置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。上电动行时,在Vcc大于等于2.5V之前,RST必须保持低电平。中有在SCLK 为低电平时,才能将RST置为高电平,I/O为串行数据输入端(双向)。SCLK始终是输入端。 图2.2 DS1302的引脚图2.3.3温度采集模块设计如图-3所示。采用数字式温度传感器DS18B20,它是数字式温度传感器,具有测量精度高,电路连接简单特点,此类传感器仅需要一条数据线进行数据传输,使用0.7与DS18B20的I/O口连接加一个上拉电阻,Vcc接电源,Vss接地。 图2.3 DS18B20温度传感器2.3.4 电路原理及说明(1) 时钟芯片DS1302的工作原理: DS1302在每次进行读、写程序前都必须初始化,先把SCLK端置 “0”,接着把RST端置“1”,最后才给予SCLK脉冲;读/写时序如下图4所示。图5为DS1302的控制字,此控制字的位7必须置1,若为0则不能把对DS1302进行读写数据。对于位6,若对程序进行读/写时RAM=1,对时间进行读/写时,CK=0。位1至位5指操作单元的地址。位0是读/写操作位,进行读操作时,该位为1;该位为0则表示进行的是写操作。控制字节总是从最低位开始输入/输出的。表6为DS1302的日历、时间寄存器内容:“CH”是时钟暂停标志位,当该位为1时,时钟振荡器停止,DS1302处于低功耗状态;当该位为0时,时钟开始运行。“WP”是写保护位,在任何的对时钟和RAM的写操作之前,WP必须为0。当“WP”为1时,写保护位防止对任一寄存器的写操作。(2) DS1302的控制字节DS1302的控制字如表-1所示。控制字节的高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入DS1302中,位6如果0,则表示存取日历时钟数据,为1表示存取RAM数据;位5至位1指示操作单元的地址;最低有效位(位0)如为0表示要进行写操作,为1表示进行读操作,控制字节总是从最低位开始输出 RAM RD 1 / CK A4 A3 A2 A1 A0 /WR 表-1 DS1302的控制字格式(3) 数据输入输出(I/O)在控制指令字输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从低位即位0开始。同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位0位到高位7。如下图-4所示 图2.4 DS1302读/写时序图(4) DS1302的寄存器DS1302有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式,其日历、时间寄存器及其控制字见表-2。 表-2 DS1302的日历、时间寄存器 此外,DS1302 还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器内容。 DS1302与RAM相关的寄存器分为两类:一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0HFDH,其中奇数为读操作,偶数为写操作;另一类为突发方式下的RAM寄存器,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH(写)、FFH(读)。 2.3.5液晶显模块12864的设计及其控制112864液晶显示模块表示横向有128点,纵向有64点,可显示16*16中文字4行,每行8个字,其引脚功能如表3所示: 引脚符 号引 脚 功 能引脚符 号引 脚 功 能1VSS电源地15PSB2VDD电源正+5V16NC3VO液晶显示驱动电源0-5V17/RST复位(低电平有效)4RS(CS)H:数据输入;L:指令码输入18VEELCD驱动负电源5R/W(SID)H:数据读取;L:数据写入19A背光电源(+)6E(SCLK)使能信号。由H到L完成使能20K背光电源(-)7-14DB0-DB7数据线有些型号的模块19、20脚为空脚表3 12864液晶显示模块引脚功能212864与单片机的接口电路如图2.7.1,其通信为串行通信,只用了串行口。图2.5 LCD12864液晶显示模块电路2.3.6稳压电源设计电源是设计的关键,一个好的电源可以使系统变的更加稳定,要输出一个5V的电源,要用到7805芯片,其输出电压为5V,电路简单。要求纹波系数小,工作稳定,负载电阻的改变对稳压源的影响小等。具体设计思路是:采用12的直冲式电源先将220伏的交流电变成12伏,整流后通过大电容滤波,之后送7805稳压芯片稳压,再经过小电容滤波进一步减少纹波系数后输出。图2.6系统电源电路三系统的软件设计3.1程序设计流程图显示温度读取时间设置初始时间调用清屏子程序调用初始化子程序修改堆栈启动定时器置定时器初值设置初始值开始 图3.1 设计流程图 3.2时钟程序段的程序设计在主程序中每隔50ms向DS1302读取一次时间,将读出的时间显示在液晶屏上。12数码显示子程序DISPLAY:;显示秒MOV A,SECONDANL A,#0FHMOV 50H,ALCALL A13MOV A,SECONDSWAP AANL A,#07HMOV 51H,ALCALL A14;显示分MOV A,MINUTEANL A,#0FHMOV 52H,ALCALL A15MOV A,MINUTESWAP AANL A,#07HMOV 53H,ALCALL A16;显示小时MOV A,HOURANL A,#0FHMOV 54H,ALCALL A17MOV A,HOURSWAP AANL A,#03HMOV 55H,ALCALL A18;显示星期MOV A,WEEKMOV 5AH,ALCALL A19;显示日MOV A,DAYANL A,#0FHMOV 56H,ALCALL A20MOV A,DAYSWAP AANL A,#03HMOV 57H,ALCALL A21;显示月MOV A,MONTHANL A,#0FHMOV 58H,ALCALL A22MOV A,MONTHSWAP AANL A,#03HMOV 59H,ALCALL A23;显示年MOV A,YEARLANL A,#0FHMOV 5CH,ALCALL A24MOV A,YEARLSWAP AANL A,#0FHMOV 5DH,ALCALL A25RET;设置DS1302初始时间,并启动计时SETDS1302:CLR T_RSTnopCLR T_CLKnopSETB T_RSTnopMOV B,#8EH 写控制命令字LCALL INPUTBYTEMOV B,#00H 写保护关闭LCALL INPUTBYTESETB T_CLKnopCLR T_RSTMOV R0,#SECOND 内存中的时间首地址MOVR1,#80H ;DS1302中的时间首地址MOV R7,#7 SETLOOP:CLR T_RSTnopCLR T_CLKnopSETB T_RSTnopMOV B,R1 ; 写命令字LCALL INPUTBYTEMOV A,R0 设置时间MOV B,ALCALL INPUTBYTEINC R0INC R1INC R1SETB T_CLKnopCLR T_RSTnopDJNZ R7,SETLOOPCLR T_RSTnopCLR T_CLKnopSETB T_RSTNopMOV B,#8EHLCALL INPUTBYTEMOV B,#80H ;开写保护LCALL INPUTBYTESETB T_CLKnopCLR T_RSTnopRET;从DS1302读取时间GET1302:MOV R0,#SECONDMOV R1,#81H ;DS1302中读时间的首地址MOV R7,#7GETLOOP:CLR T_RSTnopCLR T_CLKnopSETB T_RSTnopMOV B,R1LCALL INPUTBYTE ;写命令字LCALL OUTPUTBYTE ;读时间MOV R0,A ;将从DS1302中读取的时间从内存中保存INC R0 修改地址指针INC R1INC R1SETB T_CLKnopCLR T_RSTnopDJNZ R7,GETLOOPRET向DS1302写一个字节INPUTBYTE:MOV R4,#8INPUTLOOP:MOV A,BRRC AMOV B,AMOV T_IO,CSETB T_CLKNOP;NOP;NOPCLR T_CLKDJNZ R4,INPUTLOOPRET;从DS1302读一个字节OUTPUTBYTE:clr aclr cMOV R4,#8OUTPUTLOOP: NOPMOV C,T_IORRC ASETB T_CLKNOPCLR T_CLKDJNZ R4,OUTPUTLOOPRET3.3温度程序段的程序设计INIT_1820: SETB P3.7CLR P3.7MOV R1,#3TSR1: MOV R0,#107DJNZ R0,$DJNZ R1,TSR1SETB P3.7MOV R0,#25HTSR2: JNB P3.7,TSR3DJNZ R0,TSR2LJMP TSR4TSR3: SETB FLAG1LJMP TSR5TSR4: CLR FLAG1LJMP TSR7TSR5: MOV R0,#117TSR6: DJNZ R0,TSR6TSR7: SETB P3.7RETGET_TEMPER: SETB P3.7LCALL INIT_1820JB FLAG1,TSS2RETTSS2: MOV A,#0CCHLCALL WRITE_1820MOV A,#44HLCALL WRITE_1820LCALL DISPLAY1LCALL INIT_1820MOV A,#0CCHLCALL WRITE_1820MOV A,#0BEHLCALL WRITE_1820LCALL READ_18200RETWRITE_1820: MOV R2,#8CLR CWR1: CLR P3.7MOV R3,#6DJNZ R3,$RRC AMOV P3.7,CMOV R3,#23DJNZ R3,$SETB P3.7NOPDJNZ R2,WR1SETB P3.7RETREAD_18200: MOV R5,#2MOV R1,#41hRE00: MOV R2,#8RE01: CLR CSETB P3.7CLR P3.7SETB P3.7MOV R3,#7RE10: DJNZ R3,RE10MOV C,P3.7MOV R3,#23RE20: DJNZ R3,RE20RRC ADJNZ R2,RE01MOV R1,ADEC R1DJNZ R5,RE00RETDISPLAY1:MOV A,40HJB ACC.7,ZF1mov column4,#16mov pagef4,#4mov codes,#250lcall writeright2ljmp zhijieZF1:mov column4,#16mov pagef4,#4mov codes,#16 lcall writeright2mov a,40hcpl amov dph,amov a,41h cpl amov dpl,ainc dptrmov 40h,dphmov 41h,dplzhijie:MOV A,40HSWAP AANL A,#0F0HMOV 40H,AMOV A,41HSWAP AANL A,#0FHADD A,40HMOV 41H,AMOV B,#10DIV ABMOV b_bit,AMOV a_bit,Bmov column2,#32mov pagef2,#4mov codes,b_bit 十位lcall writerightmov column2,#40mov pagef2,#4mov codes,a_bit 个位lcall writerightRET3.4主程序段的调试程序ORG 0000HLJMP STARTORG 0003HLJMP XX0ORG 0013HLJMP XX1;主程序开始START: MOV TMOD,#01HMOV TH0,#00BH ;置定时器初值(定时50ms)MOV TL0,#0DCHSETB TR0 ;启动定时器0mov 02h,#0MOV SP,#60H ;修改堆栈LCALL INT ;调用初始化子程序LCALL CLEAR ;调用清屏子程序MOV DAY,#01H ;初始日期设为08年1月1日星期一MOV MONTH,#01HMOV YEARL,#08HLCALL SETDS1302 ;设置DS1302初始时间LCALL GET1302 ;从DS1302读取时间LCALL DISPLAY ;数码显示子程序MOV R3,#16 ;循环20次到一秒SETB EASETB EX0setb IT0SETB EX1SETB IT1LP1: JNB P3.1 ,QQ0 ;当p3.1口为低电平时跳过读取时间子程序lJMP QQ2QQ0: MOV TH0,#00BHMOV TL0,#0DCHSETB TR0LCALL NIU ;将调整后的时间放入时 分 秒 星期 年 月 日寄存器中LCALL SETDS1302 ;设置DS1302初始时间LCALL GET1302 ;从DS1302读取时间LCALL DISPLAY ;用12864显示QQ2: JBC TF0,QQ1lJMP LP1QQ1: MOV TH0,#00BHMOV TL0,#0DCHLCALL GET1302 ;每过50Ms从DS1302读取一次时间LCALL DISPLAYQQQ: DJNZ R3,SS100 ;未到1 S继续循环LCALL GET_TEMPER ;每过1s从DS18B20读取一次温度mov r3,#16;整点闹铃1分钟同时在最左上角显示铃铛符号,合上闹铃开关可以提前关掉闹铃MOV A,46HCJNE A,#0,SS100LCALL NAOLCALL NAOLCALL NAOLCALL NAOLCALL NAOmov column3,#0mov pagef3,#0mov codes,#206 ;开闹铃符号lcall writeleft2SS100:MOV A,45HCJNE A,#59H,RI1mov column3,#0mov pagef3,#0mov codes,#210 ;关闹铃符号lcall writeleft2LJMP lp1四系统测试与仿真4.1仿真4.2测试电子万年历是多功能的数字型单片机应用产品,它可以显示当前日期,时间,还有温度。电子成年历功能较多,所以它的程序也较为复杂,所以在编写程序和调试时出现了相对较多的问题。最后经过多次的模块子程序的修改,一步一步的完成,最终解决了这些问题。在软件的调试过程中主要遇到的问题如下:1输入程序后,12864显示屏电亮,而无显示:解决:通过查看ST7920的资料,显示屏上的PSB在串口发送和接收数据时,引脚要接低电平,当把该脚固定接地时,还是没有得到预期的效果,我找到了一个关于ST7920的串口的汇编程序,它上面的PSB是单独的接一个引脚,并且在初始化的时候要置零。我在初始化12864时加了一句(PSB=0;),结果是显示了初始化界面,经过3秒后进入万年历界面,但是里面的数字都没有变化,通过分析程序,发现主程序里少了初始化DS1302和每次循环的刷新语句,在循环外加了一句(Init_1302();/初始化DS1302)和在循环语句里加了一句(updata ();/刷新数据),最后解决了此问题。2加入温度的程序后,进行修改时间、日期时相应的数码管位没有按要求闪动。 解决:由于DS18B20是串行通信数据,只用一个口线传输,在处理采集的模拟信号时需要一定的时间,当把万年历的程序相接入时,会对延时有很大的影响。所以在调用温度子程序时,先关闭定时器1中断允许,在温度子程序反回时再打开定时器1中断允许。最终解决了此问题。4.3测试结果分析与结论经过多次的反复测试与分析,可
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025版商铺租赁服务合同规范范本
- 2025版智能玩具研发与销售一体化合作协议
- 2025春节复工企业员工安全教育培训及考核合同
- 2025版石材外贸代理服务合同协议
- 2025年度城市电力设施拆迁工程承包合同
- 2025年新型城镇化房建施工劳务分包合同范本(含合同履行)
- 2025出国留学资金担保合同范本
- 2025年度散装水泥运输质量保证合同书
- 无人值守食堂管理服务措施
- 高温环境下施工安全与质量控制措施
- 矿山基金管理办法
- 数控加工程序管理办法
- 肥料登记证授权合同范本
- 工业厂房租赁管理办法
- 辽宁动物检疫管理办法
- 小学六年级综合实践环境保护计划
- 肺癌免疫治疗病例分享
- 2025年汽车智能驾驶技术及产业发展白皮书-清华大学
- 2025云南师范大学辅导员考试题库
- 2025年国考行测试题及答案解析
- 联邦学习框架下的设备故障智能诊断算法研究
评论
0/150
提交评论