欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7325|回復: 4
收起左側

基于熱敏電阻的單片機溫度測量系統設計源碼與電路圖

[復制鏈接]
ID:308992 發表于 2018-4-16 09:33 | 顯示全部樓層 |閱讀模式
本課題用一種基于單片機的數據采集系統方案,該方案根據熱敏電阻隨溫度變化而變化的特性,采用串聯分壓電路。單片機采集熱敏電阻的電壓,通過A/D轉換將模擬量電壓信號轉換成數字量電壓信號,經過查表轉換得到溫度值,控制液晶屏實時顯示溫度值。本系統中所用到的器件是STC89C52單片機、NTC熱敏電阻和LCD1602液晶顯示屏。

原理圖如下

圖1 總體電路原理圖

圖1 總體電路原理圖


單片機源程序如下:
  1. #include<reg52.h>
  2. #include<intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. sbit rs=P0^5;
  6. sbit rw=P0^6;
  7. sbit e=        P0^7;
  8. sbit ADCS=P1^0;
  9. sbit ADCLK=P1^1;
  10. sbit ADDI=P1^2;
  11. sbit ADDO=P1^2;
  12. uchar code tab3[]="Low-temperature ";  
  13. uchar code tab4[]="Over-temperature";
  14. uchar code tab5[]="     Error      ";
  15. uchar code tab6[]="  Temp:";
  16. uchar code tab7[]="     Normal     ";
  17. uchar code tab1[]="0123456789";
  18. uchar code tab2[]=
  19.           {79,78,77,76,75,74,73,72,                   //溫度補償表
  20.            71,70,69,68,67,67,66,65,
  21.            64,63,63,62,61,60,60,59,
  22.            58,58,57,56,56,55,54,54,
  23.            53,53,52,52,51,50,50,49,
  24.            49,48,48,47,47,46,46,45,
  25.            45,44,44,43,43,43,42,42,
  26.            41,41,40,40,39,39,39,38,
  27.            38,37,37,36,36,36,35,35,
  28.            34,34,34,33,33,33,32,32,
  29.            31,31,31,30,30,30,29,29,
  30.            28,28,28,27,27,27,26,26,
  31.            26,26,25,25,24,24,23,23,
  32.            23,22,22,22,21,21,21,20,
  33.            20,20,19,19,19,18,18,18,
  34.            17,17,17,16,16,16,15,15,
  35.            15,14,14,13,13,13,12,12,
  36.            12,11,11,11,10,10,10,9,
  37.            9,9,8,8,7,7,7,6,
  38.            6,6,5,5,4,4,4,3,
  39.            3,3,2,2,1,1,1,0,
  40.            0,1,1,2,2,2,3,3,
  41.            4,4,5,5,6,6,7,7,
  42.            8,8,9,9,10,10,11,11,
  43.            12,12,13,14,15,15,16,17,
  44.            17,18,19,19,20};
  45. uint ad,ad1;
  46. //*********延時50us*t*******************
  47. void delay_50us(uint t)
  48. {
  49.         uchar j,z;
  50.         for(z=t;z>0;z--)
  51.                 for(j=19;j>0;j--);
  52. }
  53. //**************************************
  54. //**********延時1ms*z*******************
  55. void delay(uint z)
  56. {
  57.     uint x,y;
  58.     for(x=z;x>0;x--)
  59.         for(y=110;y>0;y--);
  60. }
  61. //**************************************
  62. //*********寫指令****************
  63. void write_com(uchar com1)
  64. {
  65.         e=0;
  66.         rs=0;
  67.         rw=0;
  68.         P2=com1;
  69.         delay_50us(10);
  70.     e=1;
  71.         delay_50us(20);
  72.         e=0;  
  73. }
  74. //**********寫數據*******************
  75. void write_data(uchar dat1)
  76. {
  77.     e=0;
  78.     rs=1;
  79.     rw=0;
  80.     P2=dat1;
  81.     delay_50us(10);
  82.     e=1;
  83.     delay_50us(20);
  84.     e=0;        
  85. }
  86. //*****液晶初始化*******************
  87. void lcd1602init()
  88. {
  89.         delay_50us(300);
  90.         write_com(0x38);
  91.         write_com(0x08);
  92.         write_com(0x01);
  93.     write_com(0x06);
  94.         write_com(0x0c);
  95. }
  96. //***********AD轉換模塊**************
  97. uint ADC0832(uchar channel)
  98. {
  99.         uchar i;
  100.         uint dat=0;
  101.         uchar ndat=0;
  102.         if(channel==0)channel=2;
  103.         if(channel==1)channel=3;
  104.         ADDI=1;
  105.         _nop_();
  106.         _nop_();
  107.         ADCS=0;//拉低CS端
  108.         _nop_();
  109.         _nop_();
  110.         ADCLK=1;//拉高CLK端
  111.         _nop_();
  112.         _nop_();
  113.         ADCLK=0;//拉低CLK端,形成下降沿1
  114.         _nop_();
  115.         _nop_();
  116.         ADCLK=1;//拉高CLK端
  117.         ADDI=channel&0x1;
  118.         _nop_();
  119.         _nop_();
  120.         ADCLK=0;//拉低CLK端,形成下降沿2
  121.         _nop_();
  122.         _nop_();
  123.         ADCLK=1;//拉高CLK端
  124.         ADDI=(channel>>1)&0x1;
  125.         _nop_();
  126.         _nop_();
  127.         ADCLK=0;//拉低CLK端,形成下降沿3
  128.         ADDI=1;//控制命令結束
  129.         _nop_();
  130.         _nop_();
  131.         dat=0;
  132.         for(i=0;i<8;i++)
  133.         {
  134.                 dat|=ADDO;//收數據
  135.                    ADCLK=1;
  136.                    _nop_();
  137.                    _nop_();
  138.                    ADCLK=0;//形成一次時鐘脈沖
  139.             _nop_();
  140.             _nop_();
  141.             dat<<=1;
  142.             if(i==7)dat|=ADDO;
  143.         }
  144.         for(i=0;i<8;i++)
  145.         {               
  146.             ndat>>=1;
  147.                 if(ADDO==1)
  148.                 ndat|=0x80;
  149.             ADCLK=1;
  150.             _nop_();
  151.             _nop_();
  152.             ADCLK=0;//形成一次時鐘脈沖
  153.             _nop_();
  154.             _nop_();
  155.         }
  156.         
  157.         ADCS=1;//拉低CS端
  158.         ADCLK=0;//拉低CLK端
  159.         ADDO=1;//拉高數據端,回到初始狀態
  160.     if(dat==ndat)
  161.         {
  162.             return(ndat);
  163.         }
  164.         else
  165.         {
  166.                 return(0x00);
  167.         }           
  168. }

  169. //**************顯示模塊***********************
  170. void disp()
  171. {
  172.      ad1=ad-29;
  173.          write_com(0x80);
  174.          if(ad<29)
  175.          {
  176.               uchar i;
  177.                   for(i=0;i<16;i++)
  178.                   {
  179.                           write_data(tab4[i]);
  180.                   }
  181.                   write_com(0x80+0x40);
  182.                    for(i=0;i<16;i++)
  183.                   {
  184.                           write_data(tab5[i]);
  185.                   }               
  186.          }
  187.                   else if(ad>233)
  188.          {
  189.                    uchar i;
  190.                   for(i=0;i<16;i++)
  191.                   {
  192.                           write_data(tab3[i]);
  193.                   }        
  194.                    write_com(0x80+0x40);
  195.                    for(i=0;i<16;i++)
  196.                   {
  197.                           write_data(tab5[i]);
  198.                   }               
  199.          }                 
  200.          else if(ad>=29&&ad<=233)
  201.          {           
  202.               uchar i;
  203.                   for(i=0;i<16;i++)
  204.                   {
  205.                           write_data(tab7[i]);
  206.                   }        
  207.                   write_com(0x80+0x40);
  208.                   for(i=0;i<7;i++)
  209.                           write_data(tab6[i]);                        
  210.                    if(ad>197)
  211.                   {
  212.                             write_data('-');
  213.                           write_data(tab1[(tab2[ad1])/10]);
  214.                           write_data(tab1[(tab2[ad1])%10]);        
  215.                   }
  216.                   else
  217.                   {
  218.                           write_data(' ');
  219.                           write_data(tab1[tab2[ad1]/10]);
  220.                           write_data(tab1[tab2[ad1]%10]);
  221.                   }
  222.                   write_data(0xdf);                                 //顯示溫度符號
  223.                  write_data('C');        
  224.          }
  225. }
  226. //***************主函數***********************
  227. void main()
  228. {
  229.         lcd1602init();                   //液晶初始化
  230.         while(1)
  231.         {
  232.                 ad=ADC0832(0);           //讀取溫度值
  233.                 disp();                  //調用顯示程序
  234.         }
  235. }
復制代碼

完整的Word格式文檔51黑下載地址:
基于單片機的溫度測量儀的設計.docx (495.57 KB, 下載次數: 142)



回復

使用道具 舉報

ID:353425 發表于 2018-6-17 20:10 | 顯示全部樓層
實用不過你用的是差分還是單通道
回復

使用道具 舉報

ID:669969 發表于 2020-1-19 14:52 來自觸屏版 | 顯示全部樓層
為什么液晶顯示不出來啊
回復

使用道具 舉報

ID:741037 發表于 2020-4-29 16:29 | 顯示全部樓層
很棒的 很實用
回復

使用道具 舉報

ID:763026 發表于 2020-5-28 09:15 | 顯示全部樓層
好兄弟,led怎么不亮
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表