完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
本帖最后由 追风逐月 于 2017-8-17 15:11 编辑
最近这两个学习了一下STM32,学到ADC,pwm,没有实验板后面的SPI,CAN等就得等到了,所以打算复习一下51,没有实际工程做,想想有个最小系统板,也就可以做个玩具车,实物还没做,这两天写了个程序,让大家指导一下,看看和实际工程应用有哪些差距。 程序刚刚用PORTUES仿真了一下,能跑,但是很慢,当然仿真肯定是很慢的,程序比较粗糙,PWM肯定还要根据电源、电机做计算调整,显示部分也是,这里的程序只是我现在能想到的一种实现方法,具体数据都还待调整。希望大家指教一下种实现方法在实际应用时是否可行。 下面是程序,目前只有前进、后退、显示速度3个功能,大家看看还叫些什么功能呢?转弯可以但是我硬件上不好弄,暂时没加,障碍停止或者后退比较好实现也没写, 程序的显示没有修改,每次都会全部刷新,这个后面再改。主要还是看这种方法符合实际工程应用不。 #include #define uchar unsigned char void ***zhuan(); //PWM产生 int seper(); //速度检测 int num,num2,num3,velocity; int a; ***it lcden=P3^6; ***it lcdr=P3^5; uchar code one[]="V:"; uchar code two[]="m/s"; uchar xian[]={0,0,0}; uchar data_v[]=" "; unsigned char num4; int j,k; ***it SPr1=P0^0; //正转、前进驱动脚 , 4个引脚接4个三极管作正反转选择 ***it SPr1_2=P0^1; //接电源端三极管 ***it SPr2=P0^2; //反转、后退 ***it SPr2_2=P0^3; //接电源 ***it key1=P2^0; //正 反转按键 void time1() {;;} void init_T1() interrupt 3 //pwm定时器 { num++; num3++; ***zhuan(); //PWM产生 seper(); //速度检测 } void ***zhuan() { if(key1==0) //前进 { time1(); if(key1==0); { SPr2_2=0; //关闭反转 SPr2=0; //关闭反转 SPr1_2=1; if(num==200) //PWM高电平--硬件上高电平小车运动 { SPr1=1; } if(num==1000) //PWM低电平 { SPr1=0; num=0; } } } if(key1==1) //后退 { time1(); if(key1==1); { SPr1_2=0; SPr1=0; SPr2_2=1; if(num==200) { SPr2=1; } if(num>=1000) { SPr2=0; num=0; } } } } void init_T0() interrupt 1 //转速计数器 { TH0=(65536-100)/256; TL0=(65536-100)%256; num2++; //100圈+1,轮子一圈10cm } int seper() { if(num3==400) //100ms { a++; num3=0; } if(a==30) //3s { velocity=(10*num2*0.1/3)*100; // m/s,为了方便小数处理整体*100(精确到小数点后2位,ve真实速度预设值(10*num2*0.1/3)不能大于9.99m/s) //显示处理:velocity/100个位,v%100/10小数第一位,v%100%10,小二位 num2=0x00; a=0; } return velocity; } /*lcd显示速度*/ void time(int a) { int i; while(a--) { for(i=0;i<75;i++); } } void write_com(unsigned char b) { lcdr=0; P1=b; // led5=0; time(5); lcden=1; time(5); lcden=0; } void write_data(unsigned char date) { lcdr=1; P1=date; time(5); lcden=1; time(5); lcden=0; } void init() { lcden=0; write_com(0x38); write_com(0x0c); write_com(0x06); write_com(0x01); } void lcd_ply() { // while(1) // { init(); xian[0]=velocity/100; //个位 ,将速度放到此数组中 xian[1]=velocity%100/10; //小数第一位 xian[2]=velocity%100%10; //小数第二位 data_v[0]=xian[0]+'0'; //将数组中的速度值 赋给显示的字符串组 data_v[1]='.'; //小数点 data_v[2]=xian[1]+'0'; data_v[3]=xian[2]+'0'; write_com(0x80+0x40); for(num4=0;num4<2;num4++) { write_data(one[num4]); //显示V: time(50); } for(num4=0;num4<4;num4++) { write_data(data_v[num4]); time(50); // led5=0; } for(num4=0;num4<3;num4++) { write_data(two[num4]); //显示单位M/S } } void main() { TMOD=0X25; //定时器0为速度的计数器,定时器1位PWM产生定时器 TH0=(65536-100)/256; TL0=(65536-100)%256; TH1=6; TL1=6; //250us溢出一次 EA=1; ET0=1; TR0=1; ET1=1; TR1=1; P0=0; while(1) { lcd_ply(); //速度显示 } } 评分
|
||
相关推荐
9 个讨论
|
||
|
好东西啊
|
|
|
|
|
|
|
|
你正在撰写讨论
如果你是对讨论或其他讨论精选点评或询问,请使用“评论”功能。
【瑞萨RA6E2】瑞萨E2S软件安装过程,等待过程玩下97_e2 studio_ZGZZ
234 浏览 0 评论
514 浏览 0 评论
【原创】【RA4M2-SENSOR开发板评测】低功耗+USB综合测试
826 浏览 0 评论
1366 浏览 2 评论
814 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
16911 浏览 31 评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-3 00:58 , Processed in 1.092617 second(s), Total 65, Slave 51 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
14343