完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
本帖最后由 hhjwtc 于 2016-11-3 12:36 编辑
#include #define uchar unsigned char ***it P1_0=P1^0; ***it P1_1=P1^1; ***it P1_2=P1^2; ***it P1_3=P1^3; ***it P1_4=P1^4; ***it P1_5=P1^5; ***it P1_6=P1^6; ***it P1_7=P1^7; uchar V,flag,KKK; //V用于调速控制;flag=0正转;flag=1反转; flag=2不转;KKK为P1的状态寄存 uchar loop[2][4]={{0x0c,0x06,0x03,0x09},{0x09,0x03,0x06,0x0c}}; //顺时针转表(1100 0110 0011 1001) 和逆时针转表 (1001 0011 0110 1100) void loop1(void); void loop2(void); void step(void); main() { uchar i,j; TMOD=0x10; TL1=0xe0; TH1=0xb1; IE=0; //中断允许寄存器 while(1) { if(KKK!=P1) { //当P1的值发生变化,触发采集信号 loop1(); } if(flag!=2) { for(i=0;i<=3;i++) { P0=loop[flag]; for(j=0;j<=V;j++) { step(); } } } } } void step(void) //产生20MS的单位步时间 { TF1=0; TR1=1; while(TF1==0); TR1=0; TL1=0xe0; TH1=0xb1; //重装初值 } void loop1(void) //采集顺时针或逆时针信号,P1.6=1,顺时针,P1.7=1,逆时针 { KKK=P1; //暂存P1的状态 if(P1_6==1) { flag=0; loop2(); } else if(P1_7==1) { flag=1; loop2(); } else { flg=2; } } void loop2(void) { if(P1_0==1) { V=3; } else if(P1_1==1) { V=5; } else if(P1_2==1) { V=8; } else if(P1_3==1) { V=12; } else if(P1_4==1) { V=16; } else if(P1_5==1) { V=20; } } for循环那块是怎么控制速度的变换的,怎么可以根据我需要的电机转速来 求出具体的速度值(也就是V的大小) |
|
相关推荐
4个回答
|
|
|
不错的资料 新手和楼主一起坐等大师讲解
|
|
|
|
|
|
确定这个程序对吗?一般是控制占空比来调速的
|
|
|
|
|
|
不错的资料 新手和楼主一起坐等大师讲解
|
|
|
|
|
|
不错的资料 新手和楼主一起坐等大师讲解
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
2580 浏览 0 评论
5185 浏览 0 评论
PROTUES仿真no model specified for adc0809,谁有ADC0809的model?
17577 浏览 1 评论
单片机应用技术的ISIS professional电路设置仿真老是报错怎么办
17875 浏览 0 评论
21137 浏览 3 评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-1 23:55 , Processed in 0.776611 second(s), Total 84, Slave 65 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
5097