基於proteus的51單片機開發實例33-單片機的編程規範

2020-08-28 老馬識途單片機

1. 基於proteus的51單片機開發實例33-單片機程序的編程規範

說明:本文中所說的編程規範只是我個人的一些想法和實踐,有些經驗可能並不能適合所有場合,當然也不可避免的有比較偏頗的看法,請大家多多批評指正。



1.1. 實驗目的

之前我們已經學習了如何把複雜的單片機程序按照模塊功能分為多個程序模塊,然後使用頭文件包含的方式將不同的程序模塊有機的聯繫起來。經過模塊化編寫的程序,閱讀、查詢起來會很清晰。

本例中,我們進一步對單片機程序的編程規範做一些簡單說明,目的是讓我們編寫的程序看起來不會那麼亂,並且讓看我們程序的人都能看懂。

1.2. 設計思路

本實例我們從變量的命名規範、程序注釋、程序體結構劃分幾方面來簡單了解如何使程序看起來乾淨、不雜亂、變量一看就知道含義,程序中每一段都是獨立的,但是又能有機的結合起來。

1.3. 基礎知識

我們從變量的命名規範、變量的初始化、函數體的結構化、注釋的方法這幾方面來了解一下。至於其它的編程規範和方法,我們在隨後的實例中逐步了解。



1.4. 變量名稱的命名規範

變量名應使用帶有具體含義的英文單詞組合或者簡寫,避免使用i,j,k這種無任何含義的變量名。

但是i,j,k這類變量並不是完全就不能用,在一定場合下,還是建議使用i,j,k這類變量的。什麼場合下可以使用這種無含義的變量呢?在循環語句中是可以使用的,例如for循環、while循環、do...while循環,循環次數可以使用i,j,k這些變量表示。循環次數等一些很簡單的,目的很明確的場合,使用這些變量不但不會引起歧義,還可以使程序更加簡潔。

而在大部分情況下,還是建議使用有具體含義的變量名稱。我個人習慣於使用動詞+名稱的方式,其中每一個檔次的頭一個字母大寫。例如定義一個向DS1302寫數據的變量,可以定義為WriteData,當程序裡包含多個外設模塊,這些模塊都有相似的操作時,最好再把外設模塊名字加上,與具體操作的變量名之間用下劃線「_」將二者組合在一起,用以區別是對那個模塊的操作。例如程序中有LCD1602和DS1302兩個外設模塊,都有寫數據的操作,分別命名為:LCD1602_WriteData,DS1302_WriteData。也可以定義為WriteData_LCD1602,WriteData_DS1302。模塊名稱可以在前面,也可以在後面,根據自己的習慣就行。

對於英文名字比較長的單詞,可以使用簡寫,但是簡寫的名字要讓人看了容易理解,或者使用約定俗成的簡寫。例如對於串口數據收發的變量,一般約定用Rev表示接收數據變量、用Trn表示發送數據變量,對於數組變量,一般使用Buff命名。

還有一種命名習慣是命名時帶上變量的數據類型,例如定義一個無符號整型數據,可以這樣定義 unsigned int uiCounter。這樣的話,一看到這個變量名字前面的「ui」,就知道該變量是無符號整型數據。



1.4.1. 變量的初始化

變量在定義的時候可以直接初始化,例如unsigned int uiCounter=0;也可以只定義變量但不初始化變量的值。

如果變量在定義時沒有初始化其數值,則程序中使用該變量時應對其設置明確的數值,不能直接使用,否則容易出錯。例如先定義了變量unsigned int uiCounter;未對其值初始化,這時如果直接作如下操作P0=uiCounter,則P0埠8個位的狀態是隨機的,並且每調用一次這個語句,P0口8個位的狀態是不一樣的。

1.4.2. 函數體的結構化

一般情況下,函數體的內容包括:局部變量定義及初始化,具體函數語句、函數返回值語句。

其中局部變量定義及初始化以及函數返回值語句可以沒有。另外函數返回值語句可能在函數體的任何位置,不一定局限於函數的最後。

函數內的局部變量初始化、執行語句、返回值這三部分之間最好用一個空行隔開。例如下面的代碼。

