多功能电子万年历课程设计报告

上传人:靓*** 文档编号:61812736 上传时间:2022-03-12 格式:DOCX 页数:25 大小:290.93KB
收藏 版权申诉 举报 下载
多功能电子万年历课程设计报告_第1页
第1页 / 共25页
多功能电子万年历课程设计报告_第2页
第2页 / 共25页
多功能电子万年历课程设计报告_第3页
第3页 / 共25页
资源描述:

《多功能电子万年历课程设计报告》由会员分享,可在线阅读,更多相关《多功能电子万年历课程设计报告(25页珍藏版)》请在装配图网上搜索。

1、XX三峡学院课程设计报告书题目:基于可调的电子万年历与温度显示学院(系):年级专业:学号:学生XX:指导教师:教师职称:完成日期年月日目录摘要3第一章引言41.1 设计任务41.2 设计目的41.3 设计思路41.3.1方案论证41.3.2 芯片的选择51.3.3 显示模块选择方案和论证51.3.4 时钟信号的选择方案和论证51.3.5 最终方案6第二章硬件系统的设计2.1 原理图设计62.2 温度感应电路72.3 复位电路部分72.4 液晶显木电路72.5 时钟信号电路82.6 AT89C52原理及说明82.6.1 引脚功能9第三章软件系统的设计3.1 系统程序流程图93.2 系统具体程序代

2、码10第四章系统调试234.1 软件调试234.2 硬件调试23第五章设计心得23元件清单表24致谢24参考文献24基于可调式电子万年历与温度显示的设计XX三峡学院应用技术学院摘要:本文介绍了一种基于单片机的可调的电子万年历和温度显示。该设计主要由五个模块组成:微处理器(单片机),温度传感器,控制调节按键,实时时钟模块及显示模块。温传感器器主要由DS18B20来完成,它负责把采集到的温度传给单片机。实时时钟模块主要由DS1302构成,它负责产生始终数据送给单片机,微处理器芯片AT89C52来完成DS18B20,DS1302,按键传来的数据进行处理,并送与显示模块(LCD1602)进行显示。该系

3、统的电路简单,所用的元件较少,成本低,且测量精度和可靠性较高。可以测量-55到+125。的温度和显示年,月,日,星期,时,分,秒,并且可通过按键调节时间。关键词单片机;万年历;温度;AT89C52;LCD1602,DS1302,DS18B20第一章引言1.1设计任务(1)根据具体题目要求,设计以单片机为控制核心的测量系统或控制系统,完成对指定目标或对象的测量及控制。(2)设计单片机与测量及控制对象的接口并进行硬件调试。(3)针对要求测量或控制的对象完成程序的编制。(4)硬件软件联调,完成题目所要求的功能。(5)设计能支持时、分、秒的时钟,时钟要具有时间调整功能。1.2 设计目的(1)通过课程设

4、计,使我们能够深入理解单片机系统的工作原理,接口电路的设计及调试方法,培养综合运用所学理论知识分析和解决实际问题的能力。(2)使用AT89C51芯片的串口功能,利用实时时钟芯片DS1302与液晶显示器LCD1602和DS18D20实现年、月、星期、日、时、分、秒、温度的显示。(3)用keil软件进行编程与调试,利用Proteus7Professional软件进行绘制硬件电路图且进行仿真。1.3 设计思路1.3.1 方案论证单片机芯片的选择方案和论证万案一:采用89C51芯片作为硬件核心,采用FlashROM,内部具有4KBROM存储空间,能于3V的超低压工作,而且与MCS-51系列单片机完全兼

5、容,但是运用于电路设计中时由于不具备ISP在线编程技术,当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,对芯片的多次拔插会对芯片造成一定的损坏。方案一:采用AT89S52,片内ROM全都采用FlashROM;能以3V的超底压工作;同时也与MCS-51系列单片机完全该芯片内部存储器为8KBROM存储空间,同样具有89C51的功能,且具有在线编程可擦除技术,当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,不需要对芯片多次拔插,所以不会对芯片造成损坏,所以选择采用AT89S52作为主控制系统。1.2 显示模块选择方案和论证方案一:采用LED数码管动

