找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

STC15W4K單片機溫控顯示項目設(shè)計實戰(zhàn):數(shù)字溫度計

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:218519 發(fā)表于 2017-7-22 18:41 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
這張?zhí)邮腔赟TC15W4K系列的溫控顯示設(shè)計;
采用lcd1602顯示和ds18b20溫控裝置的實用設(shè)計;
如果對您有幫助,很感謝您的黑幣;

數(shù)字溫度計實驗步驟:
1、按照正確接線方式將DS18B20芯片插到J13三芯單排母端子上,J13端口定義在開發(fā)板背面VDD/P36/GND/GND;
2、按照正確方向把LCD1602液晶屏插到開發(fā)板J7端子上;
3、MINI USB連接線給開發(fā)板通電下載程序,下載軟件中內(nèi)部IRC時鐘選擇11.0592MHZ;
4、下載程序后,LCD1602屏?xí)@示18B20檢測到的實時溫度值。

備注:如果使用的DS18B20傳感器是帶延長線的,那可以將傳感器供電接到J19的VCC/GND上,信號線與J25端子的P36連接。

單片機源程序如下:
  1. /****************************************Copyright (c)****************************************************
  2. **                                       
  3. **                                 
  4. **
  5. **--------------File Info---------------------------------------------------------------------------------
  6. ** File name:                       
  7. ** Last modified Date:         
  8. ** Last Version:                  
  9. ** Descriptions:                                                       
  10. **--------------------------------------------------------------------------------------------------------
  11. ** Created by:                        FiYu
  12. ** Created date:                2016-9-8
  13. ** Version:                            1.0
  14. ** Descriptions:                數(shù)字溫度計實驗                       
  15. **--------------------------------------------------------------------------------------------------------
  16. ** Modified by:                        FiYu
  17. ** Modified date:               
  18. ** Version:                               
  19. ** Descriptions:               
  20. ** Rechecked by:                       
  21. **********************************************************************************************************/
  22. /****-----請閱讀ReadMe.txt進行實驗-----***********/
  23. #include "ds18b20.h"

  24. #define  uint unsigned int  
  25. #define  uchar unsigned char

  26. #define  LOW     0  
  27. #define  HIGH    1

  28. #define  LowTemper         5   
  29. #define  HighTemper        30

  30. /**********************
  31. 引腳別名定義
  32. ***********************/
  33. sbit rs=P2^4;        //1602的數(shù)據(jù)/指令選擇控制線
  34. sbit rw=P2^3;        //1602的讀寫控制線
  35. sbit en=P2^1;        //1602的使能控制線
  36.                
  37. sbit LED_R=P1^7;                 //紅色LED用IO口P17       
  38. sbit LED_B=P1^6;     //藍色LED用IO口P16

  39. uchar code table1[]="Current Temper: ";      //要顯示的內(nèi)容1放入數(shù)組table
  40. uchar code table2[]="Normal  ";      //要顯示的內(nèi)容2放入數(shù)組table
  41. uchar code table3[]="Too low ";      //要顯示的內(nèi)容3放入數(shù)組table
  42. uchar code table4[]="Too high";      //要顯示的內(nèi)容4放入數(shù)組table
  43. uchar code table5[]="-";             //要顯示的內(nèi)容5放入數(shù)組table
  44. uchar code table6[]=" ";             //要顯示的內(nèi)容6放入數(shù)組table

  45. /**************************************
  46. 功能描述:LCD1602寫命令函數(shù)
  47. 入口參數(shù):uchar com
  48. 返回值:無
  49. ***************************************/
  50. void lcd_wcom(uchar com)                 
  51. {
  52.     rs=0;               //選擇指令寄存器
  53.     rw=0;               //選擇寫
  54.     P0=com;             //把命令字送入P0
  55.     delay_ms(1);        //延時一小會兒,讓1602準(zhǔn)備接收數(shù)據(jù)
  56.     en=1;               //使能線電平變化,命令送入1602的8位數(shù)據(jù)口
  57.     en=0;
  58. }

  59. /**************************************
  60. 功能描述:LCD1602寫數(shù)據(jù)函數(shù)
  61. 入口參數(shù):uchar dat
  62. 返回值:無
  63. ***************************************/
  64. void lcd_wdat(uchar dat)         
  65. {
  66.     rs=1;               //選擇數(shù)據(jù)寄存器
  67.     rw=0;               //選擇寫
  68.     P0=dat;             //把要顯示的數(shù)據(jù)送入P0
  69.     delay_ms(1);        //延時一小會兒,讓1602準(zhǔn)備接收數(shù)據(jù)
  70.     en=1;               //使能線電平變化,數(shù)據(jù)送入1602的8位數(shù)據(jù)口
  71.     en=0;
  72. }

  73. /**************************************
  74. 功能描述:LCD1602初始化函數(shù)
  75. 入口參數(shù):無
  76. 返回值:無
  77. ***************************************/
  78. void lcd_init()                 
  79. {
  80.     lcd_wcom(0x38);       //8位數(shù)據(jù),雙列,5*7字形      
  81.     lcd_wcom(0x0c);       //開啟顯示屏,關(guān)光標(biāo),光標(biāo)不閃爍
  82.     lcd_wcom(0x06);       //顯示地址遞增,即寫一個數(shù)據(jù)后,顯示位置右移一位
  83.     lcd_wcom(0x01);       //清屏
  84. }


  85. /***************************************************************************
  86. * 描  述 : 主函數(shù)
  87. * 入  參 : 無
  88. * 返回值 : 無
  89. **************************************************************************/
  90. int main()
  91. {               
  92.         unsigned char i=0,j=0,m=0,n=0,k=0;
  93.         unsigned char strTemp[6],uTemp,Sign;
  94.         float fTemp;
  95.        
  96. /////////////////////////////////////////////////
  97. //注意: STC15W4K32S4系列的芯片,上電后所有與PWM相關(guān)的IO口均為
  98. //      高阻態(tài),需將這些口設(shè)置為準(zhǔn)雙向口或強推挽模式方可正常使用
  99. //相關(guān)IO: P0.6/P0.7/P1.6/P1.7/P2.1/P2.2
  100. //        P2.3/P2.7/P3.7/P4.2/P4.4/P4.5
  101. /////////////////////////////////////////////////
  102.         P0M1 = 0;        P0M0 = 0;        //設(shè)置P0.0~P0.7為準(zhǔn)雙向口
  103.         P1M1 = 0;        P1M0 = 0;        //設(shè)置P1.0~P1.7為準(zhǔn)雙向口
  104.         P2M1 = 0;        P2M0 = 0;        //設(shè)置P2.0~P2.7為準(zhǔn)雙向口
  105.         P3M1 = 0;        P3M0 = 0;        //設(shè)置P3.0~P3.7為準(zhǔn)雙向口
  106.         P4M1 = 0;        P4M0 = 0;        //設(shè)置P4.0~P4.7為準(zhǔn)雙向口
  107.         P5M1 = 0;        P5M0 = 0;        //設(shè)置P5.0~P5.7為準(zhǔn)雙向口
  108.        
  109.   lcd_init();           //液晶初始化
  110.   lcd_wcom(0x80);       //顯示地址設(shè)為80H(即00H,)上排第一位
  111.         for(i=0;i<16;i++)     //將table1[]中的數(shù)據(jù)依次寫入1602顯示
  112.   {
  113.     lcd_wdat(table1[i]);           
  114.     delay_ms(20);
  115.   }
  116.        
  117.         while(1)
  118.         {
  119.                 memset(strTemp, 0, sizeof(strTemp)); //strTemp數(shù)組清零       
  120.                
  121.     fTemp = floatReadDs18B20();       //溫度讀取函數(shù),帶1位小數(shù)位
  122.     sprintf(strTemp, "%.01f", fTemp); //浮點數(shù)轉(zhuǎn)成字符串
  123.                
  124.                 uTemp=(uchar)fTemp;
  125.                 if(uTemp<10)
  126.                 {
  127.                         lcd_wcom(0x80+0x45);    //重新設(shè)定顯示地址
  128.                         lcd_wdat(table6[0]);    //將table6[]中的數(shù)據(jù)依次寫入1602顯示        
  129.       delay_ms(20);
  130.                         Sign=3;       
  131.                 }
  132.                 else
  133.                 {
  134.                         Sign=4;
  135.                 }
  136.                
  137.                 if(ReadTempFlag)
  138.                 {
  139.                         lcd_wcom(0x80+0x41); //重新設(shè)定顯示地址
  140.                         lcd_wdat(table5[0]);           
  141.       delay_ms(20);
  142.                         lcd_wcom(0x80+0x42);
  143.                         for(j=0;j<Sign;j++)     //將strTemp[]中的數(shù)據(jù)依次寫入1602顯示
  144.       {
  145.         lcd_wdat(strTemp[j]);           
  146.         delay_ms(20);
  147.       }
  148.                 }
  149.                 else
  150.                 {
  151.                         lcd_wcom(0x80+0x41); //重新設(shè)定顯示地址
  152.                         lcd_wdat(table6[0]);           
  153.       delay_ms(20);
  154.                         lcd_wcom(0x80+0x42); //重新設(shè)定顯示地址
  155.                   for(j=0;j<Sign;j++)     //將strTemp[]中的數(shù)據(jù)依次寫入1602顯示
  156.       {
  157.         lcd_wdat(strTemp[j]);           
  158.         delay_ms(20);
  159.       }
  160.                 }
  161.                
  162.                 lcd_wcom(0x80+0x48);   //重新設(shè)定顯示地址
  163.                 if(ReadTempFlag||(uTemp<LowTemper))    //溫度過低時,藍燈較快閃爍(間隔60mS)
  164.                 {
  165.             for(m=0;m<8;m++)     //將table3[]中的數(shù)據(jù)依次寫入1602顯示
  166.       {
  167.         lcd_wdat(table3[m]);           
  168.         delay_ms(20);
  169.       }
  170.                         LED_B=LOW;
  171.                   delay_ms(60);
  172.                   LED_B=HIGH;
  173.                   delay_ms(60);
  174.                 }
  175.                 else if(uTemp>HighTemper)   //溫度過高時,紅燈較快閃爍(間隔60mS)
  176. ……………………

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

所有資料51hei提供下載:
項目實戰(zhàn)2 - 數(shù)字溫度計(DS18B20正負(fù)溫顯示).rar (1.08 MB, 下載次數(shù): 70)




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

使用道具 舉報

沙發(fā)
ID:73202 發(fā)表于 2017-7-23 10:12 | 只看該作者
支持不錯。
回復(fù)

使用道具 舉報

板凳
ID:130345 發(fā)表于 2017-8-4 18:30 | 只看該作者
值得學(xué)習(xí)
回復(fù)

使用道具 舉報

地板
ID:81441 發(fā)表于 2023-3-27 09:28 | 只看該作者
學(xué)習(xí)了,這次是STC,國產(chǎn)芯片!
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表