51单片机的话是比较麻烦,因为一般的89C51是不带ADC的,这样的话就比较难检测到旋钮的变化了
如果采用STC的那些带ADC的增强型51单片机就不难
程序的基本思路是
初始化
int main()
{
初始化
while(1)
读取旋钮AD值
输出电机控制信号
等待中断,只要123任意一个按下即触发中断
延时
}
中断函数()
{
检测按钮1是否按下,按下则直接转速设置为小
检测按钮2是否按下,按下则直接转速设置为大
检测按钮3是否按下,按下则直接停止
}
不过你的需求那里有一点没说清楚,就是电机速度那里按钮按下多久之后才检测旋钮变化。
L298N的驱动就是用PWM,程序请参考一下这篇文章 51单片机的L298N直流电机驱动(PWM).pdf
不难,电机的转速用pwm控制。
根据旋钮的话,你就用adc采样电压的变化来控制pwm占空比输出就行。
停止和正反转就是io控制