2301_76756206 2023-03-04 22:07 采纳率: 50%
浏览 20
已结题

我想问下,这是个测量距离的代码,怎么让他距离先出现150,再出现200则h加一,距离先出现200,再出现150则f加一,并且可以循环。

我想问下,这是个测量距离的代码,怎么让他距离先出现150,再出现200则h加一,距离先出现200,再出现150则f加一,并且可以循环。

void Timer0() interrupt 1
{
    unsigned long i=0,j,h=1;

    if(time<10)//0.5s
        time++;
    else
    {
        time=0;
        i=mcp_read();测量
        i=i*1135/2907;
        disp1[0]=i/100000+0x30;
        disp1[1]=i%100000/10000+0x30;
        disp1[2]=i%10000/1000+0x30;
        disp1[3]=i%1000/100+0x30;
        disp1[5]=i%100/10+0x30;
        disp1[6]=i%10+0x30;
        write_string(1,0,disp1);
        //距离计算
        j=(204657-i);
        j=j*10/69+10000;
        i=j;
        t[0]=i/10000+0x30;
        t[1]=i%10000/1000+0x30;
        t[2]=i%1000/100+0x30;
        t[4]=i%100/10+0x30;
        t[5]=i%10+0x30;
        write_string(2,0,t);

  • 写回答

1条回答 默认 最新

  • 「已注销」 2023-03-04 23:50
    关注

    “Devil组”引证GPT后的撰写:
    在代码中添加以下的逻辑来实现您的需求:

    unsigned int distance = i; // 假设i是当前测量得到的距离值
    static unsigned int last_distance = 0;
    static unsigned int h = 1; // 初始化h为1
    static unsigned int f = 0;
    if (distance == 150 && last_distance == 200) {
        h++; // 距离先出现150,再出现200则h加一
    } else if (distance == 200 && last_distance == 150) {
        f++; // 距离先出现200,再出现150则f加一
    }
    last_distance = distance;
    if (h > 5) {
        h = 1; // 超过5次后,重置h
    }
    if (f > 5) {
        f = 0; // 超过5次后,重置f
    }
    
    
    

    用一个静态变量last_distance来记录上一次测量得到的距离值,然后根据当前和上一次的距离值,判断是否需要让h或f加一。注意,这里的h和f都是静态变量,它们的值会被保留下来,直到下一次执行这段代码。

    最后,还需要加上一个判断,当h或f的值超过5时,需要将它们重置为1或0,以实现循环的效果。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 3月13日
  • 已采纳回答 3月5日
  • 创建了问题 3月4日

悬赏问题

  • ¥50 切换TabTip键盘的输入法
  • ¥15 可否在不同线程中调用封装数据库操作的类
  • ¥15 微带串馈天线阵列每个阵元宽度计算
  • ¥15 keil的map文件中Image component sizes各项意思
  • ¥20 求个正点原子stm32f407开发版的贪吃蛇游戏
  • ¥15 划分vlan后,链路不通了?
  • ¥20 求各位懂行的人,注册表能不能看到usb使用得具体信息,干了什么,传输了什么数据
  • ¥15 Vue3 大型图片数据拖动排序
  • ¥15 Centos / PETGEM
  • ¥15 划分vlan后不通了