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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5232|回復(fù): 2
打印 上一主題 下一主題
收起左側(cè)

單片機的溫度測量與上限和下限控制系統(tǒng)proteus仿真和源碼

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:200062 發(fā)表于 2017-5-12 20:20 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
顯示上限溫度:




顯示實時溫度:

顯示下限溫度:


原理圖:



單片機源程序如下:
  1. #include "reg51.h"
  2. #define uchar unsigned char
  3. #define uint unsigned int

  4. sbit DQ=P1^4;                //溫度數(shù)據(jù)口
  5. sbit wx1=P2^4;                //位選1
  6. sbit wx2=P2^5;                //位選2
  7. sbit wx3=P2^6;                //位選3
  8. sbit wx4=P2^7;                //位選4
  9. sbit sd=P1^2;                //范圍與顯示開關(guān)        =1        范圍
  10. sbit sj=P2^1;                //上下界切換                =1        上限
  11. sbit ss=P2^2;                //加1
  12. sbit xj=P2^3;                //減1
  13. sbit bjs=P1^0;                //上限報警
  14. sbit bjx=P1^1;                //下限報警

  15. unsigned int temp, temp1, temp2, xs;
  16. unsigned int sx = 30;
  17. unsigned int xx = 20;

  18. uchar code table[] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99,                //共陽極數(shù)碼管
  19.         0x92, 0x82, 0xf8, 0x80, 0x90, 0x88, 0x83, 0xc6};

  20. /*******延時程序*******/
  21. void delay1( unsigned int m )
  22. {        //1ms
  23.         unsigned int i, j;
  24.         for(i = m; i > 0; i--)
  25.                 for(j = 110; j > 0; j--);
  26. }

  27. void delay( unsigned int m )
  28. {        //1us
  29.         while(m--);
  30. }

  31. void Init_DS18B20()
  32. {
  33.         unsigned char x = 0;
  34.         DQ = 1;                        //DQ復(fù)位DS18B20通信端口
  35.         delay(8);                //稍作延時
  36.         DQ = 0;                        //單片機將DQ拉低
  37.         delay(80);                //精確延時 大于480us
  38.         DQ = 1;                        //拉高總線
  39.         delay(4);
  40.         x = DQ;                        //稍作延時后,如果x=0則初始化成功,x=1則初始化失敗
  41.         delay(20);
  42. }

  43. /*********DS18B20讀一個字節(jié)*********/
  44. uchar ReadOneChar()
  45. {
  46.         unsigned char i = 0;
  47.         unsigned char dat = 0;
  48.         for(i = 8; i > 0; i--)
  49.         {
  50.                 DQ = 0;                //高電平拉成低電平時讀周期開始
  51.                 dat >>= 1;
  52.                 DQ = 1;                //給脈沖信號
  53.                 if(DQ)
  54.                         dat |= 0x80;
  55.                 delay(4);
  56.         }
  57.         return dat;
  58. }

  59. /*********DS18B20寫一個字節(jié)*********/
  60. void WriteOneChar( unsigned char dat )
  61. {
  62.         unsigned char i = 0;
  63.         for(i = 8; i > 0; i--)
  64.         {
  65.                 DQ = 0;                                //從高電平拉低至低電平,寫周期開始
  66.                 DQ = dat & 0x01;        //數(shù)據(jù)的最低位先寫入
  67.                 delay(5);                        //60us到120us延時
  68.                 DQ = 1;
  69.                 dat >>= 1;                        //從最低位到最高位傳入
  70.         }
  71. }

  72. /*********讀取DS18B20當(dāng)前溫度*********/
  73. void ReadTemperature()
  74. {
  75.         unsigned char a = 0;
  76.         unsigned b = 0;
  77.         unsigned t = 0;
  78.         Init_DS18B20();
  79.         WriteOneChar( 0xCC );                //跳過讀序號列號的操作
  80.         WriteOneChar( 0x44 );                //啟動溫度轉(zhuǎn)換
  81.         delay(5);                                        //
  82.         Init_DS18B20();
  83.         WriteOneChar( 0xCC );                //跳過讀序號列號的操作
  84.         WriteOneChar( 0xBE );                //讀取溫度寄存器等(共可讀9個寄存器)前兩個就是溫度
  85.         delay(5);
  86.         a = ReadOneChar();                        //讀取溫度值低位
  87.         b = ReadOneChar();                        //讀取溫度值高位
  88.         temp1 = b << 4;                                //高8位中后三位數(shù)的值
  89.         temp1 += ((a & 0xf0) >> 4);        //低8位中的高4位值加上搞8位中后三位數(shù)的值 temp1室溫整數(shù)值
  90.         temp2 = a & 0xf0;                        //小數(shù)的值
  91.         temp = ((b*256 + a) >> 4);        //當(dāng)前采集溫度值除16得實際溫度值
  92.         xs = temp2*0.0625*10;                //小數(shù)位,若為0.5則算5來顯示
  93. }

  94. void wenduxianshi()
  95. {
  96.         wx1 = 1;
  97.         P0 = table[temp/10];                //顯示十位
  98.         delay1(1);
  99.         wx1 = 0;

  100.         wx2 = 1;
  101.         P0 = table[temp%10] + 0x80;                //顯示個位 加上0x80就顯示小數(shù)點了
  102.         delay1(1);
  103.         wx2 = 0;

  104.         wx3 = 1;
  105.         P0 = table[xs%10];                        //顯示小位
  106.         delay1(1);
  107.         wx3 = 0;

  108.         wx4 = 1;
  109.         P0 = table[12];                                //顯示C字符
  110.         delay1(1);
  111.         wx4 = 0;
  112. }

  113. void sxxianshi()
  114. {
  115.         wx1 = 1;
  116.         P0 = table[sx/10];                        //顯示十位
  117.         delay1(1);
  118.         wx1 = 0;

  119.         wx2 = 1;
  120.         P0 = table[sx%10]+0x80;                //顯示個位
  121.         delay1(1);
  122.         wx2 = 0;

  123.         wx3 = 1;
  124.         P0 = table[12];                                //顯示小位
  125.         delay1(1);
  126.         wx3 = 0;

  127.         wx4 = 1;
  128.         P0 = table[5];                                //顯示C字符
  129.         delay1(1);
  130.         wx4 = 0;
  131. }

  132. void xxxianshi()
  133. {
  134.         wx1 = 1;
  135.         P0 = table[xx/10];                        //顯示十位
  136.         delay1(1);
  137.         wx1 = 0;

  138.         wx2 = 1;
  139.         P0 = table[xx%10]+0x80;                //顯示個位
  140.         delay1(1);
  141.         wx2 = 0;

  142.         wx3 = 1;
  143.         P0 = table[12];                                //顯示小位
  144.         delay1(1);
  145.         wx3 = 0;

  146.         wx4 = 1;
  147.         P0 = table[12];                                //顯示C字符
  148.         delay1(1);
  149.         wx4 = 0;
  150. }

  151. void dsx()
  152. {
  153.         if(ss == 0){ delay1(5); if(ss == 1) sx = sx + 1; }
  154.         if(xj == 0){ delay1(5); if(xj == 1) sx = sx - 1; }
  155. }

  156. void dxx()
  157. {
  158.         if(ss == 0){ delay1(5); if(ss == 1) xx = xx + 1; }
  159.         if(xj == 0){ delay1(5); if(xj == 1) xx = xx - 1; }
  160. }

  161. void alarm()
  162. {
  163.         delay1(5);
  164.         if( temp > sx )
  165.                 bjs = 1;
  166.         if( temp < xx )
  167.                 bjx = 1;
  168. }

  169. void normal()
  170. {
  171.         if( temp > xx )
  172.                 bjx = 0;
  173.         if( temp < sx )
  174.                 bjs = 0;
  175. }

  176. void main()
  177. ……………………

  178. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼


