第八届国赛超声波测距机的功能设计与实现

  • 要点1:利用数组存储十次距离

技巧:注意juli_huixian_index的进出值的变化,在数据的出口地方进行新旧数据的处理。

void Juli_Pro()
{
     static u8  juli_huixian_index ;
    if(count_juli >= 200)
    {
        count_juli = 0;
        if(ceju_start == 1)
        {
            ceju_start = 0;
            juli_xianshi = Juli_Celiang();            
            juli_store[juli_store_index] = juli_xianshi;//index 从1---10循环
            juli_huixian[juli_huixian_index] = juli_xianshi;
            juli_huixian_index++;
        }
//        juli_xianshi = Juli_Celiang();
    ///
        if(caozuo_0_1 == 0)
        {
            if(juli_huixian_index >= 2)
            {
                juli_before_after[0] = juli_huixian[juli_huixian_index - 2];
                juli_before_after[1] = juli_huixian[juli_huixian_index - 1];
            }
            else if(juli_huixian_index == 1)
            {
                juli_before_after[0] = 0;
                juli_before_after[1] = juli_huixian[0];
            }
            else
                juli_before_after[0] = juli_before_after[1] = 0;
        }
        else if(caozuo_0_1 == 1)
        {
            if(juli_huixian_index >= 2)
            {
                juli_before_after[0] = (juli_huixian[(juli_huixian_index - 2)]+juli_huixian[juli_huixian_index - 1]);
                juli_before_after[1] = juli_huixian[juli_huixian_index - 1];
            }
            else if(juli_huixian_index == 1)
            {
                juli_before_after[0] = 0+juli_huixian[0];
                juli_before_after[1] = juli_huixian[0];
            }
            else
                juli_before_after[0] = juli_before_after[1] = 0;
        }
    }
}
  • 要点2:DAC电压输出

技巧1:0—5V与0—255对应起来即可,小数点需要添加0.02f

技巧2: DAC输出可以设置为50ms一次。

技巧3:OUT输出引脚的地址为0x40。光敏电阻0x41,旋钮电阻0x43

u8 volt_value;
void DA_Pro()
{
    if( juli_xianshi <= mangqu_ctrl)
    {
        volt_value = 0;
    }
    else if( juli_xianshi > mangqu_ctrl)
    {
        volt_value = (u8)((juli_xianshi - mangqu_ctrl)*0.02f*255/5);
//        volt_value = (u8)((juli_xianshi - mangqu_ctrl)*0.02f*51);
    }
    else if(volt_value >= 255)
        volt_value = 255;
    
    Write_da(0x40,(u8)(volt_value));
}
  • 要点3:LED1闪烁

    if(ceju_start == 1)//初始化测距状态
    {
        ceju_led_flag = 1;
        count_time = 0;
        count_400ms = 0;
    }
    if(ceju_led_flag == 1)
    {
        count_400ms_flag = 1;
    }
    if(count_400ms_flag == 1)
    {
        count_400ms++;
        if(count_400ms < 200)
            led_state &= ~0x01;
        else if((count_400ms >= 200)&&(count_400ms < 400))
            led_state |= 0x01;
        else if(count_400ms >= 400)
        {
            count_400ms = 0;
            count_time++;
        }
    }
    if(count_time >= 10)
    {
        count_time = 0;
        count_400ms_flag = 0;
        ceju_led_flag = 0;
    }
    
    Device_Ctrl(0x80,led_state);
  • 要点4:数码管刷新必须500ms!! 不能200 300

  • 要点5: 在按键部分写入eeprom的时候,不需要EA=0;EA= 1,只要eeprom函数里面有延时10ms就可以了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值