1.簡(jiǎn)潔代碼
單片機(jī)程序閱讀一般都是先從主函數(shù)開(kāi)始,上一講的程序?qū)懛ㄔ谥骱瘮?shù)中顯得不簡(jiǎn)潔,影響人閱讀代碼的效率。有時(shí)我們只需要知道一條語(yǔ)句代表什么意思即可,所以我們把延時(shí)部分封裝為一個(gè)函數(shù),在主函數(shù)里調(diào)用函數(shù)名表示此處語(yǔ)句延時(shí)1秒,這樣可讀性就強(qiáng)的多,也簡(jiǎn)潔地多,讀者也可以先了解一下《手把手教你學(xué)51單片機(jī)》文檔中的4.6節(jié)先。
#include <reg52.h> sbit LED2 = P0^0; sbit ADDR2 = P1^2; sbit ADDR1 = P1^1; sbit ADDR0 = P1^0; sbit ENLED = P1^4; sbit ADDR3 = P1^3; void delay()//延時(shí)功能封裝為一個(gè)函數(shù) { unsigned int i,j;//定義兩個(gè)用來(lái)完成延時(shí)功能的變量 for(i=0;i<19601;i++)//延時(shí)1s { for(j=5;j>0;j--); } } void main() { ADDR3 = 1;//使能三八譯碼器 ENLED = 0;// ADDR2 = 1;//************************** ADDR1 = 1;//讓三八譯碼器的IO6輸出低電平 ADDR0 = 0;//************************** while (1) { LED2=0;//點(diǎn)亮最右端的燈 delay();//延時(shí)1s LED2=1;//熄滅最右端的燈 delay();//延時(shí)1s } }
這個(gè)原理很簡(jiǎn)單,我們用一張圖表示就知道什么叫函數(shù)封裝調(diào)用了
這里只不過(guò)是把變量i和變量j放在了“void delay()”中定義,實(shí)現(xiàn)的功能和上一講的代碼都是一樣的。不過(guò)筆者用軟件仿真發(fā)現(xiàn)這樣寫(xiě)會(huì)花掉CPU調(diào)用函數(shù)的4微秒時(shí)間,為了方便閱讀犧牲這4微秒是必須的,但我們不需在后面加例如“LED2=0;”或“i=0;”等這些語(yǔ)句也可以離奇的解決上一講所說(shuō)的燈跳變與秒表計(jì)時(shí)數(shù)字跳變不同步的詭異現(xiàn)象。
我們比較推薦用函數(shù)封裝來(lái)模塊化編程,因?yàn)檫@樣比較符合編程思想也是我們必須要使用的編程技巧。
2.建議
本節(jié)的代碼雖然不多,但是我們也要養(yǎng)成從主函數(shù)開(kāi)始閱讀代碼的習(xí)慣,而不是一開(kāi)始就從頭往下看代碼。比如映入我們第一眼簾的是“void delay()”函數(shù),這時(shí)我們不應(yīng)該進(jìn)入函數(shù)體去閱讀里面的內(nèi)容,而是馬上找到“void main()”進(jìn)入閱讀研究里面的代碼,當(dāng)看到“delay();”時(shí)有了注釋我們就有了對(duì)這個(gè)函數(shù)的第一印象,這時(shí)再去查看這個(gè)函數(shù)的內(nèi)容。
常見(jiàn)步驟如下:
一定要在編譯之后才能按F12。雖然在代碼量少的時(shí)候看不出這種方法的優(yōu)勢(shì),但當(dāng)我們閱讀別人的代碼時(shí),代碼量一般比較多,用此方法則能快速了解別人所寫(xiě)程序的層層意思,關(guān)于這個(gè)習(xí)慣,大家學(xué)到后面的程序就能領(lǐng)悟了。
C語(yǔ)言網(wǎng)提供由在職研發(fā)工程師或ACM藍(lán)橋杯競(jìng)賽優(yōu)秀選手錄制的視頻教程,并配有習(xí)題和答疑,點(diǎn)擊了解:
一點(diǎn)編程也不會(huì)寫(xiě)的:零基礎(chǔ)C語(yǔ)言學(xué)練課程
解決困擾你多年的C語(yǔ)言疑難雜癥特性的C語(yǔ)言進(jìn)階課程
從零到寫(xiě)出一個(gè)爬蟲(chóng)的Python編程課程
只會(huì)語(yǔ)法寫(xiě)不出代碼?手把手帶你寫(xiě)100個(gè)編程真題的編程百練課程
信息學(xué)奧賽或C++選手的 必學(xué)C++課程
藍(lán)橋杯ACM、信息學(xué)奧賽的必學(xué)課程:算法競(jìng)賽課入門(mén)課程
手把手講解近五年真題的藍(lán)橋杯輔導(dǎo)課程