新手上路
- 积分
- 33
- 金钱
- 33
- 注册时间
- 2020-5-29
- 在线时间
- 11 小时
|
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;
}
|
|