找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6602|回复: 2
收起左侧

LCD1602显示+单片机串口接收温度程序

[复制链接]
ID:212279 发表于 2017-6-18 15:36 | 显示全部楼层 |阅读模式
      想学习单片机的朋友,记得来看哦
0.png 0.png

单片机源程序如下:
  1. /*******************************************************************************
  2. *                 
  3. *                                        普中科技
  4. --------------------------------------------------------------------------------
  5. * 实 验 名                 : 18B20温度显示试验
  6. * 实验说明       : LCD1602显示温度值,并且将温度值通过串口发送到电脑上。
  7. * 连接方式       : 见连接图
  8. * 注    意                 :
  9. *******************************************************************************/

  10. #include<reg51.h>
  11. #include"lcd.h"
  12. #include"temp.h"

  13. uchar CNCHAR[6] = "摄氏度";
  14. void LcdDisplay(int);
  15. void UsartConfiguration();

  16. /*******************************************************************************
  17. * 函数名         : main
  18. * 函数功能                   : 主函数
  19. * 输入           : 无
  20. * 输出                  : 无
  21. *******************************************************************************/

  22. void main()
  23. {
  24.         UsartConfiguration();
  25.         LcdInit();                         //初始化LCD1602
  26.         LcdWriteCom(0x88);         //写地址 80表示初始地址
  27.         LcdWriteData('C');
  28.         while(1)
  29.         {
  30.                 LcdDisplay(Ds18b20ReadTemp());
  31.         }
  32. }

  33. /*******************************************************************************
  34. * 函数名         : LcdDisplay()
  35. * 函数功能                   : LCD显示读取到的温度
  36. * 输入           : v
  37. * 输出                  : 无
  38. *******************************************************************************/

  39. void LcdDisplay(int temp)          //lcd显示
  40. {
  41.    
  42.           unsigned char i, datas[] = {0, 0, 0, 0, 0}; //定义数组
  43.         float tp;  
  44.         if(temp< 0)                                    //当温度值为负数
  45.           {
  46.                   LcdWriteCom(0x80);                //写地址 80表示初始地址
  47.                 SBUF='-';               //将接收到的数据放入到发送寄存器
  48.                 while(!TI);                                 //等待发送数据完成
  49.                 TI=0;                                                 //清除发送完成标志位
  50.             LcdWriteData('-');               //显示负
  51.                 //因为读取的温度是实际温度的补码,所以减1,再取反求出原码
  52.                 temp=temp-1;
  53.                 temp=~temp;
  54.                 tp=temp;
  55.                 temp=tp*0.0625*100+0.5;       
  56.                 //留两个小数点就*100,+0.5是四舍五入,因为C语言浮点数转换为整型的时候把小数点
  57.                 //后面的数自动去掉,不管是否大于0.5,而+0.5之后大于0.5的就是进1了,小于0.5的就
  58.                 //算由?.5,还是在小数点后面。

  59.           }
  60.         else
  61.           {                       
  62.                   LcdWriteCom(0x80);                //写地址 80表示初始地址
  63.             LcdWriteData('+');                 //显示正
  64.                 SBUF='+';//将接收到的数据放入到发送寄存器
  65.                 while(!TI);                                 //等待发送数据完成
  66.                 TI=0;                                                 //清除发送完成标志位
  67.                 tp=temp;//因为数据处理有小数点所以将温度赋给一个浮点型变量
  68.                 //如果温度是正的那么,那么正数的原码就是补码它本身
  69.                 temp=tp*0.0625*100+0.5;       
  70.                 //留两个小数点就*100,+0.5是四舍五入,因为C语言浮点数转换为整型的时候把小数点
  71.                 //后面的数自动去掉,不管是否大于0.5,而+0.5之后大于0.5的就是进1了,小于0.5的就
  72.                 //算加上0.5,还是在小数点后面。
  73.         }
  74.         datas[0] = temp / 10000;
  75.         datas[1] = temp % 10000 / 1000;
  76.         datas[2] = temp % 1000 / 100;
  77.         datas[3] = temp % 100 / 10;
  78.         datas[4] = temp % 10;

  79.         LcdWriteCom(0x82);                    //写地址 80表示初始地址
  80.         LcdWriteData('0'+datas[0]); //百位
  81.         SBUF = '0'+datas[0];        //将接收到的数据放入到发送寄存器
  82.         while (!TI);                            //等待发送数据完成
  83.         TI = 0;
  84.        
  85.         LcdWriteCom(0x83);                    //写地址 80表示初始地址
  86.         LcdWriteData('0'+datas[1]); //十位
  87.         SBUF = '0'+datas[1];        //将接收到的数据放入到发送寄存器
  88.         while (!TI);                            //等待发送数据完成
  89.         TI = 0;

  90.         LcdWriteCom(0x84);                    //写地址 80表示初始地址
  91.         LcdWriteData('0'+datas[2]); //个位
  92.         SBUF = '0'+datas[2];        //将接收到的数据放入到发送寄存器
  93.         while (!TI);                            //等待发送数据完成
  94.         TI = 0;

  95.         LcdWriteCom(0x85);                //写地址 80表示初始地址
  96.         LcdWriteData('.');                 //显示 ‘.’
  97.         SBUF = '.';             //将接收到的数据放入到发送寄存器
  98.         while (!TI);                        //等待发送数据完成
  99.         TI = 0;

  100.         LcdWriteCom(0x86);                    //写地址 80表示初始地址
  101.         LcdWriteData('0'+datas[3]); //显示小数点  
  102.         SBUF = '0'+datas[3];        //将接收到的数据放入到发送寄存器
  103.         while (!TI);                            //等待发送数据完成
  104.         TI = 0;

  105.         LcdWriteCom(0x87);                    //写地址 80表示初始地址
  106.         LcdWriteData('0'+datas[4]); //显示小数点
  107.         SBUF = '0'+datas[4];        //将接收到的数据放入到发送寄存器
  108.         while (!TI);                            //等待发送数据完成
  109.         TI = 0;
  110.         for(i=0; i<6; i++)
  111.         {
  112.                  SBUF = CNCHAR[i];       //将接收到的数据放入到发送寄存器
  113.                 while (!TI);                //等待发送数据完成
  114.                 TI = 0;
  115.         }

  116.          
  117. }
  118. /*******************************************************************************
  119. ……………………

  120. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
LCD1602显示+串口接收温度.rar (1.28 MB, 下载次数: 166)

评分

参与人数 1黑币 +1 收起 理由
优伶 + 1 赞一个!

查看全部评分

回复

使用道具 举报

ID:470508 发表于 2019-3-2 19:50 | 显示全部楼层
厉害,点赞
回复

使用道具 举报

ID:106422 发表于 2019-3-2 20:23 | 显示全部楼层
顶帖,学习了!
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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