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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

溫度傳感器液晶顯示,既好做又超好玩

[復制鏈接]
跳轉到指定樓層
樓主


溫度傳感器液晶顯示程序:
  1. /***************   writer:shopping.w   ******************/
  2. #include <reg52.h>
  3. #include <intrins.h>
  4. #define uint unsigned int
  5. #define uchar unsigned char
  6. #define delayNOP() {_nop_();_nop_();_nop_();_nop_();}

  7. sbit DQ = P3^3;
  8. sbit LCD_RS = P2^0;
  9. sbit LCD_RW = P2^1;
  10. sbit LCD_EN = P2^2;

  11. uchar code Temp_Disp_Title[]={"Current Temp : "};
  12. uchar Current_Temp_Display_Buffer[]={" TEMP:   "};

  13. uchar code Temperature_Char[8] =
  14. {
  15.         0x0c,0x12,0x12,0x0c,0x00,0x00,0x00,0x00
  16. };

  17. uchar code df_Table[]=
  18. {
  19.         0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9
  20. };

  21. uchar CurrentT = 0;
  22. uchar Temp_Value[]={0x00,0x00};
  23. uchar Display_Digit[]={0,0,0,0};
  24. bit DS18B20_IS_OK = 1;

  25. void DelayXus(uint x)
  26. {
  27.         uchar i;
  28.         while(x--)
  29.         {
  30.                  for(i=0;i<200;i++);
  31.         }
  32. }

  33. bit LCD_Busy_Check()
  34. {
  35.         bit result;
  36.         LCD_RS = 0;
  37.         LCD_RW = 1;
  38.         LCD_EN = 1;
  39.         delayNOP();
  40.         result = (bit)(P0&0x80);
  41.         LCD_EN=0;
  42.         return result;
  43. }

  44. void Write_LCD_Command(uchar cmd)
  45. {
  46.         while(LCD_Busy_Check());
  47.         LCD_RS = 0;
  48.         LCD_RW = 0;
  49.         LCD_EN = 0;
  50.         _nop_();
  51.         _nop_();
  52.         P0 = cmd;
  53.         delayNOP();
  54.         LCD_EN = 1;
  55.         delayNOP();
  56.         LCD_EN = 0;
  57. }

  58. void Write_LCD_Data(uchar dat)
  59. {
  60.         while(LCD_Busy_Check());
  61.         LCD_RS = 1;
  62.         LCD_RW = 0;
  63.         LCD_EN = 0;
  64.         P0 = dat;
  65.         delayNOP();
  66.         LCD_EN = 1;
  67.         delayNOP();
  68.         LCD_EN = 0;
  69. }

  70. void LCD_Initialise()
  71. {
  72.         Write_LCD_Command(0x01);
  73.         DelayXus(5);
  74.         Write_LCD_Command(0x38);
  75.         DelayXus(5);
  76.         Write_LCD_Command(0x0c);
  77.         DelayXus(5);
  78.         Write_LCD_Command(0x06);
  79.         DelayXus(5);       
  80. }

  81. void Set_LCD_POS(uchar pos)
  82. {
  83.         Write_LCD_Command(pos|0x80);       
  84. }

  85. void Delay(uint x)
  86. {
  87.         while(--x);
  88. }

  89. uchar Init_DS18B20()
  90. {
  91.         uchar status;
  92.         DQ = 1;
  93.         Delay(8);
  94.         DQ = 0;
  95.         Delay(90);
  96.         DQ = 1;
  97.         Delay(8);
  98.         DQ = 1;
  99.         return status;
  100. }

  101. uchar ReadOneByte()
  102. {
  103.         uchar i,dat=0;
  104.         DQ = 1;
  105.         _nop_();
  106.         for(i=0;i<8;i++)
  107.         {
  108.                  DQ = 0;
  109.                 dat >>= 1;
  110.                 DQ = 1;
  111.                 _nop_();
  112.                 _nop_();
  113.                 if(DQ)
  114.                         dat |= 0X80;
  115.                 Delay(30);
  116.                 DQ = 1;
  117.         }
  118.         return dat;
  119. }

  120. void WriteOneByte(uchar dat)
  121. {
  122.         uchar i;
  123.         for(i=0;i<8;i++)
  124.         {
  125.                  DQ = 0;
  126.                 DQ = dat& 0x01;
  127.                 Delay(5);
  128.                 DQ = 1;
  129.                 dat >>= 1;
  130.         }
  131. }

  132. void Read_Temperature()
  133. {
  134.         if(Init_DS18B20()==1)
  135.                 DS18B20_IS_OK=0;
  136.         else
  137.         {
  138.                 WriteOneByte(0xcc);
  139.                 WriteOneByte(0x44);
  140.                 Init_DS18B20();
  141.                 WriteOneByte(0xcc);
  142.                 WriteOneByte(0xbe);
  143.                 Temp_Value[0] = ReadOneByte();
  144.                 Temp_Value[1] = ReadOneByte();
  145.                 DS18B20_IS_OK=1;       
  146.         }       
  147. }

  148. void Display_Temperature()
  149. {
  150.         uchar i;
  151.         uchar t = 150, ng = 0;
  152.         if((Temp_Value[1]&0xf8)==0xf8)
  153.         {
  154.                  Temp_Value[1] = ~Temp_Value[1];
  155.                 Temp_Value[0] = ~Temp_Value[0]+1;
  156.                 if(Temp_Value[0]==0x00)
  157.                         Temp_Value[1]++;
  158.                 ng = 1;       
  159.         }
  160.         Display_Digit[0] = df_Table[Temp_Value[0]&0x0f];
  161.         CurrentT = ((Temp_Value[0]&0xf0)>>4) | ((Temp_Value[1]&0x07)<<4);
  162.         Display_Digit[3] = CurrentT/100;
  163.         Display_Digit[2] = CurrentT%100/10;
  164.         Display_Digit[1] = CurrentT%10;
  165.         Current_Temp_Display_Buffer[11] = Display_Digit[0] + '0';
  166.         Current_Temp_Display_Buffer[10] = '.';
  167.         Current_Temp_Display_Buffer[9]  = Display_Digit[1] + '0';
  168.         Current_Temp_Display_Buffer[8]  = Display_Digit[2] + '0';
  169.         Current_Temp_Display_Buffer[7]  = Display_Digit[3] + '0';
  170.         if(Display_Digit[3] == 0)
  171.                 Current_Temp_Display_Buffer[7]  = ' ';
  172.         if(Display_Digit[2] == 0&&Display_Digit[3]==0)
  173.                 Current_Temp_Display_Buffer[8]  = ' ';
  174.         if(ng)
  175.         {
  176.                  if(Current_Temp_Display_Buffer[8]  == ' ')
  177.                         Current_Temp_Display_Buffer[8]  = '-';
  178.                 else if(Current_Temp_Display_Buffer[7]  == ' ')
  179.                         Current_Temp_Display_Buffer[7]  = '-';
  180.                 else
  181.                         Current_Temp_Display_Buffer[6]  = '-';
  182.         }
  183.         Set_LCD_POS(0x00);
  184.         for(i=0;i<16;i++)
  185.         {
  186.                 Write_LCD_Data(Temp_Disp_Title[i]);        
  187.         }
  188.         Set_LCD_POS(0x40);
  189.         for(i=0;i<16;i++)
  190.         {
  191.                 Write_LCD_Data(Current_Temp_Display_Buffer[i]);        
  192.         }               
  193.         Set_LCD_POS(0x4d);
  194.         Write_LCD_Data(0x00);
  195.         Set_LCD_POS(0x4e);
  196.         Write_LCD_Data('C');
  197. }

  198. void main()
  199. {
  200.         LCD_Initialise();
  201.         Read_Temperature();
  202.         Delay(50000);
  203.         Delay(50000);
  204.         while(1)
  205.         {
  206.                  Read_Temperature();
  207.                 if(DS18B20_IS_OK)
  208.                         Display_Temperature();
  209.                 DelayXus(100);               
  210.         }

  211. }

