久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 13065|回復(fù): 6
打印 上一主題 下一主題
收起左側(cè)

單片機(jī)溫度計(jì)課程設(shè)計(jì)報(bào)告+proteus仿真+源碼

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
單片機(jī)溫度計(jì)設(shè)計(jì)仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


設(shè)計(jì)文檔:


第一章 概述

1.1 設(shè)計(jì)目的

通過(guò)對(duì)溫度控制系統(tǒng)的設(shè)計(jì)、仿真,實(shí)現(xiàn)溫度的信息采集,能夠自由設(shè)置溫度上下限報(bào)警值。
1.2 設(shè)計(jì)任務(wù)

設(shè)計(jì)一個(gè)智能溫度計(jì),并使其具有如下功能:
(1)一路室溫檢測(cè),誤差:≤±0.5℃;
(2)溫度液晶屏顯示(XX.X);
(3)配矩陣鍵盤(pán);
(4)配報(bào)警指示燈及蜂鳴器;
第二章 系統(tǒng)選擇及論證

    室溫測(cè)控系統(tǒng)要能夠?qū)κ覝剡M(jìn)行實(shí)時(shí)監(jiān)測(cè),并通過(guò)與設(shè)定值的對(duì)比決策出是否應(yīng)該加熱或降溫,使溫度保持在一定的范圍內(nèi)。當(dāng)溫度超出上下極限時(shí),要發(fā)出報(bào)警信號(hào)并切斷電路,以保證設(shè)備工作性能不被破壞。
在日常生活及工農(nóng)業(yè)生產(chǎn)中,經(jīng)常要用到溫度的檢測(cè)及控制,傳統(tǒng)的測(cè)溫元件有熱電偶和熱電阻。而熱電偶和熱電阻測(cè)出的一般都是電壓,在轉(zhuǎn)換成相應(yīng)的溫度,需要比較多的外部硬件支持。其缺點(diǎn)如下:
硬件電路復(fù)雜;
軟件調(diào)試復(fù)雜;
制作成本高。
    本設(shè)計(jì)采用AT89C51單片機(jī),并利用美國(guó)DALLAS半導(dǎo)體公司的智能溫度傳感器DS18B20作為檢測(cè)元件,測(cè)溫范圍為0~50℃,最高分辨率可達(dá)0.0625℃。它具有精度高、可靠性好和能直接將模擬被測(cè)量直接轉(zhuǎn)換成數(shù)字量輸出,因此不需要加A/D轉(zhuǎn)換器,電路簡(jiǎn)單。加上單片機(jī)軟件編程靈活、自由度大,可用軟件編程實(shí)現(xiàn)各種控制算法和邏輯控制。單片機(jī)系統(tǒng)可采用LCD顯示室溫的實(shí)際值,可用鍵盤(pán)輸入設(shè)定值。本設(shè)計(jì)可實(shí)現(xiàn)顯示、鍵盤(pán)設(shè)定、報(bào)警等功能,大大的提高了系統(tǒng)的智能化,也使得系統(tǒng)所測(cè)結(jié)果精度大大提高。DS18B20可直接讀出被測(cè)溫度值,而且采用三線(xiàn)制與單片機(jī)相連,減少了外部的硬件電路,具有低成本和易使用的特點(diǎn)。

2.1 系統(tǒng)總體框圖

按照系統(tǒng)設(shè)計(jì)功能要求,確定系統(tǒng)由溫度數(shù)據(jù)采集、鍵盤(pán)設(shè)定、電源電路、主控制器、顯示電路、超限報(bào)警6個(gè)模塊組成。總體結(jié)構(gòu)框圖如圖2-1所示:


圖2-1 系統(tǒng)總體結(jié)構(gòu)框圖

第三章 硬件電路的設(shè)計(jì)

3.1單片機(jī)最小系統(tǒng)

本設(shè)計(jì)采用的是AT89C51芯片作為核心部件。
單片機(jī)最小系統(tǒng)組成:XTAL1(19 腳)和XTAL2(18 腳)為振蕩器輸入輸出端口,外接11.0592MHz晶振。RST/Vpd(9 腳)為復(fù)位輸入端口,外接電阻電容組成的復(fù)位電路。VCC(40 腳)和VSS(20 腳)為供電端口,分別接+5V電源的正負(fù)端。P0~P3 為可編程通用I/O 腳,其功能用途由軟件編程定義。       單片機(jī)最小系統(tǒng)如圖3-1所示。
3.2溫度數(shù)據(jù)采集電路

