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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

pt100+51單片機的溫控系統(tǒng)程序+仿真圖 還帶壓力顯示

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:232268 發(fā)表于 2017-9-10 20:06 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
使用pt100測溫度,經(jīng)過放大器放大后的電壓值乘以236就是實際的溫度值0.42V對應(yīng)100度,0V對應(yīng)0度,經(jīng)過ad運算顯示出來,其他濾掉,就只顯示0-100度,0-100對應(yīng)輸出0-5v的電壓使用DA,功能,ad和da使用同個芯片,就是實現(xiàn)0-100顯示,溫度變化的同時da輸出0-5v。
第二個就是壓力傳感器輸出芯片ad輸入0-5v,對應(yīng)壓力6-8pad,顯示出來。

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


單片機源程序如下:
  1. #include <reg52.h>
  2. #include <intrins.h>
  3. #define uint unsigned int
  4. #define uchar unsigned char
  5. #define NOP() _nop_()
  6. #define Delay5us() {_nop_();_nop_();_nop_();_nop_();_nop_();}

  7. #define LCD_LINE_ONE 1
  8. #define LCD_LINE_TWO 2

  9. sbit LCD_RS = P2^0 ;
  10. sbit LCD_RW = P2^1 ;
  11. sbit LCD_EN = P2^2 ;

  12. sbit SCL = P1^1;
  13. sbit SDA = P1^2;

  14. sbit BEEP = P1^0;   
  15. uchar temp = 40;
  16. uchar pres = 40;
  17. uint Voltage[]={'0','0','0'};                                                //AD的LCD顯示值
  18. unsigned char LCD_Line_1[] = {"TEMP:             "};//TEMP-是溫度值
  19. unsigned char LCD_Line_2[] = {"PRES:             "};//PRES-是壓力值

  20. extern void Convert_To_Voltage(uint val);                        //函數(shù)聲明
  21. uchar IIC_ERROR;                                                                        //IIC錯誤標志

  22. void Delay(uint ms)                                //延時函數(shù)
  23. {
  24.          uchar i;
  25.         while(ms--)
  26.         {
  27.                  for(i=0;i<120;i++);
  28.         }
  29. }
  30. bit LCD_Busy_Check()                        //檢測忙信號
  31. {
  32.          bit Result;
  33.         LCD_RS = 0;
  34.         LCD_RW = 1;
  35.         LCD_EN = 1;
  36.         Delay5us();
  37.         Result = (bit)(P0&0x80);
  38.         LCD_EN = 0;
  39.         return Result;
  40. }
  41. void LCD_Write_Command(uchar cmd)//LCD寫命令
  42. {
  43.          while(LCD_Busy_Check());
  44.         LCD_RS = 0;
  45.         LCD_RW = 0;
  46.         LCD_EN = 0;
  47.         _nop_();
  48.         _nop_();
  49.         P0 = cmd;
  50.         Delay5us();
  51.         LCD_EN = 1;
  52.         Delay5us();
  53.         LCD_EN = 0;
  54. }
  55. void LCD_Write_Data(uchar dat)//LCD寫數(shù)據(jù)
  56. {
  57.         while(LCD_Busy_Check());
  58.         LCD_RS = 1;
  59.         LCD_RW = 0;
  60.         LCD_EN = 0;
  61.         P0 = dat;
  62.         Delay5us();
  63.         LCD_EN = 1;
  64.         Delay5us();
  65.         LCD_EN = 0;         
  66. }

  67. void LCD_Set_Position(uchar pos)                                //LCD顯示位置設(shè)置
  68. {
  69.         if(pos == LCD_LINE_ONE)
  70.                 LCD_Write_Command(0x80);        
  71.         else
  72.                 LCD_Write_Command(0xc0);        
  73. }
  74. void LCD_Display_A_Line(uchar Line_Addr,uchar s[])//LCD顯示行
  75. {
  76.          uchar i;
  77.         LCD_Set_Position(Line_Addr);
  78.         for(i=0;i<16;i++)
  79.         {
  80.                  LCD_Write_Data(s[i]);
  81.         }
  82. }
  83. void LCD_Dispay(void)                                                        //LCD實時顯示
  84. {
  85.         Convert_To_Voltage(temp*5);
  86.         LCD_Line_1[6]= Voltage[2];
  87.         LCD_Line_1[7]= Voltage[1];
  88.         LCD_Line_1[8]= '.';
  89.         LCD_Line_1[9]= Voltage[0];
  90.         LCD_Line_1[11]= 'C';
  91.         LCD_Line_1[12]= 'e';
  92.         LCD_Line_1[13]= 'n';
  93.         LCD_Line_1[14]= 't';
  94.         LCD_Display_A_Line(LCD_LINE_ONE,LCD_Line_1);//溫度顯示
  95.         
  96.         Convert_To_Voltage(pres);
  97.         LCD_Line_2[6]= Voltage[2]+6;
  98.         LCD_Line_2[7]= '.';
  99.         LCD_Line_2[8]= Voltage[1];
  100.         LCD_Line_2[9]= Voltage[0];
  101.         LCD_Line_2[11]= 'p';
  102.         LCD_Line_2[12]= 'a';
  103.         LCD_Display_A_Line(LCD_LINE_TWO,LCD_Line_2);//壓力顯示
  104. }
  105. void LCD_Initialise()                                                        //LCD初始化
  106. {
  107.          LCD_Write_Command(0x38);Delay(5);
  108.         LCD_Write_Command(0x0c);Delay(5);
  109.         LCD_Write_Command(0x06);Delay(5);
  110.         LCD_Write_Command(0x01);Delay(5);
  111.         
  112.         LCD_Display_A_Line(1,LCD_Line_1);
  113.         LCD_Display_A_Line(2,LCD_Line_2);
  114. }
  115. /********************************PCF8591部分************************************/
  116. void Convert_To_Voltage(uint val)//電壓換算成溫度或壓力
  117. {
  118.          uint Tmp;
  119.         Tmp = val;
  120.         Voltage[2] = Tmp/100+'0';
  121.         Tmp = Tmp%100*10;
  122.         Voltage[1] = Tmp/100+'0';
  123.         Tmp = Tmp%100*10;
  124.         Voltage[0] = Tmp/100+'0';
  125. }

  126. /*****************IIC初始化*****************/
  127. void delay()   
  128. {;;}


  129. void start()//停止
  130. {
  131.         SDA=1;
  132.         delay();
  133.         SCL=1;
  134.         delay();
  135.         SDA=0;
  136.         delay();
  137. }

  138. void stop()      //啟動
  139. {
  140.         SDA=0;
  141.         delay();
  142.         SCL=1;
  143.         delay();
  144.         SDA=1;
  145.         delay();
  146. }


  147. void respons()//應(yīng)答信號
  148. {
  149.         uchar i;
  150.         SCL=1;
  151.         delay();
  152.         while((SDA==1)&&(i<250))
  153.         i++;
  154.         SCL=0;
  155.         delay();
  156. }

  157. void init()      //初始化PCF8591接口
  158. {
  159.         SDA=1;
  160.         delay();
  161.         SCL=1;
  162.         delay();   
  163. }

  164. uchar read_byte()//對PCF8591讀一個字節(jié)數(shù)據(jù)
  165. {
  166.         uchar i,k;
  167.         SCL=0;
  168.         delay();
  169.         SDA=1;
  170.         delay();
  171.         for(i=0;i<8;i++)
  172.         {
  173.                 SCL=1;
  174.                 delay();
  175.                 k=(k<<1)|SDA;
  176.                 SCL=0;
  177.                 delay();
  178.         }
  179.         return k;
  180. }

  181. void write_byte(uchar date)  //對PCF8591寫一個字節(jié)數(shù)據(jù)
  182. {
  183.         uchar i,temp1;
  184.         temp1=date;
  185.         for(i=0;i<8;i++)
  186.         {
  187.                 temp1=temp1<<1;
  188.                 SCL=0;
  189.                 delay();
  190.                 SDA=CY;
  191.                 delay();
  192.                 SCL=1;
  193.                 delay();            
  194.         }   
  195.         SCL=0;
  196.         delay();
  197.         SDA=1;
  198.         delay();
  199. }



  200. void write_add(uchar control,uchar date)//輸出電壓
  201. {
  202.         start();
  203.         write_byte(0x90);        
  204.         respons();
  205.         write_byte(control);
  206.         respons();
  207.         write_byte(date);
  208.         respons();
  209.         stop();

  210. }

  211. uchar read_add(uchar control)//讀取AD轉(zhuǎn)換值
  212. {
  213.         uchar date;
  214.         start();
  215.         write_byte(0x90);
  216.         respons();
  217.         write_byte(control);
  218.         respons();
  219.         start();
  220.         write_byte(0x90+1);      
  221.         respons();
  222.         date=read_byte();
  223.         stop();
  224.         return date;

  225. }


  226. void main()
  227. ……………………

  228. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼

