于莉莉 蘇曉光 李晶
摘要:新工科教育改革的背景下,非計算機專業(yè)的計算機C語言程序設計課程如何融入專業(yè)知識,合理選擇案例教學是計算機基礎教學的改革重點。該文從單片機C語言編程作為切入點,優(yōu)化課程案例教學,提高學生的動手能力和編程思想,為后續(xù)專業(yè)課程提供良好的支撐。
關鍵詞:新工科;程序設計;單片機;C語言編程
中圖分類號:G424 文獻標識碼:A 文章編號:1009-3044(2018)15-0158-02
1 引言
隨著人工智能的發(fā)展,嵌入式技術和單片機系統(tǒng)也優(yōu)勢凸顯。單機片堪稱是一塊芯片的微型計算機,特別是flash的運用使單片機進入一個嶄新的時代。由于具有集成度高,性能可靠,操作簡便,功能強大,體積小、功耗低、性價比高等特點為其學習、開發(fā)和應用提供了便捷的條件,使其滲透到各個領域,現在生活中很難找到沒有單片機的存在領域。單片機是學習計算機原理與結構的理想選擇,面向單片機的編程目前使用最多的是匯編語言和C語言。
匯編語言是一種用文字助記符來表示機器指令的符號語言,是面向機器的語言,和機器語言最為接近。其主要優(yōu)點是對機器控制清晰、調試方便、占用ROM資源少、程序執(zhí)行效率高。但是不同單片機指令系統(tǒng)是不同的,可移植性差,學習難度相對較大,而且如果一個大型的應用程序的開發(fā)如果全都使用匯編語言編寫就特別復雜,特別是一些算法問題,匯編語言就顯得力不從心了。
C語言是一種編譯型程序設計語言,它是介于高級語言和低級語言之間的語言。既具有高級語言的可讀性強、可移植性高等特點,同時又具備低級語言運行速度快、效率高、可直接對硬件進行控制的功能。C語言是一種結構化程序設計語言,它支持當前程序設計中廣泛采用的由頂向下結構化程序設計技術。C語言程序具有模塊化程序設計思想,是軟件系統(tǒng)開發(fā)中模塊化程序設計方法的基礎保障,現在使用C語言進行單片機程序設計已成為一個趨勢。用C語言來編寫目標系統(tǒng)軟件,開發(fā)周期短,程序可讀性強,便于改進和擴充,從而研制出規(guī)模更大、性能更完備的系統(tǒng)。其缺點是占用資源多,執(zhí)行效率沒有匯編語言高。根據不同的情況,很多工程通常采用C語言和匯編語言結合二者的優(yōu)勢進行混合編程。隨著單片機技術的發(fā)展,在速率和存儲空間上都有了很大的提高,由最初的4位、8位,到現在已有300M的高速單片機,C語言的優(yōu)勢也就越來越明顯。
C語言雖然是嵌入式和單片機系統(tǒng)的首選語言,但是很多專業(yè)在單片機編程部分并沒有開設專門的課程,所以很多學生都采用自學。如何充分發(fā)揮高校非計算機專業(yè)C語言程序設計通識課程的作用,與專業(yè)結合更需要教育工作者深入思考。
2 發(fā)揮C語言通識課程優(yōu)勢,更好地為相關專業(yè)服務
C語言程序設計作為大學通識課程普遍面向大一新生開設的第一門程序設計類課程,很多與嵌入式和單片機系統(tǒng)相關專業(yè)的學生在還沒有學習更多的相關專業(yè)知識。如何讓C語言教學更貼近專業(yè),還要讓學生零硬件基礎的前提下,體驗到C語言在將來專業(yè)學習的重要性和趣味性,精選硬件系統(tǒng)結構簡單實現容易的案例,生動課堂教學的同時還能增加學生的編程自信和專業(yè)探究渴望,同時對后期專業(yè)編程打下堅實的基礎。
2.1 合理的案例選擇
對于電學專業(yè)的學生的C語言教學重點是案例的合理選擇,既要和專業(yè)有相關性,同時還要擺脫專業(yè)知識的束縛,讓硬件基礎相對薄弱的大一學生體會到硬件編程的效果的同時更能感受到C語言的靈魂和魅力。
選擇原型簡單結構清晰的案例,使學生無需在硬件上做多過的研究,如流水LED燈的電路設計,電路圖如圖1所示。此電路只有一個按鈕開關和多個LED燈,可以采用多分支選擇、循環(huán)結構來實現多路燈的循環(huán)點亮,學生可以充分理解和實踐C語言的分支選擇和循環(huán)結構。同時還可以調用延時函數,讓學生提升函數概念和結構化程序設計思想。同時也可以采用數組和指針的方式,可以對數組和指針的認知和運用大幅度加強。教師可以提前做好實驗準備,在案例演示同時配合實驗更生動形象,有說服力。同時本系統(tǒng)可以模擬實驗或者有條件的話可以讓學生自己動手組裝,這樣在提高學生動手能力的同時更能讓學生感到學有所用、成就感倍增。
2.2 同一案例學習對應不同知識結構
雖然標準C與單片機C51在很多方面都非常一致,但是還有一些細節(jié)要加以區(qū)別。在講解案例之前需要專題講解,比如頭文件的使用,輸入輸出的方式等等。本案例采用switch結構來實現LED1~LED8的循環(huán)點亮,設計電路的知識只需略點撥即可,可以從不同角度來著重介紹C語言的實現過程。例如當重點講解switch與while循環(huán)的配合來實現功能時,程序設計如下:
#include
Sbit S=P1^4; //將S位定義為P1.4
void delay100(void) //延時函數
{
unsigned int k;
for(k=0;k<10000;k++);//延時100μs
}
void main( )
{
unsigned char n;
n=0;
while (1) //永真循環(huán)
{
if(S==0)//采用輪詢方式,不停地判斷端口是否有變化
{
delay100();//調用延時函數
if(S==0)//采用輪詢方式,不停地判斷端口是否有變化
n++;
if(n==9)
n=1;//使n始終在1~8 之間輪轉
}
switch(i) //switch結構來實現流水燈點亮控制
{
Case 1:P0=0xfe; break;//點亮LED1
Case 2:P0=0xfd; break; //點亮LED2
Case 3:P0=0xfb; break; //點亮LED3
Case 4:P0=0xf7; break; //點亮LED4
Case 5:P0=0xef; break; //點亮LED5
Case 6:P0=oxdf; break; //點亮LED6
Case 7:P0=0xbf; break; //點亮LED7
Case 8:P0=0x7f; break; //點亮LED8
Default:P0=0xff;//全部熄滅
}}}
當講解字符數組時,此程序還可以通過定義字符型數組來實現輪轉簡化程序。如果想要變換花樣流水燈的順序,只需改變字符型數組的流水燈控制碼的順序即可。通過此案例,學生能夠對字符型數組的定義和引用更直觀、深刻地理解。
void main(void)
{unsigned char n;
unsigned char code x[ ]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //定義無符號字符型數組
while(1)
{for(n=0;n<8;n++)
{P0=x[n];//引用字符數組的每一個元素送至P0口
delay100();}}}
指針是C語言的難點,如何化難為簡,可以在采用同一案例,學生通過前面章節(jié)的學習,對此電路已有基礎,這時就可以轉移重心至指針的學習上。
void main(void)
{unsigned char code x[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//定義無符號字符型數組并初始化位各個端口值
unsigned char *pp[ ]={&x;[0],&x;[1],&x;[2],&x;[3],&x;[4],&x;[5],&x;[6],&x;[7]};//定義指向字符型數組的指針數組
unsigned char n;
while(1)
{for(n=0;n<8;n++)//通過n的變化來移動指針PP
{P0=*pp[n]; //利用指針pp的移動引用字符數組的每一個元素送至P0口
delay100 ();//調用延時函數}}}
同一程序可以采用多種編程設計方案,讓學生充分發(fā)揮編程想象力,把學過的知識都得到運用,體會C語言的系統(tǒng)性和編程的開放性。
學生可以通過反復調試和改進來,使學生深刻理解程序設計思想的同時更增加了課堂的粘合度,讓學生與教師之間、學生與學生之間的討論更加實際而有效,同時還充分調動學生學習的主動性和創(chuàng)造性,可以分配多個學習協(xié)作小組在課下進一步深入討論和研究。
3 結論
目前對后期學習單片機相關專業(yè)的學生進行教學改革反饋調查表明,C語言教學對學生的專業(yè)學習更有影響,更好地與專業(yè)知識融合,提高了學習動力,進一步深入自學降低了難度。在新工科建設改革中,作為通識課程的C語言如何服務于電類相關專業(yè),可以從單片機編程入手,既無需過多的硬件知識基礎,又體現編程的實用性,在案例選擇上要多選取“有用”“有趣”的案例,提高學生動手能力和編程能力,為進一步專業(yè)打下良好的基礎。
參考文獻:
[1]郭天祥.51單片機C語言教程[M].北京:電子工業(yè)出版社,2009.
[2]徐愛鈞等,單片機高機語言C51 應用程序設計[M].電子工業(yè)出版社,1998,6.
[3]C51 Compiler Optimizing 8051 C Compiler and Library Reference KEIL SOFTWARE Users Guide 03.2000.