6、态扫描,LED数码管价格适中,对于显示数字合适,采用动态扫描法与单片机连接时,虽然占用的单片机口线少,但连线还需要花费一点时间,所以也不用此种作为显示。万案一:采用点阵式数码管显示,点阵式数码管是由八行八列的发光二极管组成,对于显示文字比较适合,如采用在显示数字显得太浪费,且价格也相对较高,所以也不用此种作为显示。方案二:采用LCD液晶显示来实现万年历的显示,我采用的LCD1602芯片,它可以显示16*2个字符,完全可以用于电子万年历的时间和日期的显示内容,但是LCD1602部能显示汉字,对于日期的显示可以采用数字显示的方法。1.3 时钟芯片的选择方案和论证方案一:直接采用单片机定时计数器提供

7、秒信号,使用程序实现年、月、日、星期、时、分、秒计数。采用此种方案虽然减少芯片的使用,节约成本,但是,实现的时间误差较大,所以不采用此TzT7Ko万案一:采用DS1302时钟芯片实现时钟,DS1302芯片是一种高性能的时钟芯片,可自动对秒、分、时、日、周、月、年进行计数,而且精度高,位的RAM做为数据暂存区,工作电压2.5V5.5VX围内,2.5V时耗电小于300nA。1.4 温度显示的选择方案和论证方案一:直接采用的是DS18B20传感器来测试温度,这样既简单又方便,对于在短时间就可以掌握的温度传感器。1.5 最终确定芯片的选择方案和论证综上各方案所述,对此次作品的方案选定:采用AT89S5

8、2作为主控制系统;DS1302提供时钟;LCD1602液晶显示屏作为显示,DS18B20传感器作为温度测试。1.6 .2芯片的选择采用AT89C51芯片,其为高性能CMOS8位单片机,该芯片内含有4kbytes的可反复擦写的只读程序存储器(PEROM)、128bytes的随机存取数据存储器(RAM)、32位可编程I/O口线、2个16位定时/计数器、6个中断源、可编程串行UART通道及低功耗空闲和掉电模式。因此,我们选用AT89C51。1.7 .3显示模块选择方案和论证采用LCD液晶显示,显示较为清楚直观,时间和日期在液晶显示器LCD1602中分两行来显示。1.8 .4时钟信号的选择方案和论证直

9、接采实时时钟DS1302芯片来给予电子万年历的初始信号,系统直接在DS1302中读取时间和日期,并且可以修改DS1302中的初始时间和日期。时钟和日期的修改通过三个按键设置,分别为模式按键、曾量按键、减量按键。1.9 .5最终方案综上方案所述,对于可调的电子万年历与温度显示方案选定为:AT89C51作为主控器,DS1302作为时钟信号,LCD1602作为显示器,DS18B20作为测温器。图1第二章硬件系统的设计2.1 原理图设计此次单片机数字时钟的设计采用AT89C51为主控制芯片,并由实时时钟DS1302芯片提2.2 温度感应电路图3由图3所示温度感应电路是由一个DS18B20传感器作为主要

10、器件,采用单总线传输数据与电阻R2来线与。2.3 复位电路部分单片机在启动运行时都需要复位,使CPU和系统中的其他部件都处于一个确定的初始状态,并从这个状态开始工作。MCS-51单片机有一个复位引脚RST采用施密特触发输入。当震荡器起振后,只要该引脚上出现2个机器周期以上的高电平即可确保时器件复位1。复位完成后,如果RST端继续保持高电平,MCS-51就一直处于复位状态,只要RST恢复低电平后,单片机才能进入其他工作状态。单片机的复位方式有上电自动复位和手动复位两种,图6是51系列单片机统常用的上电复位电路。图4复位电路2.4 液晶显示电路LCD1LM11CL不至JIFXFF 父 一Z1IPg

11、AD口EM俄DIFDADZFOJA&lFD.WAD*FOUADSrz.ifflePNNR1口郛.PZA-11FZiSfA-13舞,P3J/A1SPIURXDP31QXDPlTkHim图5通过图五可以看出液晶显示芯片与单片机之间的数据传输是由液晶显示的D0D7口和单片机的P2口来进行数据之间的传输。由于我们没有用到液晶显示器的背光所以就没有对VSS与VEE提供工作电压,由于液晶显示芯片的数据不用被单片机所读取,所以这里我们就直接给予液晶显示器读端R给予低电平这样单片机就只能对晶显示器写入数据.液晶显示器的RS端是控制是传送数据还是传送指令直接接在单片机的P3.0口。2.5 时钟信号电路图6根据图

