嵌入式开发-(江苏海洋大学)-期末具体整理

一: 电机

int main(void)
{ 
	SysTick_Init();   //  系统滴答定时器初始化
    lcd_init();       //  液晶初始化
	lcd_clear(Black);   //  设置液晶背景
	LCD_DrawRectangle(0,0, 479, 271, Green);
	LCD_DrawRectangle(5,5, 474, 266, Green);
	LCD_ShowString(150, 0, "--STM32F407 实验开发平台--", Red, Black);	
	LCD_ShowString(170,30, "直流电机正反转实验",White, Black);
    LCD_ShowString(10, 60, "由于IO口复用,所以请打开所有模块的电源开关", Red, Black); 
    LCD_ShowString(10, 100, "现象:", Red, Black); 
    LCD_ShowString(10, 120, "1.按下S2电机正转", Red, Black); 
    LCD_ShowString(10, 140, "2.按下S3电机反转", Red, Black);
    LCD_ShowString(10, 160, "3.按下S4电机启动", Red, Black);
    LCD_ShowString(10, 180, "4.按下S1电机停止", Red, Black);
	KEYGpio_Init();     //  按键IO口初始化
	DCMotorGpio_Init();  //  初始化直流电机引脚
  	while(1)
	{
        //  S2正转
        if (KEY_S2_READ == 0)
        {
            Delay_ms(10);
            if (KEY_S2_READ == 0)
            {
                LCD_ShowString(200, 200, "电机正转", White, Black);
                DCMOTOR_A_H;
		        t=1;
                while(1)
                {
                   DCMOTOR_B_L;
                   Delay_ms(10);
                   DCMOTOR_B_H;
                   Delay_ms(90);
		           if(KEY_S1_READ==0)
		           {
			          Delay_ms(10);
			          if(KEY_S1_READ==0)
			         {  
				        t=0;
				        k=1;
				        break;					 
			         }
		           }
               }
	       }
       }
        //  S3反转
        if (KEY_S3_READ == 0)
        {
            Delay_ms(10);
            if (KEY_S3_READ == 0)
            {
                LCD_ShowString(200, 200, "电机反转", White, Black);
			    t=1;
			    DCMOTOR_B_H;
                while(1)
                {
                    DCMOTOR_A_L;
                    Delay_ms(10);
                    DCMOTOR_A_H;
                    Delay_ms(90);
		            if(KEY_S1_READ==0)
			       {
				      Delay_ms(10);
				      if(KEY_S1_READ==0)
				      {  
					     t=0;
				         k=2;
					     break;					 
				      }
			       }
                }
            }
        }
       LCD_ShowString(200, 200, "电机停止", White, Black);
	  //  S4启动
	 if(KEY_S4_READ==0)
	 {
		 Delay_ms(10);
	     if(KEY_S4_READ==0)
		 {
			if(k==1)
			 {
				 LCD_ShowString(200, 200,"继续正转", White, Black);
				 DCMOTOR_A_H;
				 t=1;
                      while(1)
                      {
                        DCMOTOR_B_L;
                        Delay_ms(10);
                        DCMOTOR_B_H;
                        Delay_ms(90);
			            if(KEY_S1_READ==0)
				       {
					      Delay_ms(10);
					      if(KEY_S1_READ==0)
					      {  
						     t=0;
					         k=1;
						     break;					 
					     }
				       }
                     } 
			  }
	      }
		else if(k==2)
		{
			LCD_ShowString(200, 200, "继续反转", White, Black);
            t=1;
		    DCMOTOR_B_H;
            while(1)
            {
                DCMOTOR_A_L;
                Delay_ms(10);
                DCMOTOR_A_H;
                Delay_ms(90);
			    if(KEY_S1_READ==0)
			    {
			        Delay_ms(10);
				    if(KEY_S1_READ==0)
				   {  
			           t=0;
				       k=2;
				       break;					 
				   }
		        }
           }
	   }
	}
	if(t==0)
	{
		DCMOTOR_A_L;
        DCMOTOR_B_L;
        LCD_ShowString(200, 200, "电机停止", White, Black);	
	} 
  }
}
#include "main.h"
unsigned char  startflag = 0;
unsigned short Speed = 0;
unsigned char  Flag_1s = 0;
int main(void)
{ 
	unsigned short num = 0;
    unsigned char buf[5] = {0};
    SysTick_Init();                                  //  系统滴答定时器初始化
	lcd_init();                                      //  液晶初始化
	lcd_clear(Black);                                //  设置液晶背景
	LCD_DrawRectangle(0,0, 479, 271, Green);
	LCD_DrawRectangle(5,5, 474, 266, Green);
	LCD_ShowString(150, 0, "--STM32F407 实验开发平台--", Red, Black);	
	LCD_ShowString(170,30, "直流电机测速实验",White, Black);
    LCD_ShowString(10, 60, "由于IO口复用,所以请打开所有模块的电源开关", Red, Black); 
    
	LCD_ShowString(10, 100, "现象:", Red, Black); 
    LCD_ShowString(10, 120, "1.按下S2电机开始转动,1S后液晶上显示当前转速", Red, Black); 
    LCD_ShowString(10, 140, "2.按下S3电机停止转动,液晶上转速为0", Red, Black);

	KEYGpio_Init();                                   //  按键IO口初始化
	DCMotorGpio_Init();                               //  初始化直流电机引脚
	while(1)
	{
        LCD_ShowString(150, 180, "当前转速:(转/分钟)", White, Black);
        LCD_ShowString(200, 200, buf, White, Black);
        //  S2开始
        if (KEY_S2_READ == 0)
        {
            Delay_ms(10);
            
            if (KEY_S2_READ == 0)
            {
                startflag = 1;                
            }
        }
        //  S3停止
        if (KEY_S3_READ == 0)
        {
            Delay_ms(10);
            
            if (KEY_S3_READ == 0)
            {
                startflag = 0;
                
                buf[0] = '0';
                buf[1] = '0';
                buf[2] = '0';
                buf[3] = '0';
                buf[4] = '0'; 
                
                DCMOTOR_A_L;
                DCMOTOR_B_L;                
            }
        }
        if(Flag_1s == 1)
        {
            num = 100;
            num = 60 * (Speed / 4);
            Speed = 0;
            buf[0] = num / 10000 + '0';
            buf[1] = num % 10000 / 1000 + '0';
            buf[2] = num % 1000 / 100 + '0';
            buf[3] = num % 100 / 10 + '0';
            buf[4] = num % 10 + '0';                
            LCD_ShowString(150, 180, "当前转速:(转/分钟)", White, Black);
            LCD_ShowString(200, 200, buf, White, Black);
            Flag_1s = 0;
        }        
	}
}

 

 一:人体红外

