找回密码
 立即注册

QQ登录

只需一步,快速开始

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

求用数码管显示温度值,并且将温度值通过单片机串口发送到电脑上怎么完善

[复制链接]
跳转到指定楼层
楼主
ID:461594 发表于 2019-1-4 10:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. #include<reg51.h>
  2. #include"temp.h"

  3. //--定义使用的IO--//
  4. #define GPIO_DIG P0

  5. sbit LSA=P2^2;
  6. sbit LSB=P2^3;
  7. sbit LSC=P2^4;

  8. //--定义全局变量
  9. unsigned char code DIG_CODE[17]={
  10. 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
  11. 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
  12. //0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F的显示码
  13. unsigned char DisplayData[8];
  14. //用来存放要显示的8位数的值

  15. //--声明全局函数--//
  16. void LcdDisplay(int);
  17. void DigDisplay();
  18. void UsartConfiguration();
  19. /*******************************************************************************
  20. * 函 数 名         : main
  21. * 函数功能           : 主函数
  22. * 输    入         : 无
  23. * 输    出         : 无
  24. *******************************************************************************/

  25. void main()
  26. {
  27.     while(1)
  28.     {
  29.         LcdDisplay(Ds18b20ReadTemp());
  30.     }
  31. }

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

  38. void LcdDisplay(int temp)      //lcd显示
  39. {
  40.        float tp;  
  41.     if(temp< 0)                //当温度值为负数
  42.       {
  43.         DisplayData[0] = 0x40;
  44.         //因为读取的温度是实际温度的补码,所以减1,再取反求出原码
  45.         temp=temp-1;
  46.         temp=~temp;
  47.         tp=temp;
  48.         temp=tp*0.0625*100+0.5;   
  49.         //留两个小数点就*100,+0.5是四舍五入,因为C语言浮点数转换为整型的时候把小数点
  50.         //后面的数自动去掉,不管是否大于0.5,而+0.5之后大于0.5的就是进1了,小于0.5的就
  51.         //算由?.5,还是在小数点后面。

  52.       }
  53.      else
  54.       {            
  55.         DisplayData[0] = 0x00;
  56.         tp=temp;//因为数据处理有小数点所以将温度赋给一个浮点型变量
  57.         //如果温度是正的那么,那么正数的原码就是补码它本身
  58.         temp=tp*0.0625*100+0.5;   
  59.         //留两个小数点就*100,+0.5是四舍五入,因为C语言浮点数转换为整型的时候把小数点
  60.         //后面的数自动去掉,不管是否大于0.5,而+0.5之后大于0.5的就是进1了,小于0.5的就
  61.         //算加上0.5,还是在小数点后面。
  62.     }
  63.     DisplayData[1] = DIG_CODE[temp / 10000];
  64.     DisplayData[2] = DIG_CODE[temp % 10000 / 1000];
  65.     DisplayData[3] = DIG_CODE[temp % 1000 / 100] | 0x80;
  66.     DisplayData[4] = DIG_CODE[temp % 100 / 10];
  67.     DisplayData[5] = DIG_CODE[temp % 10];
  68.      DigDisplay();                       //扫描显示
  69. }

  70. /*******************************************************************************
  71. * 函 数 名         : DigDisplay
  72. * 函数功能           : 使用数码管显示
  73. * 输    入         : 无
  74. * 输    出         : 无
  75. *******************************************************************************/
  76. void DigDisplay()
  77. {
  78.     unsigned char i;
  79.     unsigned int j;
  80.     for(i=0;i<8;i++)
  81.     {
  82.         switch(i)     //位选,选择点亮的数码管,
  83.         {
  84.             case(0):
  85.                 LSA=0;LSB=0;LSC=0; break;//显示第0位
  86.             case(1):
  87.                 LSA=1;LSB=0;LSC=0; break;//显示第1位
  88.             case(2):
  89.                 LSA=0;LSB=1;LSC=0; break;//显示第2位
  90.             case(3):
  91.                 LSA=1;LSB=1;LSC=0; break;//显示第3位
  92.             case(4):
  93.                 LSA=0;LSB=0;LSC=1; break;//显示第4位
  94.             case(5):
  95.                 LSA=1;LSB=0;LSC=1; break;//显示第5位
  96.             case(6):
  97.                 LSA=0;LSB=1;LSC=1; break;//显示第6位
  98.             case(7):
  99.                 LSA=1;LSB=1;LSC=1; break;//显示第7位   
  100.         }
  101.         GPIO_DIG=DisplayData[i];//发送段码
  102.         j=50;                         //扫描间隔时间设定
  103.         while(j--);   
  104.         GPIO_DIG=0x00;//消隐
  105.     }
  106. }
复制代码
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:303383 发表于 2019-1-4 23:38 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

板凳
ID:274129 发表于 2019-1-9 23:08 | 只看该作者
首先你肯定要解决单片机串口是否能够通信  然后再解决传输数据的问题
回复

使用道具 举报

地板
ID:173814 发表于 2019-1-10 17:42 | 只看该作者
你要先打开串口中断,然后写一个串口服务函数,然后把获得的温度数据以串口的形式发送,就是然数据等于SBUF,发送给串口,然后电挠这里打开串口调试助手,选好波特率就可以收到数据了
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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