本設(shè)計(jì)的溫度采集電路主要由DS18B20組成,因?yàn)樵撔酒羌尚酒士刹患悠渌娐罚苯訉⑿酒瑪?shù)據(jù)輸出口接到CPUI/O口上。溫度數(shù)據(jù)采集電路如圖3-2所示。         

圖3.1 單片機(jī)最小系統(tǒng)

  
圖3.2 溫度數(shù)據(jù)采集電路
3.3鍵盤(pán)設(shè)定
圖3.3 鍵盤(pán)電路
3.4 顯示電路
顯示電路如圖3-4所示
圖3.4 顯示電路   
3.5 溫度報(bào)警
    報(bào)警電路利用P1.5進(jìn)行控制有源蜂鳴器,當(dāng)溫度超過(guò)設(shè)定的上下限溫度值時(shí),開(kāi)始報(bào)警。如圖3-5所示。
圖3.5 報(bào)警電路
3.7硬件原理總圖
硬件原理總圖如圖3-6所示。
圖3-6 硬件原理總圖
第四章 系統(tǒng)軟件的設(shè)計(jì)4.1各部分程序設(shè)計(jì)及其子程序流程圖

系統(tǒng)程序主要包括主程序,讀出溫度子程序,溫度轉(zhuǎn)換命令子程序,計(jì)算溫度子程序,報(bào)警子程序和顯示數(shù)據(jù)刷新子程序等。

  • 主程序:主程序的主要功能是負(fù)責(zé)溫度的實(shí)時(shí)顯示,讀出并處理DS18B20的測(cè)量溫度值。溫度測(cè)量每5s進(jìn)行一次。主程序流程圖如圖4.1所示。

              

圖4-1 主程序流程圖

  • 讀出溫度子程序:讀出溫度子程的主要功能是讀出RAM中的9字節(jié)。在讀出時(shí)須進(jìn)行CRC校驗(yàn),校驗(yàn)有錯(cuò)時(shí)不能進(jìn)行溫度數(shù)據(jù)的改寫(xiě)。讀出溫度子程序流程圖如圖4.2所示。

圖4-2 溫度子程序流程圖

溫度轉(zhuǎn)換命令子程序:溫度轉(zhuǎn)換命令子程序主要是發(fā)溫度轉(zhuǎn)換開(kāi)始命令。當(dāng)采用12位分辨率時(shí),轉(zhuǎn)換時(shí)間約為750 ms。在本程序設(shè)計(jì)中,采用5s顯示程序延時(shí)法等待轉(zhuǎn)換的完成。溫度轉(zhuǎn)換命令子程序流程圖如圖4.3所示。

圖4-3 溫度轉(zhuǎn)換子程序流程圖

計(jì)算溫度子程序:計(jì)算溫度子程序?qū)AM中讀取的值進(jìn)行十進(jìn)制的轉(zhuǎn)換運(yùn)算,并進(jìn)行溫度值正負(fù)的判斷。其流程圖如圖4.4所示。

圖4-4 計(jì)算溫度子程序流程圖

顯示數(shù)據(jù)刷新子程序:顯示數(shù)據(jù)刷新子程序主要是對(duì)顯示緩沖器中的顯示數(shù)據(jù)進(jìn)行刷新操作,當(dāng)最高數(shù)據(jù)顯示位為0時(shí),將符號(hào)顯示位移入下一位。顯示數(shù)據(jù)刷新子程序流程圖如圖4.5所示。

圖4-5 顯示數(shù)據(jù)刷新子程序流程圖

4.2 溫度采集DS18B20部分程序設(shè)計(jì)分析

由于DS18B20單線(xiàn)通信功能是分時(shí)完成的,它有嚴(yán)格的時(shí)隙概念,因此讀寫(xiě)時(shí)序很重要。系統(tǒng)對(duì)DS18B20的一般操作過(guò)程為:初始化DS18B20(發(fā)復(fù)位脈沖)→發(fā)ROM功能命令→發(fā)存儲(chǔ)器操作命令→處理數(shù)據(jù)。

