找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4306|回复: 6
收起左侧

这是一个温控系统的的程序,有错误一个,,,实在不知道错在哪了,跪求大神!!!!

[复制链接]
ID:70508 发表于 2014-12-15 17:01 | 显示全部楼层 |阅读模式
#include<reg52.h>
#include<stdio.h>
#define uchar unsigned char
#define uint unsigned int
sbit ds=P2^6;    //ζè′«¸DÆ÷DÅoÅÏß
sbit smg=P0;     //êyÂë1üÏÔê¾
sbit smg1=P2;
sbit jdq=P1^7;    //¼ìμçÆ÷′®¿ú
uint temp;       //¶¨òåÕûDÎμÄζèêy¾Y
float f_temp;     //¶¨ò帡μãDíμÄζèêy¾Y

unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x6d,0x7d,0x07,0x7f,0x6f,  //′øD¡êyμãμÄ12òõ0~9±àÂë
                            0xbf,0x86,0xdb,0xcf,0xe6,0xfd,0x87,0xff,0xef,};//2»′øD¡êyμãμÄ
void delay(uint z)   
{
        uint x,y;
        for (x=z;x>0;x--)
             for(y=110;y>0;y--);
}
void dsreset()   //DS18B20μĸ′룬3õê¼»ˉoˉêy
{
        uint i;
        ds=0;
        i=103;
        while(i>0)
                i--;
        ds=1;
   i=4;
while(i>0)
    i--;       
}
bit tempreadbit()   //¶á1λêy¾Yoˉêy
{
        uint i;
        bit dat;
        ds=0;i++;        //Ñóê±×÷óÃ
        dat=ds;
        i=8;
        while(i>0)
                i--;
                return(dat);
       
}
uchar tempreda()   //¶áò»¸ö×Ö½úêy¾Yoˉêy
{
        uchar i,j,dat;
        dat=0;
        for(i=1;i<=8;i++)
        {
                j=tempreadbit();
                dat=(j<<7)|(dat>>1);   //¶á3öμÄêy¾Y×îμíλÔú×îÇ°Ãæ£¬ÕaÑù¸ÕoÃò»¸ö×Ö½úÔúdatàïÃæ
}
        return(dat);
        }
void tempwritebyte(uchar dat)    //ÏòDS18B20D′ò»¸ö×Ö½úêy¾Yoˉêy
{
        uint i;
        uchar j;
        bit testb;
        for(j=1;j<=8;j++)
        {
                testb=dat&0x01;
                dat=dat>>1;
                if(testb)
                {
                        ds=0;
                        i++;
                        i++;
                        ds=1;
                        i=8;
                        while(i>0)i--;
                }
                        else
                        {
                                ds=0;
                                i=8;
                                while(i>0)i--;
                                ds=1;
                                i++;i++;
                }
        }
}
void tempchange(void)      //DS18B20¿aê¼»ñè¡Î¶è2¢×a»»
{
        dsreset();
        delay(1);
         void tempwritebyte(0xcc);
         tempwritebyte(0x44);
}
uint get_temp()
{
        uchar a,b;
        dsreset();
        delay(1);
        tempwritebyte(0xcc);
        tempwritebyte(0xbe);
        a=tempread();
        b=tempread();
        temp=b;
        temp<<=8;
        temp=temp|a;
        f_temp=temp*0.0625;
        temp=_f_temp*10+0.5;
        f_temp=f_temp+0.05;
        return temp;
}
void display(uchar num,uchar dat)
{
        uchar i;
        P0=0;
        P0=table[dat];
        P2=0;
        i=0xff;
        i=i&(~((0x01)<<(num)));
        P0=i;
        P2=0;
        delay(1);
       
}
void dis_temp(uint i)
{
        uchar i;
        i=1/100;
        display(0,1);
        i=t%100/10;
        display(1,i+10);
        i=t%100%10;
        display(2,i);
       
}
void deal(uint t)
{
        if(t<=11)
                P1^7=1;
               
}

void main()
{
        uchar buff[4],i;
        while(1)
        {
                tempchange();
                for(i=10;i>0i--);
                {
                        dis_temp(get_temp());
                       
        }
                deal(temp);
                sprintf(buff,"%f",f_temp);
                for(i=10;i>0;i--)
                {
                        distemp(get_temp());
        }
}
}

回复

使用道具 举报

ID:69862 发表于 2014-12-15 18:56 | 显示全部楼层
首先你应该说明一下,是在什么地方有错误。
回复

使用道具 举报

ID:70508 发表于 2014-12-16 09:15 | 显示全部楼层
xiao_yp2014 发表于 2014-12-15 18:56
首先你应该说明一下,是在什么地方有错误。

kile显示说就在void tempchange(void) 函数的void tempwritebyte(0xcc);附近有错误,但我实在是找不出来在哪啊?你有kile的话可以复制在上面看一下,谢谢啦,,,,
回复

使用道具 举报

