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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機TC72溫度傳感器應用設計源碼與電路等資料

[復制鏈接]
跳轉到指定樓層
樓主
ID:358498 發表于 2018-6-25 15:36 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
1、系統工作原理
TC72溫度數字傳感器能夠讀取從-55℃至+125℃范圍內的溫度,可用于連續溫度轉換模式或單次轉換模式。連續溫度轉換模式每隔約150ms測量溫度并將溫度存儲在溫度寄存器中。相反,單次轉換模式只進行單次溫度測量,然后轉換到節能的關斷模式。該傳感器具有的串行接口能夠與主控制器或其它外設通信。TC72接口兼容SPI協議。TC72不需要額外的外部元器件。
本系統以MCS-51系列單片機為核心器件,組成一個溫度傳感器,采用數字溫度傳感器TC72為檢測器件,進行單點溫度檢測,檢測精度為±0.5攝氏度。溫度顯示采用LCD1602顯示,兩位整數,一位小數。
2、系統硬件原理圖
1.系統硬件原理圖

3、程序流程圖
采用AT89C51單片機作為控制核心對溫度傳感器TC72控制,讀取溫度信號并進行計算處理,并送到液晶顯示器LCD1602顯示。 按照系統設計功能的要求,確定系統由3個模塊組成:主控制器、測溫電路和顯示電路。程序設計流程圖如下:

圖2.程序流程圖
4、程序清單
系統程序主要包括主程序、讀出溫度子程序、溫度轉換子程序、計算溫度子程序、顯示程序、延時程序等等。主程序主要功能是完成TC72的初始化工作,并進行讀溫度,將溫度轉化成為字符型數據并在顯示器上顯示傳感器所測得的實際溫度。讀出溫度子程序的主要功能是讀出RAM中的9字節,在讀出時需要進行CRC校驗,校驗有錯時不進行溫度數據的改寫。

5、Proteus仿真調試結果及分析
PROTEUS 是單片機課堂教學的先進助手。PROTEUS不僅可以將許多單片機實例功能形象化,也可將許多單片機實例運行過程形象化。前者可在相當程度上得到實物演示實驗的效果,后者則是實物演示實驗難以達到的效果。它的元器件、連接線路等卻和傳統的單片機實驗硬件高度對應。這在相當程度上替代了傳統的單片機實驗教學的功能,例:元器件選擇、電路連接、電路檢測、電路修改、軟件調試、運行結果等。
在PROTEUS繪制好原理圖后,調入已編譯好的目標代碼文件:*.HEX,可以在PROTEUS的原理圖中看到模擬的實物運行狀態和過程。
SPI接口TC72溫度傳感器應用測試課題仿真調試結果如下:
第一步:編寫C語言程序,編譯成功0  error;0  warning;并生成HEX文件;
第二步:繪制仿真圖,檢查無誤,導入HEX文件,運行結果:LCD亮但不顯示TC72溫度傳感器溫度;
第三步:檢查源程序及仿真圖,無法發現錯誤;
第四步:咨詢老師,經檢查缺少LCD1602液晶顯示屏控制與顯示程序;
第五步:修改程序即在已建工程中新建并編寫LCD1602液晶顯示屏控制與顯示程序,編譯成功,生成HEX文件,導入Proteus仿真圖運行成功
第六步:送老師檢查通過。
3.仿真結果圖
元件清單
品名
數量
單位


LCD1602液晶屏
1
pcs

10K電位器
1
Ω

51單片機
1
pcs

單片機40 pin底座
1
pcs

12M晶振
1
Hz

22PF電容
2
pf

10UF電容
1
μf

獨立按鈕
1
pcs

電阻10K
1
Ω

電阻220
1
Ω


TC72溫度傳感器
1
pcs

DC電源頭
1
pcs

電源開關
1
pcs

9*15cm洞洞板
1
pcs

焊錫
若干


