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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

數字溫度計加萬年歷(程序,仿真,原理圖,PCB,元件清單)

  [復制鏈接]
跳轉到指定樓層
樓主
學校的實訓做的~~程序不是自己寫的,但是可以用!!~

電路原理圖pcb:


所有資料下載: 數字溫濕度計.rar (8.73 MB, 下載次數: 231)


1、該程序經過電腦軟件Proteus7.4sp3仿真通過。

2、該程序通過實驗板仿真芯片通過。

3、該程序燒寫STC89C51RC,單獨在實驗板上運行通過(晶振11.0592MHZ)

4、該程序用洞洞板制作實物運行成功!并在DS1302時鐘芯片第8腳上加上了3.6V的

   鎳氫充電電池,斷電后時間、日歷都正常走。

5、程序中使用的頭文件DS18B20_3.H,來源于網上,寫的非常好,十進制溫度最后返回到函數

   ReadTemperature()中,使用時主函數用flag=ReadTemperature();/
   
    就可將18b2頭文件運行返回的函數結果送到變量FLAG中,用于顯示。
-----------------------------------------------------------------------------
主要器件:

STC89C51+DS1302時鐘芯片+DS18b20溫度芯片。

-----------------------------------------------------------------------------

主要功能:

1、萬年歷,

2、時間,

3、星期,

4、溫度顯示,

(以上四項內容同時顯示)

5、三鍵調時(設置鍵,上調鍵,下調鍵),

6、斷電走時,

7、上電蜂鳴器提示(長鳴);

8、按鍵蜂鳴器提示(第一次按動設置鍵長鳴一響;后面按動設置鍵或上調鍵、下調鍵都是短鳴一響)。


元件清單:
物理與機電工程學院器材   領用    單
領(借)用人    吳育培、林伏忠    單位
(班級)    12級電本(2)    用途    電子系統設計
領用
時間    2015.4.20    使用時間        人數    2人
序號    器材名稱及型號規格    單位    領用數量    備注
1    AT89C51單片機    個    2   
2    DS1302    個    2   
3                  輕觸開關    個    10   
4    103藍白電位器    個    4   
5    5.1K電阻    個    10   
6          2K 220 電阻    個    4   
7    瓷片電容(22pf,10pf)    個    6   
8    電解電容 10uf    個    4   
9    IC座(8P)    個    2   
10    IC座(40P)    個    2   
11    單排針    排    5   
12    覆銅板    塊    1   
13    DS18B20    個    2   
14    32.768KHZ晶振    個    2   
15    11.0592MHZ晶振    個    2   
               
領用人簽字:    畢業論文指導教師簽字:
實驗室意見:    分管副院長意見:
分管院領導意見:   

倉管員簽字:                             時間:



部分程序預覽:

