武志鵬 焦紅衛(wèi)
摘 要:以STC單片機(jī)控制LED顯示屏為例,闡述在智能家居及其相關(guān)專業(yè)開展單片機(jī)教學(xué)的特點(diǎn)與困境,分析LED顯示屏的結(jié)構(gòu)特點(diǎn)與控制方法,研究單片機(jī)C語言編寫驅(qū)動程序的關(guān)鍵技術(shù),探討該課程一體化教學(xué)內(nèi)容。最后在Proteus平臺上進(jìn)行軟硬件交互仿真與調(diào)試,使一體化課程中的單片機(jī)模塊教學(xué)更加形象具體。
關(guān)鍵詞:教學(xué)研究;單片機(jī);C語言;LED顯示屏;智能家居;Proteus平臺
中圖分類號:TP393;G642.423文獻(xiàn)標(biāo)識碼:A文章編號:2095-1302(2019)10-0-04
0 引 言
隨著嵌入式系統(tǒng)與各類硬件設(shè)備的不斷融合,尤其是物聯(lián)網(wǎng)智能家居技術(shù)的逐步發(fā)展,以單片機(jī)為核心的計算機(jī)控制技術(shù)成為物聯(lián)網(wǎng)智能家居相關(guān)專業(yè)學(xué)生的必修課。智能家居專業(yè)本質(zhì)上屬于系統(tǒng)集成應(yīng)用,是多專業(yè)的有機(jī)融合。學(xué)生往往需要在有限的學(xué)年里完成趨于無限的課程,因而傳統(tǒng)的教學(xué)方法與教學(xué)節(jié)奏難以滿足需要。另外,單片機(jī)教學(xué)往往以單片機(jī)內(nèi)部結(jié)構(gòu)、單片機(jī)原理和匯編指令為核心,這種教學(xué)模式難以有效培養(yǎng)學(xué)生的應(yīng)用技能,也難以激發(fā)學(xué)生的積極性,往往導(dǎo)致學(xué)生認(rèn)為學(xué)習(xí)內(nèi)容枯燥乏味,最終造成學(xué)生的應(yīng)用能力不足。因此,單片機(jī)教學(xué)應(yīng)該采用理論與實踐有機(jī)結(jié)合的一體化教學(xué)方式,進(jìn)而增強(qiáng)學(xué)生的感性認(rèn)識和工程體驗[1-4]。
1 LED屏結(jié)構(gòu)特點(diǎn)及工作原理
基于發(fā)光二極管的數(shù)碼管與點(diǎn)陣模塊是一類重要的顯示器件,其可靠性高,使用壽命長,環(huán)境適應(yīng)能力強(qiáng),操作使用方便靈活,且顯示屏面積可根據(jù)實際需求進(jìn)行擴(kuò)展,對控制系統(tǒng)性能要求低,因而在物聯(lián)網(wǎng)智能家居產(chǎn)品中得到了廣泛應(yīng)用。根據(jù)LED的布局結(jié)構(gòu)不同,常見的LED顯示器可以分為數(shù)碼管類與點(diǎn)陣類。智能家居LED顯示器如圖1所示。數(shù)碼管顯示字符的種類簡單有限,主要用來顯示溫度、濕度、時間及少量字母組成的單詞,如圖1(a)所示。而點(diǎn)陣類可顯示更加豐富的內(nèi)容,如圖1(b)所示。
教學(xué)中常采用8位8段數(shù)碼管和8×8點(diǎn)陣屏,這兩種顯示屏成本低、顯示內(nèi)容靈活性強(qiáng)。數(shù)碼管一般不具備內(nèi)置字符取模器,通過查閱碼表可實現(xiàn)對數(shù)碼管顯示內(nèi)容的控制,而點(diǎn)陣屏則通常需要使用取模軟件。LED顯示屏如圖2所示。
圖2中兩種顯示器均以發(fā)光二極管為元件。外觀上,數(shù)碼管和點(diǎn)陣是兩種不同的顯示器,但是兩者都通過對LED采取不同的布置方式組合而成,硬件連線與控制方法均相同,其原理如圖3所示。兩種顯示屏各有64個LED,8個數(shù)碼管共陽端即其位選線對應(yīng)點(diǎn)陣的8根列線;8個數(shù)碼管的段選并聯(lián)組成8根段選線,對應(yīng)點(diǎn)陣的8根行線。兩者均可用多路復(fù)用技術(shù)即動態(tài)掃描法控制[5-6]。
開展教學(xué)時,可利用Proteus仿真軟件搭建原理圖,也可組織學(xué)生實際操作,采用分立元件搭建數(shù)碼管與點(diǎn)陣,使學(xué)生加深對元件結(jié)構(gòu)的認(rèn)知。搭建完成后,首先帶領(lǐng)學(xué)生使用單片機(jī)對顯示屏進(jìn)行簡單規(guī)則的點(diǎn)亮與熄滅,待學(xué)生掌握控制規(guī)律后,再開展后續(xù)程序設(shè)計課程。
2 數(shù)碼管滾動
數(shù)碼管結(jié)構(gòu)單一,顯示內(nèi)容有限,編碼方法易于掌握,應(yīng)首先開展數(shù)碼管的滾動控制教學(xué)。
2.1 程序原理分析及設(shè)計
要求顯示內(nèi)容“HELLO”,自右至左滾動顯示,周而復(fù)始。采用8位8段共陽型數(shù)碼管顯示5位字符,根據(jù)數(shù)碼管動態(tài)掃描原理,需用3個空屏“0xFF”補(bǔ)足顯示內(nèi)容(0xFF,0xFF,0x89,0x86,0xC7,0xC7,0xC0,0xFF),若顯示內(nèi)容的字符數(shù)量大于8且不為8的整倍數(shù),則應(yīng)用空屏“0xFF”補(bǔ)足至8的整倍數(shù)。
經(jīng)分析,本例滾動動畫過程可分解為17幀,動畫幀次分解見表1所列。將表中7幀數(shù)據(jù)循環(huán)發(fā)送至數(shù)碼管即可顯示滾動動態(tài)效果。由表易知,兩個for循環(huán)即可滿足數(shù)據(jù)的循環(huán)發(fā)送,但考慮到數(shù)據(jù)幀之間需保留一段時間使人眼能夠識別,因此可通過增加一個for循環(huán)控制滾動速度[7],程序流程如圖4所示。
2.2 編寫程序及仿真
由上述原理,在Keil軟件平臺上編寫C語言程序,仿真結(jié)果如圖5所示,主要程序截取如下:
#define duanxuan P2//數(shù)碼管段選
#define weixuan P3//數(shù)碼管位選
uchar duan [] = {//字碼數(shù)組
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,//空屏
0xFF,0xFF,0x89,0x86,0xC7,0xC7,0xC0,0xFF,
//3個空屏補(bǔ)足8位顯示內(nèi)容
0xFF, 0xFF,0xFF,0xFF, 0xFF, 0xFF, 0xFF, 0xFF};//空屏
uchar wei [] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x00};//共陽數(shù)碼管位選
void main()
{while(1)
{uchar i,j,k;
for(i=0;i<17;i++)//循環(huán)發(fā)送17幀
{for(j=0;j<100;j++)//滾動速度
{for(k=0;k<8;k++)//8位數(shù)碼管動態(tài)掃描
{duanxuan=duan[k+i];
//根據(jù)幀數(shù)選取8個段碼發(fā)送至段選端口
weixuan=wei[k];
delay(50);//延時函數(shù)
weixuan=wei[8];//數(shù)碼管消隱
} } } ? } ? ?}
在講授此部分內(nèi)容時,若采用逐個指令逐個語法講解的教學(xué)方法,則極易造成學(xué)生難以跟上教學(xué)節(jié)奏,進(jìn)而失去學(xué)習(xí)興趣。一個較好的方法是,先讓學(xué)生抄下所有程序代碼,然后讓學(xué)生親自動手完成輸入、編譯、下載,目的是使學(xué)生對操作過程產(chǎn)生宏觀認(rèn)知。待學(xué)生能夠完整正確地實現(xiàn)控制目標(biāo)后,再逐個講解知識點(diǎn)。如教給學(xué)生更換顯示內(nèi)容以及調(diào)整滾動速度的方法。值得注意的是,教師應(yīng)注重傳授給學(xué)生解決問題的“方法”,而非僅僅講授解決問題的“知識”。
3 8×8點(diǎn)陣
3.1 滾動
在講授點(diǎn)陣模塊時,教師應(yīng)注意強(qiáng)調(diào)點(diǎn)陣和數(shù)碼管具有相似的動態(tài)掃描原理,因此可預(yù)設(shè)點(diǎn)陣列選對應(yīng)數(shù)碼管位選,點(diǎn)陣行選對應(yīng)數(shù)碼管段選。這種概念上的同義替換,有利于學(xué)生將先前所學(xué)知識應(yīng)用于后續(xù)教學(xué)中。
此時應(yīng)采用字模提取V2.2軟件提取點(diǎn)陣顯示字符的16進(jìn)制數(shù)據(jù),取模軟件設(shè)置為縱向取模,將生成的數(shù)據(jù)復(fù)制到上述程序字碼數(shù)組中對應(yīng)位置,略加修改后即得到點(diǎn)陣滾動程序。仿真結(jié)果如圖6所示,主要程序截取如下:
#define hangxuan P2//對應(yīng)數(shù)碼管段選
#define liexuan P3//對應(yīng)數(shù)碼管位選
uchar hang[]={//字碼數(shù)組
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//空屏
0x00,0x3E,0x2A,0x7F,0xFF,0xAA,0xBE,0xC0,
//漢字“電”
0x00,0x09,0x09,0x89,0xFD,0x0F,0x0B,0x00,
//漢字“子”
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00//空屏
};
uchar lie[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//列選碼,對應(yīng)共陽數(shù)碼管位選
void main()
{while(1)
{uchar i,j,k;
for(i=0;i<25;i++)//顯示了兩組字碼,故有25幀數(shù)據(jù)
{for(j=0;j<50;j++)//滾動速度
{for(k=0;k<8;k++)
{liexuan=lie[k];//點(diǎn)陣列選
hangxuan=~hang[k+i];
//根據(jù)幀數(shù)選取8個段碼發(fā)送至行選端口
delay(50);//延時函數(shù)
} } } } ? }
需要注意的是,取模方式、接線順序及列選順序均會影響顯示結(jié)果,不同的組合會產(chǎn)生如反向滾動、上下滾動、畫面旋轉(zhuǎn)或亂碼等結(jié)果。此時可組織學(xué)生分組進(jìn)行實驗,通過歸納法總結(jié)出在取模軟件中設(shè)置不同的參數(shù)對顯示結(jié)果會有不同的影響。
3.2 翻頁
將字碼數(shù)組中的內(nèi)容分為4幀顯示4個畫面(空屏-電-子-空屏)就形成了翻頁效果。采用縱向取模,運(yùn)行程序。當(dāng)i=0時,從字碼數(shù)組中依次取出成員[0~7]循環(huán)并行發(fā)送至8根行線上,列線0~7依次選通,即顯示第1幀;當(dāng)i=1時,取成員[8~15]數(shù)據(jù)置于列上,列線0~7依次選通,顯示第2幀;依此循環(huán)4次至i<4。將上例程序修改兩處即能實現(xiàn)翻頁效果,仿真結(jié)果如圖7所示,主要程序截取如下:
for(i=0;i<4;i++)//循環(huán)發(fā)送4幀畫面
{for(j=0;j<200;j++)
{for(k=0;k<8;k++)
{liexuan=lie[k];
hangxuan=~hang[k+i*8];
//k*8根據(jù)幀次從數(shù)組中選擇對應(yīng)的8個程序
delay(50);
} } }
需要為學(xué)生總結(jié)的是,同是由64個LED構(gòu)成,點(diǎn)陣顯示的信息種類要比數(shù)碼管多,而8×8點(diǎn)陣的分辨率決定了其無法顯示筆畫較多的漢字,常采用4塊8×8點(diǎn)陣構(gòu)成一塊16×16點(diǎn)陣顯示漢字,而16×16點(diǎn)陣的控制應(yīng)作為另一個課題講授。
4 結(jié) 語
物聯(lián)網(wǎng)智能家居產(chǎn)業(yè)規(guī)模巨大,對相關(guān)人才需求逐步增加,以單片機(jī)為核心的嵌入式計算機(jī)系統(tǒng)對智能家居產(chǎn)業(yè)的發(fā)展意義重大。本文以LED顯示屏控制教學(xué)內(nèi)容為例詳細(xì)介紹了兩者的結(jié)構(gòu)及控制原理,將顯示需求分解為動畫數(shù)據(jù)幀,把抽象需求量化為具體的數(shù)據(jù)表格再設(shè)計程序結(jié)構(gòu),編寫51單片機(jī)C語言程序。同時,引入Proteus軟件為實驗平臺開展理實一體化教學(xué)。開展教學(xué)時,應(yīng)注意避免“教師講的多,學(xué)生做的少”。通過這種將教學(xué)內(nèi)容有機(jī)整合、有效壓縮的教學(xué)方式,充分調(diào)動了學(xué)生的主觀能動性,提高了學(xué)生對知識技能的綜合運(yùn)用能力,最終提高教學(xué)質(zhì)量[8-10]。
參 考 文 獻(xiàn)
[1]張承暢,吳孟林,張華譽(yù),等.面向?qū)W生工程能力達(dá)成的“單片機(jī)技術(shù)”實驗案例設(shè)計[J].實驗技術(shù)與管理,2018,35(5):178-182.
[2]李秀瀅,段曉毅,趙成,等.實踐為主導(dǎo)的單片機(jī)課程立體化教學(xué)模式的探索[J].實驗技術(shù)與管理,2018,35(1):190-193.
[3]安健,任東勝,桂小林,等.物聯(lián)網(wǎng)實踐能力培養(yǎng)的研究與探索[J].實驗技術(shù)與管理,2018,35(10):15-18.
[4]萬松峰.Proteus在單片機(jī)理實一體化教學(xué)的應(yīng)用[J].實驗科學(xué)與技術(shù),2016,14(1):85-88.
[5]朱清慧,王志奎.Proteus在LED點(diǎn)陣滾動顯示屏設(shè)計中的應(yīng)用[J].液晶與顯示,2009(2):232-237.
[6]譚筠梅,李玉龍,王履程.基于Proteus的單片機(jī)虛擬仿真實驗案例設(shè)計[J].實驗技術(shù)與管理,2018,35(5):122-125.
[7]譚浩強(qiáng).C程序設(shè)計[M].2版.北京:清華大學(xué)出版社,1999:122-138.
[8]羅文平.學(xué)與做:教師培養(yǎng)的雙輪驅(qū)動模式[J].教師教育論壇,2018,31(5):41-44.
[9]高同輝,劉東曉.智能家居實訓(xùn)平臺開發(fā)與應(yīng)用[J].實驗技術(shù)與管理,2015,32(7):167-171.
[10]鄧小龍,顧曉燕.“互聯(lián)網(wǎng)+”背景下創(chuàng)新型復(fù)合技術(shù)技能型人才的培養(yǎng)[J].實驗技術(shù)與管理,2018,35(2):17-20.