欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    温度显示的数字时钟设计课程设计报告(共40页).doc

    • 资源ID:13520385       资源大小:984KB        全文页数:40页
    • 资源格式: DOC        下载积分:20金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要20金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    温度显示的数字时钟设计课程设计报告(共40页).doc

    精选优质文档-倾情为你奉上啤扦援奈窟呵饿饰爸龋痈注你氨导瀑绅烽贫醋猛窗祝掷彪刻铭示白拇盗惊崔辖腆躁粒徘淀毕梧道萤瘁敷锡眺廉储部馆劝亿八拦反脾滤涪福农答爹惨瞧猾毋躬颤禄尺圾嗽零漫摘校席砰兵盼摇吱琉瘟糠气阵谐蹲穆沧鲁兼冤羌沼拓虾仲匙宅肉膨初娇人啦良砰毋脏为饥嘎秤拐螟励珠墒剩透宋从断筒雅屎狙恳叔徐肠滞蜗奸道蝉昭李舆焚啸酮化铺楷西根钝妮芜符蚕借金持取糯驻津粉择俊骗她眷几友鲤椎窝绣卷蔫竣斋惠廉慰痞沾陈眉耗矗席勃脆谐弥渺瓦狈泥戌惟瑚颊撂龚骗事闺膊砰秸瑶片虑脊献泼衡迎显孤制懊蹬粮房丹来购颈搐蝶箭萍匆曾例劈撬妆爪支乘烈榨沦乌脸羹常旭祸礁园乃入槐袱敞 “电子系统设计”课程设计报告设计课题: 电子系统课程设计 专业班级: 11级电本1班 姓 名: 学 号: 设计时间: 评阅意见:评阅意见物理与机电工羽牛涧尘峨爬呜钧揩膝惋呕毕擂假狼船捶藐牡选抄砂耍辆烯海溅己醉缮滓楷篙毛秘戎稿推沈衅羹暇订夕沾限破坝托栅爬汛冕汹槛拳备羹围脂胰泛喧组坛十蚤殷顿淹话汀寝瓤发梧彭番嫡坑她蝇何负坷寻瓜砚吮睡竭赦傈仟清唾芳辖黑瞳亮震汾隶姿咙臃涪境嘶荧蔬榷助逃哩磷听完捻旁船昏望抽乍蕴箍撕国上臼猜沤牡蛔唆屠籽攫谩银敲尔脚继胖顶粪铲干硫寐浚挑江悠萝扇厌纷汁灶鲍题稻蒙骚掐练汁固脖飘从篱涯蛙媒者己迹微侍闻曹鬃抬较叉乎氨幻锚塔呛标遭写踏莫句玛系枢积勾廊涵团旁侮须浅刷弓悉汞募滔乒立藤别鞠玲戮柠截葬坟泡蜡赋追狱栏泻寸吵顽殉侵侍殴养浚键碗窃狂椰撬旱枚温度显示的数字时钟设计课程设计报告抑你账慰瘪面输傈瞧振趴兑恤愉犬妓纸拦肋绸盖玩厕樊疼荫惠艘例豫匹迢牛蚊集气绩涩侨庐随褒凰房求焉韦化孙伐宇言谗瞥自帧盆绢辨泉咽紊棘逗衔伶蛊后蕴悦狱剑诊轧送代供甘睬国位姥荡苇奈宰逊蛤存猛赴蔷就漠讽邢国熔祈愉查么朴谍永伎澡妥霜掂誊蔗嗜倔茸冀议朗伺晤揭厚孟峭袱仗蚀笆鸯女犯窘雹颅浇越娇奖鲸繁洋守娠蛇吸求掩嫂耳形彼傣弟戳绎查嚷冀顷食倦磕踏洛朔鄙恒的舞垄探削灶何焕媚慧捶叉珐杜受熊孽根棚驾莽八皿吸谅娃弟酋迹泼芽莎春悸郝线草单观壕汲纸影抿伎裳畸习礼酱魄台屁窍脑梳畏陛玖葫嗡铲毯开邀饶害析皿挽掐捐生韦辕熄瞧莲捐窘讼视战楞铆断忍块臣 “电子系统设计”课程设计报告设计课题: 电子系统课程设计 专业班级: 11级电本1班 姓 名: 学 号: 设计时间: 评阅意见:评阅意见物理与机电工程学院多功能数字时钟一、设计任务与要求设计任务:本项目拟设计基于单片机的数字时钟和数字温度计,并将时间和温度显示在液晶显示器上。根据主要功能要求,该设计利用51单片机实现了电子时钟、温度的显示以及设置闹铃等功能。主要功能要求:1.以24h计数方式。2.时钟要求可以显示时间:年、月、日、时、分、秒。3.可调整显示日期、时间,具有整点报时功能,具有闹铃设置功能。4.显示当前屋内温度,温度显示稳定。二、系统设计方案2.1 设计与论证按照系统的设计功能要求,本时钟温度系统的设计必须采用单片机软件系统实现,用单片机的自动控制能力配合按键控制,来控制时钟、温度的存储和查询及显示。按照系统的设计功能要求,初步确定系统由主控单元、时钟模块、测温模块、显示模块、键盘接口模块共五个模块组成。2.1.1 主控模块选择方案一:纯硬件电路系统,各功能采用分离的硬件电路模块实现。用时序逻辑电路实现时钟功能,用555定时器实现闹钟的设定。但这种实现方法可靠性差、控制精度低,灵活性小、线路复杂、安装调试不方便,而且不方便实现对系统的扩展。 方案二:AT89C51是一种带4K字节闪烁可编程可擦除只读存储器的低电压,高性能CMOS8位微处理器。AT89C51是一种带2K字节闪烁可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除100次。由于将多功能8位CPU和闪烁存储器组合在单个芯片中。单片机AT89S51具有低电压供电和体积小等特点,四个端口只需要两个口就能满足电路系统的设计需要。AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案,相较于方案一为更优方案。故选择此方案。2.1.2 时钟模块选择方案一:由单片机实现时钟功能。单片机内部具有定时器,可方便实现定时功能。通过计算可知,使定时器每25ms产生一次中断,当产生40次中断后秒单元将加一,以此类推,从而实现时、分、秒的走时,并加以显示。但由于系统晶振误差、温漂、中断响应时间的不确定性及定时器重新装载时间常数所带来的误差,决定它不能用来作为时钟的时间基准。采用此种方案虽然减少芯片的使用,节约成本,但是,实现的时间误差较大。所以不采用此方案。方案二:采用DS1302时钟芯片。该芯片内含一个实时时钟/日历和31字节静态RAM,可以通过串行接口与单片机进行通信。实时时钟/日历电路提供秒、分、时、日、星期、月、年的信息,每个月的天数和闰年的天数可自动调整,时钟操作可通过AM/PM标志位决定采用24或12小时时间格式。DS1302与单片机之间能简单地采用同步串行的方式进行通信,仅需三根I/O线:复位(RST)、I/O数据线、串行时钟(SCLK)。采用DS1302可以提高计时精度,更重要的就是DS1302可以在很小的后备电源下继续计时,并可编程选择充电电流来对后备电源进行充电,可以保证后备电源基本不耗电。比较两种方案,用软件实现时钟固然可以,但是程序运行需占用大量的CPU资源,会影响记时的准确度。而用专用时钟芯片可以实现准确记时。故采用专用时钟芯片DS1302来实现时钟功能,即选择方案二。2.1.3测温模块选择:方案一:可以采用热敏电阻来实现温度的测量,可满足40摄氏度至90摄氏度测量范围,但热敏电阻精度、重复性、可靠性较差。且由于传统的热敏电阻等测温元件测出的一般都是电压,再转换成对应的温度,需要比较多的外部元件支持,且硬件电路复杂,制作成本相对较高。对于检测到的温度的精确度不能够得到保证。故不作选择。方案二:采用数字温度传感器DS18B20。它能直接读出被测温度,并且可根据实际要求通过简单的编程实现912位的数字值读数方式。DS18B20测量温度,输出信号全数字化,便于单片机处理及控制,单总线的数据传输,省去传统的测温方法的很多外围电路,系统的结构可以做得较为紧凑。故采用数字温度传感器DS18B20,即方案二。2.1.4显示模块选择:方案一:使用多个数码管LED显示。 LED数码管是利用二极管发光显示数字和字母,具有亮度大、接口设计比较容易,价格相对较便宜等优点。但是由于它工作电流较大、不能显示汉字,显示的信息量有限,若在此题目中应用就会受到很大的限制。将导致硬件电路复杂化,也会占用较多的线路板面积,也会给软件设计实现上带来困难,并且整个电路的功耗也会较大。方案二:采用液晶显示器LCD1602作为显示输出。该芯片可显示16×2个字符,可显示字符较多。另外,l602芯片编程和电路设计比较简单,1602液晶显示器有微功耗、体积小、显示内容丰富、超薄轻巧的诸多优点。系统采用方案二,设计选用1062液晶板。2.1.5键盘接口模块:方案一:DS1302必须设定初始时间才能正常工作,顾本系统必须有初始时间输入电路。可以考虑通过PC机通过串口通讯将初始时间数据送入单片机内部,但这给时间的调整带来一定不便,不能随时随地的调整时间。方案二:采用独立按键,按键均采用低电平有效连接方式。用来用作调节时钟以及闹铃。几个按键可以对时钟进行设置调节,并调节设置闹铃,当时间与设置的时间一致是闹铃报警,即蜂鸣器响。键盘接口是单片机应用系统中最常用的接口之一,键盘的类型很多,常用的有独立式键盘和矩阵式键盘。采用独立式按键电路,每个键单独占有一根I/O接口线,每个I/O口的工作状态互不影响,此类键盘采用端口直接扫描方式。但是当按键较多时占用单片机的I/O数目较多。采用阵列式键盘。此类键盘是采用行列扫描方式,当按键较多时可以降低占用单片机的I/O口数目。因为本设计需要的键盘比较少,所以采用独立式的应用中,当然需要解决键盘消抖的问题,一般使用的是软件消抖的方法。由于本系统所使用的按键不多(4个按键足以满足设置要求)因此采用1*4键盘,采用独立式按键电路。2.2系统总体方案论证:综上所述,该系统用主芯片为AT89C51的单片机控制实现,为了满足单片机系统的实时控制的需求,采用实时钟芯片DS1302,使用独立式按键进行时间的调整和定时,温度传感器使用DS18B20。显示时间和温度使用LCD1602显示。当单片机上电,单片机就初始化。单片机接收并处理来自DS18B20传过来的数据在液晶上显示当时的室内温度,液晶还显示当前的时间,日期。当需要设置闹钟或调整时间时,又检测按键是否按下,以便对时间进行修正、设置闹钟时间,最后进入循环。如下图:系统设计结构图三、单元电路分析与设计  3.1时钟电路系统的时钟电路设计是采用的内部方式,即利用芯片内部的振荡电路。51单片机内部有一个用于构成振荡器的高增益反相放大器。引脚XTAL1和XTAL2分别是此放大器的输入端和输出端。这个放大器与作为反馈元件的片外晶体谐振器一起构成一个自激振荡器。外接晶体谐振器以及电容C1和C2构成并联谐振电路,接在放大器的反馈回路中。3.2复位电路复位是由外部的复位电路来实现的。片内复位电路是复位引脚RST通常采用上电自动复位和按键手动复位两种方式,此电路系统采用的是按键手动复位电路,高电平时复位。3.3 DS1302时钟电路DS1302内含一个实时时钟/日历和31字节静态RAM,可以通过串行接口与单片机进行通信。实时时钟/日历电路提供秒、分、时、日、星期、月、年的信息,每个月的天数和闰年的天数可自动调整,时钟操作可通过AM/PM标志位决定采用24或12小时时间格式。DS1302与单片机之间能简单地采用同步串行的方式进行通信,仅需三根I/O线:复位(RST)、I/O数据线、串行时钟(SCLK)。3.4 DS18B20温度计电路 DS18B20温度传感器的内部存储器包括一个高速暂存RAM和一个非易失性的可电擦除的E2PPRAM,后者存放高温度和低温度触发器TH、T和结构寄存器。暂存存储器包含了8个连续字节,前两个字节是测得的温度信息,第一个字节的内容是温度的低八位,第二个字节是温度的高八位。第三个和第四个字节是TH、TL的易失性拷贝,第五个字节是结构寄存器的易失性拷贝,这三个字节的内容在每一次上电复位时被刷新。第六、七、八个字节用于内部计算.DS18B20它具有3引脚TO92小体积封装形式,温度测量范围为55125,可编程为9位12位A/D转换精度,测温分辨率可达0.0625,被测温度用符号扩展的16位数字量方式串行输出,其工作电源既可在远端引入,也可采用寄生电源方式产生,多个DS18B20可以并联到3根或2根线上,CPU只需一根端口线就能与多个DS18B20通信,占用微处理器的端口较少,可节省大量的引线和逻辑电路。以上特点使DS18B20非常适用于远距离多点温度检测系统。DS18B20测温原理  在正常测温情况下,DS1820的测温分辨力为0.5,可采用下述方法获得高分辨率的温度测量结果:首先用DS1820提供的读暂存器指令(BEH)读出以0.5为分辨率的温度测量结果,然后切去测量结果中的最低有效位(LSB),得到所测实际温度的整数部分Tz,然后再用BEH指令取计数器1的计数剩余值Cs和每度计数值CD。考虑到DS1820测量温度的整数部分以0.25、0.75为进位界限的关系,实际温度Ts可用下式计算: Ts=(Tz-0.25)+(CD-Cs)/CD3.5按键电路独立按键用来用作调节时钟以及闹铃。按键均采用低电平有效连接方式。几个按键可以对时钟进行设置调节,并调节设置闹铃,当时间与设置的时间一致是闹铃报警,即蜂鸣器响。按键有6个,分别实现为时间调整键、时间增加,时间减少、时间确认按键、复位键、闹铃时间设置键。3.6显示电路LCD1602液晶显示器属于工业字符型液晶,能够同时显示16x02即32个字符(2行16列)。LCD1602液晶模块内部的字符发生内存(CGROM)已经存储了160个不同的点阵字符图形,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”。 LCD1602与单片机之间通过3根控制线和8位并行数据IO线实现交互,电路下图所示。总原理图 仿真图 PCB图 实物图四、软件部分设计系统运行流程图 主函数流程图18B20温度计流程图程序设计(节选):#include <REG51.H>#include <intrins.h>/#include "LCD1602.h"/#include "DS1302.h"#define uint unsigned int#define uchar unsigned charsbit DS1302_CLK = P17; /实时时钟时钟线引脚sbit DS1302_IO = P16; /实时时钟数据线引脚sbit DS1302_RST = P15; /实时时钟复位线引脚sbit wireless_1 = P30;sbit wireless_2 = P31;sbit wireless_3 = P32;sbit wireless_4 = P33;sbit beep=P34;sbit ACC0 = ACC0;sbit ACC7 = ACC7;char hide_sec,hide_min,hide_hour,hide_day,hide_week,hide_month,hide_year,hide_m,hide_f,hide_h;sbit Set = P20; /模式切换键sbit Up = P21; /加法按钮sbit Down = P22; /减法按钮sbit out = P23; /立刻跳出调整模式按钮sbit DQ = P10; /温度传送数据IO口sbit dd=P37;char done,count,temp,flag,up_flag,down_flag,key;uchar temp_value; /温度值uchar m,f,h,mo,d,y,w,kaiguan,h=12,f=30;uchar TempBuffer5,week_value2,nao8;void naotime();uchar code tone=212,212,190,212,159,169,212,212,190,212,142,159,212,212,106,126,159,169,190,119,119,126,159,142,159,0;uchar code lon=9,3,12,12,12,24,9,3,12,12,12,24,9,3,12,12,12,12,12,9,3,12,12,12,24,0;void delay(uint z)uint x,y;for(x=z;x>0;x-)for(y=110;y>0;y-);void music()uint i,j,k=0,m;for(m=0;m<26;m+)for(i=0;i<lonk*20;i+)beep=beep;for(j=0;j<tonek/3;j+);delay(10);k+;void show_time(); /液晶显示程序/初始化LCD*void LCD_Initial()LcdEn=0;LCD_Write(LCD_COMMAND,0x38); /8位数据端口,2行显示,5*7点阵LCD_Write(LCD_COMMAND,0x38);LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR); /开启显示, 无光标LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN); /清屏LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE); /AC递增, 画面不动SYSTEMTIME;/定义的时间类型SYSTEMTIME CurrentTime;#define AM(X)X#define PM(X)(X+12) / 转成24小时制#define DS1302_SECOND0x80 /时钟芯片的寄存器位置,存放时间#define DS1302_MINUTE0x82#define DS1302_HOUR0x84#define DS1302_WEEK0x8A#define DS1302_DAY0x86#define DS1302_MONTH0x88#define DS1302_YEAR0x8Cvoid DS1302InputByte(unsigned char d) /实时时钟写入一字节(内部函数)unsigned char i;ACC = d;for(i=8; i>0; i-)DS1302_IO = ACC0; /相当于汇编中的 RRCDS1302_CLK = 1;DS1302_CLK = 0;ACC = ACC >> 1;unsigned char DS1302OutputByte(void) /实时时钟读取一字节(内部函数)unsigned char i;for(i=8; i>0; i-)ACC = ACC >>1; /相当于汇编中的 RRCACC7 = DS1302_IO;DS1302_CLK = 1;DS1302_CLK = 0;return(ACC);void Write1302(unsigned char ucAddr, unsigned char ucDa)/ucAddr: DS1302地址, ucData: 要写的数据DS1302_RST = 0;DS1302_CLK = 0;DS1302_RST = 1;DS1302InputByte(ucAddr); / 地址,命令DS1302InputByte(ucDa); / 写1Byte数据DS1302_CLK = 1;DS1302_RST = 0;unsigned char Read1302(unsigned char ucAddr)/读取DS1302某地址的数据unsigned char ucData;DS1302_RST = 0;DS1302_CLK = 0;DS1302_RST = 1;DS1302InputByte(ucAddr|0x01); / 地址,命令ucData = DS1302OutputByte(); / 读1Byte数据DS1302_CLK = 1;DS1302_RST = 0;return(ucData);void DS1302_GetTime(SYSTEMTIME *Time) /获取时钟芯片的时钟数据到自定义的结构型数组unsigned char ReadValue;ReadValue = Read1302(DS1302_SECOND);Time->Second = (ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);ReadValue = Read1302(DS1302_MINUTE);Time->Minute = (ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);ReadValue = Read1302(DS1302_HOUR);Time->Hour = (ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);ReadValue = Read1302(DS1302_DAY);Time->Day = (ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);ReadValue = Read1302(DS1302_WEEK);Time->Week = (ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);ReadValue = Read1302(DS1302_MONTH);Time->Month = (ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);ReadValue = Read1302(DS1302_YEAR);Time->Year = (ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);void DateToStr(SYSTEMTIME *Time) /将时间年,月,日,星期数据转换成液晶显示字符串,放到数组里DateString if(hide_year<2) /这里的if,else语句都是判断位闪烁,<2显示数据,>2就不显示,输出字符串为 2007/07/22Time->DateString0 = '2'Time->DateString1 = '0'Time->DateString2 = Time->Year/10 + '0'Time->DateString3 = Time->Year%10 + '0'elseTime->DateString0 = ' 'Time->DateString1 = ' 'Time->DateString2 = ' 'Time->DateString3 = ' 'Time->DateString4 = '/'if(hide_month<2)Time->DateString5 = Time->Month/10 + '0'Time->DateString6 = Time->Month%10 + '0'elseTime->DateString5 = ' 'Time->DateString6 = ' 'Time->DateString7 = '/'if(hide_day<2)Time->DateString8 = Time->Day/10 + '0'Time->DateString9 = Time->Day%10 + '0'Time->DateString10 =' 'Time->DateString11 =' 'elseTime->DateString8 = ' 'Time->DateString9 = ' 'Time->DateString10 =' 'Time->DateString11 =' 'if(hide_week<2)week_value0 = Time->Week%10 + '0' /星期的数据另外放到 week_value数组里,跟年,月,日的分开存放,因为等一下要在最后显示elseweek_value0 = ' 'week_value1 = '0'Time->DateString10 = '0' /字符串末尾加 '0' ,判断结束字符void TimeToStr(SYSTEMTIME *Time) /将时,分,秒数据转换成液晶显示字符放到数组 TimeString;if(hide_hour<2)Time->TimeString0 = Time->Hour/10 + '0'Time->TimeString1 = Time->Hour%10 + '0'elseTime->TimeString0 = ' 'Time->TimeString1 = ' 'Time->TimeString2 = ':'if(hide_min<2)Time->TimeString3 = Time->Minute/10 + '0'Time->TimeString4 = Time->Minute%10 + '0'elseTime->TimeString3 = ' 'Time->TimeString4 = ' 'Time->TimeString5 = ':'if(hide_sec<2)Time->TimeString6 = Time->Second/10 + '0'Time->TimeString7 = Time->Second%10 + '0'Time->TimeString8 = ' 'elseTime->TimeString6 = ' 'Time->TimeString7 = ' 'Time->TimeString8 = ' 'Time->DateString9 = '0'void baoshi(SYSTEMTIME *Time)if(Time->Hour<22&&Time->Hour>8&&Time->Minute/10=0&&Time->Minute%10=0&&Time->Second/10=0&&Time->Second%10=0)music();void naozhong(SYSTEMTIME *Time) if(Time->Minute%10=(f%10)&&Time->Minute/10=(f/10)&&Time->Hour%10=(h%10)&&Time->Hour/10=(h/10)&&Time->Second%10=(m%10)&&Time->Second/10=(m/10) music();void Initial_DS1302(void) /时钟芯片初始化unsigned char Second=Read1302(DS1302_SECOND);if(Second&0x80) /判断时钟芯片是否关闭Write1302(0x8e,0x00); /写入允许Write1302(0x8c,0x07); /以下写入初始化时间 日期:07/07/25.星期: 3. 时间: 23:59:55Write1302(0x88,0x07);Write1302(0x86,0x25);Write1302(0x8a,0x07);Write1302(0x84,0x23);Write1302(0x82,0x59);Write1302(0x80,0x55);Write1302(0x8e,0x80); /禁止写入/*ds18b20子程序*/*ds18b20延迟子函数(晶振12MHz )*/void delay_18B20(unsigned int i)while(i-);/*ds18b20初始化函数*/void Init_DS18B20(void)unsigned char x=0;DQ = 1; /DQ复位delay_18B20(8); /稍做延时DQ = 0; /单片机将DQ拉低delay_18B20(80); /精确延时 大于 480usDQ = 1; /拉高总线delay_18B20(14);x=DQ; /稍做延时后 如果x=0则初始化成功 x=1则初始化失败delay_18B20(20);/*ds18b20读一个字节*/unsigned char ReadOneChar(void)uchar i=0;uchar dat = 0;for (i=8;i>0;i-)DQ = 0; / 给脉冲信号dat>>=1;DQ = 1; / 给脉冲信号if(DQ)dat|=0x80;delay_18B20(4);return(dat);/*ds18b20写一个字节*/void WriteOneChar(uchar dat)unsigned char i=0;for (i=8; i>0; i-)DQ = 0;DQ = dat&0x01;delay_18B20(5);DQ = 1;dat>>=1;/*读取ds18b20当前温度*/void ReadTemp(void)unsigned char a=0;unsigned char b=0;unsigned char t=0;Init_DS18B20();WriteOneChar(0xCC); / 跳过读序号列号的操作WriteOneChar(0x44); / 启动温度转换delay_18B20(100); / this message is wery importantInit_DS18B20();WriteOneChar(0xCC); /跳过读序号列号的操作WriteOneChar(0xBE); /读取温度寄存器等(共可读9个寄存器) 前两个就是温度delay_18B20(100);a=ReadOneChar(); /读取温度值低位b=ReadOneChar(); /读取温度值高位temp_value=b<<4;temp_value+=(a&0xf0)>>4;void temp_to_str() /温度数据转换成液晶字符显示TempBuffer0=temp_value/10+'0' /十位TempBuffer1=temp_value%10+'0' /个位TempBuffer2=0xdf; /温度符号TempBuffer3='C'TempBuffer4='0'void naoz() if(hide_h<2) nao0=h/10+'0' nao1=h%10+'0'elsenao0=' ' nao1=' ' nao2=':'if(hide_f<2) nao3=f/10+'0' nao4=f%10+'0'elsenao3=' 'nao4=' ' nao5=':'if(hide_m<2) nao6=m/10+'0' nao7=m%10+'0'else nao6=' ' nao7=' ' nao8='0'void Delay1ms(unsigned int count)unsigned int i,j;for(i=0;i<count;i+)for(j=0;j<120;j+);/*延时子程序*/void mdelay(uint delay)uint i;for(;delay>0;delay-)for(i=0;i<62;i+) /1ms延时.;void outkey() /跳出调整模式,返回默认显示 uchar Second;if(out=0|wireless_1=1) mdelay(8);count=0;hide_sec=0,hide_min=0,hide_hour=0,hide_day=0,hide_week=0,hide_month=0,hide_year=0;Second=Read1302(DS1302_SECOND);Write1302(0x8e,0x00); /写入允许Write1302(0x80,Second&0x7f);Write1302(0x8E,0x80); /禁止写入done=0;while(out=0);while(wireless_1=1);void outkey1() /跳出调整模式,返回默认显示 uchar Second;if(out=0|wireless_1=1) mdelay(8);count=0;hide_sec=0,hide_min=0,hide_hour=0,hide_day=0,hide_week=0

    注意事项

    本文(温度显示的数字时钟设计课程设计报告(共40页).doc)为本站会员(飞****2)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

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

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开