所有資料51hei提供下載:
溫控系統(tǒng).rar (121.02 KB, 下載次數(shù): 715)




評分

參與人數(shù) 5黑幣 +68 收起 理由
三萬英尺雙子 + 5 很給力!
danpianji3501 + 5 共享資料的黑幣獎勵!
qjzyx + 4 贊一個!
vktpas + 4 贊一個!
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發(fā)
ID:241069 發(fā)表于 2017-10-22 08:53 | 只看該作者
大神  temp=read_add(0x40)得到的值是溫度么   不是ad轉(zhuǎn)化的電壓值?
回復(fù)

使用道具 舉報

板凳
ID:274871 發(fā)表于 2018-1-15 15:42 | 只看該作者
大神,如果針對此電路,需要測一百以上的溫度,該如何改電路啊
回復(fù)

使用道具 舉報

地板
ID:266116 發(fā)表于 2018-1-16 12:22 | 只看該作者
謝謝分享!
回復(fù)

使用道具 舉報

5#
ID:121859 發(fā)表于 2018-1-16 15:03 | 只看該作者
程序內(nèi)容是用的PCF8591,不是題目上說的PT100。
回復(fù)

使用道具 舉報

6#
ID:17083 發(fā)表于 2018-2-6 11:03 | 只看該作者
學(xué)習(xí)一下!
回復(fù)

