OpenEdv-开源电子网

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

在主函数中使用定时器计时200ms*9,矩阵键盘,漏触

[复制链接]

1

主题

1

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2020-5-29
在线时间
11 小时
发表于 2020-8-17 10:39:56 | 显示全部楼层 |阅读模式
1金钱
主函数部分:
if(R1==0)
    {
                 R1_SSR=1;
                        //等待然后,发信号
                        ssrbuf[1+2]=1;
                       
                                  }
                if(R2==0)
    {
                 R2_SSR=1;
                        //等待然后,发信号
                        ssrbuf[2+2]=1;
                                  }
                        if(R3==0)
    {
     R3_SSR=1;
                        ssrbuf[3+2]=1;
                         //等待然后,发信号
                }

  if(L1==1)
                         //直接对管口进行控制
                { L1_SSR=0; // L1的继电器关闭
                                        if(R1==1&&R2==1&&R3==1        )
                                {
                                        //发下一步操作的信号然后,发信号?有问题 ;没问题,循环到第二次以符合要求
                                       
               
                         R1_SSR=!R1_SSR;
                                        drv_delay_ms(2000-1);
                         R1_SSR=!R1_SSR;

                                        R2_SSR=!R2_SSR;
                                       
                               
                                drv_delay_ms(2000-1);
                                        R2_SSR=!R2_SSR;

                                        R3_SSR=!R3_SSR;
                                        drv_delay_ms(2000-1);    //200ms写作2000-1,2000ms写作(2000-1)*10;
                            R3_SSR=!R3_SSR;

                                                                 }
                                                 else        if(R1==1&&R2==1&&R3==0)
                                { R3_SSR=1;
                                       
                                       
                                        R1_SSR=!R1_SSR;
                                        drv_delay_ms(2000-1);
                                        R1_SSR=!R1_SSR;

                                        R2_SSR=!R2_SSR;
                                        drv_delay_ms(2000-1);        
                                        R2_SSR=!R2_SSR;

                                }
                        else        if(R1==1&&R2==0&&R3==1)
                                {R2_SSR=1;
                                       
                                        R1_SSR=!R1_SSR;
                                        drv_delay_ms(2000-1);
                                        R1_SSR=!R1_SSR;

                                        R3_SSR=!R3_SSR;
                                        drv_delay_ms(2000-1);
                           R3_SSR=!R3_SSR;

                                }
                        else        if(R1==0&&R2==1&&R3==1)
                                {
                                        R1_SSR=1;
                                       
                                        R2_SSR=!R2_SSR;
                                        drv_delay_ms(2000-1);
                                R2_SSR=!R2_SSR;

                                        R3_SSR=!R3_SSR;
                                        drv_delay_ms(2000-1);                        
                                        R3_SSR=!R3_SSR;

                                }
                        else        if(R1==1&&R2==0&&R3==0)
                                {
                                        R2_SSR=1;
                                        R3_SSR=1;
                                                                                drv_delay_ms(2000-1);

                                R1_SSR=0;
                                        drv_delay_ms(2000-1);
                                        R1_SSR=1;

                                                         }
                        else        if(R1==0&&R2==1&&R3==0)
                                {
                                        R1_SSR=1;
                                        R3_SSR=1;
                                                                                drv_delay_ms(2000-1);

                        R2_SSR=0;
                                        drv_delay_ms(2000-1);
                                        R2_SSR=1;}
                                         else if                (R1==0&&R2==0&&R3==1)
                                {
                                        R1_SSR=1;
                                        R2_SSR=1;
                                        drv_delay_ms(2000-1);

                                        R3_SSR=0;
                                        drv_delay_ms(2000-1);
                                        R3_SSR=1;


                                }

                        }
       
定时器中断函数:
#include "drv_delay.h"
#include "led.h"



//============================================================================
// 名称:drv_delay_init
// 功能:延时功能初始化
// 参数:无
// 返回:无
// 说明:每us计数器值加1
//============================================================================
void drv_delay_init( void )
{
    RCC->APB1ENR |= RCC_APB1ENR_TIM5EN;                // 使能定时器2外设时钟
    RCC->AHB1RSTR |= RCC_APB1RSTR_TIM5RST;             // 复位定时器2
    DBGMCU_APB1PeriphConfig(DBGMCU_TIM5_STOP, ENABLE); // 调试时定时器停止计数  // 调试时定时器停止计数
}

//============================================================================
// 名称:drv_delay_ms
// 功能:ms级延时
// 参数:nms:要延时的毫秒数
// 返回:无
// 说明:最大65635ms
//============================================================================
void drv_delay_ms( INT32U nms )
{
    if( nms > 65535 )
    {
        nms = 65535;
    }
     TIM5->PSC = 8400-1;                                        // 定时器时钟频率84MHz,分频后为2KHz
    TIM5->CNT = 0;
    TIM5->ARR = nms;
    TIM5->CR1 = 0x01;                  // 开始计数
    while( 0 == (TIM5->SR) );
    TIM5->CR1 = 0;                // 停止计数
    TIM5->SR = 0;
}





正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165475
金钱
165475
注册时间
2010-12-1
在线时间
2115 小时
发表于 2020-8-18 00:55:24 | 显示全部楼层
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-4-30 15:48

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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