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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5142|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

單片機(jī)TC72溫度傳感器應(yīng)用設(shè)計源碼與電路等資料

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

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

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

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


LCD1602液晶屏
1
pcs

10K電位器
1
Ω

51單片機(jī)
1
pcs

單片機(jī)40 pin底座
1
pcs

12M晶振
1
Hz

22PF電容
2
pf

10UF電容
1
μf

獨(dú)立按鈕
1
pcs

電阻10K
1
Ω

電阻220
1
Ω


TC72溫度傳感器
1
pcs

DC電源頭
1
pcs

電源開關(guān)
1
pcs

9*15cm洞洞板
1
pcs

焊錫
若干


導(dǎo)線
若干


  1. //-----------------------------------------------------------------
  2. //              名稱: SPI接口溫度傳感器TC72應(yīng)用測試
  3. //-----------------------------------------------------------------
  4. //              說明: 本例運(yùn)行時,單片機(jī)將持續(xù)從TC72傳感器讀取溫度數(shù)據(jù)并轉(zhuǎn)換為
  5. //                              浮點(diǎn)型字符串送LCD顯示(內(nèi)置SPI接口需要在實(shí)物電路測試)
  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              //溫度低字節(jié)
  20. #define TC72_TEMP_MSB              0x02              //溫度高字節(jié)
  21. #define TC72_MANU_ID              0x03              //制造商ID
  22. //SPI接口引腳定義(模擬方式)
  23. sbit SCK = P3^4;                                                        //串行時鐘
  24. sbit CE  = P3^5;                                                        //片選
  25. sbit SDI  = P3^6;                                                        //串行數(shù)據(jù)輸入
  26. sbit SDO  = P3^7;                                                        //串行數(shù)據(jù)輸出
  27. //內(nèi)置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];                                                                                    //兩字節(jié)原始溫度數(shù)據(jù)
  38. float TempX = 0.0;                                                        //浮點(diǎn)溫度值
  39. //-----------------------------------------------------------------
  40. // SPI主機(jī)初始化
  41. //-----------------------------------------------------------------
  42. void SPI_MasterInit()
  43. {
  44.    SPCON=0xD0;
  45.    SPSTA=0xC0;
  46. }

  47. //-----------------------------------------------------------------
  48. // SPI數(shù)據(jù)傳輸
  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. // 從當(dāng)前地址讀取一字節(jié)數(shù)據(jù)(模擬方式)
  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. // 向當(dāng)前地址寫入一字節(jié)數(shù)據(jù)(模擬方式)
  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寫入兩字節(jié)(地址,數(shù)據(jù))(模擬方式)
  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配置數(shù)據(jù)
  92. //-----------------------------------------------------------------
  93. void Config_TC72()
  94. {
  95.   Write_TC72(TC72_CTRL,0x15);
  96. }
  97. //-----------------------------------------------------------------
  98. // 從TC72讀取兩字節(jié)溫度數(shù)據(jù)并轉(zhuǎn)換為浮點(diǎn)溫度值
  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; //液晶狀態(tài)字節(jié)變量
  150. do
  151. { P0=0xff; //液晶屏端口初始置高電平
  152. EN=0;RS=0;RW=1; //LCD禁止,選擇狀態(tài)寄存器,準(zhǔn)備讀
  153. EN=1;LCD_Status=P0; //LCD使能,從P0端口讀取液晶屏狀態(tài)字節(jié)
  154. EN=0; //LCD禁止
  155. } while (LCD_Status & 0x80); //液晶忙繼續(xù)循環(huán)            
  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. // 發(fā)送數(shù)據(jù)
  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);              //字符進(jìn)入模式:屏幕不動,字符后移
  193.               Write_LCD_Command(0x0C); delay_ms(1);              //顯示開,關(guān)光標(biāo)
  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);                            //設(shè)置顯示起始位置

  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. }
復(fù)制代碼

以上圖文的Word格式文檔下載(內(nèi)容和本網(wǎng)頁上的一模一樣,方便大家保存):
單片機(jī)原理及系統(tǒng)設(shè)計.doc (121 KB, 下載次數(shù): 31)

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 久久只有精品 | 欧美成人在线免费 | 日本a∨精品中文字幕在线 亚洲91视频 | 99国内精品久久久久久久 | 黄色大片在线 | 超碰在线国产 | 精品国产一二三区 | 在线日韩福利 | 国产在线高清 | 国产精品成av人在线视午夜片 | 成人不卡在线 | 欧美videosex性极品hd | 激情视频中文字幕 | 亚洲久在线 | 精品国产一区二区在线 | 日本淫视频| 中文字幕在线一区二区三区 | 日韩欧美高清 | 免费在线成人 | 日本五月婷婷 | 国产精品一区在线 | 久草精品在线 | 久热m3u8| 亚洲福利在线观看 | 国产欧美一区二区久久性色99 | 99久久国产| 国产精品日韩欧美一区二区三区 | 欧美一级二级视频 | 一级片在线观看 | 精品一区二区久久久久久久网站 | 91精品国产91久久久久久三级 | 日韩欧美中文 | 国产成人精品一区二区三区在线 | 亚洲精品一区二区在线观看 | 在线中文字幕亚洲 | 91国在线视频 | 欧洲av一区 | 亚洲成人三级 | 国产一区中文字幕 | 天堂成人国产精品一区 | 亚洲91精品 |