ID:69862 发表于 2014-12-16 09:45 | 显示全部楼层
菜鸟一个666 发表于 2014-12-16 09:15
kile显示说就在void tempchange(void) 函数的void tempwritebyte(0xcc);附近有错误,但我实在是找不出来 ...

你的程序中不不止一个错误,有好几个,我已经给你改过来了,但是还是需要你自己去调试功能。
下次写程序的时候,建议一定要写规范一点,变量名要具有一定的特殊意义,比如说定义一个无符号字符型变量,这个就是用来存一个按键数值,可以这样定义:unsigned char ucKeyNumber;
                                                                     unsigned  int  uiTimeCnt;
希望对你有帮助。。。。。。。。。。。。
回复

使用道具 举报

ID:69862 发表于 2014-12-16 09:47 | 显示全部楼层
xiao_yp2014 发表于 2014-12-16 09:45
你的程序中不不止一个错误,有好几个,我已经给你改过来了,但是还是需要你自己去调试功能。
下次写程序 ...

#include<reg52.h>
#include<stdio.h>
#define uchar unsigned char
#define uint unsigned int

sbit ds=P2^6;   
sbit smg=P0;   
sbit smg1=P2;
sbit jdq=P1^7;   

uint temp;      
float f_temp;     

unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x6d,0x7d,0x07,0x7f,0x6f,  //′?D?êyμ?μ?12ò?0~9±à??
                    
                                                0xbf,0x86,0xdb,0xcf,0xe6,0xfd,0x87,0xff,0xef,};//2?′?D?êyμ?μ?
void delay(uint z)   
{
        uint x,y;
        for (x=z;x>0;x--)
             for(y=110;y>0;y--);

}

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

bit tempreadbit()   
{
        uint i;
        bit dat;
        ds=0;i++;      
        dat=ds;
        i=8;
        while(i>0)
        i--;
        return(dat);
        
}

uchar tempread()   
{
        uchar i,j,dat;
        dat=0;
        for(i=1;i<=8;i++)
        {
           j=tempreadbit();
           dat=(j<<7)|(dat>>1);  
        }
        return(dat);
}

void tempwritebyte(uchar dat)   
{
        uint i;
        uchar j;
        bit testb;
        for(j=1;j<=8;j++)
        {
                testb=dat&0x01;
                dat=dat>>1;
                if(testb)
                {
                        ds=0;
                        i++;
                        i++;
                        ds=1;
                        i=8;
                        while(i>0)i--;
                }
                                else
                                {
                                    ds=0;
                                    i=8;
                                    while(i>0)i--;
                                    ds=1;
                                    i++;i++;
                                }
        }
}

void tempchange(void)      
{
        dsreset();
        delay(1);
        tempwritebyte(0xcc);
        tempwritebyte(0x44);
}

uint get_temp()
{
        uchar a,b;
        float _f_temp;
        dsreset();
        delay(1);
        tempwritebyte(0xcc);
        tempwritebyte(0xbe);
        a=tempread();
        b=tempread();
        temp=b;
        temp<<=8;
        temp=temp|a;
        f_temp=temp*0.0625;
        temp=_f_temp*10+0.5;
        f_temp=f_temp+0.05;
        return temp;
}

void display(uchar num,uchar dat)
{
        uchar i;
        P0=0;
        P0=table[dat];
        P2=0;
        i=0xff;
        i=i&(~((0x01)<<(num)));
        P0=i;
        P2=0;
        delay(1);
        
}

void dis_temp(uint value)
{
        uchar dis_temp_value = value;
                unsigned char bai = 0;
                unsigned char shi = 0;
                unsigned char ge = 0;

        bai=dis_temp_value/100;
        display(0,1);
        shi=dis_temp_value%100/10;
        display(1,dis_temp_value+10);
        ge=dis_temp_value%100%10;
        display(2,dis_temp_value);
}

void deal(uint t)
{
        if(t<=11)
        P1 = 0x7f;
}

void main()
{
        
        while(1)
        {
               uchar buff[4],i;
                                tempchange();

                for(i=10;i>0;i--)
                {
                   dis_temp(get_temp());
                }

                deal(temp);
                sprintf(buff,"%f",f_temp);

                for(i=10;i>0;i--)
                {
                   dis_temp(get_temp());
                }
         }
}



修改后的程序。。。。。。。。。。
回复

使用道具 举报

ID:70508 发表于 2014-12-16 09:49 | 显示全部楼层
xiao_yp2014 发表于 2014-12-16 09:45
你的程序中不不止一个错误,有好几个,我已经给你改过来了,但是还是需要你自己去调试功能。
下次写程序 ...

谢谢您的建议,一定会吸取和采纳!谢谢!!
回复

使用道具 举报

ID:69862 发表于 2014-12-16 09:52 | 显示全部楼层
菜鸟一个666 发表于 2014-12-16 09:49
谢谢您的建议,一定会吸取和采纳!谢谢!!

希望对你有帮助,学习嘛,主要是为了传播知识,让更多的人受益。。。。。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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