当前位置:   article > 正文

智能车入门补充篇——模块化编程_智能小车代码 csdn

智能小车代码 csdn

我们以让电机以变化的占空比转动 并将占空比显示在屏幕上举例。

我们可以写出一下

简单的程序

  1. #include "headfile.h"
  2. uint16 duty;//定义占空比
  3. /*
  4. *关于内核频率的设定,可以查看board.h文件
  5. *在board_init中,已经将P54引脚设置为复位
  6. *如果需要使用P54引脚,可以在board.c文件中的board_init()函数中删除SET_P54_RESRT即可
  7. */
  8. void main()
  9. {
  10. sys_clk = 30000000; //设置系统频率为30MHz
  11. board_init(); //初始化寄存器
  12. //此处编写用户代码(例如:外设初始化代码等)
  13. pwm_init(PWM3_P63,17000,0);
  14. pwm_init(PWM4_P64,17000,0);
  15. lcd_init();
  16. lcd_clear(WHITE);
  17. while(1)
  18. {
  19. //此处编写需要循环执行的代码
  20. if(duty >= 1000)
  21. {
  22. duty = 0;
  23. }
  24. duty += 100;
  25. delay_ms(1000);
  26. }
  27. pwm_duty(PWM3_P63,0);
  28. pwm_duty(PWM4_P64,duty);
  29. lcd_showstr(1,0,"duty is");
  30. lcd_showuint16(0,1,duty);
  31. }
  32. }

这个看起来不复杂,但是以后增加更多的模块,如果还放在main.c,整个代码就看着很杂乱,因此需要模块化编程

首先建立空白的.c.h文件

  1. //My.c
  2. #include "My.h"
  1. //My.h
  2. #ifndef __MY_H_
  3. #define __MY_H_
  4. #include "headfile.h"
  5. #endif

注意:.h文件最后一行必须是空行,否则会报错。

在My.c里编写初始化代码:
 

  1. void all_init()
  2. {
  3. pwm_init(PWM3_P63,17000,0);
  4. pwm_init(PWM4_P64,17000,0);
  5. lcd_init();
  6. lcd_clear(WHITE);
  7. }

在My.h中写对应的声明:

void all_init();

写剩下的代码:

  1. uint16 duty = 0;//定义占空比
  2. void duty_change(void)
  3. {
  4. if(duty >= 1000)
  5. {
  6. duty = 0;
  7. }
  8. duty += 100;
  9. delay_ms(1000);
  10. }
  11. void mitor_duty(void)
  12. {
  13. pwm_duty(PWM3_P63,0);
  14. pwm_duty(PWM4_P64,duty);
  15. lcd_showstr(1,0,"duty is");
  16. lcd_showuint16(0,1,duty);
  17. }

.h写声明

  1. extern uint16 duty;//定义占空比
  2. void duty_change(void)
  3. void mitor_duty(void)

接下来是完整的代码:

main.c:

  1. #include "headfile.h"
  2. void main()
  3. {
  4. sys_clk = 30000000; //设置系统频率为30MHz
  5. board_init(); //初始化寄存器
  6. //此处编写用户代码(例如:外设初始化代码等)
  7. all_init();
  8. while(1)
  9. {
  10. //此处编写需要循环执行的代码
  11. duty_change(void);
  12. mitor_duty(void);
  13. }
  14. }

My.c:

  1. #include "My.h"
  2. uint16 duty = 0;//定义占空比
  3. void all_init()
  4. {
  5. pwm_init(PWM3_P63,17000,0);
  6. pwm_init(PWM4_P64,17000,0);
  7. lcd_init();
  8. lcd_clear(WHITE);
  9. }
  10. void duty_change(void)
  11. {
  12. if(duty >= 1000)
  13. {
  14. duty = 0;
  15. }
  16. duty += 100;
  17. delay_ms(1000);
  18. }
  19. void mitor_duty(void)
  20. {
  21. pwm_duty(PWM3_P63,0);
  22. pwm_duty(PWM4_P64,duty);
  23. lcd_showstr(1,0,"duty is");
  24. lcd_showuint16(0,1,duty);
  25. }

My.h:

  1. //My.h
  2. #ifndef __MY_H_
  3. #define __MY_H_
  4. #include "headfile.h"
  5. extern uint16 duty;//定义占空比
  6. void all_init();
  7. void duty_change(void)
  8. void mitor_duty(void)
  9. #endif

可以看出来main.c十分整洁

参考文章

智能车入门——模块化编程

 [5-1] 模块化编程_哔哩哔哩_bilibili


系列文章目录

文章分为三个层次

速通版是希望通过简化的步骤搭建出寻迹小车,进而了解整个智能车是如何实现的,快速上手,为后续参与智能车竞赛做基础。

如果只是为了完成学校智能车初期培训,做出能简单循迹的小车,可以看这个速通版。

全程引导篇是讲了做出能够完赛的智能车的整个过程,大部分文章只是简单点拨一下,但是附上了相关的文章链接,方便根据自己的情况深入了解。

全程引导篇,能够带你比较系统地了解整个智能车的制作过程,推荐备赛初期或者有车模之后学习。

详细讲解篇是全程引导篇的补充,由于全程引导篇是引导性质,文章内容只是点拨,缺乏相应的原理或代码讲解,因此写详细讲解篇作为补充。

详细讲解篇会渗透在全程引导篇中。


速通版


智能小车速通版——手把手教程


全程引导篇


智能车入门——IDE安装以及库函数选用 

智能车入门——编程语言(c)的学习

智能车入门——简单驱动常用模块

智能车入门——车模器件篇

智能车入门——模块化编程

智能车入门——跑车前的零碎知识

智能车入门——电磁循迹原理与实现

智能车入门——实现低速完赛


详细讲解篇


智能车入门补充篇

智能车入门补充篇——逐飞开源库介绍

智能车入门补充篇——常见宏定义和使用

智能车入门补充篇——模块化编程

智能车入门补充篇——电感值处理、转向控制与巡线

智能车入门补充篇——元素识别

智能车模块详解——按键及按键调参

智能车模块详解——数据存储与读写(eeprom/flash)

智能车入门——I/O、PWM

智能车入门——中断

智能车入门——编码器

智能车入门——陀螺仪

智能车入门——摄像头和CCD

智能车入门——舵机

(更新中)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/463652
推荐阅读
相关标签
  

闽ICP备14008679号