12、6可以看出我们采用的是DS1302实时时钟芯片,这个这个芯片完全可以提供我们所设计的电子万年历的日期与时间,在使用时需提供一个32.768MHZ的晶振来给予芯片的时钟信号,实时时钟芯片它采用的是I/O总线传输。2.6 AT89C52原理及说明AT89C52美国Intel公司生产的低电压,高性能CHMOS8位单片机,片内含4kbytes的可反复擦写的只读程序存储器(PEROM)和蔼可亲128bytes的随机存取数据存储器(RAM),器件采用Intel公司的高密度、非易失性存储技术生产,片内置通用4位中央处理器(CPU)和Flash存储单元,功能强大AT89C51单片机适合于许多较为复杂控制应用场

13、合。PLO-PL1-Pl.2-Pl3-Fh*-PI4”PL7W肝P3J0RXD-P3.JTXD-叨而心P34TD-P3J_T1*?55wr-MJWD-XTAU-XTALI-co I 2 3 4 5 6 7 7 6 -3 4 3 2 I o %pt)po.foFOpoFO.poroQ.!出陞F2,P2.血包F2.F2,P1AT89C52脚图2.6.1 引脚功能Vcc(40):电源电压GND(20):接地P0口(32-39):P0口是一个8位双向I/O接口,也即地址/数据总线复用口。作为输出口用时,每位吸收电流的方式驱动8个TTL逻辑门电路,对端口P0写“1”时,可作为高阻抗输入端用。在访问外部数

14、据存储器时,这组口线分时转换地址(低8位)和数据总线复用。P1口(1-8):P1是一个带内部上拉电阻的8位双向I/O口,P1的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路,对端口写“1”通过内部的上拉电阻把端口拉到高电平时,此时可作输入口。作为输入品使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流。RST(9):复位信号输入端。当振荡器工作时,RST引脚出现两个机器周期以上高电平将使单片机复位。ALE/PROG(30)地址锁存有效信号输出端。当访问片外程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节,一般情况下,ALE仍以时钟振荡频

15、率的1/6输出固定的脉冲信号,因此它可对外输出时钟或用于定时目的,要注意的是:每当访问外部数据存储器时将跳过一个ALE脉冲。XTAL1(19):振荡器反相放大器的及内部时钟发生器的输入端。XTAL1(18):振荡器反相放大器的输出端。通过XTAL1、XTAL2外接晶振后,即可构成自激振荡器,驱动内部时钟发生器向主机提供时钟信号第三章软件系统的设计DS1302、液晶显示器LCD1602、温度彳感器DS18B2R和定时器T0的初始化,还有时钟的时间设定与读取、液晶的显示与按键处理等。3.1 系统程序流程图开始*崔汕才描初始化E3S1SB2O DS 1201602, 定时皓定时静中断函主随副中斯函数

16、图8为了实现时间和日期的显示功能,需要在DS1302中读取时间和日期,并送LCD1602中显示,这样需要设计DS1302和LCD1602进行初始化程序、DS1302的时间日期的读取和修改程序、LCD1602的初始化和显示程序。另外时间和日期需要修改,则需要设计按键处理子程序。系统主程序流程图如图所示。系统首先对LCD1602、DS1302和定时器T0初始化后,只是循环的调用按键处理子程序,检测是否需要调节时间。程序在定时器T0中断服务程序中,定时读取DS1302的时间和日期并送液晶显示。3.2 系统具体程序代码可调的电子万年历与温度显示系统的具体程序代码如下:(1)函数声明及变量定义为方便程序

17、的编写,把部分常用的变量进行伪定义。/*函数声明,变量定义*/#defineucharunsignedchar/*宏定义,在下文出现uchar都表示无符号字符型*/#defineuintunsignedint/*宏定义,在下文出现uint都表示无符号整型*/sbitrs=P3A0;/*根据系统的整体电路连接AT98C52的并行接口*/sbite=P3A1;sbitio=P3A7;sbitrst=P3A5;sbitsck=P3A6;sbitkey1=P1A0;sbitkey2=P1A1;sbitkey3=P1A2;sbitDQ=P1A7;ucharstrl口=-Week:;/*定义一个数组名为s