bit BusyTest(void) { bit result; RS=0; //根據規定,RS為低電平,RW為高電平時,可以讀狀態 RW=1; E=1; //E=1,才允許讀寫 _nop_(); //空操作 _nop_(); _nop_(); _nop_(); //空操作四個機器周期,給硬體反應時間 result=BF; //將忙碌標誌電平賦給result E=0; //將E恢復低電平 return result; } 

這樣做的好處是,可以使函數結構清晰。

並且建議函數體內根據不同功能,內容,適當在語句中添加空行,這樣的程序看起來不會讓人感覺到累。

1.4.3. 程序的注釋

程序的注釋分為兩大部分:函數功能的注釋和程序語句的注釋。

函數語句的注釋一般包括函數功能,入口參數、出口參數等。對於較為複雜的函數,有些還建議添加函數建立時間,更改時間,更改內容等。

如下面代碼所示。

/*****************************************************函數功能:將模式設置指令或顯示地址寫入液晶模塊入口參數:dictate***************************************************/void WriteInstruction (unsigned char dictate){ }

程序語句的注釋一般放在語句後面,應當於與語句保持適當的空格,這樣不至於把程序語句和注釋看成一體。

對於比較長的語句,或者這個語句的注釋比較長,一般把注釋放在該語句的上方。如下所示。

/*****************************************************函數功能:指定字符顯示的實際地址入口參數:x***************************************************/ void WriteAddress(unsigned char x) { //顯示位置的確定方法規定為&34; WriteInstruction(x|0x80); }

1.5. 電路設計

本實例沒有電路。



1.6. 程序設計

本實例沒有具體的程序代碼。

1.7. 實例仿真

本實例沒有仿真。

1.8. 總結

單片機項目設計不單單是把功能實現了,還要把程序設計得更合理、更清晰、易移植,因為多數情況下,在公司裡面的單片機項目不會只是設計者一個人看的,更不會一直是同一個人在管理、修改這個項目。所以要養成良好的編程習慣。


相關焦點

  • 基於proteus的51單片機開發實例37-DAC0832
    基於proteus的51單片機開發實例37-DAC08321.1. 實驗目的之前我們學習了數模轉換晶片DAC0808,今天我們繼續學習另一種D/A轉換晶片DAC0832。設計思路圖1 DAC0832電路本例中使用51單片機控制D/A
  • 基於proteus的51單片機開發實例24-矩陣鍵盤(行列式鍵盤)
    基於proteus的51單片機開發實例24-矩陣鍵盤1.1.(行列式鍵盤)的電路設計、編程實現。矩陣鍵盤就是基於用較少I/O口連接更多按鍵的思路實現的。通常將多個按鍵排列成矩陣形式,這也是矩陣鍵盤名稱的由來,編程時,是按照矩陣的行、列組合判斷是那個按鍵被按下的,因此又稱為行列式鍵盤。1.3.
  • 基於proteus的51單片機開發實例30-模塊化程序設計
    基於proteus的51單片機開發實例30-模塊化程序設計1.1.實驗目的模塊化程序設計不知不覺我們的51單片機開發實例已經進行到第三十篇了設計思路本實例的設計思路是:將《基於proteus的51單片機開發實例29-單總線DS18B20的讀寫》中的程序代碼按照延時功能、LCD1602液晶顯示功能、DS18B20的讀寫控制功能這三個部分,使用模塊化程序設計的方法,將這三個部分分別封裝為三個.c和.h文件
  • 基於KEIL 51的單片機開發系統設計
    1.引言本文引用地址:http://www.eepw.com.cn/article/171806.htm近年來隨著KEIL 51不斷升級,高版本的KEIL 51編譯器,尤其是Keil μVision2(基於Windows的C51集成編譯環境)
  • Proteus軟體仿真與Keil的51單片機系統設計
    單片機功能越來越強大,價格卻不斷下降的優勢無疑成為嵌入式系統方案設計的首選,同時單片機應用領域的擴大也使得更多人加入到基於單片機系統的開發行列中,推動著單片機技術的創新進步。  然而傳統的單片機系統開發除了需要購置諸如仿真器、編程器、示波器等價格不菲的電子設備外,開發過程也較繁瑣。如圖1所示,用戶程序需要在硬體完成的情況下才能進行聯調,如果在調試過程中發現需修改硬體,則要重新制板。
  • Proteus與Arduino的整合在單片機系統開發中的應用
    1.引言  Arduino是一款便捷靈活、方便上手的開源電子原型平臺,具有接口豐富、編程環境簡便、自由度大與可拓展性強等優點.它基於AVR平臺,對AVR庫進行了二次編譯封裝,將複雜的單片機底層代碼封裝成簡單實用的函數
  • 51單片機、STM32單片機、PIC單片機性能對比
    51單片機 應用最廣泛的8位單片機當然也是初學者們最容易上手學習的單片機,最早由Intel推出,由於其典型的結構和完善的總線專用寄存器的集中管理,眾多的邏輯位操作功能及面向控制的豐富的指令系統,堪稱為一代「經典」,為以後的其它單片機的發展奠定了基礎。
  • 基於51單片機和可編程邏輯器件實現LED顯示屏
    本文詳細分析採用Verilog HDL對ATF1508AS進行編程,實現雙口RAM訪問和產生LED點陣驅動電路所需的各種時序信號。1 LED顯示屏的基本結構及關鍵技術 本系統設計中,控制系統採用單片機+CPLD的方案來實現,整個控制系統可分為:信號接收及處理模塊和CPLD的掃描控制模塊和LED點陣驅動模塊,如圖1 所示。
  • 基於Proteus單片機的音樂演奏實現系統
    當前的很多用單片機實現音樂演奏的系統都是利用開發板結合仿真器實現的,這種方法不是很複雜,實現也較方便,但是調試不是很方便,且成本也較高。 本文提出的一種基於Proteus的單片機演奏音樂的方法,非常簡單實用,且該方法基於軟體來實現的,所以成本非常低,調試方便,效果也很不錯,適合於愛好音樂的單片機學習者。
  • 基於51單片機的人體紅外模塊的自動門設計
    微處理器模塊方案一:採用可編程邏輯器件CPLD。CPLD可以實現各種複雜的邏輯功能、規模大、密度高、IO資源豐富,適合作為大規模控制系統的控制核心。但本系統不需要複雜的邏輯功能,對數據的處理速度的要求也不是很高,且從使用及經濟的角度考慮,我們放棄了此方案。方案二:採用51系列單片機。
  • 介紹一個非常好用的單片機仿真軟體PROTEUS(帶下載連結)
    首先把proteus軟體連結發給需要的朋友百度網盤連結:https://pan.baidu.com/s/1gaWBwyVgbQGEDL-29Zkqhg 提取碼:ddgd想自學低端從事單片機教學多年,雖說不夠精通,但帶領學生入門單片機足夠了。說實話,一個從沒有接觸過計算機語言的初學者,因為沒有程序的概念,學習單片機是有一定難度的。但如果方法得當,則能再最短時間內入門,也會為之後的深入學習打好一個良好的基礎。以下我將從幾方面來總結入門單片機需要做的幾步。首先,選好設備。
  • 學習單片機,為什麼我建議你從51單片機開始
    因此經過我的教學經驗,如果想開始學習單片機,最好從51單片機開始學起,我都推薦STC系列的51單片機學習。原因就是一句話,因為51系列單片機簡單,學習起來也簡單。但是簡單不代表它功能少,51單片機雖然簡單,但體系是完備的。所以當你學會51單片機,會非常快速入門其它單片機學習。
  • 單片機C語言編程實現對舵機控制
    在智能小車編程過程中,舵機是實現小車避障、循跡的基礎。單片機通過控制舵機實現小車的轉向。本文主要介紹如何使用51單片機實現對舵機進行偏轉角度控制。所使用舵機型號為MG996R,使用晶片為STC89C52。
  • 圖形化編程玩51單片機(十三)簡單實用門鈴實驗
    特別提示:從本期起,將原來的文章標題「零基礎學51單片機」更改為「圖形化編程玩51單片機」本期實驗:模擬簡易門鈴;且有關閉門鈴功能。4,打開燒錄軟體,找到剛剛的hex文件,下載到單片機。效果如圖二所示實驗解釋及編程思路:我們知道單片機最常用的功能之一就是檢測埠的輸入狀態和改變其他埠的高低電平輸出狀態。所以,我們可以設置一個門鈴開關狀態的變量。
  • 基於Modbus通信協議的eView觸控螢幕與51單片機的通信設計
    基於Modbus通信協議的eView觸控螢幕與51單片機的通信設計 電子工程網 發表於 2019-09-27 16:27:48 Modbus協議由於其具有開放性、透明性、成本低、易於開發等特點,已成為當今工業領域通信協議的首選
  • 51單片機指令快速記憶方法總結
    學習單片機,除了搞清單片機內部功能、存儲空間分配及I/O接口外,還應掌握其指令系統。MCS-51共有111條指令,現介紹我們總結出的快速記憶MCS-51指令的方法,供大家參考。大家都知道,彙編語言指令由操作碼、操作數兩部分組成。MCS-51使用彙編語言指令,它共有44個操作碼助記符,33種功能,其操作數有#data、direct、Rn、@Ri等。
  • 基於51單片機的兩路溫度控制器的設計方案
    本方案設計的實現基於C51單片機的兩路溫度控制器,做到成本最低化,精確度高,兩路溫度的顯示和控制,能在溫度超出設定的最高溫度時啟動電風扇進行降溫,在溫度低於設定的最低溫度時啟動蜂鳴器報警,能夠用戶設定最高最低溫。  2.系統結構  溫度控制器系統包括以下幾個主要部分:溫度傳感器,報警電路,LED顯示電路,鍵盤控制,89C51控制部分。
  • 51單片機程序存儲器擴展
    在單片機的擴展中,要分別考慮程序存儲器及數據存儲器的擴展。存儲器是單片機系統中使用最多的外擴晶片,對80C51系列單片機而言,由於程序存儲器與數據存儲器的空間在物理空間上的各自獨立性,使得兩者的擴展方法略有不同。
  • Proteus和Keil軟體在單片機項目式教學中的應用
    1 Proteus和Keil軟體的介紹 Proteus軟體是英國Labcenter electronics公司開發的電路分析與實物仿真軟體,它除了具有其他EDA工具的原理布圖、PCB自動或人工布線、電路仿真等功能外,Proteus最大的特點是基於微控制器的設計連同所有的外圍電路一起仿真,可直接在單片機虛擬系統上對MCU編程,並可對軟體原始碼進行實時調試。
  • PIC單片機C語言程序實例
    編者按:為了幫助具有PIC單片機彙編語言知識的技術人員或工程師,快速掌握利用C語言編寫PIC單片機程序的方法,本刊特推出《PIC單片機C語言程序設計》系列連載文章。丈中給出的C語言程序實例,均是可執行的,讀者可以放心引用。      一、彙編語言與C語言      早期的單片機程序多採用彙編語言編寫。