DS18B20_3.H:

  1. sbit DQ = P2^0;                // 定義DQ引腳為P2.7

  2. /*******************************  延時函數 ********************************
  3. *  功能:在11.059MHz的晶振條件下調用本函數需要24μs ,然后每次計數需16μ
  4. **************************************************************************/
  5. void DS18_delay(int useconds) {
  6. int s;
  7. for (s=0; s<useconds;s++);
  8. }


  9. /*******************************  復位函數 *******************************
  10. * 功能:完成單總線的復位操作。
  11. * 復位時間為480μs,因此延時時間為(480-24)/16 = 28.5,取29μs
  12. * 經過70μs之后檢測存在脈沖,因此延時時間為(70-24)/16 = 2.875,取3μs
  13. **************************************************************************/
  14. unsigned char ow_reset(void) {
  15. unsigned char presence;
  16. DQ = 0;                          // 將 DQ 線拉低
  17. DS18_delay(29);                         // 保持 480μs
  18. DQ = 1;                         // DQ返回高電平
  19. DS18_delay(3);                         // 等待存在脈沖
  20. presence = DQ;                 // 獲得存在信號
  21. DS18_delay(25);                         // 等待時間隙結束
  22. return(presence);         // 返回存在信號,0 = 器件存在, 1 = 無器件
  23. }


  24. /****************************** 位寫入函數 *******************************
  25. * 功能:向單總線寫入1位值:bitval
  26. *************************************************************************/
  27. void write_bit(char bitval) {
  28. DQ = 0;                                 // 將DQ 拉低開始寫時間隙
  29. if(bitval==1) DQ =1;         // 如果寫1,DQ 返回高電平
  30. DS18_delay(5);                                 // 在時間隙內保持電平值,
  31. DQ = 1;         // DS18_delay函數每次循環延時16μs,因此DS18_delay(5) = 104μs
  32. }        


  33. /**************************** 字節寫入函數 *******************************
  34. * 功能:向單總線寫入一個字節值:val
  35. *************************************************************************/
  36. void ds18write_byte(char val) {
  37. unsigned char i;
  38. unsigned char temp;
  39. for (i=0; i<8; i++) {        // 寫入字節, 每次寫入一位
  40. temp = val>>i;                 
  41. temp &= 0x01;                 
  42. write_bit(temp);
  43. }
  44. DS18_delay(5);
  45. }

  46. /**************************** 位讀取函數 ********************************
  47. * 功能:從單總線上讀取一位信號,所需延時時間為15μs,因此無法調用前面定義
  48. * 的DS18_delay()函數,而采用一個for()循環來實現延時。
  49. * ***********************************************************************/
  50. unsigned char read_bit(void) {
  51. unsigned char i;
  52. DQ = 0;                      //將DQ 拉低開始讀時間隙
  53. DQ = 1;                         // then return high
  54. for (i=0; i<3; i++);         // 延時15μs
  55. return(DQ);                         // 返回 DQ 線上的電平值
  56. }

  57. /**************************** 字節讀取函數 *******************************
  58. * 功能:從單總線讀取一個字節的值
  59. *************************************************************************/
  60. unsigned char DSread_byte(void) {
  61. unsigned char i;
  62. unsigned char value = 0;
  63. for (i=0;i<8;i++) {                                  // 讀取字節,每次讀取一個字節
  64. if(read_bit()) value|=0x01<<i;         // 然后將其左移
  65. DS18_delay(6);                                         
  66. }
  67. return(value);
  68. }


  69. /******************************* 讀取溫度函數 *****************************
  70. * 功能:如果單總線節點上只有一個器件則可以直接掉用本函數。如果節點上有多個器
  71. *      件,為了避免數據沖突,應使用Match ROM函數來選中特定器件。
  72. * 注: 本函數是根據DS1820的溫度數據格式編寫的,若用于DS18B20,必須根據
  73. *      DS18B20的溫度數據格式作適當修改。
  74. **************************************************************************/unsigned
  75. int ReadTemperature(void) {
  76. unsigned char get[10];
  77. unsigned char temp_lsb,temp_msb;
  78. unsigned int t;
  79. unsigned char k;
  80. ow_reset();
  81. ds18write_byte(0xCC);                                         // 跳過 ROM
  82. ds18write_byte(0x44);                                         // 啟動溫度轉換
  83. DS18_delay(5);
  84. ow_reset();
  85. ds18write_byte(0xCC);                                         // 跳過 ROM
  86. ds18write_byte(0xBE);                                         // 讀暫存器
  87. for (k=0;k<2;k++){get[k]=DSread_byte();}

  88. temp_msb = get[1]; // Sign byte + lsbit
  89. temp_lsb = get[0]; // Temp data plus lsb

  90. t=temp_msb*256+temp_lsb;
  91. t=t&0x0ff0;
  92. if(t<0xff&&t>0xf0)
  93. t=(-1)*t;
  94. return t>>4;
  95. //temp_f = (((int)temp_c)* 9)/5 + 32;
  96.                  // 輸出華氏溫度值

  97. }