①初始化:?jiǎn)纹瑱C(jī)將數(shù)據(jù)線(xiàn)拉低480-960us后釋放,等待15-60us,單總線(xiàn)器件即可輸出一個(gè)持續(xù)時(shí)間為60-240us的低電平(應(yīng)答信號(hào)),單片機(jī)收到此應(yīng)答后即可進(jìn)行后續(xù)操作;

②寫(xiě)時(shí)序:當(dāng)主機(jī)將數(shù)據(jù)線(xiàn)的電平從高拉到低時(shí),形成寫(xiě)時(shí)序,有寫(xiě)0和寫(xiě)1兩種時(shí)序。寫(xiě)時(shí)序開(kāi)始后,DS18B20在15-60us期間從數(shù)據(jù)線(xiàn)上采樣,如果采樣到低電平,則向DS18B20寫(xiě)0,否則寫(xiě)1,兩個(gè)獨(dú)立的時(shí)序之間至少需要1us的回復(fù)時(shí)間按(拉高總線(xiàn)電平);

③讀時(shí)序:當(dāng)主機(jī)從DS18B20讀取數(shù)據(jù)時(shí),產(chǎn)生讀時(shí)序,此時(shí),主機(jī)將數(shù)據(jù)線(xiàn)的電平從高拉到低使讀時(shí)序被初始化。如果此后5s內(nèi),主機(jī)在總線(xiàn)上采樣到低電平,則從DS18B20讀0,否則讀1。

總結(jié)

本系統(tǒng)是以單片機(jī)為核心部件的水溫控制系統(tǒng),利用軟件編程,最終實(shí)現(xiàn)各項(xiàng)設(shè)計(jì)要求。在設(shè)計(jì)過(guò)程中,我們對(duì)設(shè)計(jì)中用到的相關(guān)軟件有基本簡(jiǎn)單的了解及簡(jiǎn)單使用,同時(shí)對(duì)AT89S51單片機(jī)以及DS18B20溫度傳感器有了更深的認(rèn)識(shí)。做設(shè)計(jì)的時(shí)候,不僅要有足夠的知識(shí)儲(chǔ)備,而且也需要耐心和細(xì)心,很多時(shí)候小失誤就會(huì)導(dǎo)致電路不通。只有做到細(xì)心檢查,才能減少出錯(cuò)的機(jī)率,只有不斷發(fā)現(xiàn)問(wèn)題,并自己尋求解決問(wèn)題的方法,正確解決問(wèn)題,我們才能從中得到成長(zhǎng),提升自己的能力。

從最初拿到文檔項(xiàng)目時(shí)的毫無(wú)頭緒,到開(kāi)始著手搜集資料,再到后來(lái)一起整理資料,到最后商量確定好最后的設(shè)計(jì),我們一步一步的做下來(lái)。這期間,也曾有過(guò)一些分歧,也有過(guò)小爭(zhēng)吵,但最后兩個(gè)人還是達(dá)成一致,齊心完成了設(shè)計(jì)。不論是個(gè)人還是一個(gè)小組、一個(gè)團(tuán)隊(duì),做任何事都少不了身邊人的幫助,在此,我們也衷心感謝老師的耐心指導(dǎo)和同學(xué)的熱心幫忙。


