//P1.0~P1.7分别对应小车1N1~1N8。

#include           //头文件

#define uint unsigned int  //宏定义

#define uchar unsigned char

#define left_moto_go   {P1_0=1,P1_1=0,P1_2=1,P1_3=0;}         //小车方位定义,左边两个电机正转(前进)

#define left_moto_back {P1_0=0,P1_1=1,P1_2=0,P1_3=1;}∥左后退

#define left_moto_stop {P1_0=0,P1_1=0,P1_2=0,P1_3=0;}∥左停止

#define right_moto_go    {P1_4=1,P1_5=0,P1_6=1,P1_7=0;}

#define right_moto_back  {P1_4=0,P1_5=1,P1_6=0,P1_7=1;}

#define right_moto_stop  {P1_4=0,P1_5=0,P1_6=0,P1_7=0;}

#define left_moto_pwm   P1_1   //pwm信号端定义

#define left_moto_pwm1  P1_3

#define right_moto_pwm   P1_5

#define right_moto_pwm1  P1_7

sbit key0=P3^2;                //四位按键位声明

sbit key1=P3^3;

sbit key2=P3^4;

sbit key3=P3^5;

uchar T0RH,T0RL;   // 定时器配置

//uchar time;                   // pwm周期变量

uchar keybuf;           // 按键

uchar code tab[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90};  //共阳数码管显示数字0~9

uchar code dis[]={0XF7,0XFB,0XFD,0XFE};         //数码管位选

uchar disbuf[4]={0}; //数码管中间变量

uchar pwm_val_left=0;        //         占空比有关变量

uchar push_val_left=0;        //        左电机占空比  N/10

uchar pwm_val_right=0;

uchar push_val_right=0;        //右

//延时

void delay_ms(uint a)  //1ms

