赞
踩
我们以让电机以变化的占空比转动 并将占空比显示在屏幕上举例。
我们可以写出一下
- #include "headfile.h"
-
- uint16 duty;//定义占空比
- /*
- *关于内核频率的设定,可以查看board.h文件
- *在board_init中,已经将P54引脚设置为复位
- *如果需要使用P54引脚,可以在board.c文件中的board_init()函数中删除SET_P54_RESRT即可
- */
-
-
- void main()
- {
-
- sys_clk = 30000000; //设置系统频率为30MHz
-
- board_init(); //初始化寄存器
- //此处编写用户代码(例如:外设初始化代码等)
- pwm_init(PWM3_P63,17000,0);
- pwm_init(PWM4_P64,17000,0);
- lcd_init();
- lcd_clear(WHITE);
- while(1)
- {
- //此处编写需要循环执行的代码
-
- if(duty >= 1000)
- {
- duty = 0;
- }
- duty += 100;
-
- delay_ms(1000);
- }
-
- pwm_duty(PWM3_P63,0);
- pwm_duty(PWM4_P64,duty);
- lcd_showstr(1,0,"duty is");
- lcd_showuint16(0,1,duty);
-
- }
- }
这个看起来不复杂,但是以后增加更多的模块,如果还放在main.c,整个代码就看着很杂乱,因此需要模块化编程。
- //My.c
- #include "My.h"
-
- //My.h
- #ifndef __MY_H_
- #define __MY_H_
- #include "headfile.h"
-
-
-
-
- #endif
-
注意:.h文件最后一行必须是空行,否则会报错。
在My.c里编写初始化代码:
- void all_init()
- {
-
- pwm_init(PWM3_P63,17000,0);
- pwm_init(PWM4_P64,17000,0);
- lcd_init();
- lcd_clear(WHITE);
- }
在My.h中写对应的声明:
void all_init();
写剩下的代码:
- uint16 duty = 0;//定义占空比
-
- void duty_change(void)
- {
- if(duty >= 1000)
- {
- duty = 0;
- }
- duty += 100;
-
- delay_ms(1000);
-
- }
-
- void mitor_duty(void)
- {
- pwm_duty(PWM3_P63,0);
- pwm_duty(PWM4_P64,duty);
- lcd_showstr(1,0,"duty is");
- lcd_showuint16(0,1,duty);
-
- }
.h写声明
- extern uint16 duty;//定义占空比
-
- void duty_change(void);
-
- void mitor_duty(void);
main.c:
- #include "headfile.h"
-
-
- void main()
- {
-
- sys_clk = 30000000; //设置系统频率为30MHz
-
- board_init(); //初始化寄存器
- //此处编写用户代码(例如:外设初始化代码等)
- all_init();
-
- while(1)
- {
- //此处编写需要循环执行的代码
-
- duty_change(void);
-
- mitor_duty(void);
-
-
- }
- }
My.c:
-
- #include "My.h"
-
- uint16 duty = 0;//定义占空比
-
- void all_init()
- {
-
- pwm_init(PWM3_P63,17000,0);
- pwm_init(PWM4_P64,17000,0);
- lcd_init();
- lcd_clear(WHITE);
- }
-
- void duty_change(void)
- {
- if(duty >= 1000)
- {
- duty = 0;
- }
- duty += 100;
-
- delay_ms(1000);
-
- }
-
- void mitor_duty(void)
- {
- pwm_duty(PWM3_P63,0);
- pwm_duty(PWM4_P64,duty);
- lcd_showstr(1,0,"duty is");
- lcd_showuint16(0,1,duty);
-
- }
My.h:
- //My.h
- #ifndef __MY_H_
- #define __MY_H_
- #include "headfile.h"
-
-
- extern uint16 duty;//定义占空比
-
- void all_init();
- void duty_change(void);
- void mitor_duty(void);
-
- #endif
可以看出来main.c十分整洁
文章分为三个层次
速通版是希望通过简化的步骤搭建出寻迹小车,进而了解整个智能车是如何实现的,快速上手,为后续参与智能车竞赛做基础。
如果只是为了完成学校智能车初期培训,做出能简单循迹的小车,可以看这个速通版。
全程引导篇是讲了做出能够完赛的智能车的整个过程,大部分文章只是简单点拨一下,但是附上了相关的文章链接,方便根据自己的情况深入了解。
全程引导篇,能够带你比较系统地了解整个智能车的制作过程,推荐备赛初期或者有车模之后学习。
详细讲解篇是全程引导篇的补充,由于全程引导篇是引导性质,文章内容只是点拨,缺乏相应的原理或代码讲解,因此写详细讲解篇作为补充。
详细讲解篇会渗透在全程引导篇中。
智能车模块详解——数据存储与读写(eeprom/flash)
(更新中)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。