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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 3524|回復(fù): 0
收起左側(cè)

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

[復(fù)制鏈接]
ID:262 發(fā)表于 2016-3-11 22:42 | 顯示全部樓層 |閱讀模式
1.png 0.png

溫度傳感器液晶顯示程序:
  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. }

復(fù)制代碼



DS18B20溫度傳感器實(shí)驗(yàn).rar

42.02 KB, 下載次數(shù): 9, 下載積分: 黑幣 -5

相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产无遮挡又黄又爽又色 | 午夜色婷婷 | 国产自产21区| 久久精品99久久久久久 | 完全免费av| 国产91av视频| 91亚洲国产成人精品性色 | 亚洲欧美国产毛片在线 | 欧美日韩免费在线 | 午夜免费av | 国产区一区二区 | a级片网站| 97国产视频| 九九热视频在线 | 色视频www在线播放国产人成 | 国产一区二区欧美 | 欧美一区在线视频 | 欧美午夜精品一区二区三区 | 最近中文字幕在线 | 日韩在线专区 | 三上悠亚激情av一区二区三区 | 91精品久久久久 | 91性高潮久久久久久久久 | 91福利网| 天天操免费视频 | 五月天婷婷网站 | 正在播放国产精品 | 欧美成人精品欧美一级私黄 | 国产一区二区视频在线观看 | 免费成人小视频 | 免费av网站在线观看 | 伊人国产女 | 国产一区不卡 | av网站免费观看 | 国产成人在线免费视频 | 欧美a级大片 | 国产第四页 | 国产精品久久久久久久久久久久午夜片 | 国产日韩欧美在线 | 国产精品爽爽爽 | 亚洲精品黄色 |