四位数数字温度计的设计毕业论文.doc_第1页
四位数数字温度计的设计毕业论文.doc_第2页
四位数数字温度计的设计毕业论文.doc_第3页
四位数数字温度计的设计毕业论文.doc_第4页
四位数数字温度计的设计毕业论文.doc_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

四位数数字温度计的设计四位数数字温度计的设计毕业论文目录摘要IAbstractII目录IV前言11 单片机简介21.1 主要性能41.2 引脚说明52 系统总体方案及硬件设计92.1 数字温度计设计方案论证92.2 总体设计框图102.2.1 主控制器112.2.2 显示电路112.2.3 温度传感器122.3 DS18B20温度传感器与单片机的接口电路172.4 系统整体硬件电路设计182.4.1 主板电路182.4.2 显示电路193 系统软件设计203.1 初始化程序203.2 读出温度子程序223.3 读、写时序子程序233.4 温度处理子程序263.5 显示程序283.6 延时程序29总结30致谢31参考文献32附件1 源程序代码33附件2 整体原理图39- II -前言随着人们生活水平的不断提高,单片机控制无疑是人们追求的目标之一,它所给人带来的方便也是不可否定的,其中数字温度计就是一个典型的例子,但人们对它的要求越来越高,要为现代人工作、科研、生活、提供更好的更方便的设施就需要从数单片机技术入手,一切向着数字化控制,智能化控制方向发展。本设计所介绍的数字温度计与传统的温度计相比,具有读数方便,测温范围广,测温准确,其输出温度采用数字显示,主要用于对测温比较准确的场所,或科研实验室使用,可广泛用于食品库、冷库、粮库、温室大棚等需要控制温度的地方。目前,该产品已在温控系统中得到广泛的应用。本系统是一个基于单片机AT89S52的数字温度计的设计,用来测量环境温度,测量范围为-50110度。整个设计系统分为4部分:单片机控制、温度传感器、数码显示以及键盘控制电路。整个设计是以AT89S52为核心,通过数字温度传感器DS18B20来实现环境温度的采集和A/D转换,同时因其输出为数字形式,且为串行输出,这就方便了单片机进行数据处理,但同时也对编程提出了更高的要求。单片机把采集到的温度进行相应的转换后,使之能够方便地在数码管上输出。LED采用四位一体共阴的数码管。此设计的重点在于编程,程序要实现温度的采集、转换、显示和上下限温度报警,其外围电路所用器件较少,相对简单,实现容易。1 单片机简介单片微型计算机简称单片机,是典型的嵌入式微控制器(Microcontroller Unit),常用英文字母的缩写MCU表示单片机,它最早是被用在工业控制领域。单片机由芯片内仅有CPU的专用处理器发展而来。最早的设计理念是通过将大量外围设备和CPU集成在一个芯片中,使计算机系统更小,更容易集成进复杂的而对体积要求严格的控制设备当中。INTEL的Z80是最早按照这种思想设计出的处理器,从此以后,单片机和专用处理器的发展便分道扬镳。 早期的单片机都是8位或4位的。其中最成功的是INTEL的8031,因为简单可靠而性能不错获得了很大的好评。此后在8031上发展出了MCS51系列单片机系统。基于这一系统的单片机系统直到现在还在广泛使用。随着工业控制领域要求的提高,开始出现了16位单片机,但因为性价比不理想并未得到很广泛的应用。90年代后随着消费电子产品大发展,单片机技术得到了巨大提高。随着INTEL i960系列特别是后来的ARM系列的广泛应用,32位单片机迅速取代16位单片机的高端地位,并且进入主流市场。而传统的8位单片机的性能也得到了飞速提高,处理能力比起80年代提高了数百倍。目前,高端的32位单片机主频已经超过300MHz,性能直追90年代中期的专用处理器,而普通的型号出厂价格跌落至1美元,最高端1的型号也只有10美元。当代单片机系统已经不再只在裸机环境下开发和使用,大量专用的嵌入式操作系统被广泛应用在全系列的单片机上。而在作为掌上电脑和手机核心处理的高端单片机甚至可以直接使用专用的Windows和Linux操作系统。 单片机比专用处理器更适合应用于嵌入式系统,因此它得到了最多的应用。事实上单片机是世界上数量最多的计算机。现代人类生活中所用的几乎每件电子和机械产品中都会集成有单片机。手机、电话、计算器、家用电器、电子玩具、掌上电脑以及鼠标等电脑配件中都配有1-2部单片机。而个人电脑中也会有为数不少的单片机在工作。汽车上一般配备40多部单片机,复杂的工业控制系统上甚至可能有数百台单片机在同时工作!单片机的数量不仅远超过PC机和其他计算的总和,甚至比人类的数量还要多。 单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。相当于一个微型的计算机,和计算机相比,单片机只缺少了I/O设备。概括的讲:一块芯片就成了一台计算机。它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。同时,学习使用单片机是了解计算机原理与结构的最佳选择。 单片机内部也用和电脑功能类似的模块,比如CPU,内存,并行总线,还有和硬盘作用相同的存储器件,不同的是它的这些部件性能都相对我们的家用电脑弱很多,不过价钱也是低的,一般不超过10元即可.用它来做一些控制电器一类不是很复杂的工作足矣了。我们现在用的全自动滚筒洗衣机、排烟罩、VCD等等的家电里面都可以看到它的身影!.它主要是作为控制部分的核心部件。 它是一种在线式实时控制计算机,在线式就是现场控制,需要的是有较强的抗干扰能力,较低的成本,这也是和离线式计算机的(比如家用PC)的主要区别。 单片机是靠程序运行的,并且可以修改。通过不同的程序实现不同的功能,尤其是特殊的独特的一些功能,这是别的器件需要费很大力气才能做到的,有些则是花大力气也很难做到的。一个不是很复杂的功能要是用美国50年代开发的74系列,或者60年代的CD4000系列这些纯硬件来搞定的话,电路一定是一块大PCB板!但是如果要是用美国70年代成功投放市场的系列单片机,结果就会有天壤之别!只因为单片机的通过你编写的程序可以实现高智能,高效率,以及高可靠性!而本设计使用的单片机则是属于51系列单片机中的AT89S52,下面是它的一些简介。1.1 主要性能首先,我先介绍一些AT89S52芯片的主要性能:1. 与MCS-51单片机产品兼容; 2. 8K字节在系统可编程Flash存储器; 3. 1000次擦写周期; 4. 全静态操作:0Hz-33MHz; 5. 三级加密程序存储器; 6. 32个可编程I/O口线; 7. 三个16位定时器/计数器; 8. 六个中断源; 9. 全双工UART串行通道; 10. 低功耗空闲和掉电模式; 11. 掉电后中断可唤醒; 12. 看门狗定时器; 13. 双数据指针; 14. 掉电标识符。1.2 引脚说明AT89S52 是一种低功耗、高性能CMOS8位微控制器,具有 8K 在系统可编程 图1.1 AT89S52引脚图 DIP封装Flash 存储器。使用Atmel 公司高密度非 易失性存储器技术制造,与工业80C51 产品指令和引脚完 全兼容。片上Flash允许程序存储器在系统可编程,亦适于 常规编程器。在单芯片上,拥有灵巧的8 位CPU 和在系统 可编程Flash,使得AT89S52为众多嵌入式控制应用系统提 供高灵活、超有效的解决方案。 AT89S52具有以下标准功能: 8k字节Flash,256字节RAM, 32 位I/O 口线,看门狗定时器,2 个数据指针,三个16 位 定时器/计数器,一个6向量2级中断结构,全双工串行口, 片内晶振及时钟电路。另外,AT89S52 可降至0Hz 静态逻 辑操作,支持2种软件可选择节电模式。空闲模式下,CPU 停止工作,允许RAM、定时器/计数器、串口、中断继续工 作。掉电保护方式下,RAM内容被保存,振荡器被冻结, 单片机一切工作停止,直到下一个中断或硬件复位为止。 P0 口:P0口是一个8位漏极开路的双向I/O口。作为输出口,每位能驱动8个TTL逻 辑电平。对P0端口写“1”时,引脚用作高阻抗输入。 当访问外部程序和数据存储器时,P0口也被作为低8位地址/数据复用。在这种模式下, P0不具有内部上拉电阻。 在flash编程时,P0口也用来接收指令字节;在程序校验时,输出指令字节。程序校验 时,需要外部上拉电阻。 P1 口:P1 口是一个具有内部上拉电阻的8 位双向I/O 口,p1 输出缓冲器能驱动4 个 TTL 逻辑电平。对P1 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入 口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。 此外,P1.0和P1.1分别作定时器/计数器2的外部计数输入(P1.0/T2)和定时器/计数器2 的触发输入(P1.1/T2EX)。 在flash编程和校验时,P1口接收低8位地址字节。 引脚号第二功能: P1.0 T2(定时器/计数器T2的外部计数输入),时钟输出 P1.1 T2EX(定时器/计数器T2的捕捉/重载触发信号和方向控制) P1.5 MOSI(在系统编程用) P1.6 MISO(在系统编程用) P1.7 SCK(在系统编程用) P2 口:P2 口是一个具有内部上拉电阻的8 位双向I/O 口,P2 输出缓冲器能驱动 4 个 TTL 逻辑电平。对P2 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入 口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。 在访问外部程序存储器或用16位地址读取外部数据存储器(例如执行MOVX DPTR) 时,P2 口送出高八位地址。在这种应用中,P2 口使用很强的内部上拉发送1。在使用 8位地址(如MOVX RI)访问外部数据存储器时,P2口输出P2锁存器的内容。 在flash编程和校验时,P2口也接收高8位地址字节和一些控制信号。 P3 口:P3 口是一个具有内部上拉电阻的8 位双向I/O 口,p3 输出缓冲器能驱动4 个 TTL 逻辑电平。对P3 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入 口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。 P3口亦作为AT89S52特殊功能(第二功能)使用,如下表所示。 在flash编程和校验时,P3口也接收一些控制信号。 端口引脚 第二功能: P3.0 RXD(串行输入口) P3.1 TXD(串行输出口) P3.2 INTO(外中断0) P3.3 INT1(外中断1) P3.4 TO(定时/计数器0) P3.5 T1(定时/计数器1) P3.6 WR(外部数据存储器写选通) P3.7 RD(外部数据存储器读选通) 此外,P3口还接收一些用于FLASH闪存编程和程序校验的控制信号。 RST:复位输入。当振荡器工作时,RST引脚出现两个机器周期以上高电平将是单片机复位。 ALE/PROG:当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。一般情况下,ALE仍以时钟振荡频率的1/6输出固定的脉冲信号,因此它可对外输出时钟或用于定时目的。要注意的是:每当访问外部数据存储器时将跳过一个ALE脉冲。对FLASH存储器编程期间,该引脚还用于输入编程脉冲(PROG)。如有必要,可通过对特殊功能寄存器(SFR)区中的8EH单元的D0位置位,可禁止ALE操作。该位置位后,只有一条MOVX和MOVC指令才能将ALE激活。此外,该引脚会被微弱拉高,单片机执行外部程序时,应设置ALE禁止位无效。 PSEN:程序储存允许(PSEN)输出是外部程序存储器的读选通信号,当AT89S52由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN有效,即输出两个脉冲,在此期间,当访问外部数据存储器,将跳过两次PSEN信号。 EA/VPP:外部访问允许,欲使CPU仅访问外部程序存储器(地址为0000H-FFFFH),EA端必须保持低电平(接地)。需注意的是:如果加密位LB1被编程,复位时内部会锁存EA端状态。如EA端为高电平(接Vcc端),CPU则执行内部程序存储器的指令。FLASH存储器编程时,该引脚加上+12V的编程允许电源Vpp,当然这必须是该器件是使用12V编程电压Vpp。 XTAL1:振荡器反相放大器和内部时钟发生电路的输入端。 XTAL2:振荡器反相放大器的输出端。2 系统总体方案及硬件设计2.1 数字温度计设计方案论证由于本设计是测温电路,可以使用热敏电阻之类的器件利用其感温效应,在将随被测温度变化的电压或电流采集过来,进行A/D转换后,就可以用单片机进行数据的处理,在显示电路上,就可以将被测温度显示出来,这种设计需要用到A/D转换电路,感温电路比较麻烦。进而考虑到用温度传感器,在单片机电路设计中,大多都是使用传感器,所以这是非常容易想到的,所以可以采用一只温度传感器DS18B20,此传感器,可以很容易直接读取被测温度值,进行转换,就可以满足设计要求。2.2 总体设计框图温度计电路设计总体设计方框图如图2.1所示,控制器采用单片机AT89S52,温度传感器采用DS18B20,用4位共阴LED数码管以串口传送数据实现温度显示。 AT89S52单片机主控电路按键复位电路上下限报警电路时钟振荡电路四位LED显示电路温度检测电路DS18B20图2.1 总体设计框图2.2.1 主控制器单片机AT89S52具有低电压供电和体积小等特点,四个端口只需要两个口就能满足电路系统的设计需要,适合便携手持式产品的设计使用。AT89S52单片机芯片具有以下特性:1)指令集合芯片引脚与Intel公司的8052兼容;2)4KB片内在系统可编程FLASH程序存储器;3)时钟频率为033MHZ;4)128字节片内随机读写存储器(RAM);5)6个中断源,2级优先级;6)2个16位定时/记数器;7)全双工串行通信接口;8)监视定时器;9)两个数据指针;2.2.2 显示电路显示电路采用4位共阴LED数码管,从P0口输出段码,P2.0P2.3作片选端。但在焊电路板的时候发现数码管亮度不够,所以在P2.0P2.3端口接四个10K的电阻和四个NPN的三极管,以使数码管高亮显示。2.2.3 温度传感器DS18B20温度传感器是美国DALLAS半导体公司推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现9-12位的数字值读数方式。DS18B20的性能特点如下:独特的单线接口仅需要一个端口引脚进行通信,无须经过其它变换电路;多个DS18B20可以并联在惟一的三线上,实现多点组网功能;内含64位经过激光修正的只读存储器ROM;可通过数据线供电,内含寄生电源,电压范围为3.05.5V;零待机功耗;温度以9或12位数字;用户可定义报警设置; 报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件;负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作;测温范围为-55+125,测量分辨率为0.0625采用单总线专用技术。DS18B20采用3脚PR35封装或8脚SOIC封装,其内部结构框图如图2.2所示。 图2.2 DS18B20内部结构64位ROM的结构开始8位是产品类型的编号,接着是每个器件的惟一的序号,共有48位,最后8位是前面56位的CRC检验码,这也是多个DS18B20可以采用一线进行通信的原因。温度报警触发器TH和TL,可通过软件写入用户报警上下限。DS18B20温度传感器的内部存储器还包括一个高速暂存RAM和一个非易失性的可电擦除的EERAM。高速暂存RAM的结构为8字节的存储器,结构如表2.1所示。头2个字节包含测得的温度信息,第3和第4字节和的拷贝,是易失的,每次上电复位时被刷新。第5个字节,为配置寄存器,它的内容用于确定温度值的数字转换分辨率。DS18B20工作时寄存器中的分辨率转换为相应精度的温度数值。该字节各位的定义如表2.1所示。低5位一直为1,TM是工作模式位,用于设置DS18B20在工作模式还是在测试模式,DS18B20出厂时该位被设置为0,用户要去改动,R1和R0决定温度转换的精度位数,来设置分辨率。表2.1 DS18B20字节定义温度 LSB温度 MSBTH用户字节1TL用户字节2配置寄存器保留保留保留CRCTMR1R011111由下面表2.2可见,DS18B20温度转换的时间比较长,而且分辨率越高,所需要的温度数据转换时间越长。因此,在实际应用中要将分辨率和转换时间权衡考虑。表2.2 DS18B20温度转换时间表:R1R0分辨率/位温度最大转向时间/ms00993.750110187.510113751112750高速暂存RAM的第6、7、8字节保留未用,表现为全逻辑1。第9字节读出前面所有8字节的CRC码,可用来检验数据,从而保证通信数据的正确性。当DS18B20接收到温度转换命令后,开始启动转换。转换完成后的温度值就以16位带符号扩展的二进制补码形式存储在高速暂存存储器的第1、2字节。单片机可以通过单线接口读出该数据,读数据时低位在先,高位在后,数据格式以0.0625/LSB形式表示。当符号位S=0时,表示测得的温度值为正值,可以直接将二进制位转换为十进制;当符号位S=1时,表示测得的温度值为负值,要先将补码变成原码,再计算十进制数值。表2.3是一部分温度值对应的二进制温度数据。DS18B20完成温度转换后,就把测得的温度值与RAM中的TH、TL字节内容作比较。若TTH或TTL,则将该器件内的报警标志位置位,并对主机发出的报警搜索命令作出响应。因此,可用多只DS18B20同时测量温度并进行报警搜索。在64位ROM的最高有效字节中存储有循环冗余检验码(CRC)。主机ROM的前56位来计算CRC值,并和存入DS18B20的CRC值作比较,以判断主机收到的ROM数据是否正确。DS18B20的测温原理是这这样的,器件中低温度系数晶振的振荡频率受温度的影响很小,用于产生固定频率的脉冲信号送给减法计数器1;高温度系数晶振随温度变化其振荡频率明显改变,所产生的信号作为减法计数器2的脉冲输入。器件中还有一个计数门,当计数门打开时,DS18B20就对低温度系数振荡器产生的时钟脉冲进行计数进而完成温度测量。计数门的开启时间由高温度系数振荡器来决定,每次测量前,首先将55所对应的一个基数分别置入减法计数器1、温度寄存器中,计数器1和温度寄存器被预置在55所对应的一个基数值。减法计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当减法计数器1的预置值减到0时,温度寄存器的值将加1,减法计数器1的预置将重新被装入,减法计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到减法计数器计数到0时,停止温度寄存器的累加,此时温度寄存器中的数值就是所测温度值。其输出用于修正减法计数器的预置值,只要计数器门仍未关闭就重复上述过程,直到温度寄存器值大致被测温度值。表2.3 一部分温度对应值表:温度/二进制表示十六进制表示+1250000 0111 1101 000007D0H+850000 0101 0101 00000550H+25.06250000 0001 1001 00000191H+10.1250000 0000 1010 000100A2H+0.50000 0000 0000 00100008H00000 0000 0000 10000000H-0.51111 1111 1111 0000FFF8H-10.1251111 1111 0101 1110FF5EH-25.06251111 1110 0110 1111FE6FH-551111 1100 1001 0000FC90H2.3 DS18B20温度传感器与单片机的接口电路图2.3 DS18B20与单片机的接口电路DS18B20可以采用两种方式供电,一种是采用电源供电方式,此时DS18B20的1脚接地,2脚作为信号线,3脚接电源。另一种是寄生电源供电方式,如图2.3所示单片机端口接单线总线,为保证在有效的DS18B20时钟周期内提供足够的电流,可用一个MOSFET管来完成对总线的上拉,多个DS18B20可以将2口串接到一条总线上,而本设计只用了一个DS18B20。当DS18B20处于写存储器操作和温度A/D转换操作时,总线上必须有强的上拉,上拉开启时间最大为10us。采用寄生电源供电方式时VDD端接地。由于单线制只有一根线,因此发送接口必须是三态的。2.4 系统整体硬件电路设计2.4.1 主板电路 系统整体硬件电路包括,传感器数据采集电路,温度显示电路,上下限报警调整电路,单片机主板电路等,单片机主板电路如图2.4 所示:图2.4 单片机主板电路图2.4中包括时钟振荡电路和按键复位电路,按键复位电路是上电复位加手动复位,使用比较方便,在程序跑飞时,可以手动复位,这样就不用在重起单片机电源,就可以实现复位。另外扩展电路中,蜂鸣器可以在被测温度不在上下限范围内时,发出报警鸣叫声音,同时LED数码管将没有被测温度值显示,这时可以调整报警上下限,从而测出被测的温度值。2.4.2 显示电路显示电路是使用的串口显示,这种显示最大的优点就是使用口资源比较少,只用P0和P3口,串口的发送和接收,采用4位共阴LED数码管,从P0口输出段码,P2.0P2.3作片选端。但在焊电路板的时候发现数码管亮度不够,所以在P2.0P2.3端口接四个10K的电阻和四个NPN的三极管,期望增加驱动电流,以使数码管高亮显示。图2.5 温度显示电路3 系统软件设计系统程序主要包括主程序,读出温度子程序,温度转换命令子程序,计算温度子程序,显示数据刷新子程序等。3.1 初始化程序图3.1 初始化程序DQ置1短延时DQ置0延时450usDQ置1延时15-60us延时至少60usX=DQ结束X=DQ 、图3.2 初始化程序流程图3.2 读出温度子程序初始化发跳过ROM指令开始温度转换延时2ms初始化写入跳过ROM、读取暂存器和CRC字节指令读取温度的低八位和高八位取中间八位结束读出温度子程序的主要功能是读出RAM中的2字节,读出温度的低八位和高八位,在读出时需进行CRC校验,校验有错时不进行温度数据的改写。其程序流程图如图3.3示 图3.3读温度程序流程图3.3 读、写时序子程序读写的程序是本次设计中的重点和难点,通过我们对其时序的分析,从而写出高效的程序。图3.4 写1,0时序图3.5 读0,1时序 DQ置1短延时DQ置0延时450usDQ置1延时15-60us延时至少60usX=DQ结束X=DQDQ=0延时15usdat&=0x01dat1延时45usDQ=1结束图3.6 写时序子程序流程图 图3.7 读时序子程序 流程图3.4 温度处理子程序计算温度子程序将RAM中读取值进行BCD码的转换运算,并进行温度值正负的判定,其程序流程图如图3.8所示。取反flag=1开始flag=0ht128?求百位、十位、个位和小数位bai=0?shi=0?显示个位和小数位显示十位显示百位结束 N Y N Y 图3.8 温度处理程序流程图3.5 显示程序此函数实现的对数码管显示的处理,其亮点在于可以直接对数码管进行操作,其本身是个两变量函数,第一个变量是要开通的位选,第二个变量是要显示的数据,这样我们可以直接方便而又简单直观的对数码管进行操作。程序流程图如图3.9。 送位选位选值左移n位送段码n=2?P0.7=0延时1ms关断位选结束 N Y 图3.9显示数据刷新流程图3.6 延时程序延时程序主要分为短延时和长延时,短延时如果要求十分的精确可以采用定时器,如果要求不太高的话可以采用普通函数的叠加,可以近似时间的延时。长延时同样的道理,不过要求不是很精确的话,可以采取语言结构的循环来实现延时。具体程序如下:近乎精确的短延时,采用标准库里的_nop_()函数,此函数一个延时为22微秒左右;void delay15(uint n) do _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); _nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); n-; while(n);/长延时,用于不太严格的延时void delay(uint z) uint x,y; for(x=z;x0;x-) for(y=50;y0;y-);表3.1 delay15()延时函数的取值采样:n的取值1234101520222324时间/us17486990216321426468489510总结终于完成了我的数字温度计的设计,虽然没有完全达到设计要求,但从心底里说,还是高兴的,毕竟这次设计倾注了汪老师和我太多的心血。在本次设计的过程中,我发现很多的问题,虽然以前还做过这样的设计但这次设计真的让我长进了很多,单片机课程设计重点就在于软件算法的设计,需要有很巧妙的程序算法,虽然以前写过几次程序,但我觉的写好一个程序并不是一件简单的事,举个例子,以前写的那几次,数据加减时,我用的都是BCD码,这一次,我全部用的都是16进制的数直接加减,显示处理时在用对不同的位,求商或求余,感觉效果比较好。还有时序的问题,通过这次的设计我明白了时序才真正是数字芯片的灵魂,所有的程序我们都可以通过对其时序的理解来实现对其操作,同时体会到了单总线结构的魅力。从这次的课程设计中,我真真正正的意识到,在以后的学习中,要理论联系实际,把我们所学的理论知识用到实际当中,学习单机片机更是如此,程序只有在经常的写与读的过程中才能提高,这就是我在这次课程设计中的最大收获。而且在本次设计的过程中,自己去查询资料,以及对资料的整理,与老师的探讨都使我受益匪浅。在查找资料的过程中让我懂得了自己一个人时如何去学习,如何去筛选其中最有用的一部分。而与汪老师的交流探讨中,我则学会了如何去与人合作完成一件事,这对我在以后的工作中与其他人合作奠定了基础。同时也在汪老师的指导和帮助下了解了与人合作的优势。人都是群居动物,在以后的工作与生活中一定会需要别人的合作,而这次毕业设计则是一个预演。相信通过此次毕业设计,今后我一定会做得跟好。附件1 源程序代码#include #include#include#define uchar unsigned char#define uint unsigned int#define duaP2#define max36/#define min 0sbit DQ=P17;sbit din=P07;sbit beep=P30;/*uchar tab=0xc0,0xf9,0xa4,0xB0,0x99,/0 1 2 34; 0x92,0x82,0xF8,0x80,0x90,0xff,0xbf,0xc6; /共阳; / 5 6789 灭- c */uchar tab=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x00,0x40; uchar tab216=0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09;uchar d1,d2,ht,bai,b,shi,ge;uint tem;/近乎精确的短延时,采用标准库里的_nop_()函数,此函数一个延时为22微秒左右;void delay15(uint n) do _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); _nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); n-; while(n);/长延时,用于不太严格的延时void delay(uint z) uint x,y; for(x=z;x0;x-) for(y=50;y0;y-);/初始化函数void init()uchar x=1;while(x)DQ=1;_nop_();DQ=0;delay15(23); /最小480us;DQ=1;delay15(2);/存在检测高电平最小15us; x=DQ;delay15(22);/ 存在检测低电平最小240us;x=DQ;DQ=1; void writ

温馨提示

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

最新文档

评论

0/150

提交评论