版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、基于單片機的低功耗溫度記錄儀設(shè)計方案附錄 1:總體電路圖:附錄 2:單片機程序:#include #include #define uchar unsigned charbit Tflag;/溫度正負(fù)標(biāo)志sbit DQ=P37;/溫度輸入口sbit DIN=P07;/LED小數(shù)點控制uchar codeditab16=0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09;/溫度小數(shù)部分用查表法unsigned char code dispcode=0x3f,0x06,0x5b,0x4f,0
2、x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40;/共陰led段碼表0x40負(fù)unsigned char dispbitcode=0xfe,0xfd,0xfb,0xf7,;uchar data temp_data2=0x00,0x00;/unsigned char dispbuf5=0,0,0,0,0;讀出溫度暫放void digitalshow(unsigned char a3,unsigned char a2,unsigned char a1,unsigned char a0)unsigned char i;dispbuf0=a0;dispbuf1=a1;dis
3、pbuf2=a2;dispbuf3=a3;for(i=0;i4;i+)P2=0xff;/關(guān)閉所有顯示P0=dispcodedispbufi;P2=dispbitcodei;if(i=1)DIN=1;/*該程序為總線上只有一個器件*/ 毫秒延時 11.059 Mhzvoid dmsec (unsigned int count)unsigned int i;/ 1ms延時while (count-)for (i=0;i125;i+)void Delay(unsigned int num)/延時函數(shù)while( -num );/ 復(fù)位脈沖void tmreset (void)DQ=0;Delay(9
4、0);/精確延時大于480usDQ=1;Delay(4);/ 90,4可以小范圍變化/ 存在脈沖void tmpre (void)while (DQ);while (DQ);Delay(4);/ 讀一個位bit tmrbit (void)unsigned int i;bit dat;DQ = 0; i+;/ i+;大概1usDQ = 1; i+; i+;dat = DQ;Delay(8);return (dat);/ 讀一個比特unsigned char tmrbyte (void)unsigned char i,j,dat;dat = 0;for (i=1;i=8;i+)j = tmrbit
5、 ();dat = (j 1);return (dat);/ 寫一個比特void tmwbyte (unsigned char dat)unsigned int i;unsigned char j;bit testb;for (j=1;j 1;/從低位開始?if (testb)/ Write 1DQ=0;i+; i+;/先拉低/ 1usDQ=1;Delay(4);else/ Write 0DQ=0;Delay(4);/大一點沒影響,但不能太大,寫一個位在30us 內(nèi)DQ=1;i+; i+;/再拉高/ds1820開始轉(zhuǎn)換void tmstart (void)dmsec(1);tmreset ()
6、;tmpre ();dmsec (1);tmwbyte (0xcc);tmwbyte (0x44);/ skip rom/轉(zhuǎn)換/ 讀取溫度read_temp()tmreset ();tmpre ();dmsec (1);tmwbyte (0xcc);/ skip romtmwbyte (0xbe);/轉(zhuǎn)換temp_data0 = tmrbyte ();temp_data1= tmrbyte ();if(temp_data1 & 0x80)=0x80)/LSB低8位/MSB 高 8位/ 判斷溫度正負(fù)temp_data1=temp_data1;temp_data0=temp_data0+1;/ 負(fù)
7、溫度處理( DS18B20的負(fù)溫度是正的反碼,即將它取反+1,就得到正的溫度)Tflag=0;elseTflag=1;/* MAIN */void main (void)uchar last;uchar lsb,msb;uchar i;tmstart();dmsec(450);/初始化ds18b20while(1)tmstart();/ ds1820dmsec(2);read_temp(); /讀取溫度開始轉(zhuǎn)換dispbuf4=temp_data0&0x0f;dispbuf0=ditabdispbuf4;dispbuf4=(temp_data0&0xf0)4)|(temp_data1&0x0f
8、)0;i-)if(Tflag=1)/正溫if(dispbuf4126) if(dispbuf4100)digitalshow(10,dispbuf2,dispbuf1,dispbuf0); /溫度小于100 度,則百位不顯示elsemsb=msb%10;/溫度大于 100 度時十位需要在除digitalshow(Tflag,dispbuf2,dispbuf1,dispbuf0); /10 取余溫度大于100 度,百位顯示為1else digitalshow(11,11,11,11); /溫度大于125 度時顯示 -elseif(dispbuf456)/負(fù)溫大于 -55 度時正常顯示digita
9、lshow(11,dispbuf2,dispbuf1,dispbuf0);elsedigitalshow(11,11,11,11);/負(fù)溫小于 -55 度時顯示為 -附錄3PC機程序:Dim n As IntegerDim t As Integer定義全局變量Private Sub Command1_Click()Dim i As Integer單擊溫度設(shè)置按鈕程序If Len(Trim(Text2.Text) 100 Or Val(Text2.Text) 0 Or Left(Right(Text2.Text, 2), 1) . ThenLabel3.Caption = 設(shè)定輸入錯誤,不發(fā)送
10、ElseLabel3.Caption = Select Case Len(Trim(Text2.Text)Case 5Text8.Text = Trim(Text2.Text)Case 4Text8.Text = 0 & Trim(Text2.Text)Case 3Text8.Text = 00 & Trim(Text2.Text)End SelectMSComm1.Output = CTimer2.Enabled = TrueEnd IfEnd SubPrivate Sub Command2_Click()單擊按鈕執(zhí)行數(shù)據(jù)采集或停止采集If Command2.Caption = 采集數(shù)據(jù) T
11、henCommand2.Caption = 停止采集 Timer1.Enabled = TrueMSComm1.Output = AElseCommand2.Caption = 采集數(shù)據(jù) Timer1.Enabled = FalseMSComm1.Output = BMSComm1.Output = BEnd IfEnd SubPrivate Sub Command4_Click()Text1.Text = Text4.Text = End Sub單擊按鈕清空數(shù)據(jù)Private Sub Command5_Click() If Command5.Caption = 單擊按鈕開關(guān)通信端口開通信端口
12、 ThenCommand5.Caption = 關(guān)通信端口 COM.Enabled = FalseCommand2.Enabled = TrueCommand1.Enabled = TrueText2.Enabled = TrueSelect Case COM.ListIndex指定端口號( COM)Case 0MSComm1.CommPort = 1Case 1MSComm1.CommPort = 2Case 2MSComm1.CommPort = 3Case 3MSComm1.CommPort = 4End SelectMSComm1.Settings = 9600,n,8,19600波特
13、,無校驗, 8 位數(shù)據(jù)位, 1 位停止位MSComm1.InputMode = comInputModeText 接收文本數(shù)據(jù)MSComm1.InputLen = 0讀出接收緩沖區(qū)的所有內(nèi)容MSComm1.InBufferSize = 1024MSComm1.OutBufferSize = 1024MSComm1.RThreshold = 1每接收到 1 個字符,發(fā)生 1 次事件MSComm1.PortOpen = True打開串口ElseTimer1.Enabled = FalseMSComm1.Output = BMSComm1.Output = BCommand5.Caption = 開
14、通信端口 COM.Enabled = TrueMSComm1.PortOpen = FalseCommand2.Caption = 采集數(shù)據(jù) Command2.Enabled = FalseCommand1.Enabled = FalseText2.Enabled = FalseEnd IfEnd SubPrivate Sub Command7_Click()單擊按鈕保存溫度數(shù)據(jù)CommonDialog1.Action = 2Open CommonDialog1.FileName For Append As #1Write #1, NowWrite #1, Text4.TextClose #1
15、End SubPrivate Sub Form_Load()COM.AddItem COM1COM.AddItem COM2COM.AddItem COM3COM.AddItem COM4End SubPrivate Sub MSComm1_OnComm()Select Case MSComm1.CommEventCase comEvReceiveText1.Text = Text1.Text & MSComm1.InputCase ElseEnd SelectEnd Sub串口接收到數(shù)據(jù)時讀出數(shù)據(jù)Private Sub Text1_Change() 對讀出的數(shù)據(jù)進行處理 If (Len(Te
16、xt1.Text) Mod 4 = 0) And (Len(Text1.Text) 0) Then Text3.Text = Right$(Text1.Text, 4) & Text4.Text = Time & Chr$(6) & Chr$(6) & Chr$(6) & Text3.Text & & Text4.TextText7.Text = Time$n = n + 1End IfIf n = 100 Thenn = 0Text1.Text = End IfEnd SubPrivate Sub Text5_Change() Timer1.Interval = Val(Text5.Text
17、) * 1000 End Sub改變讀數(shù)據(jù)的時間Private Sub Timer1_Timer()采集數(shù)據(jù)后進行繪圖MSComm1.Output = ADim a As SingleDim a1 As StringDim a2 As StringDim a3 As StringDim k As IntegerStatic b(200) As IntegerText7.Text = TimeFor k = 1 To 199b(k) = b(k + 1)Next kb(200) = Val(Text3.Text)With MSChart1For i = 1 To 200a = Val(Mid(T
18、ext7.Text,1, 2) * 3600 + Val(Mid(Text7.Text,4,2) *60+Val(Mid(Text7.Text, 7, 2) - 200 * Val(Text5.Text) + i * Val(Text5.Text) + 1 If a 86400 Thena = a - 86400End IfIf a 3600 10 Thena1 = 0 & (a 3600)Elsea1 = Str(a 3600)End IfIf (a Mod 3600) 60 10 Thena2 = 0 & (a Mod 3600) 60)Elsea2 = (a Mod 3600) 60End IfIf (a Mod 3600) Mod 60) 10 Thena3 = 0 & (a Mod 3600) Mod 60)Elsea3 = (a Mod 3600) Mod 60)End If.Row = i.Data = b(i).RowLabel = a1 & : & a2 & : & a3Next iEnd WithEnd SubPrivate Sub Timer2_Timer()設(shè)置溫度時間隔開發(fā)送數(shù)據(jù)的時間,以使If t = 0 ThenMSComm1.Output = Mid(Text8.Text, 1, 1)t = t
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年南京銀行鹽城分行響水支行社會招聘備考題庫及參考答案詳解
- 醫(yī)院交警協(xié)議書
- 2025年中國兵器工業(yè)集團航空彈藥研究院有限公司公開招聘安全總監(jiān)備考題庫及一套完整答案詳解
- 企業(yè)ESG表現(xiàn)對融資成本的影響-信息披露質(zhì)量調(diào)節(jié)效應(yīng)畢業(yè)答辯
- 扶貧款使用協(xié)議書
- 續(xù)簽合同先簽協(xié)議
- 托管保管合同范本
- 生產(chǎn)經(jīng)理合同協(xié)議
- 借名貸款協(xié)議書
- 空運代理合同范本
- 小學(xué)生一、二、三年級家庭獎罰制度表
- 中石化華北分公司鉆井定額使用說明
- 礦山壓力與巖層控制智慧樹知到答案章節(jié)測試2023年湖南科技大學(xué)
- 機加工車間主任年終總結(jié)3篇
- WB/T 1119-2022數(shù)字化倉庫評估規(guī)范
- GB/T 5125-1985有色金屬沖杯試驗方法
- GB/T 4937.3-2012半導(dǎo)體器件機械和氣候試驗方法第3部分:外部目檢
- GB/T 23445-2009聚合物水泥防水涂料
- 我國尾管懸掛器研制(for cnpc)
- 第3章樁基工程課件
- 美國COMPASS電磁導(dǎo)航產(chǎn)品介紹課件
評論
0/150
提交評論