基于单片机的波形发生器的课程设计报告(完整资料)_第1页
基于单片机的波形发生器的课程设计报告(完整资料)_第2页
基于单片机的波形发生器的课程设计报告(完整资料)_第3页
基于单片机的波形发生器的课程设计报告(完整资料)_第4页
基于单片机的波形发生器的课程设计报告(完整资料)_第5页
已阅读5页,还剩98页未读 继续免费阅读

下载本文档

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

文档简介

基于单片机的波形发生器的课程设计报告(完整资料)(可以直接使用,可编辑优秀版资料,欢迎下载)

重庆科技学院基于单片机的波形发生器的课程设计报告(完整资料)(可以直接使用,可编辑优秀版资料,欢迎下载)学生实习(实训)总结报告学院:电气与信息工程学院专业班级:测控学生姓名:学号:设计地点(单位)I506设计题目:基于单片机的波形发生器的设计完成日期:2014年03月17日指导教师评语:________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________成绩(五级记分制):___________________________指导教师(签字):____________________________目录TOC\o"1—3"\h\z\uHYPERLINK\l_Toc29821一、实习的任务要求与意义PAGEREF_Toc298211HYPERLINK\l_Toc16271。1设计要求PAGEREF_Toc16271HYPERLINK\l_Toc236471。2设计任务PAGEREF_Toc236471HYPERLINK\l_Toc128411.3基本功能与性能指标PAGEREF_Toc128411HYPERLINK\l_Toc310401.4实习的意义PAGEREF_Toc310401HYPERLINK\l_Toc6854二、设计方案PAGEREF_Toc68542HYPERLINK\l_Toc85092.1硬件选择PAGEREF_Toc85092HYPERLINK\l_Toc77912.2系统总体设计PAGEREF_Toc77913HYPERLINK\l_Toc16392三、系统硬件设计PAGEREF_Toc1639243.1单片机的最小系统PAGEREF_Toc2838543.2按键电路设计PAGEREF_Toc1890153.3LCD显示的设计PAGEREF_Toc233445HYPERLINK\l_Toc30320四、系统软件设计PAGEREF_Toc303207HYPERLINK\l_Toc217384。1主程序设计PAGEREF_Toc217387HYPERLINK\l_Toc36444。2LCD显示子程序设计PAGEREF_Toc364484.3D/A转换子程序设计PAGEREF_Toc296218HYPERLINK\l_Toc8172五、调试及性能分析PAGEREF_Toc81729HYPERLINK\l_Toc47545.1调试步骤PAGEREF_Toc475410HYPERLINK\l_Toc279515.2性能分析PAGEREF_Toc2795112HYPERLINK\l_Toc15454参考文献PAGEREF_Toc1545413HYPERLINK\l_Toc3503附录1系统硬件电路图PAGEREF_Toc350314附录2程序代码PAGEREF_Toc238715一、实习的任务要求与意义1。1设计要求1.掌握电子系统的一般设计方法2。掌握仿真软件的应用3。培养综合应用所学知识来指导实践的能力4.根据技术指标要求及实验室条件自选方案设计出原理电路图,分析工作原理并计算元件参数。1。2设计任务按要求设计波形发生器并完成相关功能:(1)运用单片机控制产生多种波形,这些波形包括三角波、方波、锯齿波等。(2)信号的发生器所产生波形的频率、幅值均为连续可调。扩展功能在上位机将波形实时显示出来,用红外线遥控器实现上述功能,其它功能。1.3基本功能与性能指标基本功能:(1)可以产生正弦波、方波、三角波,频率和幅值可调.(2)按KEY1键选择输出波形。(3)按KEY2,KEY5键调节输出信号频率和电压幅值的增进和减少。(4)按KEY6键是转换调节频率或电压幅值。性能指标:(1)幅值0~5V可调(2)频率0~100Hz可调1.4实习的意义本次实训的目的是让我们更加熟练的掌握单片机的原理与应用,通过学习的单片机基础知识来更加熟悉的操作将软件和硬件相结合,通过控制单片机控制的程序代码与能实现系统控制功能的电子元件来实现所需要的数据。通过对软件和硬件的了解与应用再结合基础知识对单片机更深层次的了解,达到以后能更加熟练的通过单片机去完成更复杂的任务.二、设计方案采用AT89C51单片机和数模转换器PCF8591实现波形的产生。波形的产生方法是用AT89C51单片机执行波形程序,向PCF8591转换器的输入端输入相应的数据,从而在DA转换电路输出端再通过运放电路转换得到相应的电压波形.在AT89C51的P1口接按键控制波形的各类和波形的频率,每种波形对应一种按键方式。此方案原理简单,同时适合操作,实现起来也相对较容易.产生的三种波形的频率可由按键控制,并通过按键改变来转换不同的波形,也能够在示波器上显示出所要求的波形。波形的频率步进也可以实现调节,具有线路简单、可行性高、符合设计要求等优点。加上LCD数码显示管,从而能够在LCD上显示出频率值、幅度值信息。输出的波形也较稳定,精度较高,通过滤波电路使得系统的抗干扰性增强,电路简单,性价比高。图2.1系统组成结构框图2。1硬件选择(1)单片机:STC89C52是高速/低功耗/超强抗干扰的新一代8051单片机,指令代码完全兼容传统8051,但速度快8—12倍.内部集成MAX810专用复位电路,2路PWM,8路高速10位A/D转换(250K/S),针对电机控制,强干扰场合。(2)PCF8591:PCF8591是一个单片集成、单独供电、低功耗、8-bitCMOS数据获取器件。PCF8591具有4个模拟输入、1个模拟输出和1个串行I2C总线接口。PCF8591的3个地址引脚A0,A1和A2可用于硬件地址编程,允许在同个I2C总线上接入8个PCF8591器件,而无需额外的硬件.在PCF8591器件上输入输出的地址、控制和数据信号都是通过双线双向I2C总线以串行的方式进行传输。2.2系统总体设计本系统是用单片机来控制波形的转换以及幅值和频率的改变的,所以该系统可以分为4个电路模块,下面是总体设计框图。STC89C52PCF8591STC89C52PCF8591按键控制示波器显示LCD图2.2系统总体设计框图三、系统硬件设计3。1单片机的最小系统由于单片机最小系统只需要外围有时钟电路和复位电路即可,则单片机最小系统有着两个外围电路即可正常工作,下面是单片机的最小系统原理图。图3.1STC89C52单片机最小系统3。2按键电路设计本实现采用4个按键来进行波形的转换、幅值和频率的改变、幅值和频率的选择,P32键用来改变波P33、P16用来改变幅值或频率的大小,P17用来选择频率和幅值,下面是按键电路图。图3。2按键电路图3.3LCD显示的设计本硬件采用的是12864的液晶显示屏,显示屏将波形的转化显示在显示屏上,下面是液晶显示的电路。图3.312864液晶显示电路四、系统软件设计4。1主程序设计主程序内进行的是波形的切换及幅值、频率的改变,用示波器和LCD显示,将主要的写进即可,其他的就写在外面,下面是主程序流程图。开始DA转换器DA转换器初始化LCD初始化LCD初始化CChang++Chang=1输出方波Chang=2输出三角波Chang=0输出正弦波Chang=1输出方波Chang=2输出三角波Chang=0输出正弦波图4.1主程序流程图LCD显示子程序设计液晶显示的程序在本程序中比较的简单,就是为了实时的显示出当前的波形是什么,用按键切换之后液晶显示也跟着变。液晶显示程序需首先初始化,再进行数据的传输,并进行字符的显示,所以写出相应的几个程序即可进行LCD的显示。开始开始初始化12864LCD写控制指令写显示数据串行传输数据写汉字到LCD屏指定位置结束图4.2LCD显示流程图D/A转换子程序设计本程序采用PCD8592来作D/A转换器,需要将A1、A1、A2接地,单片机上的P37和P36接PCF8591上的SCL和SDA端口,AOUT接示波器,供显示D/A转换要满足I2C协议才能进行数据的传输。voidwrite_add(uchardate){start();write_byte(0x90);respons();write_byte(0x40);respons();write_byte(date);respons();stop();}图4.3PCF8591电路图五、调试及性能分析5.1调试步骤硬件调试:检查线路连接有无错误,SDA和SCL接单片机的P36和P37口,VCC接电源,CND接地,AOUT接示波器,在下载数据到单片机之后数据在传输的时候PCF8591上的一个蓝色的灯会不停的闪,说明有数据在传输,否则无数据传输。软件调试:首先看I2C协议是否正确,否则不能传输数据,再看按键的逻辑关系是否正确,还有就是LCD的显示是否正确。调节电源,使其输出5V电压,调整好示波器。给电路供电,观察示波器,记录各频段对应波形的情况,峰峰值。调试结果表明,该电路在要求频率范围内的大部分频率范围基本上不失真,除了在最高频率的最低频率有少许失真,其中,当频率接近10KHz时,方波高低电压跃变时出现毛刺,审过零比较器的频率特性所致,另外,在最高频和最低频段,三角波出现少许弯斜,可选用频率特性更为宽的电容进行校正。示波器显示之后的幅值频率的调试结果如下图所示:调试之后的正弦波调试之后的方波调试之后的三角波5.2性能分析经过一段时间运行后,可以对系统的性能进行测试.对于本波形发生器来说,用示波器可以测试其性能指标,按前面所述设计的波形发生器,能产生正弦波、三角波及方波信号,其幅值可以0—5V内变化,频率也可以调整。六、心得体会经过两周的实训,很快就结束了。虽然时间短暂,但是其中我们在完成任务的时候还是面临了很多的问题,正是因为遇到了难题,我们小组在一起探讨,经过多次改正最后还是圆满的完成了任务.虽然平时上课我们做过实验,但是现在给我们一个任务让我们去完成的时候才发现并不是那么容易就能做出来的,不仅需要扎实的基础知识还要去查询相关的书籍了解一些我们不懂的。经过本次实训,我们不仅增强了知识,也学到了很多技巧,对单片机的理解与运用更加熟练了。此次单片机的设计硬件电路较为简单,而程序的设计在当中占据很重要的部分.这次课程设计是用STC12C5AI6S2单片机与PCF8592D/A转换器来实现的波形产生与显示,所以要对这两个模块非常的熟悉.对于PCF8591需要深入的认识I2C协议的内容才能正确的传输数据。而对于单片机而需要对各个接口非常熟悉,才能保证数据的正常传输。此外还要熟练的使用示波器,对产生的波形进行调整,来得到更好的效果。它考验我们灵活的运用所学知识,培养了我们在遇到问题善于触屏的良好学习态度.以书本知识为基础灵活的扩展,学习前人的验,向高层次迈进.当然还是存在不足的地方,例如当频率过小的时候矩形波会有些失真,转换器转换可以加一个锁存器,放大电路设计上还有待进一步改进,使其具有更强的输出能力等。参考文献胡文金.单片机系统实训教程.重庆:重庆大学出版社,2005梁森.自动检测技术及应用.北京:机械工业出版社,2012程德福。智能仪器.机械工业出版社。2009。9朱定华,戴汝平等。单片危机原理与应用。清华大学出版社。彭楚武。微机原理与接口技术.湖南大圩出版社.李朝清.单片机原理与接口技术.北京航空航天大学出版社.张李勇,陈郎,张飞舟.基于8051的双通道波形发生器的设计与现实.计算机工程与应用许庆山等编.电路、信号与系统。北京:航空工业出版社.附录1系统硬件电路图附录2程序代码#include<reg52。h〉#include<intrins。h>#include<math.h〉#defineucharunsignedchar#defineuintunsignedintsbitSDA=P3^6;sbitSCL=P3^7;unsignedinta=0;unsignedintb=0;unsignedintc=0;unsignedintbx_chang=0;unsignedintn=40;unsignedcharTH;unsignedcharTL;unsignedintmode=0;unsignedintfd=6;unsignedintx;unsignedintu;//*************sbitRS=P2^4;sbitRW=P2^5;sbitE=P2^6;sbitPSB=P1^4;//*************sbitp20=P3^2;sbitp21=P3^3;sbitp22=P1^6;sbitp32=P1^7;//sin波形数组ucharcodetosin[256]={0x80,0x83,0x86,0x89,0x8D,0x90,0x93,0x96,0x99,0x9C,0x9F,0xA2,0xA5,0xA8,0xAB,0xAE,0xB1,0xB4,0xB7,0xBA,0xBC,0xBF,0xC2,0xC5,0xC7,0xCA,0xCC,0xCF,0xD1,0xD4,0xD6,0xD8,0xDA,0xDD,0xDF,0xE1,0xE3,0xE5,0xE7,0xE9,0xEA,0xEC,0xEE,0xEF,0xF1,0xF2,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFD,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFD,0xFD,0xFC,0xFB,0xFA,0xF9,0xF8,0xF7,0xF6,0xF5,0xF4,0xF2,0xF1,0xEF,0xEE,0xEC,0xEA,0xE9,0xE7,0xE5,0xE3,0xE1,0xDF,0xDD,0xDA,0xD8,0xD6,0xD4,0xD1,0xCF,0xCC,0xCA,0xC7,0xC5,0xC2,0xBF,0xBC,0xBA,0xB7,0xB4,0xB1,0xAE,0xAB,0xA8,0xA5,0xA2,0x9F,0x9C,0x99,0x96,0x93,0x90,0x8D,0x89,0x86,0x83,0x80,0x80,0x7C,0x79,0x76,0x72,0x6F,0x6C,0x69,0x66,0x63,0x60,0x5D,0x5A,0x57,0x55,0x51,0x4E,0x4C,0x48,0x45,0x43,0x40,0x3D,0x3A,0x38,0x35,0x33,0x30,0x2E,0x2B,0x29,0x27,0x25,0x22,0x20,0x1E,0x1C,0x1A,0x18,0x16,0x15,0x13,0x11,0x10,0x0E,0x0D,0x0B,0x0A,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0D,0x0E,0x10,0x11,0x13,0x15,0x16,0x18,0x1A,0x1C,0x1E,0x20,0x22,0x25,0x27,0x29,0x2B,0x2E,0x30,0x33,0x35,0x38,0x3A,0x3D,0x40,0x43,0x45,0x48,0x4C,0x4E,0x51,0x55,0x57,0x5A,0x5D,0x60,0x63,0x66,0x69,0x6C,0x6F,0x72,0x76,0x79,0x7C,0x80};//***********************************************voiddelay(unsignedintz){unsignedintx,y;for(x=z;x〉0;x--)for(y=125;y>0;y--);}//***************************************************voidSendByte(unsignedcharDbyte){unsignedchari;RS=1;for(i=0;i<8;i++){E=0;if((Dbyte〈<i)&0x80)RW=1;elseRW=0;E=1;E=0;}RS=0;}voidLcd_WriteCmd(unsignedcharCbyte){delay(10);SendByte(0xf8);SendByte(0xf0&Cbyte);SendByte(0xf0&(Cbyte〈<4));}voidLcd_WriteData(unsignedcharDbyte){delay(10);SendByte(0xfa);SendByte(0xf0&Dbyte);SendByte(0xf0&(Dbyte<〈4));}voidInitLCD(){Lcd_WriteCmd(0x30);Lcd_WriteCmd(0x06);Lcd_WriteCmd(0x0c);Lcd_WriteCmd(0x04);Lcd_WriteCmd(0x01);Lcd_WriteCmd(0x02);Lcd_WriteCmd(0x80);}voidxianshi(unsignedcharx,unsignedchary,unsignedchar*stri)//LCD数据传送地址{if(x==1)Lcd_WriteCmd(0x80+y-1);elseif(x==2)Lcd_WriteCmd(0x90+y-1);elseif(x==3)Lcd_WriteCmd(0x88+y-1);elseif(x==4)Lcd_WriteCmd(0x98+y-1);while(*stri>0){Lcd_WriteData(*stri);stri++;}}//****************************************************voiddelayp()//延迟函数{;;}voiddelay_1ms(uintz){uintx,y;for(x=z;x>0;x--)for(y=110;y>0;y—-);}//*****************************************I2C协议voidstart(){SDA=1;delayp();SCL=1;delayp();SDA=0;delayp();}voidstop(){SDA=0;delayp();SCL=1;delayp();SDA=1;delayp();}voidrespons(){uchari;SCL=1;delayp();while((SDA==1)&&(i<250))i++;SCL=0;delayp();}voidinit(){SDA=1;delayp();SCL=1;delayp();}voidwrite_byte(uchardate){uchari,temp;temp=date;for(i=0;i<8;i++){temp=temp〈〈1;SCL=0;delayp();SDA=CY;delayp();SCL=1;delayp();}SCL=0;delayp();SDA=1;delayp();}voidwrite_add(uchardate){start();write_byte(0x90);respons();write_byte(0x40);respons();write_byte(date);respons();stop();}//****************************************************intmain()//************************************************主函数{TMOD=0x01;TH0=(65536—99000/n)/256;TL0=(65536-99000/n)%256;TH1=(65536-5000)/256;TL1=(65536-5000)%256;EA=1;ET0=1;ET1=1;TR0=1;TR1=1;init();while(1){PSB=0;InitLCD();//*******************************************显示模块for(u=0;u<9;u++){xianshi(1,1,”信号发生器”);xianshi(2,1,”波形:");if(bx_chang==0)xianshi(2,4,"sin");if(bx_chang==1)xianshi(2,4,"Square");if(bx_chang==2)xianshi(2,4,”Triangle");xianshi(3,1,”幅度:");Lcd_WriteData(0x30+(fd*5/10));xianshi(3,5,"。”);Lcd_WriteData(0x30+(fd*5%10));xianshi(3,6,”V”);xianshi(4,1,”频率:");Lcd_WriteData(0x30+(n/2/100));Lcd_WriteData(0x30+(n/2/10));Lcd_WriteData(0x30+(n/2%10));xianshi(4,6,"Hz");}}}//**************************************************************8voidrefresh_f(void)interrupt1//定时器中断{if(n>=0&&n〈40){x=14;TH0=(65536-92900/n)/256;TL0=(65536-92900/n)%256;}elseif(n>=40&&n<80){x=15;TH0=(65536-97920/n)/256;TL0=(65536-97920/n)%256;}//*************************************正弦波形a=a+x;if(a<256&&bx_chang==0){write_add(tosin[a]*0.1*fd);}if(a〉=256){a=0;}//************************************方波波形b=b+x;if(b〈128&&bx_chang==1){write_add(0x00*0。1*fd);}if(b>=128&&b〈256&&bx_chang==1)write_add(0xff*0.1*fd);if(b>=256){b=0;}//*************************************三角波波形c=c+x;if(c<128&&bx_chang==2){write_add(c*0.2*fd);}if(c>=128&&c〈256&&bx_chang==2)write_add((-c+256)*0。2*fd);if(c>=256){c=0;}}//********************************************定时器中断按键中断voidrefresh_zd(void)interrupt3{TH1=(65536—5000)/256;TL1=(65536—5000)%256;//*******************************************8if(p32==0){delay_1ms(100);if(p32==0)mode=mode+1;if(mode〉=2)mode=0;while(!p32);}if(p20==0){delay_1ms(100);bx_chang=bx_chang+1;if(bx_chang>=3)bx_chang=0;while(!p20);}//*******************************************频率调节if(p21==0&&mode==1){delay_1ms(100);n=n+2;if(n〉=100)n=1;while(!p21);}if(p22==0&&mode==1){delay_1ms(100);n=n—2;if(n〈=0)n=100;while(!p22);}//*******************************************幅度调节if(p21==0&&mode==0){delay_1ms(100);fd=fd+1;if(fd>=10)fd=1;while(!p21);}if(p22==0&&mode==0){delay_1ms(100);fd=fd-1;if(fd<=1)fd=10;while(!p22);}}单片机课程设计单片机课程设计课题:基于51单片机的交通灯设计专业:ﻩ机械设计制造及其自动化学号:ﻩ指导教师:ﻩﻩ邵添设计日期: ﻩ 2017/12/18成绩:重庆大学城市科技学院电气学院基于51单片机数字温度计设计报告一、设计目的作用本设计是一款简单实用的小型数字温度计,所采用的主要元件有传感器DS18B20,单片机AT89C52,,四位共阴极数码管一个,电容电阻若干。DS18B20支持“一线总线”接口,测量温度范围—55°C~+125°C。在—10~+85°C范围内,精度为±0。5°C。18B20的精度较差,为±本次数字温度计的设计共分为五部分,主控制器,LED显示部分,传感器部分,复位部分,按键设置部分,时钟电路.主控制器即单片机部分,用于存储程序和控制电路;LED显示部分是指四位共阴极数码管,用来显示温度;传感器部分,即温度传感器,用来采集温度,进行温度转换;复位部分,即复位电路,按键部分用来设置上下限报警温度。测量的总过程是,传感器采集到外部环境的温度,并进行转换后传到单片机,经过单片机处理判断后将温度传递到数码管显示。二、设计要求(1).利用DS18B20传感器实时检测温度并显示。(2).利用数码管实时显示温度.(3)。当温度超过或者低于设定值时蜂鸣器报警,LED闪烁指示。(4).能够手动设置上限和下限报警温度。三、设计的具体实现1、系统概述方案一:由于本设计是测温电路,可以使用热敏电阻之类的器件利用其感温效应,在将随被测温度变化的电压或电流采集过来,进行A/D转换后,就可以用单片机进行数据的处理,在显示电路上,就可以将被测温度显示出来,这种设计需要用到A/D转换电路,感温电路比较麻烦。方案设计框图如下:数码管显示电路热敏电阻组成的感温电路数码管显示电路热敏电阻组成的感温电路AD转换方案二:考虑到用温度传感器,在单片机电路设计中,大多都是使用传感器,所以这是非常容易想到的,所以可以采用一只温度传感器DS18B20,此传感器,可以很容易直接读取被测温度值,进行转换,就可以满足设计要求。从以上两种方案,很容易看出,采用方案二,电路比较简单,软件设计也比较简单,故采用了方案二。2、

