自學單片機第三十篇下:行吊遙控器-代碼編寫

2020-12-03 小亮談電氣

之前我們主要介紹了仿真電路的一些知識,對於硬體方面的知識,我們在進行單片機學習時還是要不斷跟著學習,當然,仿真電路中的元件,有時候會誤導我們,跟我們預期的不一致,不一定是我們的設計問題,也許是仿真的問題,所以如果對於簡單的可以練習的電路,建議還是要用實際電路來仿真一下,軟體仿真只是一個輔助。

在這裡說明一下情況,由於家裡的小寶貝會爬了,為了防止他把細小的電子器件吞入口中,我把硬體元件收了起來,過段時間會定製一個柜子,等柜子好了,再把之前沒有進行硬體仿真的一個一個得過一遍。所以接下來的日子裡就只能靠著仿真軟體過日子了。手頭有東西可以仿真的,仿真後有什麼問題可以留言,我們共同去查看問題原因,一起學習。

這是我們仿真的電路圖。

行吊遙控電路相對簡單,輸入輸出也比較少,於是我們會從三個方面來進行程序的編寫。

第一個:單個按鍵定義的方法。

按鍵定義後,我們寫下運行的代碼。

首先是定義了一個中間變量,為了防止開機啟動,所以需要對m等於1操作,接著將P1埠統一置1,這是為了讀取按鍵所必須的操作。然後是判斷開機按鍵是否按下,如果按下,就將中間變量m=0,同時將電源輸出埠置0,從電路圖上可以看出,置0後三極體導通,繼電器吸合,正極導通。

然後判斷急停按鍵是否按下,若是按下,就將m=1,清空輸出的所有操作。

循環函數中是按鍵的控制操作,進入循環的條件是中間函數等於0,這樣當開機時,m=1,就不會進入按鍵操作函數,按鍵按下功能鍵也不會誤操作。

當進入循環函數後,會繼續進入循環,條件是功能鍵是否按下,例如當向下按鍵按下,就會進入向下的循環函數,當按鍵鬆開,會進入判斷是否急停,如果沒有急停就會清空功能埠的電位,僅留下電源埠。

在循環中添加急停按鍵的判斷,是為了防止功能按鍵循環中無法退出循環,造成無法關機。

這個行吊的操作中,是無法同時進行兩個動作的,例如同時向下和向東,實際生產中,部分行吊是可以同時動作的,大家可以思考下如何對代碼進行改動。

代碼寫完,我們需要進行輸出可執行文件,就是「***.hex」文件,一定要記得修改debug中的參數,選中輸出可執行文件這一項,否則就無法找到這個文件,就沒有辦法仿真了。

成功輸出後,會在下方的提示框中顯示,倒數第三行的那句話,就是說:輸出了可執行文件到「文件地址」。

說這麼多是因為有同學從中間開始看的文章,沒有看前期的介紹,於是有些地方會不熟悉。沒事,不會就多說兩遍。學習就是學會為止。我們又沒有績效,也沒有學分,哈哈哈。

這是運行後的狀態,總電源繼電器斷開,每個電機都沒有轉動。我們嘗試按下其中一個功能鍵,測試下,是否會動作。

我按下了東這個按鍵,輸入已經拉低,但是顯然輸出均為高電位,程序沒有輸出,程序目前沒有問題。我們繼續測試,按下開始鍵。

按下後,繼電器吸合,電源接通。並保持。

按下向上鍵,電機顯示為正值不斷增加,鬆開後電機停止,符合我們的預定設計。接下來需要對下和東西南北進行操作,查看狀態是否正常。

圖片太多就不作貼圖了我們測試後,沒有異常情況發生,一切與代碼運行設計一致,當然還是有不足之處,例如,當我們運行向上時,如果此時上鍵出現損壞,導致出現問題,需要停止,此時,因為程序中在執行向上的語句,就無法完成急停的操作,我們就無法將問題停止,會造成事故的繼續加劇。為此我們需要對代碼進行優化。

之前是通過循環語句,來判斷是否按下,如果按下就停在循環語句中,接下來我們使用if判斷語句來寫,這樣,判斷按鍵按下後,就不會一直停留在語句中,會跳出判斷,流程結束會再次判斷。在流程中添加急停語句就可以了。

程序代碼修改為了使用if和else if語句,南北,東西,上下使用else if可以保證不會同時動作,然後我又添加了P2=P2|0xf0;這個語句,是說,讓輸出去或上0xf0,因為頭四位中,前兩位是電源輸出控制,所以不用控制,用0去保持原有狀態,P2.2和P2.3是上下,由於需要動作,所以就需要0去保持現有操作,而其他的四位是東西南北,此時無需動作,所以就需要清空操作,全部置1.

如果我們不添加這一句,那麼就會出現前文所說的,我們可以既操作南北,又操作上下,同時動作。這要根據實際情況,看控制要求了。

