9.21

例题1:公园里有200个桃子,猴子每天吃掉一半以后扔掉一个,问6天以后还剩余多少桃子?

      var sum = 200;
      for(var i= 0;i<6;i++)
      {
            sum = parseInt(sum/2)-1
      }
      alert(sum);

 

例题2:公园里有一些桃子子,猴子每天吃掉一半以后扔掉一个,第6天的时候发现还剩下1个桃子,问开始有几个桃子?
      var sum = 1;
      for(var i = 0;i<6;i++)
      {
            sum = (sum+1)*2;
      }
      alert(sum);

 

使用函数解决例题2

      function ShuLiang(n)                     用来返回第n天的数量
      {
            if(n == 6)                               已知第6天
           {
                   return 1;                          桃子数量为1
           }
           var sl = (ShuLiang(n+1)+1)*2;  第n天的桃子数量=(下一天的桃子数量+1)*2
           return sl;                                 return第n天的数量
      }
      alert(ShuLiang(0));

函数功能:给一个天数,返回该天数的桃子的数量。最主要的是下一天的桃子数量怎么求,函数实现过程是

           想要求第1天的桃子数量就需要2天桃子数量;

      想要求第2天的桃子数量就需要3天桃子数量;

    想要求第3天的桃子数量就需要4天桃子数量;

    想要求第4天的桃子数量就需要5天桃子数量;

    想要求第5天的桃子数量就需要6天桃子数量;

    而第6天的桃子的数量已经知道了,是1。进而5-4-3-2-1-0的数量的桃子就能用公示算出来了

转载于:https://www.cnblogs.com/ysdong/p/5894880.html

<think>好的,用户想了解LVGL 9.21版本中触摸功能的使用说明或错误解决。首先,我需要回忆LVGL的文档和常见问题。LVGL的触摸功能通常涉及输入设备驱动、坐标转换和校准。用户提到参考了正点原子的例程,但新版本API可能有变化。 首先,确认LVGL 9.21的触摸初始化流程。需要设置输入设备类型为触摸屏,注册读取回调函数,可能还需要校准。旧版本的API可能使用`lv_indev_drv_init`,而新版本可能改为`lv_indev_drv_t`结构体初始化后注册。 然后,常见的触摸问题比如坐标不对、无响应。可能的原因包括未正确设置旋转方向,或者触摸数据未转换。例如,正点原子的代码可能直接读取原始坐标,但LVGL需要屏幕坐标系的转换,特别是如果屏幕旋转了方向。 另外,校准功能在LVGL中可能需要手动启用,尤其是在不同硬件上。用户可能需要使用`lv_touchcal`组件,或者自行实现校准矩阵。 还要检查触摸驱动的读取函数是否正确返回有效的坐标和状态。比如,触摸是否持续发送事件,或者是否有硬件连接问题,比如GPIO配置错误。 最后,建议用户查阅LVGL官方文档的输入设备部分,确保使用正确的API,并参考官方例程进行调整。同时,注意日志输出是否有错误信息,这有助于定位问题。</think>### LVGL 9.21 触摸功能使用说明与常见问题 #### 一、基本配置流程 1. **输入设备初始化** 使用 `lv_indev_drv_t` 结构体定义触摸设备驱动,并注册读取函数: ```c lv_indev_drv_t indev_drv; lv_indev_drv_init(&indev_drv); indev_drv.type = LV_INDEV_TYPE_POINTER; indev_drv.read_cb = touchpad_read; // 需实现该回调函数 lv_indev_t* touch_indev = lv_indev_drv_register(&indev_drv); ``` 注意:新版本中部分API名称可能从 `lv_indev_drv_init` 调整为更明确的命名[^1]。 2. **触摸数据读取** 在 `touchpad_read` 回调中需返回坐标和触摸状态: ```c static void touchpad_read(lv_indev_drv_t* drv, lv_indev_data_t* data) { data->point.x = touch_x; // 从硬件读取X坐标 data->point.y = touch_y; // 从硬件读取Y坐标 data->state = touched ? LV_INDEV_STATE_PRESSED : LV_INDEV_STATE_RELEASED; } ``` #### 二、常见问题与解决 1. **触摸坐标错位** - **现象**:触摸位置与屏幕显示不匹配 - **原因**:屏幕旋转方向未同步配置 - **解决**:在显示驱动和触摸驱动中统一设置旋转参数: ```c lv_disp_set_rotation(disp, LV_DISP_ROT_90); // 显示旋转 lv_indev_set_rotation(touch_indev, LV_DISP_ROT_90); // 触摸旋转 ``` 2. **无触摸响应** - **检查硬件连接**:确认触摸屏的I2C/SPI通信线路正常 - **验证数据有效性**:在 `touchpad_read` 中添加调试输出,确认坐标值在屏幕范围内 - **LVGL内部配置**:确保 `lv_conf.h` 中 `LV_USE_INDEV` 已启用 3. **校准问题** LVGL 9.x 默认不提供内置校准工具,需自行实现: ```c // 示例:应用校准偏移量 data->point.x = (raw_x - offset_x) * scale_x; data->point.y = (raw_y - offset_y) * scale_y; ``` #### 三、优化建议 - **降低采样率**:若性能紧张,可在 `lv_conf.h` 中调整 `LV_INDEV_DEF_READ_PERIOD` - **使用DMA传输**:对于SPI/I2C触摸设备,启用DMA减少CPU占用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值