趙素玲
單片機(jī)課堂教學(xué)組織探索
趙素玲
(蘇州健雄職業(yè)技術(shù)學(xué)院 中德工程學(xué)院,江蘇 蘇州 215411)
隨著現(xiàn)代制造業(yè)的不斷發(fā)展,單片機(jī)技術(shù)的使用已經(jīng)廣泛滲入到社會(huì)的各行各業(yè)中。但是由于單片機(jī)采用的是匯編語言或者C語言進(jìn)行編程,無論采用哪種語言,對(duì)于高職學(xué)生來說都比較難而且枯燥。那么如何組織課堂教學(xué)素材,通過豐富多彩的教學(xué)素材來提高課堂教學(xué)的趣味性就顯得尤其重要。
LED顯示屏;AT89C51;C語言程序;硬件設(shè)計(jì)
2019年筆者利用暑假期間到蘇州奧智智能設(shè)備股份有限公司進(jìn)行企業(yè)實(shí)踐。蘇州奧智智能設(shè)備股份有限公司是集科研、生產(chǎn)、銷售為一體的國家高新技術(shù)企業(yè),成立于2004-11,是同行業(yè)中規(guī)模比較大的一家民營企業(yè),一家民營企業(yè)在十幾年內(nèi)做到如此大的規(guī)模,主要得益于公司的產(chǎn)品符合市場需求和高效的公司管理。每天與公司的員工一起工作、生活,雖然工作比較枯燥,但是公司的管理者卻可以通過各種方法盡量使員工的工作生活精彩一些。
得益于他們的啟發(fā),筆者在思考如何才能在課堂教學(xué)中盡量使枯燥的編程課變的有意思一些呢?可以主要從教學(xué)素材選取和課堂組織形式著手來考慮?,F(xiàn)在以LED顯示屏設(shè)計(jì)為例來說明,為了提高課堂教學(xué)的效果,可以讓每個(gè)學(xué)生設(shè)計(jì)不同的字,例如他們每個(gè)人的姓名。通過使用AT89C51單片機(jī)與8×8LED點(diǎn)陣構(gòu)成一個(gè)動(dòng)態(tài)顯示屏,使用C語言進(jìn)行編程,利用Protues仿真軟件進(jìn)行仿真,仿真效果直觀可見。
由于筆者帶的班級(jí)馬上就要畢業(yè)了,他們即將進(jìn)入大學(xué)階段的最后一個(gè)任務(wù)——畢業(yè)設(shè)計(jì),所以就以“畢業(yè)設(shè)計(jì)”四個(gè)字為例來進(jìn)行教學(xué),當(dāng)然也可以顯示其他的漢字,如學(xué)生自己的姓名。具體要求是:①使用AT89C51芯片為核心,加上外圍輔助電路,設(shè)計(jì)出原理圖電路;②根據(jù)要求用Keil軟件編寫出C語言程序;③用四個(gè)8×8LED點(diǎn)陣,將“畢業(yè)設(shè)計(jì)”一次性呈現(xiàn)出來;④2個(gè)按鍵作為啟動(dòng)與停止按鈕,在程序運(yùn)行過程中出現(xiàn)錯(cuò)誤時(shí),可立即停止程序。
AT89C51芯片由電源、晶振和復(fù)位電路組成最小系統(tǒng)。X1(晶體)與兩個(gè)C1、C2(電容)組成了晶振。R7、R8構(gòu)成電源與復(fù)位電路。運(yùn)用了12 M的晶振,12 MHz機(jī)器周期1 μs,加速了程序時(shí)間的計(jì)算。
系統(tǒng)元器件列表清單如表1所示。
表1 元器件清單列表
序號(hào)代號(hào)名稱型號(hào)與規(guī)格數(shù)量 1C1、C2、C3電容1UF3 2X1晶體CRY87AL1 3LED1—LED4點(diǎn)陣8×84 4U1主控芯片AT89C511 5U2-U5鎖存器74HC5734 6RP1上拉排阻RESPACK-81 7R1-R3電阻10K3 8BT1.BT2按鍵BUTTON2
根據(jù)系統(tǒng)要求設(shè)計(jì)系統(tǒng)流程,具體如圖1所示。
圖1 流程圖
#include
#include
#include
#define COMMONPORTS P1
#define sendbyte P0
sbit pianxuan1=P2^0;sbit key1=P2^4;
unsigned int flag=0;
unsigned char code TAB[8] = {0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
unsigned char code CHARCODE[10][8]=
{{8,8,8,127,8,119,102,68}, //畢
{0,127,20,54,85,20,20,0}, //業(yè)
{0,247,66,71,32,37,247,32}, //設(shè)
{228,68,68,95,68,228,68,0},//計(jì)
void delay(unsigned int time)
{unsigned int i,j;
for(i=0;i