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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 8448|回復(fù): 14
收起左側(cè)

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

  [復(fù)制鏈接]
ID:103893 發(fā)表于 2016-1-20 14:38 | 顯示全部樓層 |閱讀模式
學(xué)校的實訓(xùn)做的~~程序不是自己寫的,但是可以用!~
1.png
電路原理圖pcb:
0.png
0.png
所有資料下載: 數(shù)字溫濕度計.rar (8.73 MB, 下載次數(shù): 231)


1、該程序經(jīng)過電腦軟件Proteus7.4sp3仿真通過。

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

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

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

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

5、程序中使用的頭文件DS18B20_3.H,來源于網(wǎng)上,寫的非常好,十進(jìn)制溫度最后返回到函數(shù)

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

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

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

主要功能:

1、萬年歷,

2、時間,

3、星期,

4、溫度顯示,

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

5、三鍵調(diào)時(設(shè)置鍵,上調(diào)鍵,下調(diào)鍵),

6、斷電走時,

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

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


元件清單:
物理與機電工程學(xué)院器材   領(lǐng)用    單
領(lǐng)(借)用人    吳育培、林伏忠    單位
(班級)    12級電本(2)    用途    電子系統(tǒng)設(shè)計
領(lǐng)用
時間    2015.4.20    使用時間        人數(shù)    2人
序號    器材名稱及型號規(guī)格    單位    領(lǐng)用數(shù)量    備注
1    AT89C51單片機    個    2   
2    DS1302    個    2   
3                  輕觸開關(guān)    個    10   
4    103藍(lán)白電位器    個    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   
               
領(lǐng)用人簽字:    畢業(yè)論文指導(dǎo)教師簽字:
實驗室意見:    分管副院長意見:
分管院領(lǐng)導(dǎo)意見:   

倉管員簽字:                             時間:



部分程序預(yù)覽:

DS18B20_3.H:

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

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


  9. /*******************************  復(fù)位函數(shù) *******************************
  10. * 功能:完成單總線的復(fù)位操作。
  11. * 復(fù)位時間為480μs,因此延時時間為(480-24)/16 = 28.5,取29μs
  12. * 經(jīng)過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);                         // 等待時間隙結(jié)束
  22. return(presence);         // 返回存在信號,0 = 器件存在, 1 = 無器件
  23. }


  24. /****************************** 位寫入函數(shù) *******************************
  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);                                 // 在時間隙內(nèi)保持電平值,
  31. DQ = 1;         // DS18_delay函數(shù)每次循環(huán)延時16μs,因此DS18_delay(5) = 104μs
  32. }        


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

  46. /**************************** 位讀取函數(shù) ********************************
  47. * 功能:從單總線上讀取一位信號,所需延時時間為15μs,因此無法調(diào)用前面定義
  48. * 的DS18_delay()函數(shù),而采用一個for()循環(huán)來實現(xiàn)延時。
  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. /**************************** 字節(jié)讀取函數(shù) *******************************
  58. * 功能:從單總線讀取一個字節(jié)的值
  59. *************************************************************************/
  60. unsigned char DSread_byte(void) {
  61. unsigned char i;
  62. unsigned char value = 0;
  63. for (i=0;i<8;i++) {                                  // 讀取字節(jié),每次讀取一個字節(jié)
  64. if(read_bit()) value|=0x01<<i;         // 然后將其左移
  65. DS18_delay(6);                                         
  66. }
  67. return(value);
  68. }


  69. /******************************* 讀取溫度函數(shù) *****************************
  70. * 功能:如果單總線節(jié)點上只有一個器件則可以直接掉用本函數(shù)。如果節(jié)點上有多個器
  71. *      件,為了避免數(shù)據(jù)沖突,應(yīng)使用Match ROM函數(shù)來選中特定器件。
  72. * 注: 本函數(shù)是根據(jù)DS1820的溫度數(shù)據(jù)格式編寫的,若用于DS18B20,必須根據(jù)
  73. *      DS18B20的溫度數(shù)據(jù)格式作適當(dāng)修改。
  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);                                         // 啟動溫度轉(zhuǎn)換
  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. }

復(fù)制代碼



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

  2. 運行結(jié)果會在函數(shù)ReadTemperature()保存兩位十進(jìn)制數(shù)字的溫度值

  3. 調(diào)用時,要這樣:

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

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

  8. /*********************************端口定義**********************************/
  9. sbit DQ=P3^3;                                   //數(shù)據(jù)傳輸線接單片機的相應(yīng)的引腳

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

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

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

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

  40. /****************************************************************************
  41. 函數(shù)功能:向DS18B20讀一字節(jié)數(shù)據(jù)
  42. 入口參數(shù):
  43. 出口參數(shù):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;//復(fù)合賦值運算,等效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. 函數(shù)功能:向DS18B20寫一字節(jié)數(shù)據(jù)
  64. 入口參數(shù):dat
  65. 出口參數(shù):
  66. ****************************************************************************/
  67. WriteOneChar(unsigned char dat)//有參函數(shù),功能是"寫",而寫的內(nèi)容就是括號內(nèi)的參數(shù)
  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;//復(fù)合賦值運算,等效dat=dat>>1(dat=dat右移一位后的值)
  77.         }
  78.         DS18_delay(4);
  79. }

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


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

  98.         DS18_delay(20);

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









