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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

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

[復制鏈接]
跳轉到指定樓層
樓主
ID:308992 發(fā)表于 2018-4-16 09:33 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
本課題用一種基于單片機的數據采集系統(tǒng)方案,該方案根據熱敏電阻隨溫度變化而變化的特性,采用串聯分壓電路。單片機采集熱敏電阻的電壓,通過A/D轉換將模擬量電壓信號轉換成數字量電壓信號,經過查表轉換得到溫度值,控制液晶屏實時顯示溫度值。本系統(tǒng)中所用到的器件是STC89C52單片機、NTC熱敏電阻和LCD1602液晶顯示屏。

原理圖如下


單片機源程序如下:
  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;//拉高數據端,回到初始狀態(tài)
  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)



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

使用道具 舉報

沙發(fā)
ID:353425 發(fā)表于 2018-6-17 20:10 | 只看該作者
實用不過你用的是差分還是單通道
回復

使用道具 舉報

板凳
ID:669969 發(fā)表于 2020-1-19 14:52 來自手機 | 只看該作者
為什么液晶顯示不出來啊
回復

使用道具 舉報

地板
ID:741037 發(fā)表于 2020-4-29 16:29 | 只看該作者
很棒的 很實用
回復

使用道具 舉報

5#
ID:763026 發(fā)表于 2020-5-28 09:15 | 只看該作者
好兄弟,led怎么不亮
回復

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲精品一区在线观看 | 欧美一级二级三级视频 | 91在线精品视频 | 精久久 | 在线免费观看a级片 | 成人黄色电影在线观看 | av一区二区在线观看 | jlzzjlzz欧美大全 | 免费看国产片在线观看 | 亚洲视频免费观看 | 日韩成人免费av | 91久久精品国产 | 国产精品毛片一区二区在线看 | 99re在线观看 | 国产在线永久免费 | 一区二区福利视频 | 中文字幕一区二区三区在线乱码 | 亚洲成人免费视频在线观看 | av天天干| 激情欧美日韩一区二区 | 国产三级电影网站 | 草樱av| 日本精品久久久久久久 | 91精品观看 | 天天草天天干 | 日韩在线视频网址 | 亚洲+变态+欧美+另类+精品 | 天天干天天操天天爽 | 香蕉91| www成年人视频 | 欧美激情精品久久久久久 | 午夜看电影在线观看 | 天天综合久久网 | 国产精品成人一区 | 欧美a在线 | 欧美日韩久久精品 | 91中文字幕 | 综合久久99| 9久久婷婷国产综合精品性色 | 欧美日韩在线精品 | 视频一区 国产精品 |