導線
若干


  1. //-----------------------------------------------------------------
  2. //              名稱: SPI接口溫度傳感器TC72應用測試
  3. //-----------------------------------------------------------------
  4. //              說明: 本例運行時,單片機將持續從TC72傳感器讀取溫度數據并轉換為
  5. //                              浮點型字符串送LCD顯示(內置SPI接口需要在實物電路測試)
  6. //
  7. //-----------------------------------------------------------------
  8. #include <REG51.H>
  9. #include <intrins.h>
  10. #include <stdio.h>
  11. #include <math.h>
  12. #define INT8U              unsigned char
  13. #define INT16U              unsigned int
  14. //SPI使能與禁用(注意TC72是高電平使能,低電平禁用)
  15. #define SPI_EN() P1 |=              (1<<4)
  16. #define SPI_DI() P1 &= ~(1<<4)
  17. //TC72寄存器地址定義
  18. #define TC72_CTRL                            0x80              //控制寄存器
  19. #define TC72_TEMP_LSB              0x01              //溫度低字節
  20. #define TC72_TEMP_MSB              0x02              //溫度高字節
  21. #define TC72_MANU_ID              0x03              //制造商ID
  22. //SPI接口引腳定義(模擬方式)
  23. sbit SCK = P3^4;                                                        //串行時鐘
  24. sbit CE  = P3^5;                                                        //片選
  25. sbit SDI  = P3^6;                                                        //串行數據輸入
  26. sbit SDO  = P3^7;                                                        //串行數據輸出
  27. //內置SPI寄存器及寄存器位定義
  28. //SPCON C3h SPI Control              SPR2 SPEN SSDIS MSTR CPOL CPHA SPR1 SPR0
  29. //SPSTA C4h SPI Status              SPIF WCOL SSERR MODF - - - -
  30. //SPDAT C5h SPI Data              SPD7 SPD6 SPD5  SPD4 SPD3 SPD2 SPD1 SPD0
  31. sfr              SPCON              =              0xC3;
  32. sfr              SPSTA              =              0xC4;
  33. sfr              SPDAT              =              0xC5;
  34. extern void Initialize_LCD();
  35. extern void LCD_ShowString(INT8U r, INT8U c,INT8U *str);
  36. extern void delay_ms(INT16U x);
  37. INT8U T[2];                                                                                    //兩字節原始溫度數據
  38. float TempX = 0.0;                                                        //浮點溫度值
  39. //-----------------------------------------------------------------
  40. // SPI主機初始化
  41. //-----------------------------------------------------------------
  42. void SPI_MasterInit()
  43. {
  44.    SPCON=0xD0;
  45.    SPSTA=0xC0;
  46. }

  47. //-----------------------------------------------------------------
  48. // SPI數據傳輸
  49. //-----------------------------------------------------------------
  50. INT8U SPI_SendData(INT8U dat)

  51. {
  52.   SPDAT=dat;
  53.   while((SPSTA&0x80)==0x00);
  54.   SPSTA=0xC0;
  55.   return SPDAT;
  56. }
  57. //-----------------------------------------------------------------
  58. // 從當前地址讀取一字節數據(模擬方式)
  59. //-----------------------------------------------------------------
  60. INT8U ReadByte()
  61. {
  62.   INT8U i,d=0x00;
  63.   for(i=0;i<8;i++)
  64.   {
  65.                  SCK=1;SCK=0;d=(d<<1)|SDO;
  66.     }
  67.     return d;
  68. }
  69. //-----------------------------------------------------------------
  70. // 向當前地址寫入一字節數據(模擬方式)
  71. //-----------------------------------------------------------------
  72. void WriteByte(INT8U dat)
  73. {
  74.    INT8U i;
  75.    for(i=0;i<8;i++)
  76.    { dat<<=1;SDI=CY;
  77.      SCK=0;SCK=1;
  78.               }
  79. }
  80. //-----------------------------------------------------------------
  81. // 向TC72寫入兩字節(地址,數據)(模擬方式)
  82. //-----------------------------------------------------------------
  83. void Write_TC72(INT8U addr, INT8U dat)
  84. {
  85.   CE=1;
  86.   WriteByte(addr);
  87.   WriteByte(dat);
  88.   CE=0;
  89. }
  90. //-----------------------------------------------------------------
  91. // 寫TC72配置數據
  92. //-----------------------------------------------------------------
  93. void Config_TC72()
  94. {
  95.   Write_TC72(TC72_CTRL,0x15);
  96. }
  97. //-----------------------------------------------------------------
  98. // 從TC72讀取兩字節溫度數據并轉換為浮點溫度值
  99. //-----------------------------------------------------------------
  100. void Read_TC72_Temperature()
  101. {
  102.   Config_TC72();
  103.   delay_ms(20);
  104.   CE=1;
  105.   WriteByte(TC72_TEMP_MSB);
  106.   T[1]=ReadByte();
  107.   T[0]=ReadByte();
  108.   CE=0;
  109.   TempX=(((int)((T[1]<<8)|T[0]))>>6)*0.25;
  110. }
  111. //-----------------------------------------------------------------
  112. // 主程序            
  113. //-----------------------------------------------------------------
  114. void main()
  115. {
  116.   char DisplayBuffer[17];
  117.    Initialize_LCD();
  118.    LCD_ShowString(0,0,"TC72 Sensor Test");
  119.    while(1)
  120.    {  Config_TC72();
  121.       Read_TC72_Temperature();
  122.                 sprintf(DisplayBuffer,"%TEMP:%6.1f\xDF\x43",TempX);
  123.                 LCD_ShowString(1,0,DisplayBuffer);
  124.               }
  125. }
  126. //-----------------------------------------------------------------
  127. // 液晶控制與顯示程序
  128. //-----------------------------------------------------------------
  129. #include <reg51rc2.h>
  130. #include <intrins.h>
  131. #define INT8U  unsigned char
  132. #define INT16U unsigned int
  133. sbit RS = P2^0;  //寄存器選擇線
  134. sbit RW = P2^1;              //讀/寫控制線
  135. sbit EN = P2^2;              //使能控制線
  136. //-----------------------------------------------------------------
  137. // 延時
  138. //-----------------------------------------------------------------
  139. void delay_ms(INT16U ms)
  140. {
  141.               INT8U i;
  142.               while(ms--) for(i = 0; i < 120; i++);
  143. }
  144. //-----------------------------------------------------------------
  145. // 忙等待
  146. //-----------------------------------------------------------------
  147. void Busy_Wait()
  148. {
  149. INT8U LCD_Status; //液晶狀態字節變量
  150. do
  151. { P0=0xff; //液晶屏端口初始置高電平
  152. EN=0;RS=0;RW=1; //LCD禁止,選擇狀態寄存器,準備讀
  153. EN=1;LCD_Status=P0; //LCD使能,從P0端口讀取液晶屏狀態字節
  154. EN=0; //LCD禁止
  155. } while (LCD_Status & 0x80); //液晶忙繼續循環            
  156. }
  157. //-----------------------------------------------------------------
  158. // 寫LCD命令
  159. //-----------------------------------------------------------------
  160. void Write_LCD_Command(INT8U cmd)
  161. {
  162. Busy_Wait();
  163. RS=0;
  164. RW=0;
  165. EN=0;
  166. P0=cmd;
  167. EN=1;
  168. delay_ms(1);
  169. EN=0;
  170. }                                          
  171. //-----------------------------------------------------------------
  172. // 發送數據
  173. //-----------------------------------------------------------------
  174. void Write_LCD_Data(INT8U dat)
  175. {
  176. Busy_Wait();
  177. RS=1;
  178. RW=0;
  179. EN=0;
  180. P0=dat;
  181. EN=1;
  182. delay_ms(1);
  183. EN=0;
  184. }
  185. //-----------------------------------------------------------------
  186. // LCD初始化
  187. //-----------------------------------------------------------------
  188. void Initialize_LCD()
  189. {
  190.   Write_LCD_Command(0x38); delay_ms(1);              //置功能,8位,雙行,5*7
  191.               Write_LCD_Command(0x01); delay_ms(1);              //清屏
  192.               Write_LCD_Command(0x06); delay_ms(1);              //字符進入模式:屏幕不動,字符后移
  193.               Write_LCD_Command(0x0C); delay_ms(1);              //顯示開,關光標
  194. }
  195. //-----------------------------------------------------------------
  196. // 顯示字符串
  197. //-----------------------------------------------------------------
  198. void LCD_ShowString(INT8U r, INT8U c,INT8U *str)
  199. {
  200.   INT8U i = 0;
  201.               code INT8U DDRAM[] = {0x80,0xC0};                            //1602LCD兩行的起始DDRAM地址
  202.               Write_LCD_Command(DDRAM[r] | c);                            //設置顯示起始位置

  203.               for ( i = 0; str[i] && i < 16 ;i++)                            //輸出字符串
  204.                 Write_LCD_Data(str[i]);

  205.               for (i=0; i < 16; i++)                                                                                    //不足一行時用空格填充
  206.                 Write_LCD_Data(' ');
  207. }