使用道具 舉報

7#
ID:282576 發(fā)表于 2018-2-6 12:59 來自手機 | 只看該作者
謝謝分享
回復(fù)

使用道具 舉報

8#
ID:300584 發(fā)表于 2018-4-1 22:25 | 只看該作者
學(xué)習(xí)一下
回復(fù)

使用道具 舉報

9#
ID:323859 發(fā)表于 2018-5-6 23:08 | 只看該作者
不錯不錯不錯
回復(fù)

使用道具 舉報

10#
ID:323859 發(fā)表于 2018-5-6 23:09 | 只看該作者
看看了,再說了,應(yīng)該不錯
回復(fù)

使用道具 舉報

11#
ID:323859 發(fā)表于 2018-5-6 23:10 | 只看該作者
看看看再評價了。是不是
回復(fù)

使用道具 舉報

12#
ID:326015 發(fā)表于 2018-5-9 16:19 來自手機 | 只看該作者
正在學(xué)習(xí),謝謝分享
回復(fù)

使用道具 舉報

13#
ID:326369 發(fā)表于 2018-5-9 22:06 | 只看該作者
1253676557 發(fā)表于 2017-10-22 08:53
**** 作者被禁止或刪除 內(nèi)容自動屏蔽 ****

你說得對
回復(fù)

使用道具 舉報

14#
ID:326369 發(fā)表于 2018-5-9 22:07 | 只看該作者
用c83單片機效果一樣嗎???
回復(fù)

使用道具 舉報

15#
ID:185448 發(fā)表于 2018-5-12 13:33 | 只看該作者
真的可以,學(xué)習(xí)一下
回復(fù)

使用道具 舉報

16#
ID:330340 發(fā)表于 2018-5-26 09:40 | 只看該作者
怎么調(diào)節(jié)壓力的值,讓其變化范圍大一些呢
回復(fù)

使用道具 舉報

17#
ID:222006 發(fā)表于 2018-6-7 01:31 | 只看該作者
樓主威武,我做的題目不讓用數(shù)字傳感器,無奈只好四處找找有沒有PT100的。
回復(fù)

使用道具 舉報

18#
ID:386086 發(fā)表于 2018-8-14 15:21 | 只看該作者
很好很好
回復(fù)

使用道具 舉報

19#
ID:302850 發(fā)表于 2018-10-24 10:29 | 只看該作者
就是在找Pt100啊,謝謝樓主的分享
回復(fù)

使用道具 舉報

20#
ID:414168 發(fā)表于 2018-10-24 13:17 | 只看該作者
樓主!有做過用熱電偶控制300度的案列嗎??
回復(fù)

使用道具 舉報

21#
ID:314528 發(fā)表于 2018-11-8 19:12 | 只看該作者
大哥 你這個放大電路的放大倍數(shù)是多少啊
回復(fù)

使用道具 舉報

22#
ID:450925 發(fā)表于 2018-12-20 18:22 | 只看該作者
nice!
回復(fù)

