欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 13553|回復: 6
打印 上一主題 下一主題
收起左側

單片機溫度計課程設計報告+proteus仿真+源碼

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


設計文檔:


第一章 概述

1.1 設計目的

通過對溫度控制系統的設計、仿真,實現溫度的信息采集,能夠自由設置溫度上下限報警值。
1.2 設計任務

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

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

2.1 系統總體框圖

按照系統設計功能要求,確定系統由溫度數據采集、鍵盤設定、電源電路、主控制器、顯示電路、超限報警6個模塊組成。總體結構框圖如圖2-1所示:


圖2-1 系統總體結構框圖

第三章 硬件電路的設計

3.1單片機最小系統

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

本設計的溫度采集電路主要由DS18B20組成,因為該芯片是集成芯片,故可不加其他電路,直接將芯片數據輸出口接到CPUI/O口上。溫度數據采集電路如圖3-2所示。         

圖3.1 單片機最小系統

  
圖3.2 溫度數據采集電路
3.3鍵盤設定
圖3.3 鍵盤電路
3.4 顯示電路
顯示電路如圖3-4所示
圖3.4 顯示電路   
3.5 溫度報警
    報警電路利用P1.5進行控制有源蜂鳴器,當溫度超過設定的上下限溫度值時,開始報警。如圖3-5所示。
圖3.5 報警電路
3.7硬件原理總圖
硬件原理總圖如圖3-6所示。
圖3-6 硬件原理總圖
第四章 系統軟件的設計4.1各部分程序設計及其子程序流程圖

系統程序主要包括主程序,讀出溫度子程序,溫度轉換命令子程序,計算溫度子程序,報警子程序和顯示數據刷新子程序等。

  • 主程序:主程序的主要功能是負責溫度的實時顯示,讀出并處理DS18B20的測量溫度值。溫度測量每5s進行一次。主程序流程圖如圖4.1所示。

              

圖4-1 主程序流程圖

  • 讀出溫度子程序:讀出溫度子程的主要功能是讀出RAM中的9字節。在讀出時須進行CRC校驗,校驗有錯時不能進行溫度數據的改寫。讀出溫度子程序流程圖如圖4.2所示。

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

溫度轉換命令子程序:溫度轉換命令子程序主要是發溫度轉換開始命令。當采用12位分辨率時,轉換時間約為750 ms。在本程序設計中,采用5s顯示程序延時法等待轉換的完成。溫度轉換命令子程序流程圖如圖4.3所示。

圖4-3 溫度轉換子程序流程圖

計算溫度子程序:計算溫度子程序將RAM中讀取的值進行十進制的轉換運算,并進行溫度值正負的判斷。其流程圖如圖4.4所示。

圖4-4 計算溫度子程序流程圖

顯示數據刷新子程序:顯示數據刷新子程序主要是對顯示緩沖器中的顯示數據進行刷新操作,當最高數據顯示位為0時,將符號顯示位移入下一位。顯示數據刷新子程序流程圖如圖4.5所示。

圖4-5 顯示數據刷新子程序流程圖

4.2 溫度采集DS18B20部分程序設計分析

由于DS18B20單線通信功能是分時完成的,它有嚴格的時隙概念,因此讀寫時序很重要。系統對DS18B20的一般操作過程為:初始化DS18B20(發復位脈沖)→發ROM功能命令→發存儲器操作命令→處理數據。

①初始化:單片機將數據線拉低480-960us后釋放,等待15-60us,單總線器件即可輸出一個持續時間為60-240us的低電平(應答信號),單片機收到此應答后即可進行后續操作;

②寫時序:當主機將數據線的電平從高拉到低時,形成寫時序,有寫0和寫1兩種時序。寫時序開始后,DS18B20在15-60us期間從數據線上采樣,如果采樣到低電平,則向DS18B20寫0,否則寫1,兩個獨立的時序之間至少需要1us的回復時間按(拉高總線電平);

③讀時序:當主機從DS18B20讀取數據時,產生讀時序,此時,主機將數據線的電平從高拉到低使讀時序被初始化。如果此后5s內,主機在總線上采樣到低電平,則從DS18B20讀0,否則讀1。

總結

本系統是以單片機為核心部件的水溫控制系統,利用軟件編程,最終實現各項設計要求。在設計過程中,我們對設計中用到的相關軟件有基本簡單的了解及簡單使用,同時對AT89S51單片機以及DS18B20溫度傳感器有了更深的認識。做設計的時候,不僅要有足夠的知識儲備,而且也需要耐心和細心,很多時候小失誤就會導致電路不通。只有做到細心檢查,才能減少出錯的機率,只有不斷發現問題,并自己尋求解決問題的方法,正確解決問題,我們才能從中得到成長,提升自己的能力。

