HC6800-ES-V2.0 发表于 2019-3-13 07:20 松键消抖,嗯,我还是做一个 temp=P2; temp=temp&0xf0; if(temp!=0xf0) { temp=P2; { case 0xbe:key=0;break; case 0xde:key=1;break; case 0xee:key=2;break; } while(temp!=0xf0) { temp=P2; temp=temp&0xf0; } 这种类型的消抖吧,虽然感觉方法笨了点, |
雨夜带刀 发表于 2019-3-12 22:48 你说的这个,是松键消抖的功能,并且可以让程序不会“死于一直按着不松手”。 |
大体思路应该是很清晰了,细枝末节我再想想,谢谢 |
HC6800-ES-V2.0 发表于 2019-3-11 22:44 电机转动函数那里倒是很有启发,但键盘控制那个(m=0;((m<50)&&(k1==0));m++) 不是很能看懂,打算参考 做if选择语句+!cw(按位取反)+定时器或者延时函数 的这种模式做 |
利用键盘控制直流电机转动速度,从而控制小车运动。 部分代码,具体下载附件(包括代码和仿真) void init_time() { TMOD=0X01; TH0=(65536-500)/256; TL0=(65536-500)%256; EA=1; ET0=1; TR0=1; } void time0() interrupt 1 using 1 { static uchar num; num++; if(num==numR) ENB=~ENB; if(num==numL) ENA=~ENA; if(num==100){ENA=~ENA;ENB=~ENB;num=0;} TH0=(65536-500)/256; TL0=(65536-500)%256; } ![]() |
pwmCon.jpg (264.88 KB, 下载次数: 71)
pwm控制仿真图
呵呵呵,正好我有一个简单的,你一看就明白了: #include<reg51.h> sbit z=P1^0;//直流电机一个脚,控制用,另一脚一定接电源正极 sbit k1=P3^1; sbit k2=P3^0; sbit k3=P3^2; sbit k4=P3^3; unsigned char i,n; void Delay10ms(unsigned char c) { unsigned char a,b; for(c;c>0;c--) for(b=38;b>0;b--) for(a=130;a>0;a--); } void zd(void)//电机转动函数 { if (n==1) { z=1;//通电 Delay10ms(60-i);//占空比中的占的值 z=0;//断电 Delay10ms(i);//占空比中的空的值,周期固定为60ms } else { z=0; } } void main(void) { unsigned char m; n=0;z=0; while (1) { if(k1==0) { Delay10ms(1); if(k1==0) { n=1; i=0; for (m=0;((m<50)&&(k1==0));m++) { Delay10ms(1); } } } if(k2==0) { Delay10ms(1); if(k2==0) { n=0; for (m=0;((m<50)&&(k2==0));m++) { Delay10ms(1); } } } if(k3==0) { Delay10ms(1); if(k3==0) { n=1; i=i+10; if (i>50) { i=50; } for (m=0;((m<50)&&(k3==0));m++) { Delay10ms(1); } } } if(k4==0) { Delay10ms(1); if(k4==0) { n=1; i=i-10; if (i>50) { i=0; } for (m=0;((m<50)&&(k4==0));m++) { Delay10ms(1); } } } zd(); } } 怎么样?对应电路是这样的: ![]() ![]() |