{

uint x,y;

for(x=0;x

for(y=0;y<115;y++)

;

}

//小车前进

void  go(void)

{

left_moto_go ;

right_moto_go ;

}

//小车后退

void  back(void)

{

left_moto_back ;

right_moto_back ;

}

//小车停止

void  stop(void)

{

left_moto_stop;

right_moto_stop;

}

//小车左转

void  left(void)

{

left_moto_stop;

right_moto_go ;

}

//小车右转

void  right(void)

{

left_moto_go ;

right_moto_stop ;

}

/*

pwm调制电机转速

*/

void pwm_moto_left(void)         //左电机

{

if(pwm_val_left <= push_val_left)          //        小于占空比

{

left_moto_pwm=1;                   //高电平

left_moto_pwm1=1;

}

else

{

left_moto_pwm=0;

left_moto_pwm1=0;

}

if(pwm_val_left>=11)                //10个

pwm_val_left=0;

}

void pwm_moto_right(void)          //右电机

{

if(pwm_val_right <= push_val_right )

{

right_moto_pwm=1;

right_moto_pwm1=1;

}

else

{

right_moto_pwm=0;

right_moto_pwm1=0;

}

if(pwm_val_right>=11)

pwm_val_right=0;

}

//按键扫描

uchar KEY_scan()

{

static uchar backup=1;          //静态变量(自动恢复初值),一次进入标志

if(backup==1&&(key0==0||key1==0||key2==0||key3==0)) //判断是否有按键按下

{

delay_ms(10);

backup=0;

if(key0==0)                   return  1;           //返回按键case1:

else if(key1==0)   return  2;

else if(key2==0)   return  3;

else if(key3==0)   return  4;

}

else if(key0==1||key1==1||key2==1||key3==1) return  0;        //判断是否都未按下

}

//数码管显示

void display(uint t)                   //例3428

{

disbuf[0]=tab[t%10];           //个位显示  3428%10=8

disbuf[1]=tab[t%100/10];

disbuf[2]=tab[t%1000/100];

disbuf[3]=tab[t/1000];           //千位 3428/1000=3

}

//定时器0配置

void  timeT0(uint us)

{

unsigned long tmp;

tmp=11059200/12;

tmp=(tmp*us)/1000000;

tmp=65535-tmp;

tmp=tmp+18;

T0RH=(uchar)(tmp>>8);

T0RL=(uchar)tmp;

TMOD&=0XF0;

TMOD|=0X01; //模式1

TH0=T0RH;     ∥高四位

TL0=T0RL;

TR0=1;        //定时器0中断

ET0=1;        //打开定时器0

}

//主函数

void  main()

{

EA=1;                //总中断开关

timeT0(100);         //100us

go();

while(1)         //无限循环

{

keybuf=KEY_scan();//按键调用

if(keybuf)

{

switch(keybuf)         //选择

{

case 1: pwm_val_left++;

pwm_val_right++; break;

case 2: pwm_val_left--;

pwm_val_right--; break;

case 3:  break;

case 4:  break;

default: break;

}

if(push_val_left<0||push_val_right<0)

{

push_val_left=10;                        //        十个等级

push_val_right=10;

}

if(push_val_left>11||push_val_right>11)

{

push_val_left=0;

push_val_right=0;

}

}

display(        push_val_right*10);  //数码管显示

}

}

//数码管扫描

void LCD_scan()

{

static uchar i;

P2=0xFF;        //消隐

switch(i)  //从i中选择

{

case 0: P2=dis[i];i++;          //P2口赋 1111  0111

P0=disbuf[0];  break;  //P0口赋数码管显示计算值(个位值)

case 1: P2=dis[i];i++;

if(disbuf[1]==0xc0&&disbuf[2]==0xc0) P0=0xff;          //高位消影        个位十位显示为数字0          P0=0xff

else P0=disbuf[1];  break;

case 2: P2=dis[i];i++;if(disbuf[2]==0xc0) P0=0xff;

else P0=disbuf[2];  break;

case 3: P2=dis[i];i=0;if(disbuf[3]==0xc0) P0=0xff;

else P0=disbuf[3];  break;

default: break;

}

}

//定时器0中断

void time0()  interrupt  1

{

static uchar time2ms=0;

static uint cnt=0;

TH0=T0RH;

TL0=T0RL;

push_val_left++;          // 占空比增加

push_val_right++;

pwm_moto_left( );          //左电机调速调用

pwm_moto_right( );

LCD_scan();  //数码管

}

pwm调速流程图小车_51单片机智能小车《pwm调速按键控制小车动作》相关推荐

  1. 【电路】基于单片机智能睡眠枕系统设计-基于单片机音乐喷泉制作设计-基于单片机智能温控风扇调速系统设计-基于单片机智能自动循迹小车控制系统设计-基于数字电路的4人投票系统设计(仿真,报告)毕设课设资料

    1620基于单片机智能睡眠枕系统设计-文档+PPT+PCB图+原理图+源码 智能睡眠枕主要由lcd屏幕.蓝牙.压力传感器.蜂鸣器.单片机等等组成,用户可通过四个独立按键进行操控(四个按键从左至右为1. ...

  2. K_A08_013 基于 STM32等单片机驱动大功率MOS管模块按键控制直流电机加减速启停

    目录 一.资源说明 二.基本参数 参数 引脚说明 三.驱动说明 大功率MOS模块驱动 对应程序: 四.部分代码说明 接线说明 STC89C52RC+大功率MOS模块 STM32F103C8T6+大功率 ...

  3. 树莓派小车教程(二)之——基于Tornado框架的网页控制小车(按键+鼠标点击)

    项目场景: 前两天笔者写了一份手把手树莓派小车教程(一)之--小车跑起来的教程.当时只是让小车能动起来,不过项目中的小车肯定是需要一个用户界面能够操控的. 能看到这一部分的读者们可能基本都会简单的控制 ...

  4. pwm调速流程图小车_51单片机 小车 L298N pwm调速 串口控制 按键控制

    难点:1.串口定时器T1,和T0定时器优先级 2.pwm频率与占空比的设置 按键控制 按键1--前进 按键2--后退 按键3--加速 按键4--减速 (板子上只有四个按键) 串口控制 '1'--前进 ...

  5. 104、基于51单片机智能风扇pwm调速红外遥控无线遥控风扇温控风扇系统设计

    毕设帮助.开题指导.技术解答(有偿)见文末. 目录 摘要 一.硬件方案 二.设计功能 三.实物图 四.原理图 五.Protues仿真 六.流程图 七.程序源码 八.资料包括 摘要 随着气温的逐渐上升, ...

  6. pwmc语言调速程序_51单片机的直流电机PWM调速系统设计,正转反转,加减速,急停等,仿真和代码...

    设计思路 直流电机PWM控制系统的主要功能包括:实现对直流电机的加速.减速以及电机的正转.反转和急停,并且可以调整电机的转速,能够方便的实现电机的智能控制. 主体电路:即直流电机PWM控制模块.这部分 ...

  7. uln2803驱动直流电机电路图_51单片机的直流电机PWM调速系统设计,正转反转,加减速,急停等,仿真和代码...

    设计思路 直流电机PWM控制系统的主要功能包括:实现对直流电机的加速.减速以及电机的正转.反转和急停,并且可以调整电机的转速,能够方便的实现电机的智能控制. 主体电路:即直流电机PWM控制模块.这部分 ...

  8. 基于STM32单片机智能蓝牙PWM温控风扇带定时APP控制

    实践制作DIY- GC0009-智能蓝牙PWM温控风扇 一.功能说明: 基于STM32单片机设计-智能蓝牙PWM温控风扇 功能介绍: 1.基于STM32F103C系列,OLED,DHT11温度湿度传感 ...

  9. 69、基于STM32单片机智能两轮双轮自平衡小车 蓝牙app控制系统设计

    毕设帮助.开题指导.技术解答(有偿)见文末. 目录 摘要 一.硬件方案 二.设计功能 三.实物图 四.原理图 五.程序源码 六.资料包括 摘要 目前,国内市场上的平衡车琳琅满目,但多数功能单一, 价格 ...

最新文章

  1. 理解koa-router 路由一般使用
  2. AD9833所产生的高频信号质量分析
  3. DayDayUp:那些年-程序猿的爱情故事
  4. Array 的一些常用 API
  5. 特征值_陶哲轩数学发现的故事 | 特征值特征向量等式
  6. (5)呼吸灯systemverilog与VHDL编码
  7. ELK根据服务类型收集多个容器数据
  8. 设置Response中的ContentType
  9. MQTT 消息通信工具使用
  10. 我国芯片各细分领域龙头名单
  11. MySQL中用生日计算年龄
  12. 如何关闭计算机软件更新功能,如何关闭电脑自动更新功能
  13. 人工智能(机器学习)学习路线
  14. 手机停机照样可以免费无限量上网
  15. 技术干货 | 基于 MindSpore 实现图像分割之平均表面距离
  16. 学习matlab(七)——符号计算
  17. 学术顶会再突破!计算平台 MaxCompute 论文入选国际顶会VLDB 2021
  18. 欧洲语言共同参考框架 c1,雅思成绩与欧洲语言共同参考框架的对应关系
  19. 欧几里得定理(nyoj775)
  20. springboot整合全文搜索引擎Elasticsearch | Spring Boot 28

热门文章

  1. (转)熊绎:我看软件工程师的职业规划
  2. 西安电子科技大学通院811电院821考研上岸经验分享(一)
  3. 记-玩吧-一次失败的面试
  4. vc常见问题108问-很有资料价值
  5. 使用 In-Trangle Test 检测极点
  6. 5种常见的服务器种类是哪些
  7. 4.2.4 Kafka高级特性解析(物理存储、稳定性:事物,控制器,可靠性,一致性,_consumer_offsets、延时队列、自定义重试队列)
  8. 通话用哪款蓝牙耳机好?通话效果比较好的蓝牙耳机推荐
  9. 别傻干了,刚离职的同事分享了他常用的19个私活平台!
  10. POWER BI:SSAS表格建模(转自博客园,ps:部分已修改)