使用道具 舉報

23#
ID:460397 發(fā)表于 2019-1-2 20:21 | 只看該作者
想下載
回復(fù)

使用道具 舉報

24#
ID:467578 發(fā)表于 2019-1-13 21:39 | 只看該作者
感謝樓主,新接項目正好用到PT100仿真,找了一下午資料不會話仿真圖!!!!謝謝樓主
回復(fù)

使用道具 舉報

25#
ID:467578 發(fā)表于 2019-1-13 21:40 | 只看該作者
這個PT100,可不可以直接不加放大電路,然后直接引出來一個節(jié)點然后用8591讀取呢
回復(fù)

使用道具 舉報

26#
ID:462629 發(fā)表于 2019-3-28 09:28 | 只看該作者
有熱電偶的資料嗎
回復(fù)

使用道具 舉報

27#
ID:147434 發(fā)表于 2019-3-30 23:13 | 只看該作者
謝謝分享
回復(fù)

使用道具 舉報

28#
ID:513748 發(fā)表于 2019-4-16 16:30 | 只看該作者
觀摩學(xué)習(xí)
回復(fù)

使用道具 舉報

29#
ID:513748 發(fā)表于 2019-4-16 16:35 | 只看該作者
謝謝分享
回復(fù)

使用道具 舉報

30#
ID:513748 發(fā)表于 2019-4-16 16:39 | 只看該作者
觀摩學(xué)習(xí) 謝謝分享
回復(fù)

使用道具 舉報

31#
ID:526151 發(fā)表于 2019-5-13 00:24 | 只看該作者
請問:如果只要溫度顯示,不要壓力顯示,程序應(yīng)該如何修改呢?
回復(fù)

使用道具 舉報

32#
ID:531100 發(fā)表于 2019-5-14 18:06 | 只看該作者
學(xué)習(xí)一下
回復(fù)

使用道具 舉報

33#
ID:538248 發(fā)表于 2019-5-14 19:26 | 只看該作者
很有用
回復(fù)

使用道具 舉報

34#
ID:538248 發(fā)表于 2019-5-14 19:26 | 只看該作者
學(xué)習(xí)學(xué)習(xí)
回復(fù)

使用道具 舉報

35#
ID:165117 發(fā)表于 2019-5-17 14:45 | 只看該作者
謝謝分享 學(xué)習(xí)一下
回復(fù)

使用道具 舉報

36#
ID:520972 發(fā)表于 2019-5-22 22:52 | 只看該作者
想請問為什么電壓值乘以236就是溫度值?
回復(fù)

使用道具 舉報

37#
ID:555724 發(fā)表于 2019-6-5 16:06 | 只看該作者
回復(fù)

使用道具 舉報

38#
ID:560131 發(fā)表于 2019-6-11 17:07 | 只看該作者
可以  很強大很給力
回復(fù)

使用道具 舉報

39#
ID:557774 發(fā)表于 2019-6-12 00:34 來自手機 | 只看該作者
剛好需要這個作為參考程序,謝謝
回復(fù)

使用道具 舉報

40#
ID:97678 發(fā)表于 2019-6-13 09:56 | 只看該作者
怎么將溫度測量范圍放大?負溫度怎么寫程序?
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: av大全在线 | 亚洲国产精品一区二区第一页 | 国产成人99久久亚洲综合精品 | 91精品国产91综合久久蜜臀 | 久久精品亚洲欧美日韩久久 | 久久久久国产一区二区 | 91久久久久久| 久久久成 | 在线视频一区二区三区 | 欧美日产国产成人免费图片 | 国产自产c区| 手机在线一区二区三区 | 中文字幕在线观看 | 成人国产精品久久久 | 国产视频91在线 | 99精品久久久| 亚洲一区成人 | 欧美一区二区三区在线视频 | 成人小视频在线观看 | 日韩在线一区二区 | 99精品久久久久 | 亚洲欧美在线观看视频 | 亚洲91精品 | 成年人在线观看视频 | 成人小视频在线观看 | 国产不卡在线观看 | 一本在线 | 2019精品手机国产品在线 | 成人影院在线观看 | 91国内视频在线 | 国产成人精品一区二 | 亚洲精品在线免费 | 欧美色综合一区二区三区 | 伊人影院在线观看 | 国产中文字幕网 | 99精品一区二区三区 | 亚洲视频中文字幕 | 日日骚网 | 国产一级在线观看 | 最新中文字幕久久 | 久久久久久a |