![]() |
發布時間: 2020-6-19 17:30
正文摘要:像用獨立按鍵控制電機,然后發現獨立按鍵比如看k1按下去之后,除了P1^1從高電壓變成低電壓,別的地方沒有任何變化,很苦惱,求大神指點。 //這是源代碼 #include<reg52.h> #include<intrins.h> typede ... |
我也是嫌教程寫得過于啰嗦,看明白后就直接簡化掉了,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,如果你的程序沒有問題的話,這樣試試! |