時間:2023-03-01 16:29:08
序論:寫作是一種深度的自我表達。它要求我們深入探索自己的思想和情感,挖掘那些隱藏在內心深處的真相,好投稿為您帶來了七篇c語言程序設計實例范文,愿它們成為您寫作過程中的靈感催化劑,助力您的創作。
關鍵詞: 《C語言程序設計》 程序案例 計算思維 流程圖
1.引言
《C語言程序設計》課程的實踐性是很強的,理論聯系實際是這門課的特點,怎樣利用所學理論知識解決實際問題是學習這門課的重點,也是難點。多年的教學實踐表明,在教學過程中使用計算思維的方法解決問題,對培養學生的綜合應用能力是有益的,通過使用流程圖描述算法,學生將更好地理解和掌握結構化程序設計方法。
2.教學中充分調動學生學習的積極性
學生只有對C語言程序有濃厚的興趣,才會積極和創造性地學習??蓮囊韵聨讉€方面探討:
(1)強調學生學習C語言的重要性。突出教學重點,使學生明確學習任務。在首次課堂教學中,教師一定要向學生講解清楚C語言課程的教學目標(為什么學習編程或程序設計)。對于C語言程序設計課程的教學目標,可有如下三方面的講解,學習基本的編程知識、培養求解問題的能力和具備一定的創新素質。知識的傳授和學習應融入問題求解中;問題求解能力是創新的基礎。
(2)結合《C語言全國計算機等級考試》的試題庫進行教學,學生學習起來更有動力。試題庫包括筆試試題庫和上機試題庫。試題庫按章節分類,題目類型以程序設計為主。筆試題型有單項選擇、程序分析、程序填空、程序改錯和程序設計,上機題型有程序改錯、程序填空和程序設計。
(3)利用Visual c++6.0工具進行C語言程序教學,培養學生的學習興趣。VC是一種基于Windows操作系統的可視化集成開發環境,是廣泛使用的一種開發工具。VC程序的兩種模式是WINAPI方式和MFC方式。應用這兩種模式能夠有效提高教學質量,激發學生的學習興趣。
3.教學內容的設置
上課內容安排不盡合理,對于實踐教學環節重視不夠,難以提高學生的積極性。教師應理論聯系實際,注重編程實現的示范性,讓學生清楚地看到教師編寫代碼和程序調試的過程和運行結果。上課安排內容應包括兩部分:一部分為學習基本知識,對基礎知識的理解和掌握。另一部分是理論聯系實際,對實際案例問題的分析引導學生,并且案例留有思考空間,使學生舉一反三,培養學生創造性思考的能力。比如在第一次課告訴學生C語言的十四種語句,既讓學生對C語言有全面的認識,又消除學生對C語言的畏難情緒。C語言的語句概括起來只有十四種,即定義變量語句、賦值語句、返回語句、函數聲明語句、函數調用語句、分支(選擇)語句(共三種分支語句)、循環語句(共三種循環語句)、break語句、Conitnue語句和復合語句。所有的C程序,都是由其中的某些語句組成的。在具體介紹這些語句的時候,一定要完整清楚地列出各種語句的語法格式。以后講C程序的時候,會提問學生這個程序中包含哪些C語句,學生比較容易看明白C程序的語句組成,幫助學生很快讀懂程序,有利于改正學生編寫程序時的常見語法錯誤。
4.實驗指導書建設
學習C語言的很多學生都認為概念易懂,程序難寫,其實主要是缺乏足夠的實踐和練習。依據主教材結構和實際需要,上機課結合課本《C語言程序設計上機指導》進行相關和有趣的案例的程序運行。學生分析算法、畫出流程圖到寫出程序,并親自運行出結果,會給學生很大的成就感。要將計算思維的方法應用到程序設計,設計各種算法以實現功能,并拓寬思路,掌握C語言的概念和編程方法。
5.案例設計與計算思維相結合
學習C語言,目的不是僅僅懂得一門程序設計語言,更重要的是讓學生的編程思維得到鍛煉和提高。C語言學習分成以下三個循序漸進的部分:第一部分是入門,主要介紹C語言程序的基本結構、數據的表達方式、基本表達式語句、C語言程序的運行方式等。這部分可以設計由簡單表達式語句組成的按順序執行的程序。第二部分是程序的基本結構,主要介紹程序設計的簡單算法表示方法,分支結構和循環結構。這部分能用計算思維的方法,設計簡單的算法,根據算法編寫程序,掌握思考問題和解決問題的方法。第三部分是程序設計方法和手段的提高,主要介紹程序的模塊化實現方法和更多的程序設計方法。這部分能采用計算思維的方式掌握模塊化的程序設計方法,對問題進行分解,靈活地使用指針、結構、文件、位運算等方法編寫程序。
6.案例設計實例
編寫程序計算學生年齡的遞歸函數:已知第一位學生年齡最小為10歲,其余學生一個比一個大2歲,求第5位學生的年齡。分析得到的遞歸公式如下:
age=10(n=1)age(n-1)+2(n>1)
在遞歸公式中,使用數字1為回歸的條件,使用IFELSE語句決定是遞推還是回歸。
根據問題得出流程圖和程序為:
只有寫出遞歸算法的數學公式,才能編寫出遞歸函數,從而很容易根據遞歸問題描述寫出遞歸公式,進而寫出遞歸程序。
7.結語
“基于問題求解的C語言”教學模式,隨著我國計算機技術的應用和發展,為了適應社會的需求,培養學生解決問題的能力,增強學生自主能動性和動手操作能力,讓學生成為社會的技能型人才,都是有益的。實踐證明,借助流程圖表達算法,能讓學生更好地理解結構化程序設計的思想,更好地掌握C程序設計的核心方法。
參考文獻:
[1]李麗娟.C語言程序設計教程實驗指導與習題解答[M].北京:人民郵電出版社,2013.
[2]譚浩強.C程序設計[M].北京:清華大學出版社,1999.
[3]魏書堤,趙輝煌,鄧紅衛.基于計算思維的C語言教學案例設計[J].當代教育理論與實踐,2014(3).
[4]但志平,汪東,王安慧,任小燕.地方高校C語言教學改革的探討與分析[J].教育教學論壇,2014.5.
Abstract: This paper illustrates the mixed programming turn back mechanism and basic methods of parameter transferring.
關鍵詞: C 語言;匯編語言;參數傳遞
Key words: C language;assembly language;parameter transferring
中圖分類號:TP312 文獻標識碼:A 文章編號:1006-4311(2014)29-0225-02
1 緒論
C語言與匯編語言混合編程,可以發揮各自優勢,提高程序的開發效率。這必然涉及到二者相互調用時的接口:C程序與匯編程序如何轉返、二者之間如何互傳數據。
2 名字聲明約定
2.1 匯編、C模塊對自己未定義的但要引用的別的模塊的名字(該名字允許被引用)要聲明。C模塊聲明格式:函數聲明格式:extern類型函數名(形參表);變聲明格式: Extern類型變量;匯編模塊聲明格式:函數聲明格式:extern函數名:屬性(near,far)。變聲明格式:Extern變量名:屬性(byte,word,dword等)。
2.2 自己定義的不僅自己可用,且可供別的模塊引用的名字也必須聲明。匯編模塊聲明格式:PUBLIC名字。C模塊聲明格式:全局變量,函數名前不加static即可。
3 轉返機制
為了說明C主程序如何轉到匯編子程序,匯編子程序執行結束如何返回C主程序,把例1 x1.c C程序翻譯成匯編程序x1.asm,命令行鍵入命令TCC-S x1即可。
例1 /*x1.c*/
extern int f2(int,int,int);
main(){int a;a=f2(1,2,3);a=a+10;}
上述程序經編譯后,匯編程序如下(無關內容省去)
/*x1.asm*/
_TEXT segment byte public 'CODE'
_main proc near ;小模式,類型為near,名字main編譯后變為內部名(前加下劃線)
push si ;保護si
mov ax,3
push ax ;實參3壓棧
mov ax,2
push ax ;實參2壓棧
mov ax,1
push ax ;實參1壓棧
call near ptr _f2 ;轉入子程序
add sp,6 ;丟棄棧中三個實參,確保實參不變
mov si,ax ;出口參數固定是ax,從ax取結果
mov ax,si ;機械性翻譯,效率低,人工匯編編程,兩個mov可不要
add ax,10
mov si,ax ;出口參數固定是ax,main加工結果送到約定寄存器ax
@1:pop si ;恢復si
ret ;main子程序返回
_main endp
_TEXT ends
PC機的堆棧是由高向低發展,壓棧操作,棧中內容增多,SP值減小,反之出棧操作,棧中內容減少,SP值增大。
分析以上程序可看出,f(1,2,3)翻譯成機器語言后變成若干條機器指令。結論:參數從右到左進入堆棧;在函數返回后,調用者要負責清除(平衡)堆棧。
4 C調匯編子程序
參數傳遞調用規范:主程序通過堆棧傳遞參數,主程序把待加工的數據放入棧中,子程序從堆棧中取數。子程序把加工的加工返還給主程序,結果小于等于16位,固定用AX;結果是32位,固定用DX和AX;結果大于32位,則存放在靜態變量存貯區,AX(存段內地址)指向該區,若是FAR指針,DX(存段地址)和AX指向該區。所傳數據可能是值,稱為值傳遞,可能是地址,稱為地址傳遞。
4.1 值傳遞:實參的值壓棧
例2 /*f1.c*/
extern int add0(int,int);
main(){int x,y;x=2;y=3;printf("%d\n",add0(x,y));}
;f2.asm
.model small,c ;小模式,near過程,棧中只壓IP,無CS
public add0
.code
add0 proc
push bp
mov bp,sp
mov ax,[bp+4] ;取第一個實參X
add ax,[bp+6] ; 取第二個實參Y,出口AX
pop bp
ret ;彈出返回地址,返回
add0 endp
end 程序運行結果是:5
4.2 傳地址:實參的地址壓棧
例3 /*f1.c*/
extern int add0(int*,int*);
main()
{int x,y;x=2;y=3;printf("%d\n",add0(&x,&y));}
;f2.asm
.model small,c ;小模式,near過程,棧中只壓IP,無CS
public add0
.code
add0 proc
push bp
mov bp,sp
mov bx,[bp+4] ;取第一個實參X的地址送bx
mov ax,[bx]
mov bx,[bp+6] ; 取第二個實參Y的地址送bx
add ax,[bx] ;出口AX
pop bp
ret ;彈出返回地址,返回
add0 endp
end 程序運行結果是:5
4.3 通過外部變量 外部變量是公共變量,所有模塊均可自由的使用,無需傳遞參數。但應當盡可能避免使用全局變量,否則不可避免因為某個全局變量的定義或使用而發生沖突,如例4.5。
例4 /*f1.c*/
int x=2;int y=3;int z;
extern void sub0(int,int);
main(){x=2;y=3;add0(x,y);printf("%d\n",z);}
;f2.asm
.model small,c ;小模式,near過程,棧中只壓IP,無CS
public add0
extern x:word,y:word,z:word
.code
add0 proc
mov ax,x
add ax,y
mov z,ax
ret ;彈出返回地址,返回
add0 endp
end 程序運行結果是:5
5 匯編調C函數
例5 /*f1.c*/
extern int suba();
int subc(int x,int *y){return x-*y;}
main(){printf("%d\n",suba());}
;f2.asm
.model small,c; 小模式,near過程,棧中只壓IP,無CS
extern subc:near
.data
x1 dw 50
y1 dw 10
public suba
.code
suba proc
mov ax,offset y1
push ax ;壓第二個實參Y1,傳地址
mov ax,x1
push ax ;壓第一個實參X1,傳值
call subc ;匯編調C函數
add sp,4 ;平衡堆棧
ret ;彈出返回地址,返回
suba endp
end 程序運行結果是:40
參考文獻:
[1]譚浩強.C語言程序設計[M].清華大學出版社,2004.
Abstract: The pointer is the essence, focus and difficult of C language which is also the basis of C language Series. This article describes the arithmetic rules of pointer constants and variables in C language, as well as the access to the address.
關鍵詞: 指針;地址;數組;運算
Key words: pointer;address;array;operation
中圖分類號:TP312 文獻標識碼:A 文章編號:1006-4311(2014)11-0214-02
1 緒論
C語言的精華是指針,程序設計的關鍵也是指針,使用指針的難點是指針的運算。用指針訪問數組元素,相對比較抽象,故本文用簡單的自然語言予以淺析。
2 指針變量的概念
2.1 內存地址:內存中存儲單元的編號 內存中,有眾多的存儲單元(單位:字節)。為了區分不同單元,必須為每一個單元編號,這個編號就是存儲單元的“地址”,就像電話很多,為了區分每一部電話,必須為其編號,該編號就是電話號碼。每個單元有且僅有一個惟一的地址。單元中存放數據,注意區分單元的地址與單元中的內容(數據)。
2.2 變量地址:該變量在內存中的起始地址 變量名是單元的外部名字(用戶命名),單元號是單元的內部名字(系統命名)如 int x 假設整型變量是2個字節,系統分配的存儲單元為 100 和101,則首地址100就是變量x在內存中的地址。
直接訪問──直接利用變量的地址進行存取。
如:把“書”送給“張偉”就是直接訪問。
間接訪問──通過另一變量訪問該變量的值。
如:把“書”送給“張偉他哥”就是間接訪問,先間訪“張偉”,知道他哥的地址,再按此地址送“書”。
2.3 指針變量
指針:即地址,存放地址的變量稱為指針變量。
指針變量定義格式:數據類型 *指針變量[, *指針變量2……];
取地址運算的格式: &變量
例如
main()
{int x,*p; /*整形的指針的p單元
P=&x;
X=10;
*p+=20;
Printf(“%d,%d\n”,x,*p);
} 程序運行結果是30,30
3 數組的指針和指向數組的指針變量
3.1 數組的指針 數組元素在內存中連續存放,數組名代表數組首地址,是一個地址常量。
3.2 指向數組的指針變量的定義
例如,int a[10], *p=a(或&a[0]);
或者:int a[10], *p;p=a;
3.3 數組元素的引用
3.3.1 按名存取 有 int a[10],*p=a;定義,則p=a,一個數組,兩個名字p和a,訪問元素時用a[i]或p[i]。
3.3.2 按地址存取 有 int a[10],*p=a;定義,則:p+i和a+i都是數組元素a[i]的地址,訪問元素時用*(p+i)和*(a+i)。按地址存?。?(p+i),*(a+i),按名存?。篴[i],p[i]四個是等價關系。
注意:①p+n指向數組的下n個元素,而不是簡單地使指針變量p的值+n。編譯時為p+n*m。m為一個元素占用的字節數。②指針變量:既然是變量,其值隨時在變,必須注意其當前值,否則容易出錯。③指向數組的指針變量,可以指向數組以后的任何內存單元,C語言不做越界檢查,這些單元不是系統分配的單元,強占資源,易導致死機。④int a[10],*p=a;p++對,a++錯,a常量,p變量。
3.3.3 指向數組的指針變量所支持的運算 地址加減數值等于新地址,除此以外運算沒有意義,由此得出推論,指針支持的運算有:
算術運算:指針變量±整形數據、指針變量-指針變量=整型數值,該數值表示兩指針之間的數據個數,并非地址之差。
關系運算:指針變量 關系運算符 指針變量,表示兩個變量值的大小關系,誰在前誰在后。
4 二維數組的指針及其指針變量
4.1 二維數組的指針 有定義語句: int a[3][4];
①從二維數組角度看,數組名a代表數組的起始地址, 是一個以行為單位進行控制的行指針,由一維數組構成的一維數組就是二維數組,a+i是行指針值,指向二維數組的第i行。*(a+i)是列指針值,指向第i行第0列。*(*(a+i)):數組元素a[i][0]的值。用a作指針訪問數組元素a[i][j]的格式:*(*(a+i)+j)。②int a[3][4],b[4];由定義可看出,a[i]相當于數組名b,故a[0]、a[1]、a[2]分別表示第0、1、2一維數組的名字。③賦值:行指針變量=二維數組名或行指針變量。
4.2 行指針變量定義格式 數據類型 (*指針變量)[n];
4.3 二維數組元素的訪問 int a[5][4],(*P)[4]=a;和int b[4],可以看出,b相當于a[5],第i行的一維數組名是a[i],元素地址±數值=元素地址,行地址±數值=行地址,a+i,a[i],*(a+i)其值相等,但a+i是行地址,a[i],*(a+i) 是元素地址。
①按名存取:a[i][j]或p[i][j]
②按地址存?。海?a[i]+j), *(*(a+i)+j), (*p[i]+j), *(*(p+i)+j)
5 動態數組的實現
靜態數組:編譯階段確定數組的大小,運行階段不能改變數組大小。缺點是事先無法準確確定數組的大小,太小不滿足處理需要,太大浪費內存空間。
動態數組:運行階段,根據實際需要動態確定數組的大小。
在C語言中,可利用內存的申請和釋放庫函數,以及指向數組的指針變量可當數組名使用的特點,來實現動態數組。如下程序
#include “alloc.h”
#include “stdlib.h”
main()
{ int *p=NULL, count, i,*q;
scanf(“%d”, &count);
p=(int *)malloc( sizeof(int) * count ); /*申請動態數組使用的內存塊*/
if ( p==NULL ) exit(0);
for (i=0; i
for (q=p+ count-1; q>=p; q++) printf(“%d,”, *q); /*倒序顯示*/
free(p); /*釋放由malloc()函數申請的內存塊*/
} 程序功能是鍵入任意個數據,倒序顯示。
5.1 庫函數malloc()
①用法:void *malloc(unsigned size)。②功能:在內存的動態存儲區分配size個字節的連續空間。③返回值:申請成功,則返回新分配內存塊的起始地址;否則,返回NULL。
malloc()函數的返回值是一個無類型指針,但在實際使用malloc()函數時,必須將其返回值強制轉換成被賦值指針變量的數據類型,否則出錯。
5.2 運算符sizeof
①格式:sizeof(變量名/類型名)。②功能:求變量/類型占用的內存字節數。如sizeof(long)=4。
5.3 庫函數free()
①用法:void free(void *ptr)。②功能:釋放由ptr指向的內存塊(ptr是調用malloc() 函數的返回值)。③返回值:無。
一般情況下,使用malloc()函數申請的內存塊,操作結束后,應及時使用free()函數予以釋放。特別是在循環使用malloc()函數申請時,如果不及時釋放不再使用的內存塊,很可能很快就耗盡系統的內存資源,從而導致程序無法繼續運行甚至死機。
6 結束語
學習C語言必須掌握指針的概念,以便為以后C系列語言學習打下基礎。
參考文獻:
[1]譚浩強.C語言程序設計[M].清華大學出版社,2004.
關鍵詞: ATmega16單片機;數字溫度傳感器;儀用放大器;液晶顯示
中圖分類號:U469.75文獻標識碼:A文章編號:1671-7597(2012)0320059-01
0 引言
隨著現代人的生活質量不斷提高,在滿足了衣食住行的需要以后,更加注重身體保健和合理飲食,以及保持健康的體形。隨時關注自己體重的變化調配飲食,不僅對青年女性需要,對中年老年等各層次的男女人群都是非常需要和必要的。低成本、高智能化的智能人體電子秤無疑具有極其廣闊的市場前景,具有較大的研究意義。
1 系統設計方案
1.1 系統結構。系統主要由電源模塊、數據采集、數據處理和數據顯示四大部分組成。由壓力傳感器、溫度傳感器組成的數據采集部分將所得的壓力和溫度數據送ATmega16單片機處理,然后將處理所得的體重和溫度數據顯示在液晶顯示器上。
1.2 ATmega16單片機控制器。ATmega16是基于增強的AVR RISC結構的低功耗8位CMOS微控制器。由于其先進的指令集以及單時鐘周期指令執行時間,ATmega16的數據吞吐率高達1MIPS/MHz,從而可以緩減系統在功耗和處理速度之間的矛盾。ATmega16具有16K字節的系統內可編程Flash,512字節EEPROM,1K 字節SRAM;32個通用I/O口線,32個通用工作寄存器,用于邊界掃描的JTAG接口,支持片內調試與編程;三個具有比較模式的靈活的定時器/計數器,片內/外中斷;可編程串行USART,有起始條件檢測器的通用串行接口;8路10位具有可選差分輸入級可編程增益的ADC;具有片內振蕩器的可編程看門狗定時器,一個SPI串行端口,以及六個可以通過軟件進行選擇的省電模式。
1.3 壓力傳感器。1)壓力傳感器原理簡介。電阻應變式傳感器是一種利用電阻應變效應,將各種力學量轉換為電信號的結構型傳感器。電阻應變片把機械應變信號轉換為R/R后,采用惠更斯電橋轉換電路把應變片的R/R變化轉換成電壓或電流變化。2)壓力信號前級濾波放大電路。壓力信號前級電路是稱重系統的重要組成部分,對系統的精度有很大影響。由于壓力傳感器輸出的電壓信號為毫伏級,所以對運算放大器精度要求很高。采用普通運算放大器組成的放大電路不能滿足精度要求。這里采用差動輸入,高共模抑制比,高差模輸入阻抗,高增益,高精度精度且外部接口簡單INA126儀用運算放大器,對壓力傳感器信號進行放大。
1.4 數字溫度傳感器DS18B20。DS18B20是Dallas 半導體公司發明的支持“一線總線”接口的溫度傳感器,其分辨率為9-12位,可根據需要通過程序設定精度;測量溫度范圍為-55℃~+125℃,在-10℃~+85℃范圍內,精度可達±0.5℃。由于現場溫度測量結果以9-12位數字量方式串行(“一線總線”)傳送,不僅大大提高了系統的抗干擾性,而且簡化了電路,在使用中不需要任何元件。同時,DS18B20支持3V-5.5V的電壓范圍,使系統設計更靈活、方便。
1.5 電源模塊。電源部分也是系統的重要組成部分之一,其能否提供穩定而準確的電源關系到系統設計的成敗。系統需要多種電源,采用12V直流電源供電,可以通過穩壓芯片轉換為其他電壓值為電路各部分供電。首先12V經過三端穩壓集成電路78L05后輸出5V電路工作電壓,同時又經過LM2575穩壓電路后輸出-5V為儀用放大器INA126提供負工作電壓,經過AMS1117穩壓器輸出1.5V電壓為單片機內ADC提供轉換參考電壓,它對ADC的轉換精度有很大影響,所以必須保證精確穩定。
2 系統軟件設計
按照硬件電路設計,采用C 語言編程。系統軟件主要分為體重采集與處理子程序、溫度采集與處理子程序、LCD液晶顯示程序、體重存儲子程序四個部分。主程序是為了協調各個環節的工作,硬件初始化包括端口初始化、T0初始化、T1初始化、外部中斷初始化。體重測量數據通過A/D轉換讀取。溫度轉換是通過1線協議來控制和訪問DS18B20讀取溫度數據。體重的存儲由外部中斷實現,包括T0溢出中斷、T1溢出中斷和外部中斷INT2。其主程序流程如下圖所示:
3 結論
本設計的創新之處有以下幾個方面:1)選用內含8路10位ADC的ATmega16單片機為控制核心,大大簡化了電路,節約了設計成本;2)能夠存儲并通過按鍵調出以前所測的體重,以便和當前體重比較,判斷一段時間內體重升高或下降;3)應用了單總線數字溫度傳感器DS18B20,能夠準確的測量和實時顯示當前環境溫度,簡單而實用;4)系統操作簡單方便,能夠實現人機互動,用戶界面友好。
參考文獻:
[1]秦偉,基于STC89C51 RC電子稱設計[J].電腦知識與技術,第5卷第31期.
[2]張軍、宋濤,AVR單片機實用C語言程序設計實例精粹,北京:電子工業出版社,2009.1.
關鍵詞:單片機;實例化;模塊化;實驗平臺;教學改革
中圖分類號:G642 文獻標識碼:B
1引言
MCS-51系列單片機因結構緊湊、指令系統靈活、成本低、開發工具普及等原因,得到了非常廣泛的應用。目前幾乎所有工科大專院校都開設了單片機原理及應用等課程。但多年的教學實踐經驗也表明,單片機原理與應用課程的教學質量較難保證,其主要原因是:傳統的灌輸式課堂教學方法、過多的理論課時抑制了學生學習的積極性,而較少的實驗課時又使本門課程的理論和實踐脫節。如何根據單片機原理與應用課程的特點,尋求一種能較好培養學生實踐能力的教學方法,是每一位任課教師都應深入思考的問題。
2傳統單片機教學模式的不足之處
目前,大多數單片機課程在教學內容設置和教學順序安排方面仍然采用傳統的先基礎后應用的模式,即從介紹單片機的硬件結構、指令系統及尋址方式入手,然后依次講解匯編語言程序設計、系統總線擴展及接口技術,最后介紹應用系統設計實例。在上述安排中,課堂理論教學的學時大大多于實驗教學的學時,例如對于32學時的單片機原理與應用,通常實驗只分配4~6學時。同時,實驗環節通常安排在“匯編語言程序設計”之后才開始進行。這種教學體系的不足之處在于:
(1) 課程開始時原理性內容太多,內容較為枯燥,學生理解困難,影響學習熱情;
(2) 側重于原理知識介紹,應用系統設計及實驗學時不足,不利于培養學生的實踐能力;
(3) 因課時限制,程序設計語言的介紹止步于匯編語言,更常用的C51則無暇顧及;
(4) 實驗系統功能固定,缺少和南京郵電大學通信類教學內容相關的實驗內容,實驗學時少,不利于進行較為復雜的綜合性、設計性實驗,使學生在構建實際的單片機應用時缺少系統化的思路。
上述幾個原因中,對教學質量影響最大的原因就是實驗課時不足、實驗系統功能固定以及缺少通信類實驗內容,不利于學生進行綜合性、設計性實驗,學生無法對所學知識融會貫通。同時,單片機原理與應用課程通常在第六或第七學期作為選修課開出,而此時學生由于找工作或考研等多方面因素的影響,對這些課程的重視程度不夠,也使得教學效果大打折扣。
3通過實例化教學加強單片機課程的實踐環節
對于單片機這類實踐性較強的課程,在教學中更應該強調學以致用。為了能更好地培養學生單片機技術應用能力,激發學生的學習主動性,我們在單片機教學過程中進行了實例化教學的探索。所謂的“實例化”教學,就是把單片機課程中所要教授的各項理論知識和實踐技能按由淺入深的原則分解到一個個具體的實驗實例中,通過讓學生在教學過程中按順序完成這些實驗來達到教學目的。在實例的設計和順序安排上必須注意循序漸進,各部分內容既循序漸進,又互相聯系,前面的實例為后續的實例打基礎,后續的實例在不斷引入新內容和新概念的同時,也對前面實例中提到的知識點進行適當的重復,以加深學生對教學內容的理解。
為了達到上述的教學目的,作者在主持單片機教學改革項目時,決定自行設計模塊化的單片機通信接口實驗平臺,以配合單片機教學方式及教學內容的改革。
4單片機模塊化實驗系統的特點
4.1實驗平臺的主要特點
(1) 提供豐富的基本接口實驗模塊,這些模塊主要通過單片機的I/O端口控制。
(2) 提供單片機總線擴展接口,用于控制功能較復雜的器件。
(3) 提供多種通信接口實驗模塊,如串行口、電話通信接口、網絡通信接口、GSM/GPRS接口等。
(4) 選用具有IAP功能及集成MON51調試跟蹤功能的CPU,下載實驗代碼及動態跟蹤調試方便,不用仿真器,極大地降低了實驗系統的成本。
(5) 實驗平臺上CPU可選擇多種晶振頻率,方便不同種類實驗的需求。
(6) 大多數實驗電路均實現模塊化設計,學生進行實驗時首先必須設計電路并動手連接,既解決了單片機在控制復雜系統時I/O端口不足的問題,又有利于通過不同模塊的組合設計新的實驗,也可以鍛煉學生的動手能力。改變了以往很多實驗系統不需要搭電路,只要運行例子代碼即可完成實驗的不足。
4.2實驗平臺的功能
本實驗平臺目前可進行的驗證性實驗約有三十多個,包括通過單片機的輸入輸出接口可直接完成的實驗,如通過單片機控制LED、LED點陣、獨立鍵盤、行列式鍵盤、數碼管、E2PROM、實時鐘、串行A/D、串行D/A、溫度傳感器、紅外接收器、液晶顯示器、直流電機、步進電機等,實驗內容基本涵蓋了單片機應用領域的各個方面,除了滿足單片機原理及應用課程的課內實驗的需求外,還可供學生進行課外科技創新活動使用。
除了單片機I/O端口可直接控制的接口模塊之外,本實驗平臺還設計了單片機擴展總線接口,并在總線上接入了32K字節RAM存儲器、擴展了并行輸入/輸出端口、串行口、電話用戶線接口、以太網通信接口以及獨立的GSM/GPRS模塊等器件,在此基礎上,可進行十多個和通信相關的實驗,如單片機控制擴展串口芯片與PC機的串行通信、基于RS-485接口的多機通信、模擬電話用戶摘掛機及脈沖撥號、DTMF信號的接收和識別、TCP/IP協議棧測試、GPRS數傳通信、GSM短消息收發等。這些通信類實驗是本實驗平臺的主要特色之一,包含了多種通信方式和通信協議,大部分都屬于設計性和綜合性實驗,具有一定的趣味性和挑戰性,對于培養學生的分析能力、實踐能力、數據處理能力及資料查閱能力等都大有幫助。
5實驗平臺的硬件設計
實驗平臺的硬件結構框圖如圖1所示。
5.1實驗平臺CPU的選擇
實驗系統選擇NXP公司(原Philips公司)的P89V51RD2單片機作為CPU。該CPU為8052內核,片內包含64K字節的Flash存儲器、1K字節的擴展RAM,以及SPI接口、雙數據指針、硬件看門狗電路及5通道的PCA電路等資源;同時該CPU還具有ISP/IAP以及在線仿真功能,可通過串行口更新應用程序代碼或下載Mon51仿真代碼供跟蹤調試程序使用,不需要硬件仿真器即可完成各種實驗代碼的在線調試,功能強大,性價比高,極其適合實驗類應用的需求。
CPU的串行口通過RS-232電平變換電路和實驗微機的串行口相連,完成實驗代碼下載及在線調試工作。
5.2I/O控制類接口模塊的設計
所謂I/O控制類接口,指的是可以通過單片機的并行I/O端口引腳直接控制的實驗電路部分的接口。例如對于4×4行列式鍵盤,當采用掃描法工作時,共有4根行掃描線和4根列掃描線,在實驗平臺中將這8根掃描線引出到圖1中所示的I/O控制接口部分。在實驗時,可選擇單片機P0~P3中的某個并行端口,用8芯扁平電纜將I/O控制接口部分的鍵盤掃描線和CPU的并行端口連接起來即可進行實驗。
與鍵盤接口類似,實驗平臺中的1602字符點陣液晶顯示模塊、實時鐘、E2PROM存儲器、串行A/D、串行D/A、溫度傳感器、紅外接收模塊、8位共陰級數碼管模塊、可獨立驅動的數碼管、按鍵、LED、撥動開關、移位寄存器、CPLD模塊、步進電機及直流電機等器件和設備都是通過單片機的I/O端口引腳直接控制的方式進行實驗的,但是單片機本身的I/O端口引腳只有32根,無法同時控制所有的資源。為了解決這個矛盾,在電路設計時,將這類器件的受控引腳引出到接插件上,所有和受控引腳引出線相連的接插件就構成了I/O控制接口。在進行具體的實驗時,根據實際電路的設計要求,使用兩端帶有接插件的扁平電纜將CPU的并行I/O端口和I/O控制接口中相應設備的受控引腳連接起來即可。各器件的供電電路、時鐘電路、驅動電路等單獨設計,在電路板上統一部署,無需通過I/O控制接口控制。
在實驗平臺的電路設計中,所有器件和設備引出的控制引腳和單片機的I/O端口引腳均已根據各自的特性進行了預處理,如上拉、下拉等,以確保未參與實驗的引腳在懸空時狀態的確定性,避免引起器件、設備的誤動作或損壞。
5.3總線控制類接口模塊的設計
在很多應用場合,MCS-51單片機片內資源不能滿足要求,此時就要進行系統擴展,引出地址總線、數據總線和控制總線用于控制外部器件設備。此時單片機的P0端口在ALE信號的控制下實現時分復用,擴展為數據總線和地址總線的低8位,P2端口擴展為地址總線的高8位,P3端口的P3.6和P3.7引腳分別用于擴展總線的寫選通和讀選通信號??偩€上可以掛接多個設備或器件,設備或器件通過地址譯碼選通,由CPU進行讀寫。
本實驗平臺設計了總線擴展接口(A)和(B),總線擴展接口(A)和CPU的P0~P3端口復接,總線擴展接口(B)則和地址鎖存器及地址譯碼電路連接。當需要進行總線擴展時,通過40芯扁平電纜將電路板上的總線擴展接口(A)和(B)連接起來即可。此時單片機的P0、P2及P3.6、P3.7作為總線控制引腳使用,不可再當作普通I/O端口使用。
擴展總線使用A15對32K字節的RAM進行片選,同時通過74HC138地址譯碼電路提供8個地址譯碼輸出,譯碼電路如圖2所示。
圖2中的74HC138采用讀寫信號相與作為使能信號之一,這樣就保證了只有當單片機進行外部總線訪問時才選通74HC138進行地址譯碼。實驗平臺使用這些地址譯碼輸出選通相關的設備或器件進行讀寫。具體內容如表1所示。
6配套實驗的設計及教學改革
6.1驗證性實驗
驗證性實驗是為了驗證并鞏固課程中已學習過的知識點而設計的實驗。單片機本身的知識點主要在于其指令系統及內部資源如并行端口、定時器/計數器、串行口等的控制和使用。
各學校開設的單片機原理類課程的學時數基本都是32學時,其中實驗學時一般在4~8學時之間,能夠進行的實驗的數量并不多。為此我們對教學內容及實驗方式進行了改革,增加部分基礎實驗的實驗課時,并為此設計了4~6個驗證性實驗的實例,例如通過I/O端口及循環延時控制LED實現跑馬燈、通過定時中斷控制LED實現跑馬燈、獨立按鍵的掃描、單片機串行口數據的收發等。這些實驗的控制流程簡單,代碼量小,非常容易理解,主要側重于單片機指令系統及單片機內部資源的使用。實例同時提供匯編語言與C語言兩種版本,由老師事先調試運行完畢,在進行課內實驗時,讓學生直接在該實驗系統上運行。由于實驗代碼已事先調試完畢,所以學生在短時間內可以完成所有的實驗,通過對閱讀實際代碼、編譯、連接工程、模擬調試、下載代碼并執行這樣一個完整的開發過程的實踐,切實掌握單片機應用系統的開發流程及開發工具的使用,并能體會到機器指令、匯編語言和高級語言之間的關系,為進一步完成后續的綜合性及設計性實驗打下基礎。為了防止學生在完成驗證性實驗時走過場,我們還針對每個實驗設計了一些思考題,在驗收實驗時要求學生現場修改并執行,可充分檢驗出學生對實驗內容的了解程度,起到督促學生認真進行實驗的作用。
6.2綜合性實驗
綜合性實驗是指學生在具有一定的知識和技能的基礎上,運用某一門課程中的多個知識點或多門課程的相關知識對實驗技能和方法進行綜合訓練的一種復合型實驗。
對于單片機課程而言,綜合性實驗一般在課程結束前進行,此時學生已經基本掌握了單片機的內部資源及外擴設備的原理,可以運用多個知識點完成綜合性實驗。我們準備了兩個綜合性實驗:短消息收發終端的設計和分布式溫度采集系統。短消息收發終端設計實驗要求學生掌握通過單片機外擴總線擴展串行通信接口,實現擴展串行接口和單片機本身串行口之間的數據緩沖、中斷式數據收發、數據包分析等功能;分布式溫度采集系統實驗要求學生掌握單片機多機通信的原理、多機通信環境下數據包收發的設計和實現、通過I/O端口模擬總線時序對擴展設備進行操作等知識。上述兩個實驗學生可按三人一個小組,任選一個完成。由于它們都引入了功能較復雜的外部設備,學生必須在課外預先進行一定的準備,鍛煉了學生資料查閱能力、系統分析能力、分工合作能力及編程實踐能力。
6.3設計性實驗
設計性實驗是指給定實驗目的、要求和實驗條件,由學生自行設計實驗方案并加以實現的一種探索型實驗。設計性實驗不但要求學生綜合課程中的多個知識點和各種實驗原理來設計實驗方案,而且要求學生能充分運用已學的知識去發現問題、解決問題。開設設計性實驗的目的是讓學生在實踐中將相關的基礎知識、基本理論得以實踐、融會貫通,培養其獨立發現問題、解決問題的能力,以最大限度發揮學生學習的主動性,相對于綜合性實驗而言,要求更高、難度更大。
對于設計性實驗,我們充分利用自制實驗設備豐富的系統資源,準備了十余個題目,大部分和通信相關,同時還涉及單片機內部及擴展資源的使用,例如模擬電話用戶接口設計、串口/以太網轉換模塊設計、短信監控系統設計等。這些實驗只指定了實驗的基本要求和可用的資源,具體的實驗方案和實際的設計過程都由學生自行完成。通過這樣的實驗過程,學生們可以把分散、獨立的知識融會貫通,整合為一體,最大程度上了解并掌握了單片機系統開發的全過程,使學生的創新能力、設計能力及實踐能力得到了充分的鍛煉。
由于課時的限制,設計性實驗并不要求作為課內實驗完成。我們針對設計性實驗進行了教學改革的嘗試,鼓勵學生選擇一到兩個設計性實驗,在課程結束后的半學期內利用課外時間到開放實驗室去完成。學生完成實驗,提交實驗報告,經實驗教師檢查合格后可根據實驗學時獲得一定的自主個性化學分,以此來激發同學們選做實驗的積極性。
7結語
本文介紹的單片機實驗教學系統具有以下特點:實例化的基礎實驗可使學生盡快掌握單片機應用系統設計思路及開發工具的使用;豐富的系統資源及資源的模塊化設計可組合出較多的實驗內容,并在該實驗平臺上實現了同時進行驗證性、綜合性和設計性實驗的功能,提高了實驗平臺的性價比;在綜合性、設計性實驗內容的安排上偏向于通信領域各種技術的應用,符合本校的辦學特色。
目前該實驗系統已批量生產,首批80套設備投入使用后,經過一個學期兩個大班實驗教學的試點,教學效果良好,極大地提高了學生的學習興趣及綜合創新能力。
參考文獻:
[1] 倪志蓮. 單片機課程的實驗教學改革[J]. 實驗室研究與探索,2006,25(7):843-844.
[2] 陳亮. 單片機課程的教學改革[J]. 實驗室研究與探索,2008,27(9):121-123.
[3] 廖平. 單片機實驗教學的改革[J]. 實驗室研究與探索,2004,23(7):36-38.
[4] 馬忠梅. 單片機的C語言應用程序設計[M]. 北京:北京航空航天大學出版社,2003.
[5] 焦振宇. 淺談新形勢下我國高校單片機教學的課程改革[J]. 高教論壇,2005,2(1):102-105.
南京大學BBS小百合上出現了一段趣聞:騰訊高級執行副總裁兼首席信息官許晨曄于1996年碩士畢業于南京大學計算機系;奇虎360副總裁為南京大學軟件學院碩士。大家笑稱,原來360與騰訊之爭還是南京大學軟件學院與計算機學院之爭啊。
在2000年的“網絡泡沫”破裂之后,IT行業漸漸恢復了作為一個行業應有的冷靜和平和,也逐漸退出了人們關注的視線。而今年一場莫名而來的“3Q大戰”似乎又重新將這個行業推到了中國大眾的眼前。而這僅僅是一個讓更多人去關注這個行業的契機――其實他已經默默地影響著我們每一天的生活。從小巧可愛的MP3到關系民生的銀行系統,再到載人航天的宇宙飛船,到處都有IT行業的身影。
IT行業在大學中的相關專業并不是像想象中的只有計算機科學等少數幾個專業,額外的專業還有軟件工程、信息工程、信息安全等很多專業,尤以計算機科學和軟件工程最具典型性。軟件工程和計算機科學在學科的劃分上,并不屬于同一個科目。軟件工程隸屬于工科類,而計算機科學更多地屬于理科類。他們雖然在大多數人眼中有著極大的相似之處,卻在千絲萬縷的聯系中包含著巨大的差異。
優雅學院派:計算機科學與技術
計算機科學與技術專業培養具有良好的科學素養,系統地、較好地掌握計算機科學與技術包括計算機硬件、軟件與應用的基本理論、基本知識和基本技能與方法,能在科研部門、教育單位、企業、事業、技術和行政管理部門等單位從事計算機教學、科學研究和應用的計算機科學與技術學科的高級科學技術人才。他是研究計算機及其周圍各種現象和規律的科學,亦即研究計算機系統結構、程序系統(即軟件)、人工智能以及計算本身的性質和問題的學科。其學科的重點并非是軟件的構建,而是計算原理本身。而計算機也好,軟件本身也好,只是計算的實現。
與其說計算機專業是優雅的學院派,還不如說計算機科學與技術在IT行業中起著高屋建瓴、提綱挈領的作用。學院派需要的是潛心對計算機專業的研究和分析,具有一定的創造性和啟發性。在行業內部,計算機系畢業的學生大多數成為技術高層的架構師。
主要課程:電路原理、模擬電子技術、數字邏輯、數字分析、計算機原理、微型計算機技術、計算機系統結構、計算機網絡、高級語言、匯編語言、數據結構、操作系統、計算方法、離散數學、概率統計、線性代數以及算法設計與分析等。主要實踐性教學環節包括電子工藝實習、硬件部件設計及調試、計算機基礎訓練、課程設計、計算機工程實踐、生產實習、畢業設計(論文)。
就業方向:學生畢業后可以到國內外眾多軟件企業、國家機關以及各個大、中型企、事業單位的信息技術部門、教育部門等單位從事軟件工程領域的技術開發、教學、科研及管理等工作。也可到信息產業、財政、金融、郵電、交通、國防、大專院校和科研機構從事通信技術和電子技術的科研、教學和工程技術工作。
推薦學府:北京大學、清華大學、北京航空航天大學、哈爾濱工業大學、上海交通大學、南京大學、國防科學技術大學等。
行業實干家:軟件工程
軟件工程,顧名思義是以工程為主,是一門研究用工程化方法構建和維護有效的、實用的和高質量的軟件的學科。其學科在學習構建軟件的基礎上,更加重視工程化的方法,希望能夠以傳統的工程,如建筑工程、化學工程的方式去構建軟件產品。其學生在學習基本的語言基礎上,還要學量的軟件工程的實踐方法學,以期在實踐中指導他們的工作,在設計實現軟件過程中發揮作用。它涉及到程序設計語言、數據庫、軟件開發工具、系統平臺、標準、設計模式等方面。在現代社會中,軟件應用于多個方面,典型的軟件比如有電子郵件、嵌入式系統、人機界面、辦公套件、操作系統、編譯器、數據庫、游戲等。同時,各個行業幾乎都有計算機軟件的應用,比如工業、農業、銀行、航空、政府部門等。這些應用促進了經濟和社會的發展,使得人們的工作更加高效,同時提高了生活質量。
軟件工程的畢業生在IT行業中常常扮演著實干家的角色,考驗的是將各種想法到實際的轉化的能力。比如從美國的IT職業分布中明顯可以看出,中下層的工程師都是以軟件工程的本科生和研究生為主,所以想要學習軟件工程專業的學子們應該有一個對未來職業前瞻性的定位,這樣有利于自己的職業生涯規劃。
主要課程:外語、高等數學、線性代數、高等代數、電子技術基礎、離散數學、計算機引論(C語言)、數據結構、C++程序設計、c#程序設計、JAVA程序設計、Delphi程序設計、匯編語言程序設計、算法設計與分析、計算機組成原理與體系結構、數據庫系統、計算機網絡、軟件工程、軟件測試技術、軟件需求與項目管理、軟件設計實例分析、CMM/ISO9000、Asp等。
就業方向:本專業學生畢業后可以從事各級各類企事業單位的辦公自動化處理、計算機安裝與維護、網頁制作、計算機網絡和專業服務器的維護管理和開發工作、動態商務網站開發與管理、軟件測試與開發及計算機相關設備的商品貿易等方面的有關工作。
推薦學府:北京大學、北京交通大學、重慶大學、大連理工大學、東南大學、山東大學、西安交通大學、中南大學、西安郵電大學等。
時代尖兵:信息工程
專業信息工程專業是建立在超大規模集成電路技術和現代計算機技術基礎上,研究信息處理理論、技術和工程實現的專門學科。該專業以研究信息系統和控制系統的應用技術為核心,在面向21世紀信息社會化的過程中具有十分重要的地位。信息工程專業對數學、物理、電路理論、信號理論、電子技術、計算機科學和技術等方面的知識有很高的要求,并緊跟當今發展最迅速的信息與通信工程以及控制科學與工程學科領域的最新技術,不斷更新教學內容,形成風格獨特的課程體系。因此說信息工程是時代的尖兵一點都不過分。
總體來說,計算機專業和軟件專業在過去IT行業的發展中已經奠定了自己的基礎地位,而信息工程則決定了這個行業是否走在了時代最前端,決定了這一行業能成為先銳科技及先鋒科學。
主要課程:電路與系統、信息論、編碼理論、微型計算機原理、軟件工程基礎、現代控制原理、通信系統原理、信息網絡基礎、數據采集、數字信號與信息處理等。主要實踐性教學環節:包括計算機上機訓練、課程設計、信息系統認識實習、生產實習、畢業設計等,一般安排30周以上。主要專業實驗:至少完成本專業方向的一組實驗,例如:通信系統原理實驗、信息網實驗。
中圖分類號:TN911-34文獻標識碼:A
文章編號:1004-373X(2010)16-0166-03
SD Card Reader Platform Based on Single Chip and Serial Port
LIU Run
(Physics Department, Qinghai Normal University, Xining 810008, China)
Abstract: the SD memory card is applied widely with modern electronics technology. Due to an interface can only be connected to the same kind of equipment in the traditional underlying hardware architecture, which is a waste of resources. A scheme of using AVR microcontroller and serial transfer through the USB interface to read SD card data, the bi-directional reading through a variety of microcontrollers and computer peripherals is achieved, the external devices are compatible by improving the read method of conventional file system, which improves the utilization of existing resources and portability, the storage information can be managed through the microcontroller and the computer. The experiment proves the success rate of a single reading can reach 99.8%, therefore, the stability and security of the data read is guaranteed.Keywords: serial port; SD card; MCU; USB interface
0 引 言
SD卡[1](secure digital memory card,安全數碼卡)是一種基于半導體快閃記憶器的新一代記憶設備,它被廣泛地于便攜式裝置上使用,例如數碼相機、個人數碼助理(PDA)和多媒體播放器等。SD卡由日本松下、東芝及美國SanDisk公司于1999年8月共同開發研制。大小猶如一張郵票的SD記憶卡,重量只有2 g,但卻擁有高記憶容量、快速數據傳輸率、極大的移動靈活性以及很好的安全性。
本文正是通過AVR單片機經過軟硬結合的設計方案,來讀取SD卡上FAT32文件系統中的數據,FAT32是微軟公司開發的新一代的文件系統,支持更大的存儲容量和長達255個字符的文件名,也可以通過串口轉USB接口芯片通過計算機來訪問存儲器中的數據,從而實現多渠道的立體的訪問方式,進一步提升了資源的利用率。
1 文件系統
1.1 FAT文件系統簡介
文件配置表(FAT)[2]是一種由微軟公司發明的并帶有部分專利的文件系統,供MS-DOS使用,也是非NT內核的微軟窗口使用的文件系統。FAT文件系統考慮當時計算機效能有限,所以未被復雜化,因而被幾乎所有個人計算機的操作系統支持。這些特性使它成為理想的軟盤和記憶卡的文件系統。但FAT有一個嚴重的缺點:當文件被刪除并且在同一位置被寫入新數據,他們的片段通常是分散的,減慢了讀寫速度。磁盤碎片重整是一種解決方法,但必須經常重組來保持FAT文件系統的效率。
1.2 FAT文件系統升級版
FAT32實際上是文件分區表采取的一種形式,它是相對于FAT16而言的。它可以大大地節約磁盤空間。文件在磁盤上是以簇的方式存放的,簇里存放了┮桓霆文件就不能再存放另外的文件。
FAT32最大的優點是可以支持的磁盤大小達到2 TB(2 048 GB),但是不能支持小于512 MB的分區。由于采用了更小的簇,FAT32文件系統可以更有效率地保存信息。FAT32可以更高效地使用空間。FAT32使用較小的簇(即,對于大小在8 GB以內的驅動器,使用4 KB的簇),這與大的FAT或FAT16驅動器相比,可將磁盤空間的使用率提高10%~15%。
FAT32 更穩定可靠。FAT32 可以重新定位根文件夾,而且它使用文件分配表的備份副本,而不是使用默認副本。此外,FAT32驅動器上的引導記錄也得到擴展,包括了關鍵數據結構的備份副本。因此,與現有的 FAT16 驅動器相比,FAT32 驅動器不容易受單點故障的影響。
FAT32更靈活。FAT32驅動器上的根文件夾是普通的簇鏈,因此它可以位于驅動器上的任何位置。以前對根文件夾數量的限制不復存在。此外,可以禁用文件分配表鏡像,這樣就可以讓文件分配表的副本而不是讓第一個文件分配表處于活動狀態。這些功能允許您動態重調 FAT32 分區的大小。
2 硬件設計
2.1 芯片概述
ATmega32[3]是基于增強的AVR RISC結構的低功耗8 位CMOS微控制器。由于其先進的指令集以及單時鐘周期指令執行時間,ATmega32 的數據吞吐率高達1 MIPS/MHz,從而可以緩減系統在功耗和處理速度之間的矛盾。 ATmega32 AVR 內核具有豐富的指令集和32 個通用工作寄存器。所有的寄存器都直接與算邏單元(ALU) 相連接,使得一條指令可以在一個時鐘周期內同時訪問2個獨立的寄存器。這種結構大大提高了代碼效率,并且具有比普通的CISC 微控制器最高至10倍的數據吞吐率。
PL2303用于實現USB 和標準RS 232串行端口[4]之間的轉換,2個獨立的大型緩沖用于兩種總線的連接,大型數據緩沖器用于USB 的批量數據傳輸,自動握手模式可用于串行通訊,因而可以達到遠大于標準UART 控制器的波特率。PL2303 支持USB 電源管理和遠程喚醒協議。本設計中PL2303芯片主要應用在將主控單元的下載線與供電模塊合二為一,大大簡化了系統的設計復雜度。
NOKIA 5110液晶顯示器,傳統的點陣式液晶顯示器,不內置英文及漢字字庫,因此NOKIA 5110液晶顯示的過程,需要單片機把從存儲器中讀取到的ASCII碼值轉換成對應的英文及漢字點陣信息,然后通過串口把點陣信息傳輸到液晶顯示器上進行顯示。
2.2 硬件設計
硬件單元包括: AVR[5]主控ATmega32單元模塊,SD卡接口模塊,液晶顯示接口模塊,串口轉USB接口。
2.2.1 主控電路設計
主控電路(如圖1所示)主要負責將從輸入接口中讀到的數據轉換成對應的字模碼。
2.2.2 存儲系統模塊及下載接口設計
SD卡接口如圖2所示。
圖1 主控電路
圖2 SD卡接口電路
2.2.3 液晶顯示模塊設計
液晶顯示接口如圖3所示。
圖3 液晶顯示接口
2.2.4 USB轉換接口模塊設計
計算機端串行轉USB接口[5]的設計如圖4所示。
圖4 計算機端串行轉USB接口設計
3 軟件設計
系統軟件設計主要包括AVR單片機主控程序,中斷服務控制子程序,LCD[6]控制子程序,編碼轉化子程序等幾個模塊。單片機端程序運行流程如圖5所示,計算機端運行程序流程如圖6所示。
4 總結及展望
由于本設計中采用的都是一些通用器件,是對通用器件的一次嘗試性擴展應用,通過LCD設計的人機接口實現設備的友好操作,能夠通過單片機和計算機進行雙向立體式的讀寫,能夠實現在線的實時的FAT32[7]文件系統資源管理,因此本系統具有一定社會價值和應用價值。
圖5 單片機端程序運行流程圖
圖6 計算機端運行程序流程圖
參考文獻
[1]SD Memory Card Specifications.
[2]陳春,徐建華,陳柏潤.計算機GBK漢字輸入法速查字典[M].北京:科學出版社,2008.
[3]劉海成.AVR單片機原理及測控工程應用[M].北京:北京航空航天大學出版社,2008.
[4][美] 安格斯生,精英科技.串行端口大全[M].Jan Axelson,譯.北京:中國電力出版社,2001.
[5]張軍,宋濤.AVR單片機C語言程序設計實例精粹[M].北京:電子工業出版社,2009.
[6]孫俊喜.LCD驅動電路、驅動程序設計及典型應用[M].北京:人民郵電出版社,2009.
[7]關碩,關濟實.FAT16文件系統在單片機存儲系統上的實現[J].科技信息,2008(3):24-26.
[8]薛園園,趙建領.USB應用開發實例詳解華清遠見嵌入式培訓中心[M].北京:人民郵電出版社,2009.