復制代碼



  1. /*******************DS18B20測溫程序******************************************

  2. 運行結果會在函數ReadTemperature()保存兩位十進制數字的溫度值

  3. 調用時,要這樣:

  4.          uchar temp;  設定一個無符號變量temp
  5.          temp=ReadTemperature();  變量temp=函數值=二位數的溫度值

  6.          然后可以用temp參與顯示工作。
  7. ***************************************************************************/

  8. /*********************************端口定義**********************************/
  9. sbit DQ=P3^3;                                   //數據傳輸線接單片機的相應的引腳

  10. /*********************************定義全局變量******************************/
  11. unsigned char tempL=0;                         //臨時變量低位(無符號字符變量)
  12. unsigned char tempH=0;                        //臨時變量高位
  13. unsigned char tempa;                           //溫度值(整型變量)

  14. /****************************************************************************
  15. 函數功能:延時子程序
  16. 入口參數:k
  17. 出口參數:
  18. ****************************************************************************/
  19. void DS18_delay(int useconds)
  20. {
  21. int s;
  22. for (s=0; s<useconds;s++);
  23. }

  24. /***************************************************************************
  25. 函數功能:DS18B20初始化子程序
  26. 入口參數:
  27. 出口參數:
  28. ****************************************************************************/
  29. unsigned char Init_DS18B20(void)
  30. {
  31.         unsigned char x=0;

  32.           DQ=0;                             //發送復位脈沖
  33.           DS18_delay(29);                         //延時(>480ms)
  34.           DQ=1;                                  //拉高數據線
  35.           DS18_delay(3);                       //等待(15~60ms) 等待存在脈沖
  36.     x=DQ;  //獲得存在信號(用于判斷是否有器件)
  37.     DS18_delay(25);  // 等待時間隙結束
  38.     return(x);  //返回存在信號,0 = 器件存在, 1 = 無器件
  39. }

  40. /****************************************************************************
  41. 函數功能:向DS18B20讀一字節數據
  42. 入口參數:
  43. 出口參數:dat
  44. ****************************************************************************/
  45. ReadOneChar(void)                          
  46. {
  47.         unsigned char i=0;                 
  48.         unsigned char dat=0;
  49.     for (i=8;i>0;i--)                  
  50.                 {
  51.                         DQ=1;
  52.                     DS18_delay(1);
  53.                     DQ=0;      
  54.                     dat>>=1;//復合賦值運算,等效dat=dat>>1(dat=dat右移一位后的值)
  55.                            DQ=1;
  56.                     if(DQ)
  57.                            dat|=0x80;
  58.                     DS18_delay(4);
  59.                 }
  60.     return(dat);
  61. }

  62. /****************************************************************************
  63. 函數功能:向DS18B20寫一字節數據
  64. 入口參數:dat
  65. 出口參數:
  66. ****************************************************************************/
  67. WriteOneChar(unsigned char dat)//有參函數,功能是"寫",而寫的內容就是括號內的參數
  68. {
  69.         unsigned char i=0;                 
  70.         for(i=8;i>0;i--)         
  71.         {
  72.                 DQ=0;            
  73.                 DQ=dat&0x01;
  74.                 DS18_delay(5);
  75.                 DQ=1;
  76.                 dat>>=1;//復合賦值運算,等效dat=dat>>1(dat=dat右移一位后的值)
  77.         }
  78.         DS18_delay(4);
  79. }

  80. /****************************************************************************
  81. 函數功能:向DS18B20讀溫度值
  82. 入口參數:
  83. 出口參數:temperature
  84. ****************************************************************************/
  85. unsigned int ReadTemperature(void)
  86. {  
  87.         Init_DS18B20();          //初始化,調用初始化函數
  88.         WriteOneChar(0xcc);                  //跳過讀序列號的操作,調用寫函數,寫0xcc指令碼(跳過讀序列號)
  89.         WriteOneChar(0x44);                 //啟動溫度轉換,調用寫函數,寫0x44指令碼(啟動溫度轉換)
  90.         DS18_delay(125);                                   //轉換需要一點時間,延時
  91.         Init_DS18B20();                         //初始化,調用初始化函數
  92.         WriteOneChar(0xcc);                  //跳過讀序列號的操作,調用寫函數,寫0xcc指令碼(跳過讀序列號?
  93.         WriteOneChar(0xbe);                 //調用寫函數,寫0xbe指令碼,讀溫度寄存器(頭兩個值分別為溫度的低位和高位)
  94.         tempL=ReadOneChar();                 //讀出溫度的低位LSB
  95.         tempH=ReadOneChar();                 //讀出溫度的高位MSB  


  96.          //tempH&=0x0f;//高字節和0f"與"運算,留住后4位有用值,賦給tempH
  97.    tempa=((tempH*256)+tempL)*0.0625;  //溫度轉換,把高低位做相應的運算轉化為實際溫度,使用DS18B20溫度傳感器手冊規定的公式,結果是十進制數值

  98.         DS18_delay(20);

  99.         return(tempa);//運算結果返回到函數 :ReadTemperature()調用時需要采用i=ReadTemperature(),然后再對i(任意uchar型變量)進行操作
  100. }