int main(void)
{ 
    unsigned char value=0;
    unsigned short t;
    unsigned char buf[10]={0};
    SysTick_Init();      //  系统滴答定时器初始化
    lcd_init();      //  液晶初始化
    lcd_clear(Black);   //  设置液晶背景
	LCD_DrawRectangle(0,0, 479, 271, Green);
    LCD_DrawRectangle(5,5, 474, 266, Green);
	LCD_ShowString(150, 0, "--STM32F407 实验开发平台--", Red, Black);	
	LCD_ShowString(170,30, "人体红外实验",White, Black);
    LCD_ShowString(10, 60, "由于IO口复用,所以请打开所有模块的电源开关", Red, Black); 
    LCD_ShowString(10, 100, "现象:", Red, Black); 
    LCD_ShowString(10, 120, "1.用手在传感器正上方来回摆动", Red, Black); 
    LCD_ShowString(10, 140, "2.超过阀值液晶屏上显示报警信息", Red, Black);
    LCD_ShowString(10, 160, "3.显示两次人体移动感应的间隔时间,单位是ms", Red, Black);
	HumPIRGpio_Init();  //  人体红外IO口初始化
    while(1)
	{
		t=0;
        value= HUMPIRIN();
        if ( value == 1)
        {
          LCD_ShowString(200, 180, "Hum Alarm!", White, Black);
		  Delay_ms(500);
		  LCD_ShowString(200, 180, "Hum Normal", White, Black);
		  while(1)
		  {						
			 if (SysTick_Config(SystemCoreClock / 1000))
             {
                while (1); 
             }
			 t++;
			 value= HUMPIRIN();
			 if ( value== 1)
			 {
				 break;
			 }
          }
       }
	t=t-48+'0';
	buf[0] =t / 1000000000 + '0';
    buf[1] =t % 1000000000/ 100000000+ '0';
    buf[2] =t % 100000000/ 10000000+ '0';
    buf[3] =t % 10000000/ 1000000+ '0'; 
	buf[4] =t % 1000000/ 100000+ '0'; 
	buf[5] =t % 100000/ 10000+ '0';
    buf[6] =t % 10000/ 1000+ '0';
    buf[7] =t % 1000/ 100+ '0';
    buf[8] =t % 100 / 10 + '0';
	buf[9] =t % 10 + '0'; 
    LCD_ShowString(200, 200, buf, White, Black);
  }
}

 三:LED TIM