18、trl的数组*/ucharstr2口=T:.C;/*因为这些是固定不变得字符,所以可以将它以一个固定的字符形式*/uchartable2尸”0123456789;/*定义一个数组,里面是显示的年月日温度等字符*/uchartablel尸6712345”;/*显示星期的字符*/ucharwrite_add7=0x8c,0x8a,0x88,0x86,0x84,0x82,0x80;/*写地址*/ucharread_add7=0x8d,0x8b,0x89,0x87,0x85,0x83,0x81;/*读地址*/ucharinit17=12,5,10,26,15,46,35;/年周月日时分秒ucharin

19、it07;ucharnum,sec,min,hour,dat,mon,year,week;uinttemp;floatf_temp;(2)main():主函数在主函数中主要是完成液晶LCD1602、实时时钟芯片DS1302、温度传感器DS18B20和定时器T0的初始化。然后一直检测调用按键处理子程序。/*主函数*/voidmain()int_t();/*调用定时器初始化子程序*/init_lcd();/*调用液晶显示初始化子程序*/*/init_ds18b20();/*调用温度传感器初始化子程序/set_rtc();/*调用DS1602初始化子程序*/while(1)keycan();/*一直

20、循环调用按键检测*/(3)液晶显小程序部分在本部分主要是液晶显示所需要的子程序、显示时间日期星期等。voidwrite_dat(uchardat);写数据子程序;voidwrite_(uchar);写命令子程序;voidinit_lcd();液晶初始化子程序;voidpros(),液晶显示子程序;具体程序代码如下:1) voidwrite_dat(uchardat);写数据子程序;该子程序功能为向LCD1602中写数据。写数据时,输入rs=H,R/W=L,D0D74据,e=高脉冲;输出:无。/*向LCD1602写数据*/voidwrite_dat(uchardat)rs=1;delay(1);

21、/*置为写入数据*/e=1;delay(1);/*拉高使能端*/P2=dat;/*送入数据*/e=0;delay(1);/*完成高脉冲*/rs=0;2) voidwrite_(uchar);写命令子程序;该子程序功能为向LCD中写命令字。写指令时,输入:rs=L,R/W=L,D0D7=f令码,e=高脉冲,输出:无。*向LCD1602写指令*/voidwrite_(uchar)rs=0;delay(1);/*置为写入命令*/e=1;delay(1);/*拉高使能端*/P2=;/*写入数据*/e=0;delay(1);/*完成高脉冲*/rs=1;3) voidinit_lcd();液晶初始化子程序

22、;该程序为初始化液晶,包括清楚屏幕、开显示、设置光标是否显示、是否闪烁、输入字符后光标左右移动方向、屏幕是否移动,屏幕的显示放肆是2行还是1行,字符的点阵、数据线的位数是8位还是4位,并显示不需要变动的部分。一般情况下,设置16*2显示、5*7点阵、8位数据接口、光标左移、显示屏海、开显示光标、不闪烁、清屏。/*初始化lcd1602液晶*/voidinit_lcd()/*液晶初始化函数*/uchari;write_(0X38);delay(100);/*16*2,5*7点阵,8为数据线/write_(0x0c);/*开始是不显示光标不闪烁*/wAte_(0x06);/*显示不移动,光标右移*/

23、write_(0x01);/*清屏*/write_(0x80+0x00);/*第一行字符写入的位置*/for(i=0;i16;i+)write_dat(str1i);delay(5);write_(0x80+0x40);/*第二行字符写入的位置*/for(i=0;i16;i+)write_dat(str2i);delay(5);4) voidpros(),液晶显示子程序;该程序可用于在1602对应位置显示年、月、日、时、分、秒、星期、温度。/*1602液晶显示温度与时间*/voidpros()write_(0x80+0x40+11);wAte_dat(table2readtemperature

24、()/100);write_(0x80+0x40+12);write_dat(table2readtemperature()%100/10);write_(0x80+0x40+14);write_dat(table2readtemperature()%10);write_(0x80+0x40+9);write_dat(table2sec%10);write_(0x80+0x40+8);write_dat(table2sec/10);write_(0x80+0x40+6);write_dat(table2min%10);write_(0x80+0x40+5);write_dat(table2mi

25、n/10);write_(0x80+0x40+3);write_dat(table2hour%10);write_(0x80+0x40+2);write_dat(table2hour/10);write_(0x80+7);write_dat(table2dat%10);write_(0x80+6);write_dat(table2dat/10);write_(0x80+4);write_dat(table2mon%10);write_(0x80+3);write_dat(table2mon/10);write_(0x80+14);write_dat(table1week%10);write_(

26、0x80+1);write_dat(table2year%10);write_(0x80);write_dat(table2year/10);(4)DS1302程序部分在本部分主要是实时时钟芯片DS1302的字节读、字节读、写对应地址数据、向对应地址写数据和初始化等,具体为:voidset_rtc();初始化DS1302;voidwrite_byte(uchardat);向DS1302写一个字节;ucharread_ds1302(ucharadd);从DS1302的寄存器读取数据;ucharbcd(uchara);数据的转换;voidread_rtc();从DS1302读取数据voidwrit

