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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 26402|回復: 51
收起左側

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

  [復制鏈接]
ID:232268 發表于 2017-9-10 20:06 | 顯示全部樓層 |閱讀模式
使用pt100測溫度,經過放大器放大后的電壓值乘以236就是實際的溫度值0.42V對應100度,0V對應0度,經過ad運算顯示出來,其他濾掉,就只顯示0-100度,0-100對應輸出0-5v的電壓使用DA,功能,ad和da使用同個芯片,就是實現0-100顯示,溫度變化的同時da輸出0-5v。
第二個就是壓力傳感器輸出芯片ad輸入0-5v,對應壓力6-8pad,顯示出來。

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

單片機源程序如下:
  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);                        //函數聲明
  21. uchar IIC_ERROR;                                                                        //IIC錯誤標志

  22. void Delay(uint ms)                                //延時函數
  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寫數據
  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顯示位置設置
  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()//應答信號
  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讀一個字節數據
  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寫一個字節數據
  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轉換值
  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黑下載附件…………
復制代碼

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




評分

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

查看全部評分

回復

使用道具 舉報

ID:241069 發表于 2017-10-22 08:53 | 顯示全部樓層
大神  temp=read_add(0x40)得到的值是溫度么   不是ad轉化的電壓值?
回復

使用道具 舉報

ID:274871 發表于 2018-1-15 15:42 | 顯示全部樓層
大神,如果針對此電路,需要測一百以上的溫度,該如何改電路啊
回復

使用道具 舉報

ID:266116 發表于 2018-1-16 12:22 | 顯示全部樓層
謝謝分享!
回復

使用道具 舉報

ID:121859 發表于 2018-1-16 15:03 | 顯示全部樓層
程序內容是用的PCF8591,不是題目上說的PT100。
回復

使用道具 舉報

ID:17083 發表于 2018-2-6 11:03 | 顯示全部樓層
學習一下!
回復

使用道具 舉報

ID:282576 發表于 2018-2-6 12:59 來自手機 | 顯示全部樓層
謝謝分享
回復

使用道具 舉報

ID:300584 發表于 2018-4-1 22:25 | 顯示全部樓層
學習一下
回復

使用道具 舉報

ID:323859 發表于 2018-5-6 23:08 | 顯示全部樓層
不錯不錯不錯
回復

使用道具 舉報

ID:323859 發表于 2018-5-6 23:09 | 顯示全部樓層
看看了,再說了,應該不錯
回復

使用道具 舉報

ID:323859 發表于 2018-5-6 23:10 | 顯示全部樓層
看看看再評價了。是不是
回復

使用道具 舉報

ID:326015 發表于 2018-5-9 16:19 來自手機 | 顯示全部樓層
正在學習,謝謝分享
回復

使用道具 舉報

ID:326369 發表于 2018-5-9 22:06 | 顯示全部樓層
1253676557 發表于 2017-10-22 08:53
**** 作者被禁止或刪除 內容自動屏蔽 ****

你說得對
回復

使用道具 舉報

ID:326369 發表于 2018-5-9 22:07 | 顯示全部樓層
用c83單片機效果一樣嗎???
回復

使用道具 舉報

ID:185448 發表于 2018-5-12 13:33 | 顯示全部樓層
真的可以,學習一下
回復

使用道具 舉報

ID:330340 發表于 2018-5-26 09:40 | 顯示全部樓層
怎么調節壓力的值,讓其變化范圍大一些呢
回復

使用道具 舉報

ID:222006 發表于 2018-6-7 01:31 | 顯示全部樓層
樓主威武,我做的題目不讓用數字傳感器,無奈只好四處找找有沒有PT100的。
回復

使用道具 舉報

ID:386086 發表于 2018-8-14 15:21 | 顯示全部樓層
很好很好
回復

使用道具 舉報

ID:302850 發表于 2018-10-24 10:29 | 顯示全部樓層
就是在找Pt100啊,謝謝樓主的分享
回復

使用道具 舉報

ID:414168 發表于 2018-10-24 13:17 | 顯示全部樓層
樓主!有做過用熱電偶控制300度的案列嗎??
回復

使用道具 舉報

