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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

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

[復制鏈接]
跳轉到指定樓層
樓主
本課題用一種基于單片機的數據采集系統方案,該方案根據熱敏電阻隨溫度變化而變化的特性,采用串聯分壓電路。單片機采集熱敏電阻的電壓,通過A/D轉換將模擬量電壓信號轉換成數字量電壓信號,經過查表轉換得到溫度值,控制液晶屏實時顯示溫度值。本系統中所用到的器件是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;//拉高數據端,回到初始狀態
  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 踩
回復

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精彩视频一区二区三区 | 国产真实乱对白精彩久久小说 | 一区二区三区在线免费观看 | 国产精品99999 | 日韩一区二区三区四区五区六区 | 国产精品国产精品国产专区不卡 | 成人在线免费看 | 国产精品久久久久久影视 | 97国产精品| 天天av网 | 精品国产乱码久久久久久88av | 中文字幕一区二区三区四区五区 | 天天操天天操 | 日韩欧美网 | 青青草原精品99久久精品66 | 欧美亚洲视频在线观看 | 午夜久久久久久久久久一区二区 | 黄网免费 | 国产精品中文字幕一区二区三区 | 国产福利视频网站 | 99精品国产一区二区三区 | 自拍偷拍亚洲欧美 | 高清亚洲 | 韩国精品一区二区三区 | av在线成人 | 毛片一级网站 | 日韩手机在线看片 | 青草青草久热精品视频在线观看 | 午夜影院操 | 成人在线一区二区三区 | 日本在线看片 | 久久久www| 人操人免费视频 | 亚洲天堂av在线 | 日韩在线欧美 | 黄色大片在线 | 国产欧美精品一区二区三区 | 国产一区h| 黄色一级片aaa | 亚洲人成人一区二区在线观看 | 在线看av网址 |