我也是嫌教程写得过于啰嗦,看明白后就直接简化掉了,8个IO口若有用单独的一二个,可以单独定义,能整合的尽量不用单独去定义,直接使用整个8个口直接操作即可简化很多。 另外如按键代码也都是可以简化的,通常的那按键一堆代码就懒得去看,还有嵌套循环等这些凡是写一大堆代码的看着都累,而这些一堆代码都是可以简化的,不是不能简化。 简化后代码量也少,逻辑看得也清晰,心情也舒畅,修改也方便。 |
那只是为了观察仿真用的是否加载正确,因为我写的好几个程序编译同一个名称,有时加载有问题,看图上是没接线的,让其循环可直观程序是否加载对否,当按键未操作时。 |
xianfajushi 发表于 2020-6-26 11:35 我也是没入门的业余爱好者,但是看了大佬写的程序茅塞顿开,楼主的程序思路就是那些搞开发板的典型程序,我开始也是跟着开发板学,由于年纪过大,十多年了也没入门,后来觉得不用开发板学倒是简单了不少。大佬的程序还有一个地方请教,P3 = ++j;这句的用处是什么?想了半天没想明白,还请赐教。 |
有人如此解释我的程序,忽然有一种感觉,就好像狄仁杰到深山古堡念的诗:烂柯终年无人行,意外今日远客迎。莫道深山无知己,贵人临堡夜风停。 夙山留凤凤自停,贱客远游似浮萍。忽闻一阵香风过,吹来贵主好门庭。 |
杨雪飞 发表于 2020-6-26 09:27 解释写得明白,就是按键按下的值,按键接地,自然是低电平。 |
白帅比 发表于 2020-6-20 10:26 大佬的意思就是把你 in1=0; in2=1; in3=0; in4=1; in5=1; in6=0; in7=1; in8=0; 这种驱动298的写法改成用一个IO口的八条线,比如你的in1 -- in8分别依次接入P1口的P1^0 P1^2 -- P1^7,你上边的01011010就是5A,换成十进制就是90,另外的三组分别是A5 55 AA,对应的十进制就是165 85 170,也就是说按照大佬给的接线图,用P2口做驱动,P1口做按键。那你的 in1=0; in2=1; in3=0; in4=1; in5=1; in6=0; in7=1; in8=0; 就可以简单的写成: P2 = 5A; 大佬直接做了个10进制的数组,把按键和键盘的IO口电平状态放在里边,直接在下边调用了,比如他前边的那P1= DJ虽然是电机的首拼,但是这里是检测按键状态,后边P2= 是驱动输出状态。 |
xianfajushi 发表于 2020-6-20 11:06 数组用的是10进制数,最后一个127就是十六进制的7F,意思是当P1.7口是低电平?是这个意思吗? |
![]() |
![]() |
wufeng391 发表于 2020-6-19 19:21 支持 :随时扫描按键应写在循环中 |
输入与输出都时一样的道理,赋值控制输出,按键按下读取即输入,都可以看作是一个值。 |
把数组中的值送给指定P就会出现想要的8个IO的高低电平,就这么简单,没虾米特别的道理。 |
稍微解释:数组前4个元素是控制L298输入端的信号,同时控制2片L298,数组后8个是按键按下时的值,用于定义按键的功能。 |
别管那么多,照抄就是,获取些许经验,以后就会慢慢知道的。 |
xianfajushi 发表于 2020-6-20 09:02 大佬这什么意思啊,我刚学单片机10天,看不太懂,请指教 |
![]() ![]() |
wufeng391 发表于 2020-6-19 19:04 这样不行吧,我是写的遥控车的一部分,如果电机的一根线拉正极或GND的话,就只能控制电机的启停,不能控制正反转了。 |
另外你们button函数不应该写在主函数main()内的while循环里边吗? main() { while(1) { button(); } } |
电机向芯片上接的时候应该是一根线拉out,另一端接电源正极或Gnd,如果你的程序没有问题的话,这样试试! |