int main(void)
{ 
    TIM2_Configuration();                                               
    TIM3_Configuration();
    TIM4_Configuration();
    TIM5_Configuration();
    LEDGpio_Init();                                      
    while (1);
}
//TIM2
void TIM2_Configuration(void)
{
    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
    NVIC_InitTypeDef NVIC_InitStructure;
    /* Configure one bit for preemption priority */
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
    /* Timer2中断*/
    NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);
    /* TIM2 clock enable */
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
    /* 基础设置*/
    TIM_TimeBaseStructure.TIM_Period = 1000-1;		//	计数值
    TIM_TimeBaseStructure.TIM_Prescaler = 36000-1;		//	预分频
    TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;  					
    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //	向上计数
    TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
    /*使能预装载*/
    TIM_ARRPreloadConfig(TIM2, ENABLE);
    /*预先清除所有中断位*/
    TIM_ClearITPendingBit(TIM2,TIM_IT_Update);
    /* 溢出配置中断*/
    TIM_ITConfig(TIM2,TIM_IT_Update, ENABLE);
    /* 允许TIM2开始计数 */
    TIM_Cmd(TIM2, ENABLE);
}
//TIM3
void TIM3_Configuration(void)
{
    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
    NVIC_InitTypeDef NVIC_InitStructure;
    /* Configure one bit for preemption priority */
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
    /* Timer3中断*/
    NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);
    /* TIM3 clock enable */
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
    /* 基础设置*/
    TIM_TimeBaseStructure.TIM_Period = 500-1;		//	计数值
    TIM_TimeBaseStructure.TIM_Prescaler = 36000-1;		//	预分频
    TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;  					
    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //	向上计数
    TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
    /*使能预装载*/
    TIM_ARRPreloadConfig(TIM3, ENABLE);
    /*预先清除所有中断位*/
    TIM_ClearITPendingBit(TIM3,TIM_IT_Update);
    /* 溢出配置中断*/
    TIM_ITConfig(TIM2,TIM_IT_Update, ENABLE);
    /* 允许TIM3开始计数 */
    TIM_Cmd(TIM3, ENABLE);
}
//TIM4
void TIM4_Configuration(void)
{
    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
    NVIC_InitTypeDef NVIC_InitStructure;
    /* Configure one bit for preemption priority */
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
    /* Timer4中断*/
    NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);
    /* TIM4 clock enable */
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);
    /* 基础设置*/
    TIM_TimeBaseStructure.TIM_Period = 250-1;		//	计数值
    TIM_TimeBaseStructure.TIM_Prescaler = 36000-1;		//	预分频
    TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;  					
    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //	向上计数
    TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
    /*使能预装载*/
    TIM_ARRPreloadConfig(TIM4, ENABLE);
    /*预先清除所有中断位*/
    TIM_ClearITPendingBit(TIM4,TIM_IT_Update);
    /* 溢出配置中断*/
    TIM_ITConfig(TIM4,TIM_IT_Update, ENABLE);
    /* 允许TIM4开始计数 */
    TIM_Cmd(TIM4, ENABLE);
}
//TIM5
void TIM5_Configuration(void)
{
    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
    NVIC_InitTypeDef NVIC_InitStructure;
    /* Configure one bit for preemption priority */
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
    /* Timer5中断*/
    NVIC_InitStructure.NVIC_IRQChannel = TIM5_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);
    /* TIM5 clock enable */
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
    /* 基础设置*/
    TIM_TimeBaseStructure.TIM_Period = 125-1;		//	计数值
    TIM_TimeBaseStructure.TIM_Prescaler = 36000-1;		//	预分频
    TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;  					
    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //	向上计数
    TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
    /*使能预装载*/
    TIM_ARRPreloadConfig(TIM5, ENABLE);
    /*预先清除所有中断位*/
    TIM_ClearITPendingBit(TIM5,TIM_IT_Update);
    /* 溢出配置中断*/
    TIM_ITConfig(TIM5,TIM_IT_Update, ENABLE);
    /* 允许TIM5开始计数 */
    TIM_Cmd(TIM5, ENABLE);
}

 

四: USART

int main(void)
{ 
  unsigned short crc16, bytes;
  SysTick_init();		//系统时钟  1ms  
  lcd_init();         	//液晶初始化
  lcd_clear(Black);   	//设置液晶背景
  Uart1_Init();			//串口转WiFi  或者 语音输入
  Uart3_Init();			//RS485通信
  Uart6_Init();			//语音合成播报
  Relay_Init();			//继电器
  LED_Init();  
  Uart3_Write("HELLO world!\n",strlen("HELLO world!\n"));
  while(1)
  {
    read_report();
  }
}

 

 

 

 

五: IIC 

int main(void)
{
    unsigned char value = 0;
    SysTick_Init();                                                  
    LEDGpio_Init();
    I2C_24c02Init();
    I2C_EE_BufferWrite(Writebuf, 0, 10);
    Delay_ms(10);
    I2C_EE_BufferRead(Readbuf, 0, 10);
   
    value = strcmp((char *)Readbuf, (char *)Writebuf);
    if (value == 0)
    {
        LED1_ON;
    }
    else
    {
        LED2_ON;
    }
    while (1);
}

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值