我们以让电机以变化的占空比转动 并将占空比显示在屏幕上举例。
我们可以写出一下
简单的程序
#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,整个代码就看着很杂乱,因此需要模块化编程。
首先建立空白的.c.h文件
//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)
(更新中)
评论(0)
您还未登录,请登录后发表或查看评论