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

標題: 單片機溫度計課程設計報告+proteus仿真+源碼 [打印本頁]

作者: ELAINE0306    時間: 2018-4-12 11:46
標題: 單片機溫度計課程設計報告+proteus仿真+源碼
單片機溫度計設計仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


設計文檔:


第一章 概述

1.1 設計目的

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

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

    室溫測控系統要能夠對室溫進行實時監(jiān)測,并通過與設定值的對比決策出是否應該加熱或降溫,使溫度保持在一定的范圍內。當溫度超出上下極限時,要發(fā)出報警信號并切斷電路,以保證設備工作性能不被破壞。
在日常生活及工農業(yè)生產中,經常要用到溫度的檢測及控制,傳統的測溫元件有熱電偶和熱電阻。而熱電偶和熱電阻測出的一般都是電壓,在轉換成相應的溫度,需要比較多的外部硬件支持。其缺點如下:
硬件電路復雜;
軟件調試復雜;
制作成本高。
    本設計采用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各部分程序設計及其子程序流程圖

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

              

圖4-1 主程序流程圖

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

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

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

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

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

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

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

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

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

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

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

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

總結

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

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


單片機源程序如下:
  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 復位成功,繼續(xù)下一步
  49.    }
  50.     delay(45);            //延時500 us
  51.     presence=~DQ;        
  52. }
  53.     DQ=1;                   //拉高電平
  54. }
  55.              /*向DS18B20寫入一個字節(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讀出一個字節(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();                  //總線復位
  90.   delay(200);
  91.   write_byte(0xcc);            //發(fā)命令
  92.   write_byte(0x44);            //發(fā)轉換命令
  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é)合成一個整型變量。
  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);             //發(fā)轉換命令
  135.   for(h=0;h<100;h++)            //開機顯示"0000"
  136.   {scan();}
  137.   while(1)</font>
  138. ……………………

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



本人初學,僅供參考,存在錯誤和不足之處,請大家回帖多多指教,切勿照搬,文件下載:
求指導如何完善: 單片機課設(張明倩).rar (352.21 KB, 下載次數: 205)

作者: 憤逗    時間: 2018-5-23 13:48
這個運行不了,基本很難改了
作者: mnbvcxzlkjhgfds    時間: 2019-3-28 20:26
下載試試……
作者: YOUXIUJIAOAO    時間: 2020-2-18 11:36
圖和程序都對不上 需要改的地方還多

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

作者: 2283076406    時間: 2020-11-30 10:59
這帖子問題不是一般的大啊
作者: 548736564    時間: 2022-12-4 16:51
上邊led,下面就變成lcd了。。。




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 欧美激情一区二区三区 | 性色网站 | 国产精品久久久久久婷婷天堂 | 国产高清视频在线观看 | 黄色小视频大全 | 亚洲在线中文字幕 | 成人福利网 | 亚洲一区二区三区乱码aⅴ 四虎在线视频 | 国产精品久久久久久 | 久久久久久国产 | 精品国产亚洲一区二区三区大结局 | 在线视频一区二区三区 | 久久精品亚洲精品国产欧美 | 亚洲精品一二三区 | 黑色丝袜三级在线播放 | 久久大香 | 国产欧美在线一区二区 | 精品无码久久久久国产 | 国产精品久久 | 欧洲精品在线观看 | 欧美日韩精品一区二区 | 欧美亚洲视频 | 99国产精品久久久久久久 | 伊人久久综合影院 | 婷婷福利视频导航 | 亚洲精品一区二区冲田杏梨 | 狠狠操狠狠搞 | av中文字幕在线观看 | 精品国产免费人成在线观看 | 日本人麻豆 | 一区二区三区在线播放 | 在线观看www高清视频 | 成人福利片 | 欧美日韩久久精品 | 天天干天天爱天天爽 | 视频一区在线 | 欧美久久视频 | 日本国产一区二区 | 国产午夜精品一区二区三区四区 | 久久久精品影院 | 国产精品视频一 |