用Proteus绘制好电路图后导入程序文件(用Keil编译过后的HEX文件),然后就可以执行仿真,我们在仿真的时候P2.6检测到高电平即为返回信号获得,由于在软件中没有CX20106模型,所以P2.6悬空,则程序开始就认为返回信号获得了,所以显示了一个最小测量值113mm
这篇教程主要介绍如何使用51单片机控制直流电机实现正反转,并且简要提到了在Proteus软件中的仿真过程。51单片机是一类广泛应用的微控制器,其核心是8051内核,常用于各种电子设备的控制。
程序的核心是通过读取P2口的输入来判断用户对三个按键BT0、BT1、BT2的操作,以此控制直流电机的运行状态。在主函数`main()`中,通过无限循环`while(1)`确保电机持续运行,直到外部干预停止。
`motor()`函数负责处理按键输入并调用相应的电机控制函数。当检测到BT0按键被按下时,会延时10毫秒进行防抖处理,然后调用`leftM()`使电机左转;BT1按键被按下则调用`rightM()`使电机右转;而BT2按键的按下则调用`stopM()`使电机停止。
`leftM()`和`rightM()`两个函数通过设置P1口的PW1和PW2引脚电平来改变电机的旋转方向。`leftM()`中,PW1设为0,PW2设为1,使得电机左转;相反,`rightM()`中,PW1设为1,PW2设为0,电机则右转。`stopM()`将PW1和PW2都设为0,电机停止转动。
防抖动的实现主要通过`DelayMs()`函数,它通过嵌套`DelayUs2x()`函数实现一定时间的延迟。`DelayMs()`接受一个参数t,内部通过两次`DelayUs2x(245)`的调用来延迟约1毫秒的时间。`DelayUs2x()`函数通过减法循环来延迟指定的微秒数。
在仿真过程中,提到使用Proteus软件,但因为Proteus库中没有CX20106模型,所以在模拟电机反馈信号时,P2.6引脚被悬空处理。这意味着在仿真开始时,P2.6默认检测到高电平,因此程序会认为电机已经到达最远端,显示最小测量值113mm。
这个项目涉及51单片机的I/O口操作、基本的按键检测与处理、电机控制以及简单的延时函数设计。对于初学者来说,这是一个很好的练习项目,可以理解基本的单片机控制电机的原理和编程方法。在实际应用中,可能会增加更复杂的控制逻辑,例如使用PWM(脉宽调制)进行电机速度控制,或者添加更精确的电机位置反馈系统。