电机控制方案
直播中

姬盼希

7年用户 879经验值
擅长:控制/MCU
私信 关注
[问答]

WINAVR编译器是怎样对ATmega正反转可控直流电机进行仿真的?

什么是Main.c代码?
proteus8.9  WINAVR编译器是怎样对ATmega正反转可控直流电机进行仿真的?

回帖(1)

王彬

2021-6-29 14:30:33
  *本文及代码参阅彭伟《单片机C语言程序设计实训100例》
  一,打开文件(可以随文下载放置在文档中打开)。
  二,调整原理图大小,适合可视,另存工程文件。
  三,点击Source Code标签。
  四,编辑main.c Proteus8.9 VSM Studio WINAVR编译器仿真ATmega16系列a17_正反转可控直流电机。
  五,Main.c 代码:
  //-----------------------------------------------------------------
  // 名称: 正反转可控的直流电机
  //-----------------------------------------------------------------
  // 说明: 本例运行时,按下K1直流电机正转,按下K2直流电机反转,
  // 按下K3时停止。 在进行相应操作时,对应LED将被点亮。
  //
  //-----------------------------------------------------------------
  #include “myfunc01.h”
  //-----------------------------------------------------------------
  // 主程序
  //-----------------------------------------------------------------
  int main(void)
  {
  DDRB= 0xFF; PORTB= 0xFF;
  DDRC= 0xFF; PORTC= 0xFF;
  DDRD= 0x00; PORTD= 0xFF;
  LED3_ON();
  while(1) {
  Turner();
  }
  }
  Myfunc01.h
  //******************************************************************************************
  #ifndef MYFUNC01_H
  #define MYFUNC01_H
  #include 《avr/io.h》
  #include 《util/delay.h》
  #define INT8U unsigned char
  #define INT16U unsigned int
  //按键定义
  #define K1_DOWN() ((PIND & _BV(PD1))== 0x00)
  #define K2_DOWN() ((PIND & _BV(PD4))== 0x00)
  #define K3_DOWN() ((PIND & _BV(PD7))== 0x00)
  //LED定义
  #define LED1_ON() (PORTC= 0B11111110)
  #define LED2_ON() (PORTC= 0B11111101)
  #define LED3_ON() (PORTC= 0B11111011)
  //电机控制端A,B操作定义
  #define MA_0() (PORTB &= ~_BV(PB0))
  #define MA_1() (PORTB |= _BV(PB0))
  #define MB_0() (PORTB &= ~_BV(PB1))
  #define MB_1() (PORTB |= _BV(PB1))
  void Turner(void);
  #endif
  六,点击构建工程按钮,编译工程。
  七,点击窗口左下方仿真按钮,可见虚拟直流电机运行。
  八,选择release,点击构建工程按钮,编译工程生成Hex文件。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分