| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2688 人关注过本帖
标题:听说这个论坛大神很多!求大神帮我看下程序啊
只看楼主 加入收藏
啦啦啦水瓶座
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2016-5-26
结帖率:0
收藏
已结贴  问题点数:20 回复次数:1 
听说这个论坛大神很多!求大神帮我看下程序啊
这是水温控制其中的一段程序,但是很多的小细节都不懂,比如说 check_0();为什么带_下划线,为什么后面有括号,,求大神为我详细讲解这段程序

/***********************数码显示函数*****************************/
void display()
{
    uchar i;
    check_0();   //检查温度高位是否有多余的0,有则不用显示出来
    for(i=0;i<smg_i;i++)
    {                              
        P3 = smg_we[i];              //位选
        P1 = dis_smg[i];         //段选         
        delay_1ms(1);            
        P3 = 0xff;              //位选
        P1 = 0xff;             //消隐
        
    }   
}
/******************把数据保存到单片机内部eepom中******************/
void write_eepom()
{
    SectorErase(0x2000);
    byte_write(0x2000, t_high % 256);
    byte_write(0x2001, t_high / 256);
    byte_write(0x2002, t_low % 256);
    byte_write(0x2003, t_low / 256);
    byte_write(0x2055, a_a);   
}

/******************把数据从单片机内部eepom中读出来*****************/
void read_eepom()
{
    t_high  = byte_read(0x2001);
    t_high <<= 8;
    t_high  |= byte_read(0x2000);
    t_low   = byte_read(0x2003);
    t_low <<= 8;
    t_low   |= byte_read(0x2002);
    a_a      = byte_read(0x2055);
}

/***********************18b20初始化函数*****************************/
void init_18b20()
{
    bit q;
    dq = 1;                //把总线拿高
    delay_uint(1);        //15us
    dq = 0;                //给复位脉冲
    delay_uint(80);        //750us
    dq = 1;                //把总线拿高 等待
    delay_uint(10);        //110us
    q = dq;                //读取18b20初始化信号
    delay_uint(20);        //200us
    dq = 1;                //把总线拿高 释放总线
}

/*************写18b20内的数据***************/
void write_18b20(uchar dat)
{
    uchar i;
    for(i=0;i<8;i++)
    {                     //写数据是低位开始
        dq = 0;             //把总线拿低写时间隙开始
        dq = dat & 0x01; //向18b20总线写数据了
        delay_uint(5);     // 60us
        dq = 1;             //释放总线
        dat >>= 1;
    }   
}

/*************读取18b20内的数据***************/
uchar read_18b20()
{
    uchar i,value;
    for(i=0;i<8;i++)
    {
        dq = 0;             //把总线拿低读时间隙开始
        value >>= 1;     //读数据是低位开始
        dq = 1;             //释放总线
        if(dq == 1)         //开始读写数据
            value |= 0x80;
        delay_uint(5);     //60us    读一个时间隙最少要保持60us的时间
    }
    return value;         //返回数据
}
/*************读取温度的值 读出来的是小数***************/
uint read_temp()
{
    uint value;
    uchar low;               //在读取温度的时候如果中断的太频繁了,就应该把中断给关了,否则会影响到18b20的时序
    init_18b20();           //初始化18b20
    write_18b20(0xcc);       //跳过64位ROM
    write_18b20(0x44);       //启动一次温度转换命令
    delay_uint(50);           //500us
    init_18b20();           //初始化18b20
    write_18b20(0xcc);       //跳过64位ROM
    write_18b20(0xbe);       //发出读取暂存器命令
    EA = 0;
    low = read_18b20();       //读温度低字节
    value = read_18b20();  //读温度高字节
    EA = 1;
    value <<= 8;           //把温度的高位左移8位
    value |= low;           //把读出的温度低位放到value的低八位中
    value *= 0.625;           //转换到温度值 小数
    return value;           //返回读出的温度 带小数
}
/*************定时器0初始化程序***************/
void time_init()      
{
    EA   = 1;           //开总中断
    TMOD = 0X01;      //定时器0、定时器1工作方式1
    ET0  = 1;          //开定时器0中断
    TR0  = 1;          //允许定时器0定时
}
/*************外部中断初始化程序***************/
void init_int0()
{
    EX0=1;       //外部中断0允许位
    EA=1;     
    IT0 = 1;   //触发方式,下降沿触发
}
搜索更多相关主题的帖子: display 下划线 
2016-05-26 23:12
qq1023569223
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:湖南科技大学
等 级:贵宾
威 望:26
帖 子:2753
专家分:13404
注 册:2010-12-22
收藏
得分:20 
check_0是函数名,带_的命名方式是允许的。check_0();表示执行此函数,后面的同理。

   唯实惟新 至诚致志
2016-05-27 08:01
快速回复:听说这个论坛大神很多!求大神帮我看下程序啊
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.012867 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved