您好,欢迎访问三七文档
2016-2017学年第(1)学期课程名称:单片机控制系统设计班级:姓名:学号:指导教师:成绩:设计报告题目:温度测量实验一.设计要求1.设计并绘制单片机电路原理图2.设计并绘制PCB电路图3.编写单片机运行程序并调试二.设计过程1.电路图图1单片机芯片作用:MSP430F449IPZ芯片采用100——PINQFP封装,和采用16位RISC结构,具有丰富的片内外设和大容量的片内工作寄存器和存储器,分析写入的程序并根据程序在特定引脚给出脉冲。图2晶振电路及电源保护电路作用:结合单片机内部电路,并提供单片机的原始脉冲,使电源电压稳定.而且时钟频率越高,单片机运行频率越快。图3温度寄存器和计数器图4数字温度传感器作用:将传感器受到的温度以脉冲信号的形式发送给计数器再计算传递至温度寄存器显示。图5引脚连接作用:将收集到的数据传送到MSP430F499IPZ上。2.电路图制版3.程序编制#includemsp430x44x.h#defineDQ1P6OUT|=BIT6#defineDQ0P6OUT&=~BIT6unsignedchardis_buf[2];intTemper=0;inttemperature=0;unsignedcharError=0;//----------------------------------//功能:us级别延时//n=10,则延时10*0.74+2.7=10.1uS//----------------------------------voidDelayNus(unsignedintnum){while(num--);}//-----------------------------------//功能:写18B20//-----------------------------------voidWrite_18B20(unsignedcharn){unsignedchari;for(i=0;i8;i++){DQ0;DelayNus(20);//延时18us左右if((n&0X01)==0X01)DQ1;elseDQ0;n=n1;DelayNus(50);//延时40us以上DQ1;}}//------------------------------------//功能:读取18B20//------------------------------------unsignedcharRead_18B20(void){unsignedchari;unsignedchartemp=0;for(i=0;i8;i++){temp=temp1;DQ0;_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();//延时1usDQ1;DelayNus(1);//2.7usP6DIR&=~BIT6;if((P6IN&BIT6)==0){temp=temp&0x7F;}else{temp=temp|0x80;}DelayNus(57);//延时45usP6DIR|=BIT6;DQ1;}returntemp;}//-----------------------------------voidInit(void){DQ0;DelayNus(672);//延时500usDQ1;DelayNus(90);//延时70usP6DIR&=~BIT6;if((P6IN&BIT6)==BIT6)//00011111b=1f{Error=1;//失败1P6DIR|=BIT6;}else{Error=0;//初始化成功P6DIR|=BIT6;DQ1;}DelayNus(335);//延时250us}voidReadTemp(void){chartemp_low,temp_high;//温度值temp_low=Read_18B20();//读低位temp_high=Read_18B20();//读高位temperature=(temp_high&0x0f);temperature=8;temperature|=temp_low;Temper=temperature*0.0625;}voidGetTemp(void){Init();Write_18B20(0xcc);//SkipROM_NOP();Write_18B20(0x44);//ConvertTDelayNus(65000);DelayNus(65000);DelayNus(65000);DelayNus(65000);DelayNus(65000);DelayNus(65000);DelayNus(65000);DelayNus(65000);DelayNus(65000);DelayNus(65000);DelayNus(65000);DelayNus(65000);DelayNus(65000);DelayNus(65000);DelayNus(65000);DelayNus(65000);//延时750ms以上Init();Write_18B20(0xcc);//SkipROM_NOP();Write_18B20(0xbe);ReadTemp();}voiddelayms(){unsignedinti;i=10000;do(i--);while(i!=0);}voidInit_Port(void){//将P2所有管脚初始化为输入方向P2DIR=0;//将P1口所有的管脚为普通I/OP2SEL=0;//将P2.4P2.5设置为输出方向P2DIR|=BIT4;P2DIR|=BIT5;return;}voidLed_Disp(){unsignedcharled_dat[16]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6,0xee,0x3e,0x1a,0x7a,0x9e};//数码管段码数据unsignedcharc,x,dat,DAT;for(x=0;x2;x++)//发送显示数据{dat=led_dat[dis_buf[1-x]];for(c=0;c8;c++){P2OUT&=~(BIT4);DAT=dat&0x01;if(DAT==1){P2OUT|=BIT5;}else{P2OUT&=~(BIT5);}P2OUT|=BIT4;dat=1;}}}voidinit_clk(){SCFI0|=FN_4;//x2DCOfrequency,8MHznominalDCOSCFQCTL=121;//(121+1)x32768x2=7.99MhzFLL_CTL0=DCOPLUS+XCAP18PF;//DCO+setsofreq=xtalxDxN+1}voidmain(void){WDTCTL=WDTPW+WDTHOLD;//停看门狗P4DIR=0xff;P4OUT=0xff;init_clk();Init_Port();P6DIR|=BIT6;while(1){GetTemp();dis_buf[0]=Temper/10%10;dis_buf[1]=Temper%10;Led_Disp();delayms();}}三.实验测试通过芯片MSP430测试温度变化并利用IAR程序编写测试程序,将所测得的温度数值显示到显示屏。四.心得与体会在MSP430的实验中,我的收获很多,实现将传感器采集到的模拟信号转换成单片机可以识别的数字信号,再经单片机转换成LED显示器可以识别的信息,最后显示输出。对于学习过单片机,在学习中,我从网上搜索的资料对我帮助很大,遇到不懂的问题自己解决不了,就和大家一起讨论。此次课程设计使我更加了解430芯片的功能,以前学习单片机过程中得漏洞也得到了很好的修补,单片机控制数码管的显示时,尤其是多个时,要使用驱动电路。课程设计暴露了我在平时学习中的不足,以及对知识缺乏融会贯通的能力,课程设计过程中,我们不断发现错误,不断修改,不断领悟,不断获取。实践出真知,只有亲身实践才能得到真理。
本文标题:单片机温度测量
链接地址:https://www.777doc.com/doc-5444863 .html