|
本帖最后由 名字不是重点 于 2021-5-17 10:39 编辑 1: zheng=1; //初始化电机正转动 fan=0; 这2 个互斥,可以只设一个就行了。 2: write_data(zhuansu%10000%1000%100%10+0x30); 这个可以优化为: write_data(zhuansu%10+0x30); 相同的还有 write_data(zhuansu%10000%1000%100/10+0x30)==>write_data(zhuansu%100/10+0x30) 。 等等 连续取模的,可只取最后一个。 3: void int2()interrupt 1 中不要做display(); 建议做法是if(flag==200)插入一个标志update,在main()的while(1)中判断update,再决定是否刷显转速。 4: 按键扫描都是P1口,建议一次读入P1的值,再用switch来做分支处理。 认真找找,应该还有很多地方能做优化的。 |
glinfei 发表于 2021-5-17 09:00 按你的电路图和代码,zhuansu这个变量是计数轮子转了多少圈,这个值*6.28*轮子半径就近似小车移动的距离 |
suit8515 发表于 2021-5-16 20:48 zhuansu这个变量保存的仅仅是计数,不能直接知道转数,要计算一段时间的zhuansu变量的差值,推算转数, |
suit8515 发表于 2021-5-16 20:48 这是全局变量,在哪都可以调用。多学习下,否则到哪都是问题,都要问人,次数多了,人家就不愿意了。 |
hhdsdy 发表于 2021-5-16 20:20 那我如果想要在主函数的while循环中调用zhuansu该怎么调用啊,我直接在里面用zhaunsu表示不行 ![]() |
懒惰不看程序![]() 。程序已注明:外部中断1脉冲计数记录电机的转速 电机转一圈zhuansu加1 |
| 基础太差,电路图显示霍尔接在P3.3引脚,而P3.3是INT1,对应的就是第253行的void int1()interrupt 2 //外部中断1脉冲技术记录电机的转速 电机转一圈zhuansu加一 的整段程序 |
| 霍尔传感器 是中断输入,中断号是2,建议观看 人人学会单片机的视频教程 彻底学好STC单片机中断 |