完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
调速程序.zip
(48.97 KB, 下载次数: 15
)
#include #include #define led1 d1=0;d2=0 #define led2 d1=0;d2=1 #define led3 d1=1;d2=0 #define UCHAR unsigned char #define UINT unsigned int #define uchar unsigned char #define uint unsigned int /* button0,button1 是小车的启动停止控制位 */ ***it button0 = P1^0; //开始 停止 /* 左右循迹传感器 */ ***it track_l = P1^1; // 循迹传感器1 ***it track_r = P1^2; // 循迹传感器2 /* 左右电机正负极 */ ***it motorl1 = P1^4; //电机接口 ***it motorl2 = P1^5; ***it motorr1 = P1^6; ***it motorr2 = P1^7; /* 数码管位选 */ ***it d1=P2^6; //段选1 ***it d2=P2^7; //段选2 ***it K2=P3^0; //开始 停止 ***it K3=P3^1; // 复位 uchar code table[]= {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; uchar code table1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef,0xc0};// 带小数点 uchar count,num,knum; void tracking(void); /* 小车的行驶状态 */ void front(void); void right(void); void left(void); void stop(void); void right_back(void); void left_back(void); void delay_us(UINT t); void pwm(void (*car_move)(void), UCHAR speed); void delay(uint z) //秒表延时子程序 { uint x,y; for(x=z;x>0;x--) for(y=121;y>0;y--); } void unit() //设置定时器 { TMOD=0x01; TH0=(65536-50000)/256; TL0=(65536-50000)%256; EA=1; ET0=1; } void keyscan() //按键子程序 { if(K2==0) //计时开始 停止 { delay(5); if(K2==0) { while(!K2); TR0=~TR0; } } if(K3==0) //复位键 { delay(5); if(K3==0) { while(!K3); knum=0; num=0; } } } void display() //显示时间子程序 { uchar shi,ge; shi=knum/10; ge=knum%10; led2; P0=table[num]; delay(3); led3; P0=table1[ge]; delay(3); led1; P0=table[shi]; delay(5); } void tracking(void) { track_l = 1; //左循迹传感器 track_r = 1; //右循迹传感器 while(1) { if(track_l == 1 && track_r == 1) // 都在黑线外 { front(); pwm(front, 15); // 前进 } else if(track_l == 1 && track_r == 0) // 左边在外 右边在里 { right(); // 右转 pwm(right, 1); } else if(track_l == 0 && track_r == 1) // 左边在里 右边在外 { left(); // 左转 pwm(left, 1); } else if(track_l == 0 && track_r == 0) //都在黑线内 {stop();} } } void front(void) { motorl1 = 1; motorr1 = 1; motorl2 = 0; motorr2 = 0; } void right(void) { motorl1 = 1; motorr1 = 0; motorl2 = 0; motorr2 = 0; } void left(void) { motorl1 = 0; motorr1 = 1; motorl2 = 0; motorr2 = 0; } void stop(void) { motorl1 = 0; motorr1 = 0; motorl2 = 0; motorr2 = 0; } void time0() interrupt 1 //定时器中断0方式1中断子函数 { TH0=(65536-50000)/256; TL0=(65536-50000)%256; count++; if(count==2) { count=0; num++; if(num>=9) { num=0; knum++; if(knum>=99) { knum=0; } } } } void delay_us(UINT t) { while(--t); } void pwm(void (*car_move)(void), UCHAR speed) // pwm调速 { (*car_move)(); delay_us(speed * 200); stop(); delay_us(100); } void xianshi (void) { { unit(); while(1) { keyscan(); display(); } //加秒表显示 } } void main() { tracking(); xianshi(); } |
|
相关推荐
1个回答
|
|
循迹调速+计时 主函数里两个子函数哪个位置在前就运行哪一个后面的没效果
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
6130 浏览 3 评论
7398 浏览 1 评论
7633 浏览 0 评论
Protues中自己封装的芯片元件无Program File、Clock Frequency选项怎么解决,求求大神了!
9426 浏览 1 评论
基于51单片机的车辆倒车雷达报警系统,HC-SR04超声波测距,全套资料
1276 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-24 09:19 , Processed in 0.799074 second(s), Total 78, Slave 58 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号