//头文件调用
#include "usually.h"
#include "usart.h"
#include "rtc.h"
//声明变量
extern struct Data_Time timer;
extern int MC_state;
extern int Delay_time;
extern uint16_t MC_count;
extern int YK1_state; //遥控变位记录
extern int YK2_state;
extern int YK3_state;
extern int YK4_state;
extern int YK5_state;
extern int Alarm_state;
//函数申明
void Init_LED(void);
void Init_NVIC(void);
void Delay(vu32 nCount);
void Delay_Ms(uint16_t time);
void Delay_Us(uint16_t time);
void Delay_all(uint8_t count);
void hard_Init_Test(void);
void FK_Control_Deal(int _MC_state);
void moto_step(int a1,int a2,int b1,int b2,int t);
void one_step_Z(int t);
void one_step_F(int t);
void Alarm_Voice();
/*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
** 函数名称: main
** 功能描述: 主函数入口
** 参数描述:无
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
int main(void)
{
uint8_t t=0;
SystemInit(); //系统时钟配置
Init_NVIC(); //中断向量表注册函数
Init_Usart(); //串口引脚配置
Usart_Configure(9600); //串口配置 设置波特率为115200
Init_LED(); //LED初始化
Init_RTC(); //内部RTC初始化
//Time_Update(2013,6,26,0,0,0);
//uint8_t ReceiveDate;
hard_Init_Test();//硬件初始化测试
Alarm_Voice(6,200,200);
while(1)
{
int for_while=52;
while(for_while-->0)
{
one_step_F(500);
}
Delay_Ms(2000);
for_while=52;
while(for_while-->0)
{
one_step_Z(500);
moto_step(0,0,0,0,0);
}
Delay_Ms(2000);
}
// Delay_Ms(5);
// if(Alarm_state==0)
// {
// Alarm_Voice(8,200,100);
// Alarm_state=3;
// }
// else
// {
// if(Alarm_state==1)
// {
// Alarm_Voice(3,200,1);
// Alarm_state=3;
// }
// else
// {
// LED2=1;
// }
// }
// if(t!=timer.sec)
// {
// t=timer.sec;
// LED1=~LED1;
// LED2=~LED2;
// }
//}
}
void one_step_Z(int t)
{
moto_step(1,0,0,0,t);//A+
moto_step(1,0,1,0,t);//A+B+
moto_step(0,0,1,0,t);//B+
moto_step(0,1,1,0,t);//A-B+
moto_step(0,1,0,0,t);//A-
moto_step(0,1,0,1,t);//A-B-
moto_step(0,0,0,1,t);//B-
moto_step(1,0,0,1,t);//A+B-
}
void one_step_F(int t)
{
moto_step(1,0,0,1,t);//A+B-
moto_step(0,0,0,1,t);//B-
moto_step(0,1,0,1,t);//A-B-
moto_step(0,1,0,0,t);//A-
moto_step(0,1,1,0,t);//A-B+
moto_step(0,0,1,0,t);//B+
moto_step(1,0,1,0,t);//A+B+
moto_step(1,0,0,0,t);//A+
}
void moto_step(int a1,int a2,int b1,int b2,int t)
{
YX1=a1;
YX2=a2;
YX3=b1;
YX4=b2;
Delay_Us(t);
}
void Alarm_Voice(int _t1,int _t2,int _t3)
{
int i=0;
for(i=0;i<_t1;i++)
{
LED2=0;
Delay_Ms(_t2);
LED2=1;
Delay_Ms(_t3);
}
}
/*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
** 函数名称: 负控处理函数
** 功能描述: 主函数入口
** 参数描述:无
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
void FK_Control_Deal(int _MC_state)
{
int i=0;
if(_MC_state != 0) //脉冲输入
{
for(i=0;i<MC_count*2;i++)
{
Delay_Ms(Delay_time*100);
switch((int)_MC_state)
{
case 1:
{
MC1=~MC1;
}break;
case 2:
{
MC2=~MC2;
}break;
case 3:
{
MC3=~MC3;
}break;
case 4:
{
MC4=~MC4;
}break;
case 0x12:
{
MC1=~MC1;
MC2=~MC2;
}break;
case 0x13:
{
MC1=~MC1;
MC3=~MC3;
}break;
case 0x14:
{
MC1=~MC1;
MC4=~MC4;
}break;
case 0x23:
{
MC2=~MC2;
MC3=~MC3;
}break;
case 0x24:
{
MC2=~MC2;
MC4=~MC4;
}break;
case 0x34:
{
MC3=~MC3;
MC4=~MC4;
}break;
case 0x33:
{
MC1=~MC1;
MC2=~MC2;
MC3=~MC3;
}break;
case 0x44:
{
MC1=~MC1;
MC2=~MC2;
MC3=~MC3;
MC4=~MC4;
}break;
default:break;
}
}
MC_count=0;
MC_state=0;
}
}
/*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
** 函数名称: hard_Init_Test
** 功能描述:
** 参数描述:无
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
void hard_Init_Test()
{
LED1=0;
LED2=1;
GPIO_ResetBits(GPIOA, GPIO_Pin_4);
YX1=0;
YX2=1;
YX3=0;
YX4=0;
YX5=0;
//YX6=0;
//YX7=0;
MC1=0;
MC2=0;
MC3=0;
MC4=0;
Delay_all(10);
YX1=1;
//YX2=1;
YX3=1;
YX4=1;
YX5=1;
//YX6=1;
//YX7=1;
MC1=1;
MC2=1;
MC3=1;
MC4=1;
Delay_all(10);
}
/*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
** 函数名称: LED_Init
** 功能描述: LED IO引脚配置
** 参数描述:无
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
void Init_LED(void)
{
GPIO_InitTypeDef GPIO_InitStructure; //定义一个GPIO结构体变量
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE); //使能各个端口时钟,重要!!!
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12 ; //配置LED端口挂接到6、12、13端口
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //通用输出推挽
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; //配置端口速度为50M
GPIO_Init(GPIOC, &GPIO_InitStructure); //将端口GPIOD进行初始化配置
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7
|GPIO_Pin_8|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; // 下拉输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;//GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; // 上拉输入
//GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
}
/*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
** 函数名称: NVIC_Configuration
** 功能描述: 系统中断配置
** 参数描述:无
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
void Init_NVIC(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
#ifdef VECT_TAB_RAM //向量表基地址选择
NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0); //将0x20000000地址作为向量表基地址(RAM)
#else
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0); //将0x08000000地址作为向量表基地址(FLASH)
#endif
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_3); //先占优先级1位,从优先级3位
NVIC_InitStructure.NVIC_IRQChannel = RTC_IRQn;//USART1_IRQn;; //RTC全局中断
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //先占优先级1位,从优先级3位
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //先占优先级0位,从优先级4位
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能该通道中断
NVIC_Init(&NVIC_InitStructure); //根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn; //RTC全局中断
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; //先占优先级1位,从优先级3位
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //先占优先级0位,从优先级4位
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能该通道中断
NVIC_Init(&NVIC_InitStructure);
}
void Delay(vu32 nCount)
{
for(; nCount != 0; nCount--);
}
void Delay_all(uint8_t count)
{
int i=0;
for(i=0;i<count;i++)
{
Delay(0xfffff);
}
}
/*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
** 函数名称: Delay_Ms_Ms
** 功能描述: 延时1MS (可通过仿真来判断他的准确度)
** 参数描述:time (ms) 注意time<65535
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
void Delay_Ms(uint16_t time) //延时函数
{
uint16_t i,j;
for(i=0;i<time;i++)
for(j=0;j<10260;j++);
}
/*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
** 函数名称: Delay_Ms_Us
** 功能描述: 延时1us (可通过仿真来判断他的准确度)
** 参数描述:time (us) 注意time<65535
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
void Delay_Us(uint16_t time) //延时函数
{
uint16_t i,j;
for(i=0;i<time;i++)
for(j=0;j<9;j++);
}
/*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
End:-D:-D:-D:-D:-D:-D:-D:-D:-D:-D:-D:-D:-D:-D:-D:-D:-D:-D:-D:-D
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
|