復(fù)制代碼


評分

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

查看全部評分

回復(fù)

使用道具 舉報

ID:115465 發(fā)表于 2016-4-20 16:04 | 顯示全部樓層
請問這個溫度計加萬年歷的程序有嗎,就這些?
回復(fù)

使用道具 舉報

ID:117249 發(fā)表于 2016-4-28 10:43 | 顯示全部樓層
程序是完整的么?
回復(fù)

使用道具 舉報

ID:74303 發(fā)表于 2016-4-28 11:20 | 顯示全部樓層
電路不完整,程序不完整。都沒說到的蜂鳴器功能
回復(fù)

使用道具 舉報

ID:117251 發(fā)表于 2016-4-28 12:09 | 顯示全部樓層
請問有程序流程圖么
回復(fù)

使用道具 舉報

ID:117306 發(fā)表于 2016-4-28 15:02 | 顯示全部樓層
看起來不錯。是完整的嘛
回復(fù)

使用道具 舉報

ID:109246 發(fā)表于 2016-5-25 17:05 | 顯示全部樓層
不完整
回復(fù)

使用道具 舉報

ID:119445 發(fā)表于 2016-5-25 20:10 | 顯示全部樓層
謝謝分享,參考一下!
回復(fù)

使用道具 舉報

ID:119445 發(fā)表于 2016-5-25 20:15 | 顯示全部樓層
謝謝分享!
回復(fù)

使用道具 舉報

ID:114695 發(fā)表于 2016-5-26 21:31 | 顯示全部樓層
謝謝分享,參考一下!
回復(fù)

使用道具 舉報

ID:116662 發(fā)表于 2016-8-6 09:26 來自手機 | 顯示全部樓層
是完整的資料嗎,先觀察一下
回復(fù)

使用道具 舉報

ID:148320 發(fā)表于 2016-11-16 18:54 | 顯示全部樓層
eeeeee 發(fā)表于 2016-4-28 10:43
**** 作者被禁止或刪除 內(nèi)容自動屏蔽 ****

不完整
回復(fù)

使用道具 舉報

ID:185064 發(fā)表于 2017-3-31 14:27 | 顯示全部樓層
有鬧鐘  就好了
回復(fù)

使用道具 舉報

ID:185172 發(fā)表于 2017-3-31 19:09 | 顯示全部樓層
謝謝分享
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 99这里只有精品视频 | 国产激情91久久精品导航 | 国产成人99久久亚洲综合精品 | 日韩成人在线播放 | 羞羞的视频在线看 | 国产在线精品一区二区三区 | 亚洲欧美日韩精品久久亚洲区 | 久久伊人精品 | 国产免费一区二区 | 欧美 日韩 中文 | 日韩精品极品视频在线观看免费 | 成人在线视频一区 | 激情小视频 | 国产在线观看一区二区三区 | 国产精品视频一二三区 | 久草网站| 色婷婷久久久亚洲一区二区三区 | 亚洲精品91 | 中文字幕一区二区三区精彩视频 | 亚洲v日韩v综合v精品v | 欧美成人一区二免费视频软件 | 精品91| 日韩手机视频 | 91精品国产91久久久久久三级 | 伊人中文字幕 | 欧美一级免费看 | 欧美日韩一区在线播放 | 国产99久久久国产精品 | 久久久久久久久久久久久久av | 国产成人精品亚洲日本在线观看 | 欧美最猛性xxxxx亚洲精品 | 翔田千里一区二区 | 久草欧美 | 另类亚洲视频 | 欧美日韩成人 | 色吊丝2288sds中文字幕 | 久久久久久久久淑女av国产精品 | 精品一区二区三区电影 | 欧美精品成人 | 欧美精品久久久 | 久久久久久综合 |