OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3478|回复: 2

实验11 触摸按键实验请教

[复制链接]

3

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
73
金钱
73
注册时间
2016-5-19
在线时间
5 小时
发表于 2016-6-16 20:44:47 | 显示全部楼层 |阅读模式
3金钱
有两个地方没弄懂,想请教下各!谢谢  代码如下主函数: int main(void) {       
        u8 t=0;         
        delay_init();                     //延时函数初始化          
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置NVIC中断分组2:2位抢占优先级,2位响应优先级
        uart_init(115200);         //串口初始化为115200
        LED_Init();                             //LED端口初始化
  TPAD_Init(6);                        //初始化触摸按键
           while(1)
        {                                                                                                             
                if(TPAD_Scan(0))        //成功捕获到了一次上升沿(此函数执行时间至少15ms)
                {
                        LED1=!LED1;                //LED1取反
                }
                t++;
                if(t==15)                 
                {
                        t=0;
                        LED0=!LED0;                //LED0取反,提示程序正在运行
                }
                delay_ms(10);
        }
}

u8 TPAD_Init(u8 psc)
{
        u16 buf[10];
        u16 temp;
        u8 j,i;
        TIM5_CH2_Cap_Init(TPAD_ARR_MAX_VAL,psc-1);//以1Mhz的频率计数
        for(i=0;i<10;i++)//连续读取10次
        {                                 
                buf[i]=TPAD_Get_Val();
                delay_ms(10);            
        }                                    
        for(i=0;i<9;i++)//排序
        {
                for(j=i+1;j<10;j++)
                {
                        if(buf[i]>buf[j])//升序排列
                        {
                                temp=buf[i];
                                buf[i]=buf[j];
                                buf[j]=temp;
                        }
                }
        }
        temp=0;
        for(i=2;i<8;i++)temp+=buf[i];//取中间的6个数据进行平均
        tpad_default_val=temp/6;
        printf("tpad_default_val:%d\r\n",tpad_default_val);       
        if(tpad_default_val>TPAD_ARR_MAX_VAL/2)return 1;//初始化遇到超过TPAD_ARR_MAX_VAL/2的数值,不正常!
        return 0;       

第一个问题就是预分频系数从主函数那边传递过来TPAD_Init(6),那TIM5_CH2_Cap_Init(TPAD_ARR_MAX_VAL,psc-1)应该是以12M的频率计数??

第二个问题就是"if(tpad_default_val>TPAD_ARR_MAX_VAL/2)return 1;//初始化遇到超过TPAD_ARR_MAX_VAL/2的数值,不正常!" 这条语句如果返回1,那它的判断不正常是在什么地方?

最佳答案

查看完整内容[请看2#楼]

1,是的。2,在调用这个函数的函数。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2016-6-16 20:44:48 | 显示全部楼层
1,是的。2,在调用这个函数的函数。
回复

使用道具 举报

3

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
73
金钱
73
注册时间
2016-5-19
在线时间
5 小时
 楼主| 发表于 2016-6-29 21:59:28 | 显示全部楼层
谢谢原子哥! 建议把程序后面的注释修正下,我就是看到了才过来请教的^_^   再请教个问题,我现在看到TFT屏这章了,请问有什么软件可以获取颜色值...
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-11 08:41

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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