27、e_ds1302(ucharadd,uchardat)向DS1302的寄存器写数据具体程序代码如下:1) voidset_rtc();初始化DS1302;通过调用此函数完成DS1302的初始化,启动DS1302工作。/*初始化DS1302*/voidset_rtc()uchari,j;for(i=0;i7;i+)j=init1i/10;init1i=init1i%10;init1i=init1i+j*16;write_ds1302(0x8e,0x00);for(i=0;i7;i+)write_ds1302(write_addi,init1i);write_ds1302(0x8e,0x80);2

28、) voidwrite_byte(uchardat);向DS1302写一个字节;该函数中,待发送数据被送入ACC寄存器,通过向右移位的方式,将ACC最低位数据通过io口发送至DS1302中,每一位数据是在时钟信号clk的下降沿接收的。/*向DS1302写一个字节*/voidwrite_byte(uchardat)uchari;for(i=0;i=1;sck=1;3) ucharread_ds1302(ucharadd);从DS1302读一个字节;该函数中,通过io口接受DS1302的发送数据,每一位数据是在时钟信号clk的下降沿接收的,每接受一位数据,ACC中的数据就右移一位,8位数据接受完毕

29、后,将读取的数据返回。/*从DS1302读一个字节*/ucharread_ds1302(ucharadd)uchari,dat;rst=0;_nop_();sck=0;_nop_();rst=1;_nop_();write_byte(add);for(i=0;i=1;sck=0;if(io)dat=dat|0x80;sck=1;rst=0;_nop_();sck=0;_nop_();sck=1;io=1;returndat;4) voidread_rtc();从DS1302里读数据;其中add是待读数据的地址, 返回为该函数可以完成向目的地址读出一个字节数据的功能,读取的数据。/*从DS130

30、2里读数据*/ucharbcd(uchara)uchardat;dat=a4;return(dat=dat*10+(a&=0x0f);voidread_rtc()sec=bcd(read_ds1302(0x81);min=bcd(read_ds1302(0x83);hour=bcd(read_ds1302(0x85);dat=bcd(read_ds1302(0x87);mon=bcd(read_ds1302(0x89);week=bcd(read_ds1302(0x8b);year=bcd(read_ds1302(0x8d);5) voidwrite_ds1302(ucharadd,uchar

31、dat)向DS1302写数据add是待写入数据的地址,该函数可以完成向目的地址写入一个字节数据的功能,其中dat是待写入的数据。/*向DS1302写数据*/voidwrite_ds1302(ucharadd,uchardat)rst=0;_nop_();sck=0;_nop_();rst=1;_nop_();write_byte(add);write_byte(dat);rst=0;_nop_();sck=1;io=1;(5)ucharset_rtc1(uchardat)按键处理子程序按键处理子程序,主要是检测功能按键是否按下,按下后再检测增量键和减量键实现年、月、日、时、分、秒、星期、温度的

32、调节作用。/*按键检测*/ucharset_rtc1(uchardat)ucharj;j=dat/10*16+dat%10;returnj;voidkeycan()if(key1=0)delay(10);if(key1=0)num+;switch(num)case 1: write_(0x80+0x49);write_ds1302(0x8e,0x00);write_ds1302(0x80,0x80|set_rtc1(init06);write_(0x0f);TR0=0;break;case 2: write_(0x80+0x46);break;case 3: write_(0x80+0x43)

33、;break;case 4: write_(0x80+0x0e);break;case 5: write_(0x80+0x07);break;case 6: write_(0x80+0x04);break;case 7: write_(0x80+0x01);break;case 8: num=0;write_(0x0c);TR0=1;write_ds1302(0x8e,0x80);write_ds1302(0x80,0x00|set_rtc1(init06);break;while(!key1);if(num!=0)if(key2=0)delay(10);if(key2=0)switch(nu

34、m)case1:sec+;if(sec=60)sec=0;write_(0x80+0x40+9);write_dat(table2sec%10);write_(0x80+0x40+8);write_dat(table2sec/10);write_ds1302(0x80,set_rtc1(sec);break;case2:min+;if(min=60)min=0;write_(0x80+0x40+6);write_dat(table2min%10);write_(0x80+0x40+5);write_dat(table2min/10);write_ds1302(0x82,set_rtc1(min

35、);break;case3:hour+;if(hour=24)hour=0;write_(0x80+0x40+3);write_dat(table2hour%10);write_(0x80+0x40+2);write_dat(table2hour/10);write_ds1302(0x84,set_rtc1(hour);break;case4:week+;if(week=8)week=1;write_(0x80+14);write_dat(table2week%10);write_ds1302(0x8a,set_rtc1(week);break;case5:dat+;if(dat=32)dat

36、=1;write_(0x80+7);write_dat(table2dat%10);write_(0x80+6);write_dat(table2dat/10);write_ds1302(0x86,set_rtc1(dat);break;case6:mon+;if(mon=13)mon=1;write_(0x80+4);write_dat(table2mon%10);write_(0x80+3);write_dat(table2mon/10);write_ds1302(0x88,set_rtc1(mon);break;case7:year+;if(year=100)year=0;write_(

37、0x80+1);write_dat(table2year%10);write_(0x80+0);write_dat(table2year/10);write_ds1302(0x8c,set_rtc1(year);break;while(!key2);if(key3=0)delay(10);if(key3=0)switch(num)case1:if(sec=0)sec=59;sec-;write_(0x80+0x40+9);write_dat(table2sec%10);write_(0x80+0x40+8);write_dat(table2sec/10);write_ds1302(0x80,s

38、et_rtc1(sec);break;case2:if(min=0)min=59;min-;write_(0x80+0x40+6);write_dat(table2min%10);write_(0x80+0x40+5);write_dat(table2min/10);write_ds1302(0x82,set_rtc1(min);break;case3:if(hour=0)hour=23;hour-;write_(0x80+0x40+3);write_dat(table2hour%10);write_(0x80+0x40+2);write_dat(table2hour/10);write_ds

39、1302(0x84,set_rtc1(hour);break;case4:if(week=0)week=7;week-;write_(0x80+14);write_dat(table2week%10);write_ds1302(0x8a,set_rtc1(week);break;case5:if(dat=0)dat=31;dat-;write_(0x80+7);write_dat(table2dat%10);write_(0x80+6);write_dat(table2dat/10);write_ds1302(0x86,set_rtc1(dat);break;case6:if(mon=0)mo

40、n=12;mon-;write_(0x80+4);write_dat(table2mon%10);write_(0x80+3);write_dat(table2mon/10);write_ds1302(0x88,set_rtc1(mon);break;case7:if(year=0)year=99;year-;write_(0x80+1);write_dat(table2year%10);write_(0x80+0);write_dat(table2year/10);write_ds1302(0x8c,set_rtc1(year);break;while(!key3);(6)DS18B20程序

41、部分voidinit_ds18b20(void);初始化DS18B20voidwrite_byte_18b20(uchardat);向DS18B20写一个字节;ucharread_byte(void)从DS18B20;读一个字节;uintreadtemperature(void);从DS18B20里读取温度1) voidinit_ds18b20(void);初始化DS18B20/*初始化DS18B20*/voidinit_ds18b20(void)DQ=1;delay1(4);DQ=0;delay1(100);DQ=1;delay1(40);2) voidwrite_byte_18b20(uc

42、hardat);向DS18B20写一个字节;/*向DS18B20写一个字节*/voidwrite_byte_18b20(uchardat)uchari;for(i=0;i=1;delay1(4);3) ucharread_byte(void)从DS18B20;读一个字节;/*从DS18B20读一个字节*/ucharread_byte(void)uchari,value;for(i=0;i=1;DQ=1;if(DQ)value|=0x80;delay1(10);returnvalue;4) uintreadtemperature(void);从DS18B20里读取温度/*从DS18B20里读取温

43、度*/uintreadtemperature(void)uchara,b;init_ds18b20();write_byte_18b20(0xcc);/跳过ROMwrite_byte_18b20(0x44);/启动温度测量delay(300);init_ds18b20();write_byte_18b20(0xcc);write_byte_18b20(0xbe);a=read_byte();b=read_byte();temp=b;temp0;i-)for(j=110;j0;j-);voiddelay1(uchart)while(t-);第四章系统调试硬件调试打开Proteus7.5Profe

44、ssional软件,按照方案所选的电路元件来设计整体电路,线把个芯片按一定的位置放好,然后对相应的对象进行连接,连接时需仔细,以免调试时发生错误。做好之后把编程所生成的。HEX文件加载到AT89C51中,运行仿真软件,查看运行效果。如果运行出错那么就根据他相应的提示来修改错误,直到仿真成功为止。第五章设计心得通过接近两个星期的单片机课程设计实训,让我感触颇深。这次我们组选择了一个比较实用的课题一一可调的电子万年历与温度显示设计,在本次设计中,设计到了我们以前从没接触到的一些新的芯片,一块是实时时钟DS1302芯片,一块是液晶显示器LCD1602,一块是温度传感器DS18B20,不得不说这是一个

45、具有挑战性的设计,在这短暂的两个星期内既要掌握两块芯片的工作原理,各个引脚的功能,连接方法,还要掌握初始化等。因此两个星期的时间是非常的紧迫,但是通过我们的不断努力在两个星期之内还是非常圆满的设计出来了,当然在设计过程中也遇到了一些困难,不过我们在网上下载了一些资料、视频等材料,通过仔细查阅把这些问题都给解决了,在设计过程中主要遇到的一些难道在,第一:是在液晶显示的设计上面出现的问题,我们采用的芯片是LCD1602是2行16列的芯片,由于是自己动手编的程序,在初始化上需要注意第一行和第二行的首地址,而且在编源程序代码的过程中,显示时,总是在两行显示同样的字符,但是我们借助于图书馆、网络等资源将

46、该问题解决了。第二:对于时间和日期修改时所用的按键编程上出现了一点小问题,主要原因是因为C语言编程方面还不是很熟悉,才会出现这些问题。第三:老师要求我们改为串行通信,由于时间的问题我们就没有再改了。不过,总的来说经过谢老师的指导与组员的努力还是能够完满的完成了这次的课程设计。不能绝对的说整个系统的每一个部件每一个功能都完全掌握了,只能说我们对它表面的功能、工作原理和各个引脚的功能等都是比较清楚的。通过此次课程设计让我学到了很多新的知识点,同时也让我学会了自主学习和团队精神,并且将理论用实践来证明。如果此次课程设计不是用软件proteus和keil仿真我相信我们会学到更多,因为很多方面在仿真是看

47、不出来问题的,只有自己动手焊板子,一步一步脚踏实地才能学得会。元件清单表编R名称型号数量大小备注1单片机AT89C5212实时时钟芯片DS13021个32.768MHZ的晶振3温度传感器DS18B201单总线传送4液晶显小芯片LCD16021不能显示汉字5电阻R1110K6电阻R214.7K7电容C1130PF8电容C2130PF9电容C3110uF10按键K311晶振232.768MHZ致谢本课程设计在选题及进行过程中得到谢辉老师的悉心指导。课程设计过程中,谢老师多次帮助我们小组分析思路,开拓视角,在我们小组遇到困难想放弃的时候给予我们最大的支持和鼓励。谢老师严谨XX的治学态度,踏实坚韧的工作精神,将使我们终生受益。再多华丽的言语也显苍白。在此,谨向周老师致以诚挚的谢意和崇高的敬意。在本课程设计过程中,班上的一些同学、朋友也给了我们巨大的帮助与鼓励。在此一并感谢。在我们的成长、学习过程中,能够在大学阶段学习到单片机的知识,是我们一生的荣幸与财富。相信,在未来的日子里我们会更加努力学习,充分利用所学知识,回报社会、师长。参考文献:1X锋.51单片机典型应用开发X例大全.中国铁道,2011.102谢辉.单片机原理及应用.化工,2010.8

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!