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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

DS1621溫度傳感器單片機代碼+Proteus仿真實驗

[復制鏈接]
跳轉到指定樓層
樓主
ID:442810 發表于 2018-12-13 11:41 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
DS1621溫度傳感器仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機源程序如下:
  1. /***************   writer:shopping.w   ******************/
  2. #include <reg52.h>
  3. #include <intrins.h>
  4. #define uint unsigned int
  5. #define uchar unsigned char
  6. bit I2C_Busy, NO_Ack,Bus_Fault,point;

  7. uchar bdata a;
  8. sbit LSB = a^0;
  9. sbit MSB = a^7;
  10. sbit SDA = P3^3;
  11. sbit SCL = P3^2;
  12. uchar Array[] = {'0','1','2','3','4','5','6','7','8','9'};
  13. uchar command_data[]=
  14. {
  15.         0xac,0x00,0xee,0xa1,0x00,0x00,0xa2,0x00,0x00,0xaa
  16. };
  17. uchar Prompt[]="Waiting for a while...\r";
  18. uchar i;
  19. void DelayMS(uint ms)
  20. {
  21.         uchar i;
  22.         while(ms--)
  23.         {
  24.                  for(i=0;i<120;i++);
  25.         }
  26. }

  27. void SendStop()
  28. {
  29.         SDA = 0;
  30.         SCL = 1;
  31.         _nop_();
  32.         SDA = 1;
  33.         I2C_Busy = 0;
  34. }

  35. void SendByte(uchar wd)
  36. {
  37.         uchar i;
  38.         a = wd;
  39.         for(i=0;i<8;i++)
  40.         {
  41.                  SCL = 0;
  42.                 _nop_();
  43.                 _nop_();
  44.                 SDA = MSB;
  45.                 a <<= 1;
  46.                 _nop_();
  47.                 _nop_();
  48.                 SCL = 1;
  49.                 _nop_();
  50.                 _nop_();
  51.                 SCL = 0;
  52.         }
  53.         SDA = 1;
  54.         SCL = 1;
  55.         _nop_();
  56.         _nop_();

  57.         if(!SDA)
  58.         {
  59.                  SCL = 0;
  60.                 _nop_();
  61.                 _nop_();
  62.         }
  63.         else
  64.         {
  65.                  NO_Ack = 1;
  66.                 SCL = 0;
  67.                 _nop_();
  68.                 _nop_();
  69.         }
  70. }

  71. void Master(uchar slave_addr)
  72. {

  73.         I2C_Busy = 1;
  74.         NO_Ack = 0;
  75.         Bus_Fault = 0;
  76.         if(!SCL || !SDA)
  77.                 Bus_Fault = 1;
  78.         else
  79.         {
  80.                  SDA = 0;
  81.                 _nop_();
  82.                 _nop_();
  83.                 SCL = 0;
  84.                 _nop_();
  85.                 _nop_();
  86.                 SendByte(slave_addr);
  87.         }
  88. }

  89. uchar RecvByte(uchar cnt)
  90. {
  91.         uchar i,rcv_data;
  92.         for(i=0;i<8;i++)
  93.         {
  94.                  SDA = 1;
  95.                 SCL = 1;
  96.                 _nop_();
  97.                 LSB = SDA;
  98.                 if(i<7)
  99.                         a <<= 1;
  100.                 _nop_();
  101.                 SCL = 0;
  102.                 _nop_();
  103.         }
  104.        
  105.         if(cnt == 1)
  106.                 SDA = 1;
  107.         else
  108.                 SDA = 0;
  109.         SCL = 1;
  110.         _nop_();
  111.         SCL = 0;
  112.         SDA = 1;
  113.         _nop_();
  114.         rcv_data = a;
  115.         return rcv_data;       
  116. }

  117. void SendData(uchar slave_address,uchar start,uchar end)
  118. {
  119.         Master(slave_address);
  120.         for(i=start;i<=end;i++)
  121.                 SendByte(command_data[i]);       
  122.         SendStop();
  123. }

  124. void InitialiseSerialPort()
  125. {
  126.         TMOD = 0x20;
  127.         TH1  = 0xfd;
  128.         SCON = 0x50;
  129.         TR1  = 1;
  130. }

  131. void SendCharToSerialPort(uchar ch)
  132. {
  133.         SBUF = ch;
  134.         while(!TI);
  135.         TI = 0;
  136. }

  137. void SendTemperatureToSerialPort(uchar val)
  138. {
  139.         if(val>200)
  140.         {
  141.                  val = 255-val;
  142.                 SendCharToSerialPort('-');
  143.                 if(!point)
  144.                         val+=1;
  145.         }
  146.         SendCharToSerialPort(Array[(val/10)/10]);
  147.         SendCharToSerialPort(Array[(val/10)%10]);
  148.         SendCharToSerialPort(Array[val%10]);
  149.         SendCharToSerialPort('.');
  150.         if(point)
  151.                 SendCharToSerialPort('5');
  152.         else
  153.                 SendCharToSerialPort('0');
  154.         SendCharToSerialPort(' ');
  155.         SendCharToSerialPort('C');
  156.         SendCharToSerialPort('\r');       
  157. }

  158. void SetTemperatureLimit(uchar HI,uchar LO)
  159. {
  160.         command_data[4] = HI;
  161.         command_data[5]        = 0;
  162.         command_data[7] = LO;
  163.         command_data[8] = 0;
  164.         SendData(0x90,3,5);
  165.         DelayMS(10);
  166.         SendData(0x90,6,8);       
  167. }

  168. void StartConversion()
  169. {
  170.         SendData(0x90,2,2);
  171.         DelayMS(750);
  172. }

  173. uchar ReadTemp()
  174. {
  175.         uchar d;
  176.         SendData(0x90,9,9);
  177.         Master(0x91);
  178.         d = RecvByte(0);
  179.         point = RecvByte(1)>>7;
  180.         SendStop();
  181.         return d;
  182. }

  183. void WriteConfig(uchar c)
  184. {
  185.         command_data[1] = c;
  186.         SendData(0x90,0,1);               
  187. }

  188. void main()
  189. {
  190.         uchar i;
  191.            InitialiseSerialPort();
  192.         while(Prompt[i]!='\0')
  193.                 SendCharToSerialPort(Prompt[i++]);
  194.         WriteConfig(0x02);
  195.         StartConversion();
  196.         SetTemperatureLimit(40,35);
  197.         while(1)
  198.         {
  199.                  DelayMS(50);
  200.                 SendTemperatureToSerialPort(ReadTemp());
  201.         }       
  202. }
