找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5915|回复: 3
打印 上一主题 下一主题
收起左侧

STC15W4K单片机温控显示项目设计实战:数字温度计

[复制链接]
跳转到指定楼层
楼主
这张帖子是基于STC15W4K系列的温控显示设计;
采用lcd1602显示和ds18b20温控装置的实用设计;
如果对您有帮助,很感谢您的黑币;

数字温度计实验步骤:
1、按照正确接线方式将DS18B20芯片插到J13三芯单排母端子上,J13端口定义在开发板背面VDD/P36/GND/GND;
2、按照正确方向把LCD1602液晶屏插到开发板J7端子上;
3、MINI USB连接线给开发板通电下载程序,下载软件中内部IRC时钟选择11.0592MHZ;
4、下载程序后,LCD1602屏会显示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:                数字温度计实验                       
  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的数据/指令选择控制线
  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: ";      //要显示的内容1放入数组table
  40. uchar code table2[]="Normal  ";      //要显示的内容2放入数组table
  41. uchar code table3[]="Too low ";      //要显示的内容3放入数组table
  42. uchar code table4[]="Too high";      //要显示的内容4放入数组table
  43. uchar code table5[]="-";             //要显示的内容5放入数组table
  44. uchar code table6[]=" ";             //要显示的内容6放入数组table

  45. /**************************************
  46. 功能描述:LCD1602写命令函数
  47. 入口参数: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准备接收数据
  56.     en=1;               //使能线电平变化,命令送入1602的8位数据口
  57.     en=0;
  58. }

  59. /**************************************
  60. 功能描述:LCD1602写数据函数
  61. 入口参数:uchar dat
  62. 返回值:无
  63. ***************************************/
  64. void lcd_wdat(uchar dat)         
  65. {
  66.     rs=1;               //选择数据寄存器
  67.     rw=0;               //选择写
  68.     P0=dat;             //把要显示的数据送入P0
  69.     delay_ms(1);        //延时一小会儿,让1602准备接收数据
  70.     en=1;               //使能线电平变化,数据送入1602的8位数据口
  71.     en=0;
  72. }

  73. /**************************************
  74. 功能描述:LCD1602初始化函数
  75. 入口参数:无
  76. 返回值:无
  77. ***************************************/
  78. void lcd_init()                 
  79. {
  80.     lcd_wcom(0x38);       //8位数据,双列,5*7字形      
  81.     lcd_wcom(0x0c);       //开启显示屏,关光标,光标不闪烁
  82.     lcd_wcom(0x06);       //显示地址递增,即写一个数据后,显示位置右移一位
  83.     lcd_wcom(0x01);       //清屏
  84. }


  85. /***************************************************************************
  86. * 描  述 : 主函数
  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相关的IO口均为
  98. //      高阻态,需将这些口设置为准双向口或强推挽模式方可正常使用
  99. //相关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;        //设置P0.0~P0.7为准双向口
  103.         P1M1 = 0;        P1M0 = 0;        //设置P1.0~P1.7为准双向口
  104.         P2M1 = 0;        P2M0 = 0;        //设置P2.0~P2.7为准双向口
  105.         P3M1 = 0;        P3M0 = 0;        //设置P3.0~P3.7为准双向口
  106.         P4M1 = 0;        P4M0 = 0;        //设置P4.0~P4.7为准双向口
  107.         P5M1 = 0;        P5M0 = 0;        //设置P5.0~P5.7为准双向口
  108.        
  109.   lcd_init();           //液晶初始化
  110.   lcd_wcom(0x80);       //显示地址设为80H(即00H,)上排第一位
  111.         for(i=0;i<16;i++)     //将table1[]中的数据依次写入1602显示
  112.   {
  113.     lcd_wdat(table1[i]);           
  114.     delay_ms(20);
  115.   }
  116.        
  117.         while(1)
  118.         {
  119.                 memset(strTemp, 0, sizeof(strTemp)); //strTemp数组清零       
  120.                
  121.     fTemp = floatReadDs18B20();       //温度读取函数,带1位小数位
  122.     sprintf(strTemp, "%.01f", fTemp); //浮点数转成字符串
  123.                
  124.                 uTemp=(uchar)fTemp;
  125.                 if(uTemp<10)
  126.                 {
  127.                         lcd_wcom(0x80+0x45);    //重新设定显示地址
  128.                         lcd_wdat(table6[0]);    //将table6[]中的数据依次写入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); //重新设定显示地址
  140.                         lcd_wdat(table5[0]);           
  141.       delay_ms(20);
  142.                         lcd_wcom(0x80+0x42);
  143.                         for(j=0;j<Sign;j++)     //将strTemp[]中的数据依次写入1602显示
  144.       {
  145.         lcd_wdat(strTemp[j]);           
  146.         delay_ms(20);
  147.       }
  148.                 }
  149.                 else
  150.                 {
  151.                         lcd_wcom(0x80+0x41); //重新设定显示地址
  152.                         lcd_wdat(table6[0]);           
  153.       delay_ms(20);
  154.                         lcd_wcom(0x80+0x42); //重新设定显示地址
  155.                   for(j=0;j<Sign;j++)     //将strTemp[]中的数据依次写入1602显示
  156.       {
  157.         lcd_wdat(strTemp[j]);           
  158.         delay_ms(20);
  159.       }
  160.                 }
  161.                
  162.                 lcd_wcom(0x80+0x48);   //重新设定显示地址
  163.                 if(ReadTempFlag||(uTemp<LowTemper))    //温度过低时,蓝灯较快闪烁(间隔60mS)
  164.                 {
  165.             for(m=0;m<8;m++)     //将table3[]中的数据依次写入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黑下载附件…………
复制代码

所有资料51hei提供下载:
项目实战2 - 数字温度计(DS18B20正负温显示).rar (1.08 MB, 下载次数: 70)




分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:73202 发表于 2017-7-23 10:12 | 只看该作者
支持不错!!
回复

使用道具 举报

板凳
ID:130345 发表于 2017-8-4 18:30 | 只看该作者
值得学习
回复

使用道具 举报

地板
ID:81441 发表于 2023-3-27 09:28 | 只看该作者
学习了,这次是STC,国产芯片!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表