ID:314528 發表于 2018-11-8 19:12 | 顯示全部樓層
大哥 你這個放大電路的放大倍數是多少啊
回復

使用道具 舉報

ID:450925 發表于 2018-12-20 18:22 | 顯示全部樓層
nice!
回復

使用道具 舉報

ID:460397 發表于 2019-1-2 20:21 | 顯示全部樓層
想下載
回復

使用道具 舉報

ID:467578 發表于 2019-1-13 21:39 | 顯示全部樓層
感謝樓主,新接項目正好用到PT100仿真,找了一下午資料不會話仿真圖!!!!謝謝樓主
回復

使用道具 舉報

ID:467578 發表于 2019-1-13 21:40 | 顯示全部樓層
這個PT100,可不可以直接不加放大電路,然后直接引出來一個節點然后用8591讀取呢
回復

使用道具 舉報

ID:462629 發表于 2019-3-28 09:28 | 顯示全部樓層
有熱電偶的資料嗎
回復

使用道具 舉報

ID:147434 發表于 2019-3-30 23:13 | 顯示全部樓層
謝謝分享
回復

使用道具 舉報

ID:513748 發表于 2019-4-16 16:30 | 顯示全部樓層
觀摩學習
回復

使用道具 舉報

ID:513748 發表于 2019-4-16 16:35 | 顯示全部樓層
謝謝分享
回復

使用道具 舉報

ID:513748 發表于 2019-4-16 16:39 | 顯示全部樓層
觀摩學習 謝謝分享
回復

使用道具 舉報

ID:526151 發表于 2019-5-13 00:24 | 顯示全部樓層
請問:如果只要溫度顯示,不要壓力顯示,程序應該如何修改呢?
回復

使用道具 舉報

ID:531100 發表于 2019-5-14 18:06 | 顯示全部樓層
學習一下
回復

使用道具 舉報

ID:538248 發表于 2019-5-14 19:26 | 顯示全部樓層
很有用
回復

使用道具 舉報

ID:538248 發表于 2019-5-14 19:26 | 顯示全部樓層
學習學習
回復

使用道具 舉報

ID:165117 發表于 2019-5-17 14:45 | 顯示全部樓層
謝謝分享 學習一下
回復

使用道具 舉報

ID:520972 發表于 2019-5-22 22:52 | 顯示全部樓層
想請問為什么電壓值乘以236就是溫度值?
回復

使用道具 舉報

ID:555724 發表于 2019-6-5 16:06 | 顯示全部樓層

十分感謝
回復

使用道具 舉報

ID:560131 發表于 2019-6-11 17:07 | 顯示全部樓層
可以  很強大很給力
回復

使用道具 舉報

ID:557774 發表于 2019-6-12 00:34 來自手機 | 顯示全部樓層
剛好需要這個作為參考程序,謝謝
回復

使用道具 舉報

ID:97678 發表于 2019-6-13 09:56 | 顯示全部樓層
怎么將溫度測量范圍放大?負溫度怎么寫程序?
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 一区二区激情 | 亚洲一区二区三区乱码aⅴ 四虎在线视频 | 亚洲视频在线看 | 成人在线视频观看 | 国产精品日产欧美久久久久 | 欧美国产精品久久久 | 美女在线一区二区 | 久久久123 | 成人免费网视频 | 天天操操 | 欧美精品福利视频 | 羞羞视频网页 | 九九亚洲 | 欧美一区二区在线播放 | 看片91 | 在线中文视频 | 亚洲成人av一区二区 | 亚洲欧美综合精品久久成人 | 黑人性hd | 中文字幕亚洲一区二区三区 | 亚洲精品4| 欧美成人自拍视频 | 精品久久久久久久久久久下田 | 黄色在线观看网址 | 一区二区三区av | 久久久精品国产 | 欧美激情亚洲激情 | 看片地址 | 美女黄视频网站 | 国产高清毛片 | 中文字幕亚洲精品 | 一级少妇女片 | 国产高清区 | 极品在线 | 国产精品成人一区二区三区夜夜夜 | 亚洲一区 | 国产视频线观看永久免费 | 99视频免费看 | 交专区videossex农村 | 操久久 | 国产高清精品一区二区三区 |