復制代碼

所有資料51hei提供下載:
溫度傳感器實驗(DS1621).rar (40.67 KB, 下載次數: 78)


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

使用道具 舉報

沙發
ID:555486 發表于 2019-6-5 11:35 | 只看該作者
protues 沒有大圖嗎
回復

使用道具 舉報

板凳
ID:453180 發表于 2019-7-1 13:16 | 只看該作者
仿真全打不開

回復

使用道具 舉報

地板
ID:575682 發表于 2019-7-1 15:06 來自手機 | 只看該作者
學習~感謝樓主~
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 自拍偷拍亚洲一区 | 狠狠干美女 | 欧洲精品在线观看 | 精品熟人一区二区三区四区 | 欧美中文字幕在线观看 | 欧美一区免费 | 欧美高清hd | 久久久精 | 久久久久久精 | 日韩精品中文字幕在线 | 免费一区二区 | 一区二区三区四区视频 | 色综合一区二区 | 精品欧美乱码久久久久久 | 日本三级做a全过程在线观看 | 色播视频在线观看 | 国产在线不卡视频 | 国产精品18hdxxxⅹ在线 | 天天干国产 | 欧美成人精品欧美一级 | 日日操av| 中文字幕第二区 | 一区二区三区四区毛片 | 国产精品18hdxxxⅹ在线 | 日韩欧美三区 | 国产最新视频在线 | 综合久久av | 成人在线播放网站 | 亚洲免费视频在线观看 | 九九热这里只有精品在线观看 | 美女久久| 亚洲欧美日韩电影 | 久久99深爱久久99精品 | 精品欧美二区 | 久久精品一区二区 | 亚洲国产精品一区二区第一页 | 亚洲区一| xxxxxx国产| 天天操天天射综合 | 国产精品久久久久一区二区三区 | 国产三级一区二区 |