從最初拿到文檔項目時的毫無頭緒,到開始著手搜集資料,再到后來一起整理資料,到最后商量確定好最后的設計,我們一步一步的做下來。這期間,也曾有過一些分歧,也有過小爭吵,但最后兩個人還是達成一致,齊心完成了設計。不論是個人還是一個小組、一個團隊,做任何事都少不了身邊人的幫助,在此,我們也衷心感謝老師的耐心指導和同學的熱心幫忙。


單片機源程序如下:
  1. #include <reg51.h>
  2. #include <intrins.h>                                    //_nop_();延時函數用
  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;           //共陰數碼管
  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. //不帶小數點的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. //顯示單元數據,共4個數據和一個運算暫用
  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]];          //數據顯示
  28.   if (k==1)
  29.   Disdata=xianshi1[display[k]]|0x80;     //小數點顯示
  30.   discan=scan_con[k];                 //位選
  31.   delay(90);
  32.   discan=0xff;
  33. }
  34. }
  35. /****************DS18B20復位函數************************/
  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 復位成功,繼續下一步
  49.    }
  50.     delay(45);            //延時500 us
  51.     presence=~DQ;        
  52. }
  53.     DQ=1;                   //拉高電平
  54. }
  55.              /*向DS18B20寫入一個字節*/
  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讀出一個字節*/
  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();                  //總線復位
  90.   delay(200);
  91.   write_byte(0xcc);            //發命令
  92.   write_byte(0x44);            //發轉換命令
  93.   ow_reset();
  94.   delay(1);
  95.   write_byte(0xcc);            //發命令
  96.   write_byte(0xbe);
  97.   temp_data[0]=read_byte();    //讀溫度值的第字節
  98.   temp_data[1]=read_byte();    //讀溫度值的高字節
  99.   temp=temp_data[1];
  100.   temp<<=8;                                             
  101.   temp=temp|temp_data[0];      // 兩字節合成一個整型變量。
  102.   return temp;                 //返回溫度值
  103. }
  104. void work_temp(uint tem)
  105. {
  106.   uchar n=0;
  107. if(tem>6348)                        // 溫度值正負判斷
  108.   {tem=65536-tem;n=1;}            // 負溫度求補碼,標志位置1
  109.   display[4]=tem&0x0f;           // 取小數部分的值
  110.   display[0]=ditab[display[4]];  // 存入小數部分顯示值
  111.   display[4]=tem>>4;             // 取中間八位,即整數部分的值
  112.   display[3]=display[4]/100;     // 取百位數據暫存
  113.   display[1]=display[4]%100;     // 取后兩位數據暫存
  114.   display[2]=display[1]/10;      // 取十位數據暫存
  115.   display[1]=display[1]%10;
  116.   if(!display[3])
  117.   {
  118.     display[3]=0x00;           //最高位為0時不顯示
  119.     if(!display[2])
  120.   {
  121.    display[2]=0x3f;        //次高位為0時不顯示
  122.   }
  123.   }
  124.   if(n=1){ display[3]=0x40;}      //負溫度時最高位顯示"-"
  125. }
  126. void main(void)
  127. {
  128.   Disdata=0x00;                 //初始化端口
  129.   discan=0x00;
  130.   for(h=0;h<4;h++)              //開機顯示"0000"
  131.   {display[h]=0;}
  132.   ow_reset();                   //開機先轉換一次
  133.   write_byte(0xcc);             //Skip ROM
  134.   write_byte(0x44);             //發轉換命令
  135.   for(h=0;h<100;h++)            //開機顯示"0000"
  136.   {scan();}
  137.   while(1)</font>
  138. ……………………

  139. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼



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

使用道具 舉報

無效樓層,該帖已經被刪除
板凳
ID:336118 發表于 2018-5-23 13:48 | 只看該作者
這個運行不了,基本很難改了
回復

使用道具 舉報

地板
ID:108622 發表于 2019-3-28 20:26 | 只看該作者
下載試試……
回復

使用道具 舉報

5#
無效樓層,該帖已經被刪除
6#
ID:693858 發表于 2020-2-18 11:36 | 只看該作者
圖和程序都對不上 需要改的地方還多
回復

使用道具 舉報

7#
ID:693858 發表于 2020-2-18 12:46 | 只看該作者
為什么你開頭的仿真圖和你文中放出的仿真圖完全不一樣,最后你的程序開頭是用數碼管,但是你文中的仿真圖卻是LCD,上下不對,開頭的圖你用c52,程序中你卻用C51,還有文中按鍵圖,顯示電路圖也跟你開頭圖不一樣。我用proteus畫跟你一樣的圖錯的,覺得你這篇文章問題很多
回復

使用道具 舉報

8#
ID:849218 發表于 2020-11-30 10:59 | 只看該作者
這帖子問題不是一般的大啊
回復

使用道具 舉報

9#
無效樓層,該帖已經被刪除
10#
無效樓層,該帖已經被刪除
11#
ID:1055077 發表于 2022-12-4 16:51 來自觸屏版 | 只看該作者
上邊led,下面就變成lcd了。。。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表