復制代碼


評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏7 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:115465 發表于 2016-4-20 16:04 | 只看該作者
請問這個溫度計加萬年歷的程序有嗎,就這些?
回復

使用道具 舉報

板凳
ID:117249 發表于 2016-4-28 10:43 | 只看該作者
程序是完整的么?
回復

使用道具 舉報

地板
ID:74303 發表于 2016-4-28 11:20 | 只看該作者
電路不完整,程序不完整。都沒說到的蜂鳴器功能
回復

使用道具 舉報

5#
ID:117251 發表于 2016-4-28 12:09 | 只看該作者
請問有程序流程圖么
回復

使用道具 舉報

6#
ID:117306 發表于 2016-4-28 15:02 | 只看該作者
看起來不錯。是完整的嘛
回復

使用道具 舉報

7#
ID:109246 發表于 2016-5-25 17:05 | 只看該作者
不完整
回復

使用道具 舉報

8#
ID:119445 發表于 2016-5-25 20:10 | 只看該作者
謝謝分享,參考一下!
回復

使用道具 舉報

9#
ID:119445 發表于 2016-5-25 20:15 | 只看該作者
謝謝分享!
回復

使用道具 舉報

10#
ID:114695 發表于 2016-5-26 21:31 | 只看該作者
謝謝分享,參考一下!
回復

使用道具 舉報

11#
ID:116662 發表于 2016-8-6 09:26 來自手機 | 只看該作者
是完整的資料嗎,先觀察一下
回復

使用道具 舉報

12#
ID:148320 發表于 2016-11-16 18:54 | 只看該作者
eeeeee 發表于 2016-4-28 10:43
**** 作者被禁止或刪除 內容自動屏蔽 ****

不完整
回復

使用道具 舉報

13#
ID:185064 發表于 2017-3-31 14:27 | 只看該作者
有鬧鐘  就好了
回復

使用道具 舉報

14#
ID:185172 發表于 2017-3-31 19:09 | 只看該作者
謝謝分享
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 97精品超碰一区二区三区 | 久久成人精品视频 | 亚欧性视频 | 美女黄色在线观看 | 亚洲视频中文字幕 | 综合精品在线 | 狠狠草视频| 久久精品天堂 | 国产欧美一区二区三区在线看 | 免费av手机在线观看 | 日韩久久久一区二区 | 久久综合成人精品亚洲另类欧美 | 日韩在线视频一区二区三区 | 国产综合视频 | 国产成人一区二 | 亚洲精品在线看 | 美女黄网站视频免费 | 亚洲天堂一区二区 | 中文字幕福利视频 | 久久精品国产一区二区三区不卡 | 久草在线视频中文 | 欧美高清成人 | 精品二区 | 精品国产乱码久久久久久闺蜜 | 久久久久久色 | 国产午夜精品一区二区三区在线观看 | 久久国产精品视频免费看 | 久久噜噜噜精品国产亚洲综合 | 国产丝袜一区二区三区免费视频 | 午夜精品一区 | 日本高清视频在线播放 | 爱爱小视频 | 午夜视频在线观看视频 | 视频在线一区二区 | 欧美色专区 | 97精品国产手机 | 国产中文字幕网 | 国产在线精品一区二区 | 精品国产乱码久久久久久牛牛 | 精品一区二区三区在线观看 | 国产高清视频在线观看 |