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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

51單片機PT100+AD623+MAX1240熱電偶測溫程序+Proteus仿真圖

  [復制鏈接]
跳轉到指定樓層
樓主
ID:591041 發(fā)表于 2022-1-18 18:50 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
功能描述:
1、采用51單片機作為主控單元芯片;
2、采用PT100熱電偶檢測溫度;
3、采用AD623作為信號放大電路;
4、采用MAX1240對信號進行模數(shù)轉換;
5、采用LCD1602作為顯示模塊;
6、可通過按鍵修改ADC運算周期;

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



二、    操作說明
KEY1:進入ADC運算周期設置模式;
KEY2: 退出ADC運算周期設置模式;
KEY3:ADC運算周期時間加;
KEY4:ADC運算周期時間減;

點擊器件上的按鈕,可以調節(jié)參數(shù);


單片機源程序如下:
  1. #include <reg52.h>
  2. #include <string.h>
  3. #include <math.h>
  4. #include "intrins.h"

  5. #define ROW1 0x80
  6. #define ROW2 0xC0
  7. #define Ts_CONST 1                //AD采樣時間系數(shù),采樣時間為0.1xTs_CONST(s)

  8. #define NOACT 0
  9. #define FC 1
  10. #define Start_AD 2
  11. #define Cal_Temperature 3

  12. #define Kpt 0.02732644         //AD芯片max1240的采樣值到溫度值的轉化系數(shù)


  13. void LCD_Init(void);
  14. void ClearDisp(unsigned char Row);
  15. void Display(unsigned char Addr, unsigned char *pstr);
  16. void DecToASC(unsigned int Dec,unsigned char *p, unsigned char n);
  17. void Disp_Initize(void);
  18. void Write_CMD(unsigned char CMD);

  19. unsigned int AD_MAX1240(void);

  20. sbit RS=P2^2;
  21. sbit RW=P2^1;
  22. sbit E=P2^0;

  23. sbit SDA=P1^5;
  24. sbit SCL=P1^6;
  25. sbit CS=P1^7;

  26. sbit Key=P3^5;
  27. sbit up=P3^6;
  28. sbit down=P3^7;



  29. unsigned char DispBuf[16];

  30. unsigned char RunState=NOACT;
  31. unsigned int AD_Reslut,tsflag,ts=1;


  32. float  fz,tmp,tmp1,Pt;

  33. void delay(unsigned int j)//延時jms
  34. {
  35.     unsigned int m,n;
  36.     for(n=0;n<j;n++)
  37.       {
  38.        for(m=0;m<120;m++);
  39.        }
  40. }


  41. void main(void)
  42. {        LCD_Init();
  43.         ClearDisp(ROW1);

  44.         Disp_Initize();

  45.         CS=1;
  46.         SDA=1;
  47.         SCL=0;

  48.         TMOD=0x11;
  49.         TF0=0;                //開始程序前先延時65ms,等待max1240上電,以保證AD采樣準確
  50.                                 
  51.         TH0=0;
  52.         TL0=0;
  53.         TR0=1;
  54.         while(!TF0);
  55.         TF0=0;
  56.         TR0=0;

  57.         TH0=0x3C;                //12M晶振時延時50ms
  58.         TL0=0xB0;
  59.         ET0=1;
  60.         TR0=1;

  61.         EX1=1;
  62.         IT1=1;

  63.         EA=1;

  64.         while(1)
  65.                 switch(RunState)
  66.                 {        case NOACT:
  67.                                 break;
  68.                         case FC:        //F0計算及顯示
  69.                                 fz=pow(10,(tmp-121.0000)/10);
  70.                                 DecToASC(fz,DispBuf,1);
  71.                                 DispBuf[1]='.';
  72.                                 DecToASC((fz-(unsigned int)fz)*1000,DispBuf+2,3);
  73.                                 DispBuf[5]='\0';
  74.                                 Display(0x80+11,DispBuf);
  75.                                        
  76.                                 

  77.                                 RunState=NOACT;
  78.                                 break;
  79.                         case Start_AD:                          //開始AD采樣

  80.                                 AD_Reslut=AD_MAX1240();

  81.                                 RunState=Cal_Temperature;
  82.                                 break;
  83.                         case Cal_Temperature:                                     //將AD值轉化為溫度并進行線性化
  84.                         {
  85.                                 
  86.                                 Pt=AD_Reslut*Kpt;
  87.                                 Pt+=100;          //溫度值
  88.                                        

  89.                                 tmp=Pt/100;
  90.                                 tmp=1-tmp;
  91.                                 tmp=2.31e-6L*tmp;
  92.                                 tmp+=1.527480889e-5L;
  93.                                 tmp=sqrt(tmp);
  94.                                 tmp+=-3.9083e-3L;
  95.                                 tmp/=-1.155e-6L;//AD采樣值線性化修正
  96.                                 tmp1=tmp;
  97.                                 tmp=(tmp+tmp1)/2;//取平均溫度
  98.                                 tmp=((float)((unsigned int)(tmp*10)))/10 ;

  99.                                 DecToASC(tmp,DispBuf,3);
  100.                                 DispBuf[3]='.';
  101.                                 DecToASC((tmp-(unsigned int)tmp)*10,DispBuf+4,1);
  102.                                 DispBuf[5]='\0';
  103.                                 Display(0xC0+2,DispBuf); //顯示函數(shù)
  104.                           }
  105.         
  106.                                 RunState=NOACT;
  107.                                 break;
  108.                 }
  109. }
  110. /*******************************************************************************/
  111. unsigned int AD_MAX1240(void)        //讀取AD,AD芯片為串口數(shù)據(jù)形式
  112. {        unsigned int adtmp=0;        
  113.         unsigned char i;

  114.         CS=0;
  115.         while(!SDA);

  116.         SCL=1;
  117.         adtmp<<=1;
  118.         SCL=0;

  119.         for(i=0;i<12;i++)
  120.         {        SCL=1;
  121.                 adtmp<<=1;
  122.                 if(SDA==1)adtmp++;
  123.                 SCL=0;
  124.         }

  125.         CS=1;

  126.         return adtmp;
  127. }
  128. /*******************************************************************************/
  129. void Disp_Initize(void)                                //LCD初始化,將Ts,F(xiàn)0,t等提示字符顯示在屏幕上
  130. {        //unsigned char *p;

  131.         
  132.         
  133.         DispBuf[0]='T';        
  134.         DispBuf[1]='s';
  135.         DispBuf[2]='=';
  136.         DecToASC(ts,DispBuf+3,2);
  137.         DispBuf[5]='s';
  138.         
  139.         DispBuf[8]='f' ;
  140.         DispBuf[9]='0'        ;
  141.         DispBuf[10]='='        ;
  142.         DispBuf[16]='\0';
  143.         Display(0x80,DispBuf);
  144.         DispBuf[0]='t';
  145.         DispBuf[1]='=';
  146.         DispBuf[2]='\0';
  147.         Display(0xc0,DispBuf);
  148. }
  149. /*******************************************************************************/
  150. void INT1_ISR(void) interrupt 2                          //切換采樣時間的中斷函數(shù),用于開關量識別和改變Ts(采樣時間)
  151. {        
  152.         EA=0;
  153.         TR0=0;
  154.         ET0=0;
  155.         strcpy(DispBuf,"     ");
  156.         Display(0x80+11,DispBuf);

  157.         while(1)
  158.         {
  159.                
  160.                 if(up==0)
  161.                 {
  162.                         delay(100);
  163.                         if(up==0)
  164.                         ts++;

  165.                 }

  166.                
  167.                 if(down==0)
  168.                
  169.                 {   delay(100);
  170.                         if(down==0)
  171.                         ts--;
  172.                 }
  173.                
  174.                 if(ts>60)
  175.                 ts=1;                        
  176.                 if(ts<=0)
  177.                 ts=60;
  178.                 DecToASC(ts,DispBuf,2);
  179.                 DispBuf[2]='s';
  180.                 DispBuf[3]='\0';
  181.                 Display(0x80+3,DispBuf);
  182.                 if(Key==0)
  183.                 break;

  184.         }
  185.         EA=1;
  186.         TR0=1;
  187.         ET0=1;
  188.         
  189. }
  190. /*******************************************************************************/
  191. void T0_ISR(void) interrupt 1         //定時中斷程序
  192. {        static unsigned char T0_CNT=Ts_CONST;
  193.         //static bit Flag=0;

  194.         TH0=0x3C;
  195.         TL0=0xB0;

  196.         //Flag=!Flag;

  197.         //if(Flag)return;

  198.         T0_CNT--;
  199.         tsflag++;

  200.         if(!T0_CNT)
  201.         {        T0_CNT=Ts_CONST;
  202.                 RunState=Start_AD; //AD采樣
  203.         }
  204.         if(tsflag>=ts*20)
  205.         {
  206.                 tsflag=0;
  207.                 RunState =FC;           //Ts到時進行F0值運算


  208.         }
  209. }
  210. /*******************************************************************************/
  211. void DecToASC(unsigned int Dec,unsigned char *p, unsigned char n)        //將Dec變量編程可以在1602上直接顯示的ASICII值
  212. {        unsigned char i;

  213.         p+=n;
  214.         p--;

  215.         for(i=0;i<n;i++)
  216.         {        *p=Dec%10+0x30;
  217.                 p--;
  218.                 Dec/=10;
  219.         }
  220. }
  221. /*LCD顯示*******************************************************************************/
  222. void Check_Busy(void)
  223. {//        return;
  224.         do
  225.         {        P0=0xFF;
  226.                 E=0;
  227.                 RS=0;
  228.                 RW=1;
  229.                 E=1;

  230.                 _nop_();
  231.         }while(P0&0x80);

  232.         E=0;
  233. }
  234. /*******************************************************************************/
  235. void Write_CMD(unsigned char CMD)
  236. {        
  237.         Check_Busy();
  238.         E=0;
  239.         RS=0;
  240.         RW=0;
  241.         P0=CMD;
  242.         E=1;
  243.         _nop_();
  244. ……………………

  245. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei附件下載(含仿真代碼等):
熱電偶測溫-仿真設計(51+PT100+MAX1240+1602+KEY4).7z (9.27 MB, 下載次數(shù): 174)

評分

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

查看全部評分

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

使用道具 舉報

沙發(fā)
ID:262 發(fā)表于 2022-2-23 03:39 | 只看該作者
好資料,51黑有你更精彩!!!
回復

使用道具 舉報

板凳
ID:1111326 發(fā)表于 2024-2-21 22:53 | 只看該作者
請問一下,我直接搭建ad623仿真時,提示我[SPICE] Too many iterations without convergence.
是什么原因
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 二区精品 | www.99热这里只有精品 | 可以免费观看的av片 | 国产日韩欧美在线 | 久久久毛片 | 亚洲欧美日韩一区二区 | 成人a视频片观看免费 | 亚洲欧美中文日韩在线v日本 | 国产在线精品一区 | 国产精品久久久久久久久久三级 | 亚洲免费人成在线视频观看 | 成年人网站在线观看视频 | 精品二三区 | 91免费在线 | 国产精品美女久久久久久免费 | 亚洲一区二区黄 | 亚洲一区二区三区在线 | 亚洲一区中文字幕在线观看 | 亚洲欧洲在线视频 | 精品久久久久久久久久 | a级大片免费观看 | h视频在线看 | 久久精品a | 国产精品久久久久久久久久久久 | 国产农村一级国产农村 | 欧美日韩久 | 亚洲精品不卡 | 99久久久无码国产精品 | 羞羞的视频免费在线观看 | 欧美一级做a爰片免费视频 国产美女特级嫩嫩嫩bbb片 | 天堂一区二区三区 | 久久国产精品99久久久久 | 黄色网址免费在线观看 | 91视频国产精品 | 岛国av一区二区三区 | 911影院| 欧美日韩中文在线观看 | 久久精品高清视频 | 亚洲在线视频 | 中文字幕在线一区 | 四虎影视免费在线 |