最後除了急停語句,我又添加了一句if(P1==0xff){P2=0xfe;},這句是為了我們在鬆開按鍵時,保證所有動作停止,因為行吊不允許自鎖運行,要做到按鍵按下工作,按鍵鬆開停止,這就是為了安全,同時可以在工作中通過點按,來實現小幅度的近似精確移動。

代碼更改後,我們再次驗證下效果,不過為了保持一個按鍵損壞的狀態,我們需要一個按鍵一直接地。然後再按下急停,看下是否會出現繼續運行的情況。

對向北按鍵進行了短路,當按下開始,電機就開始旋轉。

按下急停後,儘管向北按鍵還在短路狀態,但是電機已經停止轉動,因為電源斷開了。這就保證了作業的安全。生產生活中,安全才是第一位。

寫的篇幅又長了,再分一篇吧,不然太長看著眼疼。

相關焦點

  • 自學單片機第三十篇下(續):行吊遙控器-代碼編寫
    也就是8位數據轉化為16進位代碼來進行相應的操作。一般的我在書寫文章時不會吧代碼用文字的形式發出來,一方面是可以讓大家忍住自己去複製粘貼的欲望,另一方面是讓大家有更好的時間去理解整個製作流程而不是僅僅局限於代碼如何,我們要看到的是代碼是一種手段,而真正起到主導作用的是支撐我們把代碼書寫出來的想法。希望大家理解。
  • 自學單片機第三十篇中:行吊遙控器-三極體
    首先我們呢先說下三極體NPN的工作原理,三極體就是兩個二極體尾尾相連做成的。從圖中可以看出,NPN型的三極體,元件圖中箭頭所指的方向就是總電流的方向,也就是電流會從C和B流入然後匯集到E流出。我們只要這麼理解就可以了,太高深的關於控制方面我講一本書也講不完呢,有機會我們再單獨說說。
  • 自學單片機第十篇:基礎知識--萬用表的使用
    選好表,我們就簡單說下使用方法和注意事項。測量上有電阻,電壓,電流,通斷,二極體判斷這幾個是經常使用的,電容和溫度也會用,但是頻率比較低。我們就說下頻率高的。測量時,先短接表筆,看下初始阻值,同時判斷表筆是否正常,從較大阻值開始,雙手不要接觸電阻的測量端,因為我們也是一個大電阻,同樣會影響阻值。一般的可以等數據穩定後讀數即可,也可以等待5秒,因為萬用表需要時間去估算數據。對於色環電阻,可以百度其數值,對照測量值,看是否正常。
  • 自學單片機第十二篇上:首次測試設備——軟體測試
    首先,測試軟體是否可以運行,並寫下第一個代碼,同時導出可執行文件。打開安裝好的keil軟體。如果選擇了「是」也不影響操作,接著進行下一步即可。(截圖忘記保存,不影響操作,大家自己看提示就可以完成)新建一個程序文檔,我們可以在項目上單擊右鍵,會彈出菜單欄,選擇第二項》》添加一個新的文檔。
  • 自學單片機第九篇:基礎知識--計算機基礎操作
    首先,來捋下電腦上都有什麼硬體,先說,這個不是教修電腦的文章,不過用的時間長了,小毛病還是可以解決的,遇到難以解決的問題,我的絕招是重裝系統,此法就像,養了個狗,眼看著收拾不住了,果斷換條新狗或者擼個貓什麼的。說硬體。
  • 網絡尖兵李聰娜:90多晝夜編寫代碼40餘萬行(圖)
    2008年初,總部賦予李聰娜所在部隊緊急研發一種網絡終端服務系統的任務,部隊長王國玉安排她編寫一套底層驅動程序。  原本打算藉機「露一手」,可真要編寫程序時,她才發現這遠遠不同於傳統意義上的軟體編程,不僅此前沒有學過,有些東西連聽都沒聽過。  看著一行行讀不懂、看不明的原始碼,她急得直想哭!
  • Excel用3行代碼編程實現任何功能——編寫宏
    也不怪你不低調,因為你那兩招和別人就不一樣,你上來就玩的是代碼,而且還3句代碼搞定人家搞不定的事情!我們編寫一個宏任務,給他定義上代碼,只需要3行代碼就可以搞定這個任務,並且由於有了宏任務的代碼,以後其他的Excel,隨時用!
  • 計算機專業的學生一年通常需要編寫多少行代碼
    如果在本科期間就參加老師的課題組,那麼代碼量通常會更大一些,一年寫幾萬行代碼也是比較常見的情況。如果選擇大數據分析方向,雖然也需要完成一定的代碼編寫,但是代碼量相對於大數據開發方向的同學來說,要明顯下降很多,因為大數據分析的核心在於算法設計、訓練和驗證等過程,代碼的編寫主要是完成算法的實現,而算法實現的代碼量相對要小一些。
  • 如何編寫簡潔美觀的Python代碼
    介紹你有沒有遇到過一段寫得很糟糕的Python代碼?我知道你們很多人都會點頭的。編寫代碼是數據科學家或分析師角色的一部分。另一方面,編寫漂亮整潔的Python代碼完全是另一回事。作為一個精通分析或數據科學領域(甚至軟體開發)的程式設計師,這很可能會改變你的形象。
  • 萬能遙控器代碼—多到你無法想像
    導讀:電視是每個家庭必不可少的家用電器,所以我們在使用遙控器的時間也會比較多。但如果遙控器壞了怎麼辦,很多人都會想到配一個萬能遙控器,那麼萬能遙控器怎麼設置,它的萬能遙控器設置方法是怎樣的?要設置好萬能遙控器,必須知道電視萬能遙控器代碼是多少。
  • 自學單片機第十三篇下:單點交通燈
    今天這篇文章,我們來通過一個僅靠延時函數,來實現下交通燈。這裡會讓大家先熟悉下正常的函數如何使用。我們之前的延時函數其實有些粗糙了,不過能達到要求也就無所謂了。首先看下函數的形式。我們可以看出,兩個程序的行數基本一致,但是從結構上,左邊的程序雖然結構看似層層清晰,這是因為我們所書寫的代碼還是比較少,如果代碼量很大,程序中存在大量一樣的語句,就看著很費神了
  • 如何編寫可讀性代碼
    作者:極鏈科技 湯紅燕什麼叫可讀性代碼?簡單來說,就是易於理解、耗腦時間少、可維護性較高的代碼。編寫可讀性代碼把信息裝到名字裡(一個好的名字可以承載很多信息)1. 選擇專業的詞(避免「空洞」)比如函數 getUserInfo( ) 是用來獲取用戶信息,但是,是從接口中獲取的信息呢?
  • 教你用十行代碼編寫一個Python小遊戲!不信?來看看
    下面我們嘗試用最少的代碼來編寫一個小遊戲。準備工作01選擇合適的開發工具「工欲善其事必先利其器」,編寫遊戲之前得挑選一款合適的工具,這樣可以大大地簡化程序編寫工作。到目前為止我們已經編寫了5行代碼,如下所示:WIDTH = 500HEIGHT = 300def draw(): screen.fill((255, 255, 255)) screen.blit(&34;, (200, 100))
  • 教你用十行代碼編寫一個Python小遊戲!不信?來看看!
    下面我們嘗試用最少的代碼來編寫一個小遊戲。準備工作01選擇合適的開發工具「工欲善其事必先利其器」,編寫遊戲之前得挑選一款合適的工具,這樣可以大大地簡化程序編寫工作。到目前為止我們已經編寫了5行代碼,如下所示:WIDTH = 500HEIGHT = 300def draw():screen.fill((255, 255, 255)) screen.blit(
  • 如何編寫完美的 Python 命令行程序?
    這篇文章將教你如何編寫完美的 Python 命令行程序,提高團隊的生產力,讓大家的工作更舒適。作者 | Yannick Wolff譯者 | 彎月責編 | 屠敏作為 Python 開發者,我們經常要編寫命令行程序。比如在我的數據科學項目中,我要從命令行運行腳本來訓練模型,以及計算算法的準確率等。
  • 編寫乾淨的C#代碼技巧
    介紹在當今時代,編寫代碼並不困難。然而,編寫乾淨且可伸縮的代碼並不容易。在本文中,我們將討論一些為我們的項目編寫乾淨C#代碼的技巧。乍一看,任何以前從未見過您的代碼的開發人員都必須儘可能地理解它,它幫助我們更好地理解代碼。下面是編寫乾淨C#代碼的一些重要技巧。
  • 品牌新增業務之後臺代碼的編寫
    新增業務就不用自己使用vue寫前端頁面了,直接用模板,主要專注於後臺Java代碼的編寫。一、新增品牌頁面雖說有現成已經寫好的前端模板,但是也要自己看得明白,不然幹了啥都不清楚。點擊新增品牌按鈕,會彈出一個對話框,其vue是如何編寫的呢,我們看下代碼:
  • 商品品牌業務之後臺Java代碼的編寫
    關於商品品牌,後臺代碼的完整編寫。兩個重要知識點:分頁助手插件的使用,通用mapper高階查詢的使用。因此可以用.then() 來接收成功時回調,.catch()完成失敗時回調,也就是我們昨天的代碼編寫。但是昨天寫的代碼很難看出來是使用的axios,因為其有配置讓其使用更簡單了。
  • 通過Visual Studio 為 Linux 編寫 C++ 代碼
    Build 2016大會上Microsoft首次公布的Visual Studio 2015擴展提供了在VS2015中編寫C++代碼,隨後通過Linux/UNIX計算機進行編譯和執行的能力。
  • 編寫代碼,好像您一生維護它一樣
    Yuriy的建議很簡單,但必不可少:代碼擁有超越您的生命,而考慮代碼的壽命是代碼生存和成功成為程式設計師的關鍵。 我們很想知道您是否同意。您可以問97個人,每個程式設計師都應該知道和做什麼,並且您可能會聽到97個不同的答案。 這可能同時令人不知所措和令人生畏。 所有建議都是好的,所有原則都是正確的,所有故事都是令人信服的,但是您從哪裡開始呢?