復制代碼



DS18B20溫度傳感器實驗.rar

42.02 KB, 下載次數: 9, 下載積分: 黑幣 -5

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 在线观看一区 | 久久成人国产 | 日韩超碰在线 | 欧美一区不卡 | 国产日产精品一区二区三区四区 | 国产日韩精品一区二区三区 | a免费观看| 午夜免费精品视频 | 精品色| 91久久久久 | 国产精品高清在线 | 久久99精品久久久久久 | 一区二区免费 | 日韩精品免费一区二区在线观看 | 国产一区三区在线 | 亚洲视频手机在线 | 一区在线观看视频 | 亚洲国产精品美女 | 在线观看中文视频 | 久久综合久久综合久久综合 | 精品久久久久久亚洲综合网 | 91大神在线看 | 亚洲av毛片 | 色综合视频 | 亚洲视频在线播放 | 99久久久国产精品 | 亚洲人人 | 国产精品日韩在线 | 手机av免费在线 | 欧美亚洲国产一区二区三区 | 在线欧美视频 | 天天天操 | 国产亚洲精品久久久久久豆腐 | 伊人伊人伊人 | 日皮视频免费 | 欧美中文字幕一区二区三区亚洲 | 日韩一区精品 | 国产视频久久 | 91精品久久久久久久久 | 91视视频在线观看入口直接观看 | 日韩午夜在线播放 |