資源描述:
《基于labview串口通信》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在學(xué)術(shù)論文-天天文庫。
1、題目:用串口通信將溫度,濕度信息發(fā)送到PC機(jī)進(jìn)行顯示報警。要求;需要進(jìn)行單片機(jī)的編程和系統(tǒng)方案的設(shè)計一:硬件設(shè)計及原理圖1:單片機(jī)的選擇由于我們的系統(tǒng)中,單片機(jī)要完成的任務(wù)只有溫度的采集和串口數(shù)據(jù)的發(fā)送,所以我們選擇的是既能滿足要求又比較便宜的TA89s52這款單片機(jī)。單片機(jī)最小系統(tǒng)如下圖2:溫度采集電路這里我們采集溫度的傳感器是用的18b20。它的優(yōu)點(diǎn)有:直接輸出數(shù)字量,精度高達(dá)0.0625攝氏度,占用的端口資源少。3電平轉(zhuǎn)換電路因為單片機(jī)串口發(fā)出的數(shù)據(jù)時使用的是TTL電平,而計算機(jī)上的串口用的是RS232電平,所有用了TC232這款電平轉(zhuǎn)換芯片來完成電平的匹配。二:軟件流程圖三:單
2、片機(jī)系統(tǒng)上的程序:#include#include#include#defineucharunsignedchar#defineuintunsignedint;/*****************************************************************************/sbitseg1=P2^0;sbitseg2=P2^1;sbitseg3=P2^2;sbitDQ=P1^7;//ds18b20端口sfrdataled=0x80;//顯示數(shù)據(jù)端口/*******************
3、***************************************************/uchartemp,s_count=0;ucharflag_get,count,num,minute,second;ucharcodetab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//7段數(shù)碼管段碼表共陽ucharstr[3];unsignedcharsend_dat[4]={42,00,00,35};//發(fā)送數(shù)據(jù)的格式/***********************************************
4、************************/voiddelay1(ucharMS);unsignedcharReadTemperature(void);voidInit_DS18B20(void);unsignedcharReadOneChar(void);voidWriteOneChar(uchardat);voiddelay(unsignedinti);voiduart_init(void);voidtime_init(void);//voidsend_data(void);voidlong_delay(intm);//voiddelay_c(uinti);/*主程序*/ma
5、in(){time_init();uart_init();while(1){str[2]=0x39;//顯示C符號str[0]=tab[temp/10];//十位溫度str[1]=tab[temp%10];//個位溫度if(flag_get==1)//定時讀取當(dāng)前溫度{temp=ReadTemperature();flag_get=0;}s_count=0;SBUF=send_dat[s_count++];long_delay(200);}}voidtim(void)interrupt1using1//中斷,用于數(shù)碼管掃描和溫度檢測間隔{TH0=0xef;//定時器重裝值TL0=0xf
6、0;num++;if(num==50){num=0;flag_get=1;//標(biāo)志位有效second++;if(second>=60){second=0;minute++;}}count++;if(count==1){P2=0;dataled=str[0];}//數(shù)碼管掃描if(count==2){P2=1;dataled=str[1];}if(count==3){P2=2;dataled=str[2];count=0;}}/*********************************************************************************
7、****/voiddelay(unsignedinti)//延時函數(shù){while(i--);}/***************************************************************************************///18b20初始化函數(shù)voidInit_DS18B20(void){unsignedcharx=0;DQ=1;//DQ復(fù)位delay(8);//稍做延時DQ=0;//單片機(jī)將