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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

ATmaga8單片機Pt100溫度計源程序+Proteus仿真設計

[復制鏈接]
跳轉到指定樓層
樓主
設計Pt100鉑電阻測量溫度的電路,溫度測量范圍是0-100攝氏度要求LCD顯示。畫出電路圖,標注元器件參數,簡單說明測量原理和調節方式。根據要求,本設計的測溫模擬電路使用熱電阻Pt100溫度傳感器利用其感溫效應,熱電阻隨環境溫度的變化而變化,在電路圖中將電阻值的變化轉換成電壓的變化,再將電壓值作為輸入信號輸入至AD轉換器中進行模擬信號到數字信號的轉換,其輸出端接單片機,向單片機內依據公式寫入源程序,將被測溫度在顯示器上顯示出來:
測量溫度范圍0~100℃;
分辨率為0.1℃;
LCD數碼直讀顯示。
本設計系統包括了溫度測量單元,信號處理單元,A/D 轉換模塊,數據處理與控制模塊,溫度顯示五個部分。

仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機源程序如下:
  1. #include <mega8.h>
  2. //#include <delay.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5. // Alphanumeric LCD Module functions
  6. #asm
  7.    .equ __lcd_port=0x18 ;PORTB
  8. #endasm
  9. #include <lcd.h>

  10. #include <delay.h>

  11. #define ADC_VREF_TYPE 0xC0
  12. #define MCPCS   PORTD.0
  13. #define MCPSCK  PORTD.1
  14. #define MCPDATA PIND.2
  15. #define A 3.9083e-3
  16. #define B -5.775e-7
  17. #define C -4.183e-12
  18. unsigned long read_spi(void);
  19. float CalTem(float PT100R)
  20. {
  21. double fT,fR,fT0;
  22. char i=0;
  23. fR=PT100R;
  24. fT0=(fR/100-1)/A;

  25. return fT0;
  26. };
  27. unsigned long read_mcp(void)
  28. {
  29. long a[]={0,0,0,0,0};
  30. long x=0;
  31. char i=0;
  32. char k=5;       // 數組大小 -1
  33. for (i=0;i<5;i++)
  34. {
  35. a[i]=read_spi(); // 連續3次讀出數據
  36. delay_us(5);
  37. }
  38. //中值濾波
  39. while (k>0)
  40. {
  41. for (i=0;(i<(k-1));i++) // 從低到高排序
  42. {
  43.   if (a[i]>a[i+1])
  44.   {
  45.   x=a[i+1];
  46.   a[i+1]=a[i];
  47.   a[i]=x;
  48.   };
  49. };
  50. k--;
  51. };
  52. return a[2]; // 舍棄最大數據和最小數據。
  53. }

  54. unsigned long read_spi(void)
  55. {              
  56. volatile  char i=0;
  57. volatile  long int result=0,x=0;
  58. MCPCS=0;//    CS 先一個100us 低電平脈沖
  59. delay_us(100);
  60. MCPCS=1;
  61. delay_ms(80); // 高電平等待80ms 等待轉換完成
  62. MCPCS=0;      // 置 CS 低電平 開始發生 sck 脈沖
  63. for (i=0; i<24;i++) // 24 位數據
  64. {
  65.   MCPSCK=0;    // sck 脈沖下降沿
  66.   delay_us(1); // 等5us 等待穩定
  67.   //result=result<<1;
  68.   x=MCPDATA;   // 讀出一位
  69.   while (MCPDATA!=x)  // 抖動處理 2次讀出電平相同說明數據穩定
  70.   {
  71.    delay_us(1);
  72.    x=MCPDATA;
  73.   };
  74.   result<<=1;   
  75.   result|=x;//(x<<(23-i));
  76.   delay_us(5);
  77.   MCPSCK=1;   // 發送sck 上升沿
  78.   delay_us(10);   
  79. };
  80. MCPCS=1; // cs=1
  81. return result>>6;
  82. }
  83. // Read the AD conversion result
  84. unsigned int read_adc(unsigned char adc_input)
  85. {
  86. ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
  87. // Delay needed for the stabilization of the ADC input voltage
  88. delay_us(10);
  89. // Start the AD conversion
  90. ADCSRA|=0x40;
  91. // Wait for the AD conversion to complete
  92. while ((ADCSRA & 0x10)==0);
  93. ADCSRA|=0x10;
  94. return ADCW;
  95. }

  96. // 校準溫度計查表   沒20度一個校準,
  97. //                     -50  -30  -10  10  30   50    70  90   110   130 150   
  98. const float CAL_Tem[]={4.7 ,4.65,4.65,4.6,4.6 ,4.55,4.55,4.50,4.45,4.45,4.45};
  99. const int   ADCSTEP[]={  1 ,96  ,189 ,282, 374,466 ,557 ,648,738,827 ,916};

  100. float CalcuTem(int ADC)  // 溫度校準計算     沒有使用
  101. {
  102. int i=0;
  103. float r;
  104. for (i=0; i<10;i++)
  105. {
  106.    if ((ADC<ADCSTEP[i+1])&&(ADC>=ADCSTEP[i])) break;
  107. };
  108. r=(ADC-ADCSTEP[i]);
  109. r=r/CAL_Tem[i];
  110. r=r-50;///CAL_Tem[i]-50+i*20+;
  111. r=r+i*20.0;
  112. return r;
  113. }
  114. volatile char stradc[15]="\0";
  115. void main(void)
  116. {
  117. // Declare your local variables here
  118. volatile  long int MCPADC=0;
  119. volatile unsigned int adc=0;
  120. volatile float  fadc=0;

  121. // Input/Output Ports initialization
  122. // Port B initialization
  123. // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
  124. // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
  125. PORTB=0x00;
  126. DDRB=0x00;

  127. // Port C initialization
  128. // Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
  129. // State6=T State5=T State4=T State3=T State2=T State1=T State0=T
  130. PORTC=0x00;
  131. DDRC=0x00;

  132. // Port D initialization
  133. // Func7=out Func6=out Func5=out Func4=out Func3=out Func2=int Func1=out Func0=out
  134. // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=1
  135. PORTD=0x07;
  136. DDRD=0xFB;

  137. // Timer/Counter 0 initialization
  138. // Clock source: System Clock
  139. // Clock value: Timer 0 Stopped
  140. TCCR0=0x00;
  141. TCNT0=0x00;

  142. // Timer/Counter 1 initialization
  143. // Clock source: System Clock
  144. // Clock value: Timer 1 Stopped
  145. // Mode: Normal top=FFFFh
  146. // OC1A output: Discon.
  147. // OC1B output: Discon.
  148. // Noise Canceler: Off
  149. // Input Capture on Falling Edge
  150. // Timer 1 Overflow Interrupt: Off
  151. // Input Capture Interrupt: Off
  152. // Compare A Match Interrupt: Off
  153. // Compare B Match Interrupt: Off
  154. TCCR1A=0x00;
  155. TCCR1B=0x00;
  156. TCNT1H=0x00;
  157. TCNT1L=0x00;
  158. ICR1H=0x00;
  159. ICR1L=0x00;
  160. OCR1AH=0x00;
  161. OCR1AL=0x00;
  162. OCR1BH=0x00;
  163. OCR1BL=0x00;

  164. // Timer/Counter 2 initialization
  165. // Clock source: System Clock
  166. // Clock value: Timer 2 Stopped
  167. // Mode: Normal top=FFh
  168. // OC2 output: Disconnected
  169. ASSR=0x00;
  170. TCCR2=0x00;
  171. TCNT2=0x00;
  172. OCR2=0x00;

  173. // External Interrupt(s) initialization
  174. // INT0: Off
  175. // INT1: Off
  176. MCUCR=0x00;

  177. // Timer(s)/Counter(s) Interrupt(s) initialization
  178. TIMSK=0x00;

  179. // Analog Comparator initialization
  180. // Analog Comparator: Off
  181. // Analog Comparator Input Capture by Timer/Counter 1: Off
  182. ACSR=0x80;
  183. SFIOR=0x00;

  184. // ADC initialization
  185. // ADC Clock frequency: 125.000 kHz
  186. // ADC Voltage Reference: Int., cap. on AREF
  187. ADMUX=ADC_VREF_TYPE & 0xff;
  188. ADCSRA=0x86;

  189. // LCD module initialization
  190. lcd_init(16);

  191. while (1)
  192.       {     
  193.       
  194.    
  195.       MCPADC=0;
  196.       MCPADC=read_mcp();
  197. //      memset(stradc,' ',15);              
  198. //      lcd_gotoxy(0,0);
  199. //      lcd_puts(stradc);
  200. ……………………

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

所有資料51hei提供下載:
Pt100仿真程序.zip (89.83 KB, 下載次數: 35)

評分

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

查看全部評分

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲国产二区 | 七七婷婷婷婷精品国产 | 久久精品国产久精国产 | 国产一区在线免费观看 | 日韩精品影院 | 欧美一区二区三区四区视频 | 国产一区二区 | 亚洲av毛片 | av在线一区二区三区 | 亚洲第一福利视频 | 国产视频中文字幕 | 久久88| 成人免费观看男女羞羞视频 | 蜜桃一区| 国产成人精品福利 | 超碰伊人 | 韩日在线视频 | 黄色网址免费在线观看 | 欧美中文字幕在线 | 亚洲精品一级 | 欧美成人二区 | 亚洲精品丝袜日韩 | 日本又色又爽又黄又高潮 | 一区二区国产精品 | 免费久久久 | 亚洲a视频 | 毛片一区二区 | 2019天天操| 曰韩三级 | 久久精彩| 亚洲视频一区二区三区 | 日韩精品在线一区 | 亚洲精品国产电影 | 中文字幕99| 日韩国产精品一区二区三区 | 日韩精品一区二区三区在线播放 | 中文字幕在线不卡播放 | 中文字幕日韩欧美 | 亚洲欧美男人天堂 | 成人在线免费 | 久久成人一区 |