![]() |
發布時間: 2021-5-16 19:30
正文摘要:單片機源程序如下: #include <reg52.h> #define uchar unsigned char #define uint unsigned int void displaym(); sbit en=P2^5; // ... |
本帖最后由 名字不是重點 于 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表示不行 ![]() |
懶惰不看程序![]() ![]() |
基礎太差,電路圖顯示霍爾接在P3.3引腳,而P3.3是INT1,對應的就是第253行的void int1()interrupt 2 //外部中斷1脈沖技術記錄電機的轉速 電機轉一圈zhuansu加一 的整段程序 |
霍爾傳感器 是中斷輸入,中斷號是2,建議觀看 人人學會單片機的視頻教程 徹底學好STC單片機中斷 |