復制代碼

以上圖文的Word格式文檔下載(內容和本網頁上的一模一樣,方便大家保存):
單片機原理及系統設計.doc (121 KB, 下載次數: 31)

評分

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

查看全部評分

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

使用道具 舉報

沙發
ID:863864 發表于 2022-12-28 11:36 | 只看該作者
有源碼和仿真文件嗎?感覺發送還是有點問題
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品国产31久久久久久 | 毛片网站在线观看视频 | 久久com| 欧美久久一区二区三区 | 不卡视频一区二区三区 | 亚洲国产一区视频 | 日韩成人影院在线观看 | 亚洲精品国产精品国自产在线 | 国产激情片在线观看 | 午夜一区二区三区在线观看 | 亚洲一区二区免费 | 91玖玖| 国产a一区二区 | 亚洲一区二区成人 | 亚洲www| 欧美精品一区在线发布 | 一区二区三区四区国产 | 午夜婷婷激情 | 日韩手机在线视频 | 欧美在线a | 久久在线| 美女视频网站久久 | 欧美成人一区二区 | 草草影院ccyy | 黄色在线免费看 | 久久亚洲一区二区三区四区 | 91麻豆精品国产91久久久久久 | av网站在线免费观看 | 成人夜晚看av | 91久久| 亚洲性人人天天夜夜摸 | 国产精品成人一区 | 欧美中文一区 | 欧美九九| 欧日韩在线 | 国产a级毛毛片 | 久草视频在 | 久久久精彩视频 | 欧美日高清| 国产精品一区久久久 | 成人国产精品久久久 |