單片機(jī)源程序如下:
  1. #include <reg51.h>
  2. #include <intrins.h>                                    //_nop_();延時(shí)函數(shù)用
  3. #define  Disdata P0                        //段碼輸出口
  4. #define  discan  P2                        //掃描口
  5. #define  uchar unsigned char
  6. #define  uint  unsigned int
  7. uint     h;
  8. uint     temp;
  9. sbit     DQ=P3^7;           //共陰數(shù)碼管
  10. uchar  ditab[16]={0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,
  11. 0x06,0x06,0x07,0x08,0x08,0x09,0x09};
  12. uchar xianshi1[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
  13. //不帶小數(shù)點(diǎn)的0-9編碼
  14. uchar  scan_con[4]={0xf7,0xfB,0xfD,0xfe};    //列掃描控制字
  15. uchar  temp_data[2]={0x00,0x00};  //讀出溫度暫放
  16. uchar  display[5]={0x00,0x00,0x00,0x00,0x00};   
  17. //顯示單元數(shù)據(jù),共4個(gè)數(shù)據(jù)和一個(gè)運(yùn)算暫用
  18. void delay(uint t)
  19. {
  20.   for (;t>0;t--);
  21. }
  22. void scan(void)
  23. {
  24.   char k;
  25. for(k=0;k<4;k++)                     //4位LED掃描控制
  26. {
  27.   Disdata=xianshi1[display[k]];          //數(shù)據(jù)顯示
  28.   if (k==1)
  29.   Disdata=xianshi1[display[k]]|0x80;     //小數(shù)點(diǎn)顯示
  30.   discan=scan_con[k];                 //位選
  31.   delay(90);
  32.   discan=0xff;
  33. }
  34. }
  35. /****************DS18B20復(fù)位函數(shù)************************/
  36. void ow_reset(void)
  37. {
  38. char presence=1;
  39. while(presence)
  40. {
  41.   while(presence)
  42.    {
  43.     DQ=1;_nop_();_nop_();//從高拉倒低
  44.     DQ=0;                                      
  45.     delay(50);           //550 us
  46.     DQ=1;                                       
  47.     delay(6);            //66 us
  48.     presence=DQ;         //presence=0 復(fù)位成功,繼續(xù)下一步
  49.    }
  50.     delay(45);            //延時(shí)500 us
  51.     presence=~DQ;        
  52. }
  53.     DQ=1;                   //拉高電平
  54. }
  55.              /*向DS18B20寫(xiě)入一個(gè)字節(jié)*/
  56. void write_byte(uchar val)
  57. {
  58.   uchar i;
  59.   for(i=8;i>0;i--)
  60.   {
  61.    DQ=1;_nop_();_nop_();                  //從高拉倒低
  62.    DQ=0;_nop_();_nop_();_nop_();_nop_();  //5 us
  63.    DQ=val&0x01;                           //最低位移出
  64.    delay(6);                              //66 us
  65.    val=val/2;                             //右移1位
  66.    }
  67.    DQ=1;
  68.    delay(1);
  69. }
  70.              /*從DS18B20讀出一個(gè)字節(jié)*/
  71. uchar read_byte(void)
  72. {
  73. uchar i;
  74. uchar value=0;
  75. for(i=8;i>0;i--)
  76. {
  77.   DQ=1;_nop_();_nop_();
  78.   value>>=1;
  79.   DQ=0;_nop_();_nop_();_nop_();_nop_();         //4 us
  80.   DQ=1;_nop_();_nop_();_nop_();_nop_();         //4 us
  81.   if(DQ)value|=0x80;
  82.   delay(6);                                     //66 us
  83. }
  84.   DQ=1;
  85.   return(value);
  86. }
  87. uint read_temp(void)
  88. {
  89.   ow_reset();                  //總線(xiàn)復(fù)位
  90.   delay(200);
  91.   write_byte(0xcc);            //發(fā)命令
  92.   write_byte(0x44);            //發(fā)轉(zhuǎn)換命令
  93.   ow_reset();
  94.   delay(1);
  95.   write_byte(0xcc);            //發(fā)命令
  96.   write_byte(0xbe);
  97.   temp_data[0]=read_byte();    //讀溫度值的第字節(jié)
  98.   temp_data[1]=read_byte();    //讀溫度值的高字節(jié)
  99.   temp=temp_data[1];
  100.   temp<<=8;                                             
  101.   temp=temp|temp_data[0];      // 兩字節(jié)合成一個(gè)整型變量。
  102.   return temp;                 //返回溫度值
  103. }
  104. void work_temp(uint tem)
  105. {
  106.   uchar n=0;
  107. if(tem>6348)                        // 溫度值正負(fù)判斷
  108.   {tem=65536-tem;n=1;}            // 負(fù)溫度求補(bǔ)碼,標(biāo)志位置1
  109.   display[4]=tem&0x0f;           // 取小數(shù)部分的值
  110.   display[0]=ditab[display[4]];  // 存入小數(shù)部分顯示值
  111.   display[4]=tem>>4;             // 取中間八位,即整數(shù)部分的值
  112.   display[3]=display[4]/100;     // 取百位數(shù)據(jù)暫存
  113.   display[1]=display[4]%100;     // 取后兩位數(shù)據(jù)暫存
  114.   display[2]=display[1]/10;      // 取十位數(shù)據(jù)暫存
  115.   display[1]=display[1]%10;
  116.   if(!display[3])
  117.   {
  118.     display[3]=0x00;           //最高位為0時(shí)不顯示
  119.     if(!display[2])
  120.   {
  121.    display[2]=0x3f;        //次高位為0時(shí)不顯示
  122.   }
  123.   }
  124.   if(n=1){ display[3]=0x40;}      //負(fù)溫度時(shí)最高位顯示"-"
  125. }
  126. void main(void)
  127. {
  128.   Disdata=0x00;                 //初始化端口
  129.   discan=0x00;
  130.   for(h=0;h<4;h++)              //開(kāi)機(jī)顯示"0000"
  131.   {display[h]=0;}
  132.   ow_reset();                   //開(kāi)機(jī)先轉(zhuǎn)換一次
  133.   write_byte(0xcc);             //Skip ROM
  134.   write_byte(0x44);             //發(fā)轉(zhuǎn)換命令
  135.   for(h=0;h<100;h++)            //開(kāi)機(jī)顯示"0000"
  136.   {scan();}
  137.   while(1)</font>
  138. ……………………

  139. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼



本人初學(xué),僅供參考,存在錯(cuò)誤和不足之處,請(qǐng)大家回帖多多指教,切勿照搬,文件下載:
求指導(dǎo)如何完善: 單片機(jī)課設(shè)(張明倩).rar (352.21 KB, 下載次數(shù): 205)
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏5 分享淘帖 頂1 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:336118 發(fā)表于 2018-5-23 13:48 | 只看該作者
這個(gè)運(yùn)行不了,基本很難改了
回復(fù)

使用道具 舉報(bào)

板凳
ID:108622 發(fā)表于 2019-3-28 20:26 | 只看該作者
下載試試……
回復(fù)

使用道具 舉報(bào)

地板
ID:693858 發(fā)表于 2020-2-18 11:36 | 只看該作者
圖和程序都對(duì)不上 需要改的地方還多
回復(fù)

使用道具 舉報(bào)

5#
ID:693858 發(fā)表于 2020-2-18 12:46 | 只看該作者
為什么你開(kāi)頭的仿真圖和你文中放出的仿真圖完全不一樣,最后你的程序開(kāi)頭是用數(shù)碼管,但是你文中的仿真圖卻是LCD,上下不對(duì),開(kāi)頭的圖你用c52,程序中你卻用C51,還有文中按鍵圖,顯示電路圖也跟你開(kāi)頭圖不一樣。我用proteus畫(huà)跟你一樣的圖錯(cuò)的,覺(jué)得你這篇文章問(wèn)題很多
回復(fù)

使用道具 舉報(bào)

6#
ID:849218 發(fā)表于 2020-11-30 10:59 | 只看該作者
這帖子問(wèn)題不是一般的大啊
回復(fù)

使用道具 舉報(bào)

7#
ID:1055077 發(fā)表于 2022-12-4 16:51 來(lái)自觸屏版 | 只看該作者
上邊led,下面就變成lcd了。。。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚洲国产aⅴ成人精品无吗 亚洲精品久久久一区二区三区 | 男人的天堂avav | 亚洲欧洲一区 | 久草欧美 | 欧美精品久久久久久 | 99re6在线视频精品免费 | 国产激情一区二区三区 | 日韩精品久久一区二区三区 | 欧美色综合一区二区三区 | 免费性视频 | 精品欧美乱码久久久久久 | 亚洲精品视频在线观看免费 | 成人性视频在线播放 | 久久精品一 | 久久精品一级 | 天天看天天干 | 国产一区久久 | www.狠狠干 | 亚洲欧美视频一区二区 | 97超在线视频 | 国产清纯白嫩初高生在线播放视频 | 亚洲视频免费观看 | 亚洲国产精品99久久久久久久久 | 成年免费大片黄在线观看岛国 | 日韩国产中文字幕 | 国产在线1区 | 久草视频在线播放 | 亚洲成av人影片在线观看 | 成人午夜激情 | 91精品一区二区三区久久久久久 | 日韩成人在线观看 | 成人免费视频一区二区 | 粉嫩一区二区三区国产精品 | 91在线资源 | 一区精品视频 | 国产高清av免费观看 | 国产精品99精品久久免费 | 成人三级av | 中文日韩在线 | 欧美一区二区免费电影 | 亚洲二区精品 |