风力摆代码,直接用
单片机源程序如下:
- /*!
- * COPYRIGHT NOTICE
- * Copyright (c) 2013,山外科技
- * All rights reserved.
-
- * 除注明出处外,以下所有内容版权均属山外科技所有,未经允许,不得用于商业用途,
- * 修改内容时必须保留山外科技的版权声明。
- *
- * @file main.c
- * @brief 山外KL26 平台主程序
- * @author 山外科技
- * @version v5.2
- * @date 2014-10-26
- */
- #include "common.h"
- #include "include.h"
- #define MOTOR_HZ (20*1000)
- #define XOUT ADC0_SE9
- #define YOUT ADC0_SE13
- #define ZOUT ADC0_SE15
- #define Gyro1 ADC0_SE14
- #define Gyro2 ADC0_SE12
- #define Ang ADC0_SE11
- Site_t site_lcd;
- uint16 x,y,z,gyro1,gyro2,ang; //保存ADC转换结果
- //子函数声明
- void LCD_show_int();//LCD显示字符
- void PIT_IRQHandler(void);//中断函数
- void move();//移动
- void main()
- {
- //陀螺仪初始化
- adc_init(XOUT);
- adc_init(YOUT);
- adc_init(ZOUT);
- adc_init(Gyro2); //角加速度 Angular2
- adc_init(Gyro1); //角加速度 Angular1
- adc_init(Ang);
-
- //LCD初始化
- LCD_init();
- LCD_show_int();
-
- //初始化 电机 PWM
- tpm_pwm_init(TPM0, TPM_CH0,MOTOR_HZ,100);
- tpm_pwm_init(TPM0, TPM_CH1,MOTOR_HZ,100);
- tpm_pwm_init(TPM0, TPM_CH4,MOTOR_HZ,100);
- tpm_pwm_init(TPM0, TPM_CH5,MOTOR_HZ,100);
- gpio_init(PTC12,GPO,0);
-
- /********************************开PIT中断******************************/
- pit_init_ms(PIT0, 10); //初始化PIT0,定时时间为: ??ms
-
- set_vector_handler(PIT_VECTORn ,PIT_IRQHandler); //设置PIT0的中断服务函数为 PIT_IRQHandler
- enable_irq (PIT_IRQn); //使能PIT0中断
- while(1)
- {
- site_lcd.x = 24;
- site_lcd.y = 2;
- x = adc_once(XOUT,ADC_8bit);
- LCD_num_C (site_lcd, x , FCOLOUR , BCOLOUR);
-
- site_lcd.y += 15;
- y = adc_once(YOUT,ADC_8bit);
- LCD_num_C (site_lcd, y , FCOLOUR , BCOLOUR);
-
- site_lcd.y += 15;
- z = adc_once(ZOUT,ADC_8bit);
- LCD_num_C (site_lcd, z , FCOLOUR , BCOLOUR);
-
- site_lcd.y += 15;
- gyro1 = adc_once(Gyro1,ADC_8bit);
- LCD_num_C (site_lcd, gyro1 , FCOLOUR , BCOLOUR);
-
- site_lcd.y += 15;
- gyro2 = adc_once(Gyro2,ADC_8bit);
- LCD_num_C (site_lcd, gyro2 , FCOLOUR , BCOLOUR);
-
- site_lcd.y += 15;
- ang = adc_once(Ang,ADC_8bit);
- LCD_num_C (site_lcd, ang , FCOLOUR , BCOLOUR);
- }
- }
- /******************************LCD初始化****************************/
- void LCD_show_int()
- {
- LCD_init();
- site_lcd.x = 0;
- site_lcd.y = 2;
- LCD_str(site_lcd, "X", BLUE, GREEN);
- site_lcd.y = 17;
- LCD_str(site_lcd, "Y", BLUE, GREEN);
- site_lcd.y = 32;
- LCD_str(site_lcd, "Z", BLUE, GREEN);
- site_lcd.y = 47;
- LCD_str(site_lcd, "G1", BLUE, GREEN);
- site_lcd.y = 62;
- LCD_str(site_lcd, "G2", BLUE, GREEN);
- site_lcd.y = 77;
- LCD_str(site_lcd, "A", BLUE, GREEN);
- site_lcd.y = 92;
- LCD_str(site_lcd, "k", BLUE, GREEN);
- site_lcd.y = 107;
- LCD_str(site_lcd, "dp", BLUE, GREEN);
- site_lcd.x=68;
- site_lcd.y = 2;
- LCD_str(site_lcd, "wp", BLUE, GREEN);//位置PD
- site_lcd.y = 17;
- LCD_str(site_lcd, "wd", BLUE, GREEN);
- site_lcd.y = 32;
- LCD_str(site_lcd, "zl", BLUE, GREEN);//速度
- site_lcd.y = 47;
- LCD_str(site_lcd, "sp", BLUE, GREEN);
- site_lcd.y = 62;
- LCD_str(site_lcd, "h1", BLUE, GREEN);//环岛
- site_lcd.y = 77;
- LCD_str(site_lcd, "h2", BLUE, GREEN);
- site_lcd.y = 92;
- LCD_str(site_lcd, "h3", BLUE, GREEN);
- site_lcd.y = 107;
- LCD_str(site_lcd, "D", BLUE, GREEN);
- }
- void PIT_IRQHandler(void)
- {
- //PIT0 和 PIT1 共用相同中断号,所以两者都共用相同中断函数,需要根据标志位来判断是由哪个PIT触发中断
- if(PIT_TFLG(PIT0) == 1 ) //判断是否 PIT0 进入中断
- {
- move();
- PIT_Flag_Clear(PIT0); //清中断标志位
- }
- }
- void move()
- {
- tpm_pwm_duty(TPM0, TPM_CH0,70);
- tpm_pwm_duty(TPM0, TPM_CH1,70);
- tpm_pwm_duty(TPM0, TPM_CH4,70);
- tpm_pwm_duty(TPM0, TPM_CH5,70);
- }
复制代码
所有资料51hei提供下载:
风力摆.rar
(854.08 KB, 下载次数: 37)
|