让数码管显示温度的代码,我是新手,希望大家可以帮我一下

2019-03-24 17:19发布

本帖最后由 胡豆豆的春天 于 2017-4-1 12:38 编辑

这是我的代码,可能会有很多错误,希望大神可以耐心的帮我看一下!!


#include <reg52.h>
#include <stdio.h>
#define uchar unsigned char
#define uint  unsigned int
sbit wd=P2^2;
sbit du=P2^6;
sbit we=P2^7;
sbit fm=P2^3;

float wendu;
uint warn_l1=270;
uint warn_l2=250;
uint warn_h1=300;
uint warn_h2=320;

sbit led0=P1^0;
sbit led1=P1^1;
sbit led2=P1^2;
sbit led3=P1^3;

char code table []={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,
                                        0x3f+0x80,0x06+0x80,0x5b+0x80,0x4f+0x80,0x66+0x80,0x6d+0x80,0x7d+0x80,0x07+0x80,0x7f+0x80,0x6f+0x80};
void delay(uint z)
{
        uint x,y;
        for(x=z;x>0;x--)
                for(y=110;y>0;y--);        
}

void fuwei(void)
{
        uint i;
        wd=0;
        i=103;
        while(i>0)i--;
        wd=1;
        i=4;
        while(i>0)i--;
}

bit yigezijie()
{
        uint i;
        bit dat;
        wd=0;
        i++;i++;
        wd=1;
        i++;
        i=8;
        while(i--);
        return (dat);        
}

uchar yigezifu()
{
        uint a,dat;
        dat=0;
        for(a=0;a<8;a++)
        {
                a=yigezijie();
                dat=(a<<7)|(dat>>1);
        }
}

void duyigezijie(uchar dat)
{
        uchar a,i;
        bit xie;
        for(a=0;a<8;a++)
        {
                xie=dat&0x01;
                dat>>1;
                if(xie)
                {
                        wd=0;
                        i++;i++;
                        wd=1;
                        i=8;
                        while(i--);
                }
                else
                {
                        wd=1;
                        i=8;
                        while(i--);
                        wd=0;
                        i++;i++;
                }
        }
}

void zhuanhua()
{
        fuwei();
        delay(1);
        duyigezijie(0xcc);
        duyigezijie(0x44);        
}

uint duqushuju()
{
        uchar a,b;
        fuwei();
        delay(1);
        duyigezijie(0xcc);
        duyigezijie(0xbe);
        a=yigezifu();
        b=yigezifu();
        wendu=(a+b*256)*0.625;
        return wendu;
}

void xianshishuju(uchar a,uchar b)
{
        uchar c;
        c=~((0x01)<<a);
        we=1;
        P0=c;
        we=0;
        P0=0xff;
        du=1;
        P0=table;
        du=0;
                        
}

void shujudefenpei(uchar t)
{
        uchar shi,ge,shii;
        shi=t/100;
        xianshishuju(0,shi);
        ge=t/100/10;
        xianshishuju(0,shi+10);
        shii=t%10;
        xianshishuju(0,shii);
}

void panduanwendu()
{
        if(wendu>warn_h2)
        {        
                P1=0xfe;
                shujudefenpei(duqushuju());
        }
        else if(wendu<warn_h2&&wendu>warn_h1)
        {
                P1=0xfd;
                shujudefenpei(duqushuju());
        }
        else if(wendu>warn_l1&&wendu<warn_h1)
        {
                P1=0xfb;
                shujudefenpei(duqushuju());
        }
        else if(wendu<warn_l2)
        {
                P1=0xf7;
                shujudefenpei(duqushuju());
        }
}

void chuankouchushihua()
{
        TMOD=0X20;
        PCON=0X00;
        SCON=0X50;
        TH1=0XFD;
        TL1=0XFD;
        TR1=1;
}

void comm(char *parr)
{
        do
        {
                SBUF=*parr++;
                while(!TI);
                TI=0;
        }                 while(*parr);
}

void main()
{
        uchar buff[4],i;
        du=0;
        we=0;
        chuankouchushihua();
        while(1);
        {
                zhuanhua();
                for(i=10;i>0;i++)
                {
                        shujudefenpei(duqushuju());
                }
                shujudefenpei(wendu);
                printf(buff,"%f",wendu);
                for(i=10;i>0;i++)
                {
                        shujudefenpei(duqushuju());
                }
                comm(buff);
                for(i=10;i>0;i++)
                {
                        shujudefenpei(duqushuju());
                }
        }
        
}

此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
7条回答
littleshrimp
1楼-- · 2019-03-25 01:03
你遇到什么问题啦
胡豆豆的春天
2楼-- · 2019-03-25 02:29
 精彩回答 2  元偷偷看……
低调的路人
3楼-- · 2019-03-25 05:37
1. bit yigezijie()  这个是什么结构,没用过,里面的i貌似没有初始化;
2.建议 一个模块一个模块的调试,看数据转化貌似用的是ds18b20,可以下载相关例程看看  ;
3.排除软件问题,先仿真,再调试硬件。
个人建议,祝好~
littleshrimp
4楼-- · 2019-03-25 07:36
本帖最后由 littleshrimp 于 2017-3-31 21:20 编辑

我没有51单片机 不能帮你测试了 你可以按提示把警告消除 或者把警告发出来 大家帮你看看哪些需要解决 代码弄好后如果有示波器或逻辑分析仪可以看一下输出 如果没有需要写一些测试程序 比如控制对应的I/O输出 用万用表或者LED看一下输出是否正常 确定能输出了在看一下时序是不是正确 代码的输出需要和对应的硬件配套 如果你有硬件资料最好也发出来 不然之发代码 别人很难看出问题在哪里
wajuka
5楼-- · 2019-03-25 13:18
 精彩回答 2  元偷偷看……
LRXTL
6楼-- · 2019-03-25 14:53
先把原理图传一下大家才能判断

一周热门 更多>