通信与测控系统课程设计报告一、课程设计目的及要求①通过一个具体的项目实例,熟悉项目开发的流程,学习与通信相关的测控系统开发,包括基本知识、技术、技巧②锻炼硬件编程能力(C51),积累编程经验,形成代码风格,理解软件层次结构③常用外围器件(接口)的操作、驱动一、实习主要任务①采集远端温度信息,无线收集,上位机显示信息②硬件配置:51系统板、DS18B20、无线数传模块IA4421、数码管③编程、调试,完成作品二、硬件电路的原理框图图一、AT89S51、数码管硬件原理图图二、IA4421硬件原理图图三、DS18B20硬件原理图最终实现的功能:三、软件设计及原理1、读主程序流程图主程序代码:#include
#include#include#include#include#include#defineuintunsignedint#defineucharunsignedcharunsignedcharm;unsignedcharn;voidzhuanhuan();voiddelay_led(uintz){uintx,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}uintaa;ucharwei_1,wei_2,wei_3,v,wei_4,wei_5,wei_6;uintshuju;//得到的温度值uchartemp[2]={0,0};//存放DS18B20的温度寄存器值uintvalue=0;sbitDQ=P3^3;//数据线voidReadSerialNumber(void);ucharsn1,sn2,sn3,sn4,sn5,sn6,sn7,sn8;//存放DS18B20的64位序列号voidow_reset(void);voidtmstart(void);voidReadSerialNumber(void);voidRead_Temperature(void);voidwrite_byte(char);uintread_byte(void);voiddelay_18B20(uint);//voidbaojing();/*******主函数**********/voidmain(){m=0;//init_led();//初始化子程序tmstart();delay_18B20(50);/*等待转换结束*/while(1){m++;Read_Temperature();delay_18B20(50);tmstart();delay_18B20(50);/*等待转换结束*/zhuanhuan();ia4421();n=wei_4;wei_4<<=4;txdata[4]=wei_5|wei_4;if(m==50){m=0;UART_Init();P1=0xfc;txdata[0]=0x2d;txdata[1]=0xd4;txdata[2]=0xfa;txdata[3]=0x01;ia442xinit();spirevtwobyte();spisendcommand(0x8288);txregframe();}P2=0xff;P0=table[n];P2_4=0;delay1s();P2_4=1;P0=table[wei_5];P2_5=0;delay1s();P2_5=1;P0=~0x80;P2_6=0;delay1s();P2_6=1;P0=~0x39;P2_7=0;delay1s();P2_7=1;}}/******转换************/voidzhuanhuan(){aa=shuju;wei_1=aa/100000;wei_2=aa/10000%10;wei_3=aa/1000%100%10;wei_4=aa/100%1000%100%10;wei_5=aa/10%10000%1000%100%10;wei_6=aa/1%100000%10000%1000%100%10;}/******延时函数*********///========18b20程序=================*/voiddelay_18B20(uintseconds)//延时{for(;seconds>0;seconds--);}/******************************************18b20程序******************************************///===============复位===========voidow_reset(void){ucharpresence;DQ=0;//pullDQlinelowdelay_18B20(44);//至少480微秒,leaveitlowfor501usDQ=1;//allowlinetoreturnhigh?delay_18B20(3);//waitforpresence18b2036uspresence=DQ;//getpresencesignal//0=DS18B20ready,1=busy//if(!presence)P1_0=0;delay_18B20(12);//waitforendoftimeslot}//=========从总线上读取一个字节========uintread_byte(void){uchari;for(i=8;i>0;i--){value>>=1;DQ=0;//pullDQlowtostarttimeslot_nop_();_nop_();_nop_();_nop_();DQ=1;//thenreturnhighif(DQ){value|=0x80;}delay_18B20(4);//waitforrestoftimeslot}return(value);}//===========向18B20写一个字节=================voidwrite_byte(charval){uchari,j;for(i=8;i>0;i--)//writesbyte,onebitatatime{DQ=0;//pullDQlowtostarttimeslotj++;/*延时4us*/DQ=val&0x01;delay_18B20(8);//holdvalueforremainderoftimeslotDQ=1;j++;val>>=1;}}//============读取温度============voidRead_Temperature(void){intk,i;inttemple;/*存放读取的温度值将其除以16即为得到的值*/ow_reset();k++;//延时4uswrite_byte(0xCC);//Sk_nop_();ipROMk++;//延时4uswrite_byte(0xBE);//readregisterk++;k++;//延时8ustemp[0]=read_byte();//读取低字节temp[1]=read_byte();//读取...