所有資料51hei提供下載:
溫度測量與控制系統(tǒng)設(shè)計.rar (2.27 MB, 下載次數(shù): 55)


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

相關(guān)帖子

回復(fù)

使用道具 舉報

沙發(fā)
ID:82765 發(fā)表于 2017-5-14 22:51 | 只看該作者
提示: 作者被禁止或刪除 內(nèi)容自動屏蔽
回復(fù)

使用道具 舉報

板凳
ID:717308 發(fā)表于 2020-6-6 09:34 來自手機 | 只看該作者
感謝分享
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美一级欧美三级在线观看 | 亚洲黄色在线免费观看 | 成人欧美一区二区三区色青冈 | 最新伦理片 | 成人精品一区二区户外勾搭野战 | 高清视频一区二区三区 | 国产二区av | 亚洲精品视频免费观看 | 91久久精品一区二区三区 | 国产精品综合网 | 天天欧美| 美女福利视频网站 | 波多野结衣二区 | 蜜月va乱码一区二区三区 | 成人h电影在线观看 | 久久精品国产亚洲一区二区 | 亚洲免费成人av | 国产精品视频www | 国产国拍亚洲精品av | 91美女在线观看 | 久久久蜜臀国产一区二区 | 一级黄色毛片子 | 久久四虎 | 中文字幕在线一区二区三区 | 免费黄色av网站 | 国产精品免费在线 | 久久精品二区亚洲w码 | 亚洲精品免费视频 | 久久久久无码国产精品一区 | 国产免费一二三区 | 三级免费毛片 | 中文在线一区二区 | 午夜视频精品 | 超碰人人艹 | 国产精品久久久久无码av | 91亚洲国产精品 | 国产综合久久久久久鬼色 | 9191在线观看 | 国产精品视频不卡 | 欧美视频网 | 亚洲一区二区三区在线 |