完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
MSP430的没写过 到时有51的 之前写的一个蓝牙小车的代码,你看看。。
|
|
|
|
#include "reg52.h"
#define Left_moto_go {a=0,b=1;} //P3_4 P3_5 接IN1 IN2 当 P3_4=0,P3_5=1; 时左电机前进 #define Left_moto_back {a=1,b=0;} //P3_4 P3_5 接IN1 IN2 当 P3_4=1,P3_5=0; 时左电机后退 #define Left_moto_stp {a=1,b=1;} //P3_4 P3_5 接IN1 IN2 当 P3_4=1,P3_5=1; 时左电机停转 #define Right_moto_go {c=0,d=1;} //P3_6 P3_7 接IN1 IN2 当 P3_6=0,P3_7=1; 时右电机前转 #define Right_moto_back {c=1,d=0;} //P3_6 P3_7 接IN1 IN2 当 P3_6=1,P3_7=0; 时右电机后退 #define Right_moto_stp {c=1,d=1;} //P3_6 P3_7 接IN1 IN2 当 P3_6=1,P3_7=0; 时右电机停转 ***it a = P3^4; ***it b = P3^5; ***it c = P3^6; ***it d = P3^7; ***it beep = P2^4; ***it v = P2^5; /*********************************位定义*************************************************/ ***it Left_moto_pwm = P1^6; //接驱动模块ENA 使能端,输入PWM信号调节速度 ***it Right_moto_pwm = P1^7; //接驱动模块ENB unsigned int pwm_val_left =0;//变量定义 unsigned char push_val_left =0;// 左电机占空比N/10 unsigned char pwm_val_right =0; unsigned char push_val_right=0;// 右电机占空比N/10 bit Right_moto_stop=1; bit Left_moto_stop =1; unsigned int time=0; /******************************小车前进,左转,右转PWM调节控制函数开始******************************************* //小车延时 void delay(unsigned int k) //延时函数 { unsigned int x,y; for(x=0;x } /************************************************************************/ /* PWM调制电机转速 */ /************************************************************************/ /* 左电机调速 */ /******************调节push_val_left的值改变电机转速,占空比**************/ void pwm_out_left_moto(void) { if(Left_moto_stop) { if(pwm_val_left<=push_val_left) Left_moto_pwm=1; else Left_moto_pwm = 0; if(pwm_val_left>=10) pwm_val_left=0; } else Left_moto_pwm=0; } /******************************************************************/ /* 右电机调速 */ void pwm_out_right_moto(void) { if(Right_moto_stop) { if(pwm_val_right<=push_val_right) Right_moto_pwm=1; else Right_moto_pwm=0; if(pwm_val_right>=10) pwm_val_right=0; } else Right_moto_pwm=0; } //前进 void run(void) //前进函数 { // P2 = 0x00; v = 0; beep = 0; push_val_left =5 ; //PWM 调节参数1-10 1为最慢,10是最快 改这个值可以改变其速度 push_val_right =5; //PWM 调节参数1-10 1为最慢,10是最快 改这个值可以改变其速度 Left_moto_go ; //左电机前进 Right_moto_go; //右电机前进 } //左转 void left(void) //左转函数 { /// P2 = 0x00; v = 0; beep = 0; push_val_left = 4; //PWM 调节参数1-10 1为最慢,10是最快 改这个值可以改变其速度 push_val_right = 4; //PWM 调节参数1-10 1为最慢,10是最快 改这个值可以改变其速度 Right_moto_go; //右电机继续 Left_moto_back; //左电机停走 } //右转 void right(void) //右转函数 { // P2 = 0x00; v = 0; beep = 0; push_val_left = 5; //PWM 调节参数1-10 1为最慢,10是最快 改这个值可以改变其速度 push_val_right = 5 ; //PWM 调节参数1-10 1为最慢,10是最快 改这个值可以改变其速度 Right_moto_back; //右电机停走 Left_moto_go; //左电机继续 } //后退 void back(void) //后退函数 { // P2 = 0x00; v = 0; beep = 0; push_val_left = 5; //PWM 调节参数1-10 1为最慢,10是最快 改这个值可以改变其速度 push_val_right = 5 ; //PWM 调节参数1-10 1为最慢,10是最快 改这个值可以改变其速度 Right_moto_back; //右电机后退 Left_moto_back; //左电机后退 } //停止函数 void stop() { P2 = 0xff; push_val_left = 5; //PWM 调节参数1-10 1为最慢,10是最快 改这个值可以改变其速度 push_val_right = 5 ; //PWM 调节参数1-10 1为最慢,10是最快 改这个值可以改变其速度 Right_moto_stp; //右电机后退 Left_moto_stp; //左电机后退 } /******************************小车前进,左转,右转PWM调节控制函数结束*******************************************/ void zd1() interrupt 1 using 2 //使用定时器中断0来进行pwm信号调节 { TH0=0XF8; //1Ms定时 TL0=0X30; time++; pwm_val_left++; pwm_val_right++; pwm_out_left_moto(); pwm_out_right_moto(); } void send(unsigned char send) { SBUF = send; while(!TI); TI = 0; } void main() { unsigned char temp; //串口通信 使用定时器1作为串口通信的波特率发生器 使用工作方式2 //PWM调节速度 使用定时器0 使用工作方式1 TMOD = 0X21; // 工作方式 //PWM信号 //定时器中断0初始化设置 TH0= 0XF8; //1ms定时 TL0= 0X30; TR0= 1;//启动定时器中断0 ET0= 1; //定时器中断0允许使用 //串行通信初始化 TH1 = 0XFD; //9600波特率计算初值 TL1 = 0XFD; SCON = 0X50; //穿行口设置 工作方式1 REN = 1 允许接收 PCON = 0X00; //波特率不加倍 TR1 = 1; //定时器中断1 未开则晶振无法计数 ES = 1; ET1 = 1; EA = 1; while(1) { if(RI == 1) { RI = 0; temp = SBUF ; switch (temp) { case '1':run();break; case '0':stop();break; case '2':back();break; case '3':left();break; case '4':right();break; case '5':stop();break; } send(temp) ; } } } |
|
|
|
#include "reg52.h"
#define Left_moto_go {a=0,b=1;} //P3_4 P3_5 接IN1 IN2 当 P3_4=0,P3_5=1; 时左电机前进 #define Left_moto_back {a=1,b=0;} //P3_4 P3_5 接IN1 IN2 当 P3_4=1,P3_5=0; 时左电机后退 #define Left_moto_stp {a=1,b=1;} //P3_4 P3_5 接IN1 IN2 当 P3_4=1,P3_5=1; 时左电机停转 #define Right_moto_go {c=0,d=1;} //P3_6 P3_7 接IN1 IN2 当 P3_6=0,P3_7=1; 时右电机前转 #define Right_moto_back {c=1,d=0;} //P3_6 P3_7 接IN1 IN2 当 P3_6=1,P3_7=0; 时右电机后退 #define Right_moto_stp {c=1,d=1;} //P3_6 P3_7 接IN1 IN2 当 P3_6=1,P3_7=0; 时右电机停转 ***it a = P3^4; ***it b = P3^5; ***it c = P3^6; ***it d = P3^7; ***it beep = P2^4; ***it v = P2^5; /*********************************位定义*************************************************/ ***it Left_moto_pwm = P1^6; //接驱动模块ENA 使能端,输入PWM信号调节速度 ***it Right_moto_pwm = P1^7; //接驱动模块ENB unsigned int pwm_val_left =0;//变量定义 unsigned char push_val_left =0;// 左电机占空比N/10 unsigned char pwm_val_right =0; unsigned char push_val_right=0;// 右电机占空比N/10 bit Right_moto_stop=1; bit Left_moto_stop =1; unsigned int time=0; /******************************小车前进,左转,右转PWM调节控制函数开始******************************************* //小车延时 void delay(unsigned int k) //延时函数 { unsigned int x,y; for(x=0;x } /************************************************************************/ /* PWM调制电机转速 */ /************************************************************************/ /* 左电机调速 */ /******************调节push_val_left的值改变电机转速,占空比**************/ void pwm_out_left_moto(void) { if(Left_moto_stop) { if(pwm_val_left<=push_val_left) Left_moto_pwm=1; else Left_moto_pwm = 0; if(pwm_val_left>=10) pwm_val_left=0; } else Left_moto_pwm=0; } /******************************************************************/ /* 右电机调速 */ void pwm_out_right_moto(void) { if(Right_moto_stop) { if(pwm_val_right<=push_val_right) Right_moto_pwm=1; else Right_moto_pwm=0; if(pwm_val_right>=10) pwm_val_right=0; } else Right_moto_pwm=0; } //前进 void run(void) //前进函数 { // P2 = 0x00; v = 0; beep = 0; push_val_left =5 ; //PWM 调节参数1-10 1为最慢,10是最快 改这个值可以改变其速度 push_val_right =5; //PWM 调节参数1-10 1为最慢,10是最快 改这个值可以改变其速度 Left_moto_go ; //左电机前进 Right_moto_go; //右电机前进 } //左转 void left(void) //左转函数 { /// P2 = 0x00; v = 0; beep = 0; push_val_left = 4; //PWM 调节参数1-10 1为最慢,10是最快 改这个值可以改变其速度 push_val_right = 4; //PWM 调节参数1-10 1为最慢,10是最快 改这个值可以改变其速度 Right_moto_go; //右电机继续 Left_moto_back; //左电机停走 } //右转 void right(void) //右转函数 { // P2 = 0x00; v = 0; beep = 0; push_val_left = 5; //PWM 调节参数1-10 1为最慢,10是最快 改这个值可以改变其速度 push_val_right = 5 ; //PWM 调节参数1-10 1为最慢,10是最快 改这个值可以改变其速度 Right_moto_back; //右电机停走 Left_moto_go; //左电机继续 } //后退 void back(void) //后退函数 { // P2 = 0x00; v = 0; beep = 0; push_val_left = 5; //PWM 调节参数1-10 1为最慢,10是最快 改这个值可以改变其速度 push_val_right = 5 ; //PWM 调节参数1-10 1为最慢,10是最快 改这个值可以改变其速度 Right_moto_back; //右电机后退 Left_moto_back; //左电机后退 } //停止函数 void stop() { P2 = 0xff; push_val_left = 5; //PWM 调节参数1-10 1为最慢,10是最快 改这个值可以改变其速度 push_val_right = 5 ; //PWM 调节参数1-10 1为最慢,10是最快 改这个值可以改变其速度 Right_moto_stp; //右电机后退 Left_moto_stp; //左电机后退 } /******************************小车前进,左转,右转PWM调节控制函数结束*******************************************/ void zd1() interrupt 1 using 2 //使用定时器中断0来进行pwm信号调节 { TH0=0XF8; //1Ms定时 TL0=0X30; time++; pwm_val_left++; pwm_val_right++; pwm_out_left_moto(); pwm_out_right_moto(); } void send(unsigned char send) { SBUF = send; while(!TI); TI = 0; } void main() { unsigned char temp; //串口通信 使用定时器1作为串口通信的波特率发生器 使用工作方式2 //PWM调节速度 使用定时器0 使用工作方式1 TMOD = 0X21; // 工作方式 //PWM信号 //定时器中断0初始化设置 TH0= 0XF8; //1ms定时 TL0= 0X30; TR0= 1;//启动定时器中断0 ET0= 1; //定时器中断0允许使用 //串行通信初始化 TH1 = 0XFD; //9600波特率计算初值 TL1 = 0XFD; SCON = 0X50; //穿行口设置 工作方式1 REN = 1 允许接收 PCON = 0X00; //波特率不加倍 TR1 = 1; //定时器中断1 未开则晶振无法计数 ES = 1; ET1 = 1; EA = 1; while(1) { if(RI == 1) { RI = 0; temp = SBUF ; switch (temp) { case '1':run();break; case '0':stop();break; case '2':back();break; case '3':left();break; case '4':right();break; case '5':stop();break; } send(temp) ; } } } |
|
|
|
不能上传附件?好吧 给我邮箱直接发你。。
|
|
|
|
就是和普通串口一样的啊。
|
|
|
|
***ook 发表于 2013-7-2 17:18 啊~~多谢啦。我邮箱是326860164@qq.com |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
既然都用上蓝牙模块了,就搞个串口通信协议啦
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
求助一下关于51系列单片机的Timer0的计时问题,TH0、TL0+1的时间是怎么算的?
852 浏览 1 评论
【RA-Eco-RA4E2-64PIN-V1.0开发板试用】开箱+Keil环境搭建+点灯+点亮OLED
592 浏览 0 评论
【敏矽微ME32G070开发板免费体验】使用coremark测试敏矽微ME32G070 跑分
705 浏览 0 评论
【敏矽微ME32G070开发板免费体验】开箱+点灯+点亮OLED
926 浏览 2 评论
657 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
12009 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 10:26 , Processed in 0.830061 second(s), Total 87, Slave 71 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号