找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机温度计仿真问题 加减控制不了数码管的变化

[复制链接]
跳转到指定楼层
楼主


数码管显示只有这个界面:


整体为


我在传感器上加减控制不了数码管的变化。

单片机源程序如下:
  1. #include <REG52.H>
  2. #define uchar unsigned char
  3. #define uint unsigned int      
  4. sbit DQ = P1^0;
  5. sbit RS = P1^4;
  6. sbit RW = P1^6;
  7. sbit EN = P1^5;
  8. union {
  9.     uchar c[2];
  10.         uint x;
  11. } temp;
  12. uchar flag;
  13. uint cc,cc2;
  14. float cc1;
  15. uchar buff1[13] = {"temperature:"};
  16. uchar buff2[6] = {"+00.0"};
  17. //检查忙函数
  18. void fbusy()
  19. {
  20.     P2 = 0xff;
  21.         RS = 0;
  22.         RW = 1;
  23.         EN = 1;
  24.         EN = 0;
  25.         while((P2 & 0x80))
  26.         {
  27.            EN = 0;
  28.            EN = 1 ;
  29.         }
  30. }
  31. //写命令函数
  32. void wc51r(uchar j)
  33. {
  34.    fbusy();
  35.    EN = 0;
  36.    RS = 0;
  37.    RW = 0;
  38.    EN = 1;
  39.    P2 = j;
  40.    EN = 0;
  41. }
  42. //写数据函数
  43. void wc51ddr(uchar j)
  44. {
  45.    fbusy();
  46.    EN = 0;
  47.    RS = 1;
  48.    RW = 0;
  49.    EN = 1;
  50.    P2 = j;
  51.    EN = 0;
  52. }
  53. void init()
  54. {
  55.    wc51r(0x01);
  56.    wc51r(0x38);
  57.    wc51r(0x0c);
  58.    wc51r(0x06);
  59. }
  60. //unchar useconds;
  61. void delay(uint useconds)
  62. {
  63.    for(; useconds>0; useconds--);
  64. }
  65. uchar ow_reset(void)
  66. {
  67.    uchar presence;
  68.    DQ = 0;
  69.    delay(50);
  70.    DQ = 1;
  71.    delay(3);
  72.    presence = DQ;
  73.    delay(25);
  74.    return(presence);
  75. }
  76. uchar read_byte(void)
  77. {
  78.    uchar i;
  79.    uchar value = 0;
  80.    for (i=8; i>0; i--)
  81.    {
  82.      value >>= 1;
  83.          DQ = 0;
  84.          DQ = 1;
  85.          delay(1);
  86.          if(DQ) value |=0x80;
  87.          delay(6);
  88.         }
  89.         return(value);
  90. }
  91. void write_byte(uchar val)
  92. {
  93.    uchar i;
  94.    for (i=8; i>1; i--)
  95.    {
  96.      DQ = 0 ;
  97.          DQ = val&0x01;
  98.          delay(5);
  99.          DQ=1;
  100.          val = val/2;
  101.    }
  102.    delay(5);
  103. }

  104. void Read_Temperature(void)
  105. {
  106.    ow_reset();
  107.    write_byte(0xCC);
  108.    write_byte(0xBE);
  109.    temp.c[1] = read_byte();
  110.    temp.c[0] = read_byte();
  111.    ow_reset();
  112.    write_byte(0xCC);   
  113.    write_byte(0x44);
  114.    return;
  115. }
  116. void main()
  117. {
  118.    uchar k;
  119.    delay(10);
  120.    EA = 0;
  121.    flag = 0;
  122.    init();
  123.    wc51r(0x80);
  124.    for (k=0; k<13; k++)
  125.    {wc51ddr(buff1[k]);}
  126.    while(1)
  127.    {
  128.      delay(10000);
  129.          Read_Temperature();
  130.          cc = temp.c[0]*256.0 + temp.c[1];
  131.          if  (temp.c [0] > 0xf8)   {flag=1; cc=~cc+1;}
  132.          else flag=0;
  133.          cc1 = cc*0.0625;
  134.          cc2 = cc1*100;
  135.          buff2[1] = cc2/1000 + 0x30;
  136.          if (buff2[1] == 0x30)
  137.              buff2[1] = 0x20;
  138.                  buff2[2] = cc2/100        - (cc2/1000)*10 + 0x30;
  139.                     buff2[4] = cc2/10        - (cc2/100)*10 + 0x30;
  140.                  if (flag==1)
  141.                  buff2[0] = '-';
  142.      else
  143.              buff2[0] = '+';
  144.      wc51r(0xc5);
  145.          for (k=0; k<6; k++)
  146.          { wc51ddr (buff2[k]);}
  147.    }
  148. }   
复制代码

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

使用道具 举报

沙发
ID:111634 发表于 2017-12-12 17:54 | 只看该作者
本帖最后由 zl2168 于 2017-12-12 18:00 编辑

给你介绍一个正确有效看得懂的案例,自己对照查错吧!
实例97  一线式DS18B20测温
⒈ DS18B20简介
⑴ 内部组织结构    …
⑵ 操作步骤和操作指令    …
⒉ 电路设计    …
⒊ 程序设计    …
⒋ Keil调试    …
⒌ Proteus仿真    …
实例97 DS18B20测温.rar (51.78 KB, 下载次数: 9)

Proteus仿真一下,确认有效。以上摘自张志良编著《80C51单片机仿真设计实例教程——基于Keil CProteus》清华大学出版社ISBN 978-7-302-41682-1内有常用的单片机应用100案例,用于仿真实验操作,电路与程序真实可靠可信可行。仿真电路和Hex文件能在清华出版社网站免费下载,程序源代码只能到书上看了。到图书馆借,或到新华书店翻阅,或到网上书店打折购买。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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