单元电路设计与分析1、硬件设计按照系统设计功能的要求,确定系统由3个模块组成:主控制器、测温电路和显示电路。数字温度计总体电路结构框图所示:蜂鸣器报警模块AT89C51单片机DB18B20温度传感器按键设置模块电源数码管显示LED闪烁报警模块蜂鸣器报警模块AT89C51单片机DB18B20温度传感器按键设置模块电源数码管显示LED闪烁报警模块单片机的选择单片机AT89S52具有低电压供电和体积小等特点,四个端口只需要两个口就能满足电路系统的设计需要,很适合便携手持式产品的设计使用系统可用二节电池供电。由于器件问题,我们使用了通用的手机5V充电器接口。复位电路模块单片机系统的复位电路在这里使用的是上电+按钮的复位电路模式,其中电阻R采用的是10KΩ的阻值,电容采用电容值为10uF的电解电容,电路图如下:温度显示模块四位共阴极数码管,能够显示小数。列扫描用P2.4~P2。7口来实现,列驱动直接51接单片机驱动.电路图如下: ﻩﻩﻩ ﻩ ﻩﻩ ﻩ ﻩﻩﻩ 温度传感器模块DS18B20温度传感器是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式。电路图如下:ﻩ ﻩﻩ ﻩ ﻩ ﻩﻩ ﻩﻩﻩ ﻩ ﻩ按键模块按键是用来设置报警的上下限温.K1是用来进入上下限调节模式的,当按一下K1进入上限调节模式,再按一下进入下限调节模式。在正常模式下,按一下K2进入查看上限温度模式,显示1s左右自动退出;按一下K3进入查看下限温度模式,显示1s左右自动退出;按一下K4消除按键音,再按一下启动按键音.在调节上下限温度模式下,K2是实现加1功能,K1是实现减1功能,K3是用来设定上下限温度正负的。ﻩ 2、软件设计主要包括主程序、读出温度子程序、温度转换命令子程序、计算温度子程序和现实数据刷新子程序等。主程序主程序的主要功能是负责温度的实时显示、读出并处理DS18B20的测量温度值。温度测量每1S进行一次.主流程图如下:读出温度子程序读出温度子程序的主要功能是读出RAM中的9字节。在读出时须进行CRC校验,校验有错时不进行温度数据的改写。流程图如下:温度转换命令子程序温度转换命令子程序主要是发温度转换开始命令.当采用12位分辨率时,转换时间约为750ms.在本程序设计中,采用1s显示程序延时法等待转换的完成。流程图如下:显示数据刷新子程序显示数据刷新子程序主要是对显示缓冲器中的显示数据进行刷新操作,当最高数据显示位为0时,将符号显示位移入下一位.系统的调试及性能分析:硬件调试,首先检查电感的焊接是否正确,然后可用万用表测试或通电检测。软件调试可以先编写显示程序并进行硬件的正确性检验,然后分别进行主程序、读出温度子程序、温度转换命令子程序、计算温度子程序和现实数据刷新子程序等的编程及调试由于DS18B20与单片机采用串行数据传送,因此,对DS18B20进行读/写编程时必须严格地保证读/写时序;否则将无法读取测量结果。本程序采用单片机汇编或C语言编写用KeilC51编译器编程调试。软件调试到能显示温度值,并且在有温度变化时显示温度能改变,就基本完成.性能测试可用制作的温度计和已有的成品温度计同时进行测量比较。由于DS18B20的精度很高,所以误差指标可以限制在0.5℃以内。另外,—55~+125 ﻩ ﻩ ﻩﻩ ﻩﻩﻩ 四、总结本次的课程设计使我们进一步巩固了书本上的知识,做到了学以致用.这是我们第二次自己动手设计的电路,通过系统仿真软件Proteus和编译软件Keil,使我们进一步了解了单片机的设计制作过程,其中最为困难的是软件部分,即编程部分,我们上网找了好多资料,虽然经过自己的修改,但还是有很多功能不能实现,如温度上下限设置。由于Proteus并不是很熟练,在使用的过程中有很多原件的名称不知道,从而花费了大量的时间在网上查找,今后应该在这方面多多努力。最后一步的焊接硬件也遇到了不少麻烦。总结经验的时候我们得出这样的结论,学习应该学以致用,有目的的去学习,如果学了不用等于没学。其次,要学以致用,理论联系实际,这样才会取得事半功倍的效果.五、附录附录一:元件清单元件名称数量AT89C51单片机112MHZ晶振133pF电容222uF电解电容1按键开关5IC插座40Pin1DS18B20温度传感器1蜂鸣器1LEDø5红1四位一体共阴数码管1470,1K,4.7K电阻8,2,1三极管85501导线若干排针若干附录二:完整电路原理图附录三:焊接实物图附录四:源程序/*********************************************************************程序名;基于51单片机的温度计*功能:实时测量温度,超过上下限报警,报警温度可手动调整.K1是用来*进入上下限调节模式的,当按一下K1进入上限调节模式,再按一下进入下限*调节模式。在正常模式下,按一下K2进入查看上限温度模式,显示1s左右自动*退出;按一下K3进入查看下限温度模式,显示1s左右自动退出;按一下K4消除*按键音,再按一下启动按键音。在调节上下限温度模式下,K2是实现加1功能,*K1是实现减1功能,K3是用来设定上下限温度正负的。*编程者:彭明闯*编程时间:2014/05/30 *********************************************************************/#include〈reg52。h>ﻩﻩ #include<intrins.h〉ﻩﻩ ﻩ//将intrins。h头文件包含到主程序(调用其中的_nop_()空操作函数延时)#defineuintunsignedintﻩ #defineucharunsignedchar ucharmax=0x00,min=0x00; ﻩ//max是上限报警温度,min是下限报警温度bits=0;ﻩ ﻩﻩﻩﻩ ﻩ //s是调整上下限温度时温度闪烁的标志位,s=0不显示200ms,s=1显示1s左右bits1=0;ﻩ ﻩﻩﻩﻩﻩﻩﻩ//s1标志位用于上下限查看时的显示voiddisplay1(uintz);ﻩ ﻩ//声明display1()函数(display。h头文件中的函数,ds18b20。h要用应先声明)#include"ds18b20。h" ﻩ ﻩﻩ#include"keyscan.h" #include"display.h” ﻩﻩ /******************************************************//*ﻩﻩﻩ 主函数 ﻩﻩﻩ ﻩ ﻩﻩﻩ//*****************************************************/voidmain(){ beer=1;ﻩﻩﻩ ﻩ//关闭蜂鸣器 led=1; ﻩ ﻩﻩ //关闭LED灯ﻩtimer1_init(0); ﻩﻩ//初始化定时器1(未启动定时器1) get_temperature(1);ﻩﻩ//首次启动DS18B20获取温度(DS18B20上电后自动将EEPROM中的上下限温度复制到TH和TL寄存器) while(1)ﻩ ﻩﻩ ﻩ{ ﻩﻩkeyscan();ﻩ ﻩﻩ get_temperature(0);ﻩﻩﻩdisplay(temp,temp_d*0.625);ﻩﻩalarm();ﻩ ﻩﻩﻩﻩ}}/*********************************************************************程序名;DS18B20头文件*编程者:彭明闯*编程时间:2014/5/30*说明:用到的全局变量是:无符号字符型变量temp(测得的温度整数部分),temp_d*(测得的温度小数部分),标志位f(测量温度的标志位‘0’表示“正温度"‘1’表*示“负温度”),标志位f_max(上限温度的标志位‘0’表示“正温度”、‘1’表*示“负温度”),标志位f_min(下限温度的标志位‘0’表示“正温度"、‘1'表*示“负温度"),标志位w(报警标志位‘1’启动报警‘0’关闭报警).ﻩﻩ*********************************************************************/#ifndef__ds18b20_h__ ﻩ ﻩ//定义头文件#define__ds18b20_h__#defineuintunsignedintﻩﻩ #defineucharunsignedcharﻩﻩﻩsbitDQ=P2^3;ﻩﻩ ﻩ ﻩ//DS18B20接口sbitbeer=P1^0;ﻩﻩ ﻩ//用beer表示P1。0sbitled=P1^1; ﻩ ﻩ//用led表示P1.1uchartemp=0;ﻩ ﻩ//测量温度的整数部分uchartemp_d=0; //测量温度的小数部分bitf=0; ﻩ ﻩ//测量温度的标志位,0’表示“正温度”‘1’表示“负温度”)bitf_max=0;ﻩ ﻩ //上限温度的标志位‘0’表示“正温度"‘1'表示“负温度")bitf_min=0; ﻩ //下限温度的标志位‘0’表示“正温度”、‘1'表示“负温度”)bitw=0; ﻩ ﻩﻩ //报警标志位‘1’启动报警‘0’关闭报警/******************************************************//* ﻩﻩﻩ ﻩﻩ 延时子函数ﻩﻩ ﻩ ﻩﻩ ﻩ ﻩ//*****************************************************/voidds18b20_delayus(uintt)//延时几μs{while(t——);}voidds18b20_delayms(uintt)ﻩ //延时1ms左右{ uinti,j; for(i=t;i〉0;i-—)ﻩfor(j=120;j>0;j--);}/******************************************************//*ﻩ ﻩ ﻩﻩDS18B20初始化函数ﻩ ﻩ ﻩﻩﻩﻩ//*****************************************************/voidds18b20_init()ﻩﻩ ﻩﻩ{ ucharc=0; DQ=1; DQ=0;ﻩ ﻩﻩﻩ ﻩ//控制器向DS18B20发低电平脉冲ﻩds18b20_delayus(80); ﻩ//延时15-80μsﻩDQ=1;ﻩﻩ ﻩﻩ ﻩ ﻩ //控制器拉高总线,ﻩwhile(DQ);ﻩ ﻩﻩ //等待DS18B20拉低总线,在60—240μs之间ﻩds18b20_delayus(150); ﻩ//延时,等待上拉电阻拉高总线 DQ=1; ﻩ ﻩﻩ ﻩﻩ //拉高数据线,准备数据传输;}/******************************************************//* ﻩﻩ ﻩDS18B20字节读函数 ﻩ ﻩﻩﻩ ﻩ//*****************************************************/uchards18b20_read() ﻩ ﻩ{ uchari;ﻩuchard=0;ﻩDQ=1; ﻩﻩﻩ ﻩ//准备读; for(i=8;i>0;i—-)ﻩ{ ﻩd>>=1;ﻩﻩﻩ//低位先发; ﻩDQ=0; ﻩﻩ ﻩﻩ ﻩ _nop_(); _nop_(); ﻩ ﻩﻩ DQ=1; ﻩ ﻩﻩﻩ//必须写1,否则读出来的将是不预期的数据; ﻩif(DQ) ﻩ ﻩﻩ//在12us处读取数据;ﻩ d|=0x80; ds18b20_delayus(10); ﻩ ﻩ}ﻩreturnd;ﻩ ﻩﻩ ﻩ//返回读取的值}/******************************************************//* ﻩ ﻩ ﻩDS18B20字节写函数 ﻩﻩﻩﻩ//*****************************************************/voidds18b20_write(uchard) ﻩ{uchari;for(i=8;i>0;i-—){ DQ=0;ﻩﻩDQ=d&0x01;ﻩ ds18b20_delayus(5);ﻩ DQ=1; ﻩd>>=1;}}/******************************************************//*ﻩﻩ ﻩﻩﻩﻩﻩ获取温度函数ﻩ ﻩﻩﻩﻩ ﻩﻩ//*****************************************************/voidget_temperature(bitflag) { uchara=0,b=0,c=0,d=0;uinti; ds18b20_init(); ﻩds18b20_write(0xcc);ﻩ //向DS18B20发跳过读ROM命令ﻩds18b20_write(0x44); ﻩﻩ//写启动DS18B20进行温度转换命令,转换结果存入内部RAM if(flag==1)ﻩ{ ﻩﻩﻩ ﻩﻩﻩ ﻩ//首次启动DS18B20进行温度转换需要500ms,若转换时间不够就出错,读出的是85度的错误值。 display1(1);ﻩ //用开机动画耗时 }ﻩelse ds18b20_delayms(1); ﻩﻩﻩds18b20_init(); ﻩ ﻩds18b20_write(0xcc); ﻩ ds18b20_write(0xbe);ﻩﻩﻩ a=ds18b20_read(); ﻩﻩﻩ //读内部RAM(LSB) b=ds18b20_read();ﻩﻩﻩﻩ //读内部RAM(MSB)ﻩif(flag==1)ﻩ ﻩﻩﻩ //局部位变量f=1时读上下线报警温度ﻩ{ max=ds18b20_read(); //读内部RAM(TH)ﻩmin=ds18b20_read(); //读内部RAM(Tl)ﻩ ﻩ}ﻩif((max&0x80)==0x80)ﻩ //若读取的上限温度的最高位(符号位)为‘1’表明是负温度ﻩ{f_max=1;max=(max—0x80);}//将上限温度符号标志位置‘1’表示负温度,将上限温度装换成无符号数。 if((min&0x80)==0x80)ﻩ //若读取的下限温度的最高位(符号位)为‘1’表明是负温度 {f_min=1;min=(min—0x80);}//将下限温度符号标志位置‘1’表示负温度,将下限温度装换成无符号数。ﻩﻩ i=b;ﻩi>>=4;ﻩif(i==0)ﻩﻩ{f=0; ﻩ ﻩ//i为0,正温度,设立正温度标记temp=((a〉>4)|(b<<4)); ﻩ//整数部分ﻩa=(a&0x0f); temp_d=a;ﻩ ﻩ//小数部分ﻩ }ﻩelseﻩ {ﻩf=1; ﻩﻩ //i为1,负温度,设立负温度标记 a=~a+1; b=~b; temp=((a>〉4)|(b〈<4)); ﻩ ﻩﻩ//整数部分 a=(a&0x0f); ﻩﻩﻩ//小数部分ﻩtemp_d=a; }}/******************************************************//* ﻩﻩﻩﻩ ﻩﻩﻩ存储极限温度函数ﻩ ﻩ ﻩ//*****************************************************/voidstore_t(){ if(f_max==1)ﻩﻩﻩ ﻩ//若上限温度为负,将上限温度转换成有符号数(最高位为1是负,为0是正)ﻩmax=max+0x80;ﻩif(f_min==1) ﻩﻩ//若下限温度为负,将上限温度转换成有符号数 min=min+0x80; ds18b20_init();ﻩﻩﻩ ds18b20_write(0xcc);ﻩﻩﻩﻩds18b20_write(0x4e); //向DS18B20发写字节至暂存器2和3(TH和TL)命令 ds18b20_write(max);ﻩﻩﻩ//向暂存器TH(上限温度暂存器)写温度 ds18b20_write(min); ﻩ //向暂存器TL(下限温度暂存器)写温度 ds18b20_write(0xff);ﻩﻩ //向配置寄存器写命令,进行温度值分辨率设置 ds18b20_init(); ﻩﻩ ds18b20_write(0xcc);ﻩ ﻩﻩds18b20_write(0x48); //向DS18B20发将RAM中2、3字节的内容写入EEPROM}ﻩ ﻩﻩﻩ ﻩﻩﻩ ﻩ //DS18B20上电后会自动将EEPROM中的上下限温度拷贝到TH、TL暂存器/******************************************************//*ﻩﻩﻩﻩﻩﻩ ﻩ温度超限报警函数 ﻩ ﻩﻩﻩ//*****************************************************/voidalarm(){ ﻩﻩ ﻩ ﻩ //若上限值是正值 if(f_max==0)ﻩ{ if(f_min==0) ﻩ //若下限值是正值ﻩ {ﻩﻩ if(f==0)ﻩ ﻩ//若测量值是正值 ﻩ{ﻩ ﻩif(temp<=min||temp〉=max) ﻩﻩﻩ{w=1;TR1=1;}ﻩ //当测量值小于最小值或大于最大值时报警 ﻩﻩﻩif((temp<max)&&(temp>min))ﻩ {w=0;}ﻩ ﻩ//当测量值大于最小值且小于最大值时不报警ﻩﻩﻩ}ﻩ ﻩif(f==1){w=1;TR1=1;} //若测量值是负值时报警 ﻩ}ﻩif(f_min==1) ﻩﻩ //若下限值是负值 { ﻩ if(f==0) ﻩﻩ //若测量值是正值 ﻩ{ ﻩﻩif(temp〉=max)//当测量值大于最大值时报警 ﻩ {w=1;TR1=1;} ﻩ if(temp<max)//当测量值小于最大值时不报警 ﻩﻩ {w=0;}ﻩ }ﻩﻩﻩif(f==1)ﻩﻩﻩ //若测量值是负值 ﻩ{ﻩ ﻩﻩif(temp>=min)//当测量值大于最小值时报警 {w=1;TR1=1;}ﻩ ﻩ if(temp〈min)//当测量值小于最小值时不报警ﻩﻩ {w=0;} } } }ﻩif(f_max==1) ﻩﻩ //若下限值是负值 {ﻩif(f_min==1)ﻩ ﻩ//若下限值是负值ﻩﻩ{ ﻩif(f==1) ﻩﻩ //若测量值是负值ﻩﻩﻩ{ ﻩif((temp<=max)||(temp〉=min)) ﻩﻩ{w=1;TR1=1;}ﻩﻩ//当测量值小于最大值或大于最小值时报警ﻩﻩ ﻩif((temp〈min)&&(temp>max))ﻩﻩﻩ {w=0;} ﻩﻩ //当测量值小于最小值且大于最大值时不报警ﻩ }ﻩ ﻩif(f==0){w=1;TR1=1;} //若测量值是正值时报警ﻩﻩ}ﻩ}ﻩ}#endif/***********************************************************************程序名;ds18b20keyscan函数*功能:通过键盘设定设定上下限报警温度*编程者:彭明闯*编程时间:2014/5/30**********************************************************************/#ifndef__keyscan_H__ ﻩﻩ//定义头文件#define__keyscan_H__ﻩﻩsbitkey1=P2^2;ﻩﻩﻩﻩ sbitkey2=P2^1;ﻩﻩ sbitkey3=P2^0;ﻩ sbitkey4=P3^3;ﻩ ﻩ ﻩuchari=0;ﻩ ﻩ ﻩ //定义全局变量i用于不同功能模式的选择,‘0’正常模式,‘1’上限调节模式,‘2’下限调节模式uchara=0;ﻩ ﻩﻩﻩ //定义全局变量a用于不同模式下数码管显示的选择bitﻩk4=0;ﻩ ﻩ ﻩ //K4按键双功能选择位,k4=0时K4按键选择消按键音的功能,k4=1时K4按键选择正负温度设定功能bitv=0; ﻩ ﻩ ﻩﻩ//K2、K3按键双功能选择位,v=0时选择上下限查看功能,v=1时选择上下限温度加减功能bitv1=0; ﻩﻩ ﻩﻩ//v1=1时定时1250ms时间到自动关闭报警上下限查看功能bitv2=0; ﻩ //消按键音功能调整位,为‘0’时开按键音,为‘1'时关按键音/******************************************************//*ﻩ ﻩﻩ ﻩ ﻩ读键盘延时子函数 ﻩ ﻩﻩ ﻩ//*****************************************************/voidkeyscan_delay(uintz)ﻩﻩ //延时1ms左右{uinti,j;for(i=z;i>0;i--)ﻩfor(j=120;j>0;j——);}/******************************************************//*ﻩﻩﻩﻩ ﻩ ﻩﻩ 温度调节函数ﻩﻩ ﻩﻩﻩ //*****************************************************/inttemp_change(intcount,bitf)ﻩ//上下限温度调整{if(key2==0) ﻩﻩﻩ ﻩ//判断K2是否按下ﻩ{ ﻩ if(v2==0)beer=0;ﻩ ﻩ//v2=0开按键音,否则消按键音ﻩﻩkeyscan_delay(10); ﻩﻩ//延时10ms ﻩif(key2==0) ﻩ ﻩ//再次判断K2是否按下(实现按按键时消抖)ﻩﻩ{ ﻩ beer=1;ﻩ ﻩ ﻩ//K2按下关按键音ﻩ if(f==0) ﻩ//若温度为正 { ﻩcount++; ﻩ//每按一下K2温度上调1ﻩ if(a==1){if(count〉125)count=125;}//当温度值大于125时不上调 ﻩ if(a==2){if(count>125)count=125;}ﻩﻩ}ﻩﻩif(f!=0) ﻩﻩ ﻩ//若温度为负ﻩﻩ{ﻩ ﻩﻩ count++;ﻩﻩ ﻩ//每按一下K2温度下调1 ﻩif(a==1){if(count>55)count=55;}//当温度值小于-55时不再下调 ﻩﻩif(a==2){if(count〉55)count=55;} ﻩ} } while(key2==0);ﻩ ﻩ //K2松开按键时消抖 ﻩkeyscan_delay(10); }ﻩif(key3==0) {ﻩif(v2==0)beer=0;ﻩ keyscan_delay(10);ﻩﻩif(key3==0) ﻩ ﻩ//K3按按键时消抖 { ﻩbeer=1; count——;ﻩ ﻩﻩ//每按一下K3温度为正时下调1,为负时上调1ﻩ if(a==1){if(count〈0)count=0;}//当温度值达到0时不再调 ﻩﻩif(a==2){if(count〈0)count=0;} ﻩ} ﻩwhile(key3==0); keyscan_delay(10); ﻩﻩ//K3松开按键时消抖 ﻩ} returncount;}/******************************************************//*ﻩﻩ ﻩ ﻩ 读键盘函数 ﻩ ﻩﻩ ﻩ//*****************************************************/voidkeyscan(){ ﻩif(key1==0)ﻩ{ﻩif(v2==0)beer=0; ﻩkeyscan_delay(10); ﻩif(key1==0)ﻩ ﻩﻩﻩ//K1按按键时消抖 {ﻩﻩbeer=1;ﻩﻩTR1=1; ﻩﻩ//开定时器1,通过s标志位的变化,实现在上下限温度调整时温度显示时闪烁的功能 ﻩﻩ k4=1; ﻩﻩ //在上下温度调节功能模式下选择K4的调整上下限温度正负的功能ﻩﻩv=1;ﻩ ﻩ //在上下温度调节功能模式下选择K2、K3的温度加减功能 i++; ﻩﻩ ﻩﻩ//K1按一下i加1,i=‘0'进入正常模式,i=‘1’进入调上限模式,i=‘2’进入调下限模式ﻩ if(i>2)ﻩ ﻩﻩ //K1按下三次后退出调节模式 ﻩ{ﻩﻩi=0;ﻩ ﻩﻩﻩ//进入正常模式 ﻩﻩTR1=0; ﻩﻩ //关定时器1ﻩﻩﻩk4=0;ﻩ ﻩ //在正常模式下选择K4的消按键音功能ﻩﻩﻩv=0;ﻩﻩ ﻩﻩ//在正常模式下选择K2、K3的查看上下限报警温度功能 ﻩstore_t();ﻩ ﻩ//存储调整后的上下限报警温度ﻩﻩ}ﻩ switch(i)ﻩﻩ ﻩ//显示选择 ﻩ{ ﻩcase0:a=0;break; //a=0选择显示测得的温度 ﻩcase1:a=1;break;//a=1选择显示上限温度ﻩ case2:a=2;break;//a=2选择显示下限温度 ﻩﻩﻩﻩ default:break; ﻩ}ﻩﻩ }ﻩ while(key1==0);ﻩ ﻩ//K1松按键时消抖ﻩ keyscan_delay(10); ﻩ} if(a==1&&v==1) ﻩﻩﻩ //a=1选择显示上限温度且v=1时选择上下限温度加功能ﻩ{led=0;max=temp_change(max,f_max);}//显示上限温度 elseif(a==2&&v==1)ﻩﻩ //a=2选择显示下限温度且v=1时选择上下限温度减功能ﻩ{led=1;min=temp_change(min,f_min);} else;ﻩif(k4==1)ﻩﻩ ﻩ ﻩ//k4=1时K4按键选择正负温度设定功能 { if(key4==0)ﻩﻩ{ﻩﻩif(v2==0)beer=0;ﻩ keyscan_delay(5); ﻩﻩif(key4==0)ﻩ ﻩ{ﻩ ﻩbeer=1; if(a==1)ﻩﻩ {if(max>55)f_max=0;elsef_max=~f_max;}//当温度大于55度时,只能设定为正温度ﻩ ﻩif(a==2)ﻩﻩ {if(min〉55)f_max=0;elsef_min=~f_min;}//当温度大于55度时,只能设定为正温度 ﻩﻩ ﻩ}ﻩ ﻩwhile(key4==0); keyscan_delay(10);ﻩﻩ} } if(v==0)ﻩﻩ ﻩﻩﻩ//v=0时选择上下限查看功能 {ﻩﻩif(key2==0) {ﻩﻩif(v2==0)beer=0;ﻩ keyscan_delay(10); ﻩ if(key2==0)ﻩ { ﻩﻩbeer=1; ﻩ a=1;ﻩ ﻩﻩﻩ//选择上限显示 ﻩﻩTR1=1; ﻩ //开定时器1开始定时一分钟左右ﻩ s1=1;ﻩ ﻩ //上限显示不闪烁,显示一分钟左右自动退出 ﻩ} ﻩ while(key2==0); ﻩkeyscan_delay(10); ﻩﻩﻩ }ﻩ if(key3==0) {ﻩﻩif(v2==0)beer=0;ﻩ ﻩkeyscan_delay(10); ﻩ if(key3==0) ﻩ{ ﻩﻩbeer=1;ﻩﻩﻩa=2; ﻩﻩ//选择下限显示ﻩﻩ TR1=1; ﻩﻩ //开定时器1开始定时1sﻩﻩ s1=1;ﻩﻩﻩ //下限显示不闪烁,显示1s自动退出ﻩ ﻩ ﻩ }ﻩﻩ while(key3==0);ﻩ keyscan_delay(10); ﻩ ﻩ} ﻩif(v1==1) ﻩ ﻩ//v1=1时定时1s时间到自动关闭报警上下限查看功能ﻩﻩ{a=0;v1=0;TR1=0;}ﻩﻩ//a=0显示实测温度,v1清零,关定时器1ﻩﻩif(k4==0) ﻩ //k4=0时K4按键选择消按键音的功能ﻩ { ﻩ ﻩ if(key4==0) ﻩﻩ{ if(v2==0)beer=0; ﻩﻩﻩkeyscan_delay(10);ﻩ ﻩﻩif(key4==0) ﻩ ﻩ{ﻩﻩﻩ beer=1; ﻩ ﻩv2=~v2;ﻩ //为‘0’时开按键音,为‘1'时关按键音ﻩ ﻩ ﻩ }ﻩ ﻩ while(key4==0);ﻩﻩﻩ keyscan_delay(10);ﻩ } ﻩ ﻩ}ﻩ}}#endif/***********************************************************************程序名;ds18b20数码管动态显示头文件*功能:通过定时器0延时是数码管动态显示*编程者:彭明闯*编程时间:2014/5/30**********************************************************************/#ifndef__ds18b20_display_H__ #define__ds18b20_display_H__#defineuintunsignedint ﻩ//变量类型宏定义,用uint表示无符号整形(16位)#defineucharunsignedchar ﻩ //变量类型宏定义,用uchar表示无符号字符型(8位)sbitwei1=P2^4;ﻩﻩ ﻩ //可位寻址变量定义,用wei1表示P2。4口sbitwei2=P2^5; ﻩﻩﻩﻩ//用wei2表示P2.5口sbitwei3=P2^6;ﻩﻩ ﻩ ﻩ//用wei3表示P2。6口sbitwei4=P2^7;ﻩﻩ ﻩ ﻩ//用wei4表示P2.7口ucharnum=0; ﻩﻩﻩ //定义num为全局无符号字符型变量,赋初值为‘0’ucharcodetemperature1[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //定义显示码表0~9ucharcodetemperature2[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef}; //带小数点的0~9.ucharcodetemperature3[]={0x00,0x80,0x40,0x7

温馨提示

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

评论

0/150

提交评论