找回密码
 立即注册

QQ登录

只需一步,快速开始

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

初学者想做一个温度传感器的程序,但是现在数码管根本不显示,下边是代码,求大神帮忙

[复制链接]
跳转到指定楼层
楼主
ID:287946 发表于 2018-3-5 21:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit ds=P2^2;
uint temp;
float f_temp;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,           //有小数点
                                                        0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};           //无小数点        (1:0x86  1000 0110  第一位为小数点)
uchar dispuf[]={10,10,10,10,10,10,10,10};
uchar discom=0;
void display(void);
void delay(uchar i)          //延时
{       
        i++;
}
bit inclear(void)                  //初始化
{        uchar dat=1;
        ds=1;
        delay(1);
        ds=0;
        delay(250);
        ds=1;
        dat=ds;
        delay(100);  
        ds=1;
       
        return(dat) ;                  
}
uchar read()                         //读数据
{
        uchar i,j,dat;
        dat=0;
        for(i=0;i<8;i++)
        {
                ds=1;
                delay(1);
                ds=0;
                delay(3);
                ds=1;
                delay(2);
                dat=(j<<7|dat>>1);
                if(ds)
                        ds=(ds|0x80);
                delay(10);       
        }                                
        return(dat);
}
void write(uchar dat)                     //写数据
{
        uchar i,t;
       
        for(i=0;i<8;i++)
        {
                ds=0;
                delay(2);
                dat=dat&0x01;
                ds=1;
            dat=dat>>1;
                delay(10);
                ds=1;               
        }
}
void tempchange()
{
                                   //获取温度并转换
        inclear();
        delay(1);
        write(0xcc);
        write(0x44);
}
uint temp_get()
{
        uchar a,b;
        inclear();                                 //读取数据
        delay(1);
        write(0xcc);
        write(0xbe);                          //读
    a=read();                                  //低八位
        b=read();                                  //b=高八位
        temp=b;
        temp<<=8;
        temp=temp|a;                          //合并a和b
        f_temp=temp*0.0625;
        temp=f_temp*10+0.5;
        return temp;
}
void display(void)
{
        P2 = ((P2&0x1f)|0xe0);
        P0 = 0xff;
        P2 &= 0x1f;

        P2=((P2&0x1f)|0xc0);
        P0 = (1<<discom);
        P2=P2&0x1f;

        P2=((P2&0x1f)|0xe0);
        P0=~table[dispuf[discom]];
        P2=P2&0x1f;
        delay(2);

        if(++discom==8)
        discom=0;
}
void mian()
{
        uchar i;
        while(1)
        {
                tempchange();
                for(i=10;i>0;i--)
                {
                        display();
                        dispuf[5]=temp/100;
                        dispuf[6]=temp%100/10;
                        dispuf[7]=temp%100%10;
                }
        }
}


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

使用道具 举报

沙发
ID:212177 发表于 2018-3-5 22:30 来自手机 | 只看该作者
18b20一般都是延时问题导致度数有问题。自己检查一下

评分

参与人数 2黑币 +10 收起 理由
那人灯火阑珊处 + 5 我都看不懂
Yee.L + 5 赞一个!

查看全部评分

回复

使用道具 举报

板凳
ID:287946 发表于 2018-3-6 10:27 | 只看该作者
l6931639 发表于 2018-3-5 22:30
18b20一般都是延时问题导致度数有问题。自己检查一下

我不知道我的延时函数是不是有问题,但是现在烧录后数码管不显示任何数据,就是没反应。
回复

使用道具 举报

地板
ID:288099 发表于 2018-3-6 10:56 | 只看该作者
temp这个变量定义成什么了
回复

使用道具 举报

5#
ID:288108 发表于 2018-3-6 11:20 | 只看该作者
你说的是显示问题,个人建议调显示可以几个固定的显示数据,要先把显示调试通过,再去弄18B20的读写,
另外数码管的显示和你的扫描频率有关。

评分

参与人数 1黑币 +5 收起 理由
Yee.L + 5 赞一个!

查看全部评分

回复

使用道具 举报

6#
ID:287946 发表于 2018-3-6 16:40 | 只看该作者
peng1118 发表于 2018-3-6 11:20
你说的是显示问题,个人建议调显示可以几个固定的显示数据,要先把显示调试通过,再去弄18B20的读写,
另 ...

固定的值是可以显示出来的 ,但是整体运行又不行了
回复

使用道具 举报

7#
ID:287946 发表于 2018-3-6 16:43 | 只看该作者
zhugesimida 发表于 2018-3-6 10:56
temp这个变量定义成什么了

转换的温度
回复

使用道具 举报

8#
ID:287946 发表于 2018-3-7 18:31 | 只看该作者
Yee.L 发表于 2018-3-6 10:27
我不知道我的延时函数是不是有问题,但是现在烧录后数码管不显示任何数据,就是没反应。

已解决,是延时的问题,感谢
回复

使用道具 举报

9#
ID:288892 发表于 2018-3-7 20:35 | 只看该作者
怎么解决的啊??
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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