




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、基于單片機的單詞記憶測試器目 錄第1章 緒論11.1單片機的現(xiàn)狀11.1.1 單片機在我國的普及11.2 單片機的發(fā)展趨勢21.2.2 單片機速度越來越快21.2.3 低電壓與低電耗21.2.4 微型單片化21.2.5 大容量 高性能31.2.6 串行擴展技術3第2章 8051單片機 芯片的特點及引腳42.1 8051單片機 芯片的特點42.3 8051單片機的擴展及系統(tǒng)電路5第三章 相關軟件的說明7第三章 相關軟件的說明83.1 proteus83.1.1 proteus簡介83.1.2 proteus功能介紹93.2 keil軟件10第四章 單詞記憶測試器的設計114.1 硬件模塊設計11
2、4.1.1中央處理模塊114.1.2 顯示模塊的硬件部分介紹124.1.3 矩陣鍵盤154.2 電路原理圖設計164.3 軟件程序設計174.3.1 程序設計思路174.3.2矩陣鍵盤的程序設計184.3.3 LCD12864顯示模塊的驅(qū)動程序194.3.4 顯示字模碼的提取204.3 系統(tǒng)軟件主程序結構及其函數(shù)214.4 軟件的仿真26第五章 結語28附 錄 單片機單詞記憶測試器C程序源代碼基于單片機的單詞記憶測試器摘要本論文的研究對象是基于單片機的單詞記憶測試器的設計,此單詞記憶測試器可以實現(xiàn)單詞的輸入并判斷輸入的單詞是否正確,單詞背完后給出正確率。該單片機單詞記憶測試器為在現(xiàn)實生活中有著
3、廣泛的應用,特別是對學習英語方面有很大的作用。 本設計以STC89C52單片機為處理器,以12854點陣液晶屏為顯示器件,并使用56距陣鍵盤為輸入設備,實現(xiàn)了功能全面的人機界面和高速的數(shù)據(jù)處理功能,利用單片機片上FLASH ROM,可儲存10-20個英文單詞和漢字,作為記憶測試用。關鍵詞: 單片機 單詞記憶測試器 AT89C52 12864液晶屏第四章 單詞記憶測試器的設計4.1 硬件模塊設計 本單詞記憶測試器系統(tǒng)硬件部分分為三個模塊:中央處理模塊、顯示模塊、鍵盤輸入模塊。系統(tǒng)模型圖如下:單片機中央處理模塊56矩陣鍵盤模塊LCD12864液晶顯示模塊圖4 系統(tǒng)硬件模塊圖4.1.1中央處理模塊
4、中央處理模塊選用STC89C52單片機系統(tǒng)組成,電路包括:STC89C52單片機、復位電路、時鐘振蕩電路。STC89C52單片機需在復位電路和時鐘振蕩電路組成的最小系統(tǒng)下工作,單片機引腳圖如圖5,外圍電路如圖6和圖7所示,時鐘電路采用頻率采用為12MHZ的晶振,C1、C2與晶振構成了外部振蕩電路。復位電路采用電解電容與電阻串聯(lián),當系統(tǒng)上電時,由于電容充電,在RST端會產(chǎn)生一個高電平,高電平持續(xù)的時間由電容和電阻的值決定,當RESET信號為低電平時,系統(tǒng)為工作狀態(tài)。 STC89C52具有ISP的功能,可以通過串行口直接將程序下載到單片機內(nèi)。在下載程序狀態(tài)下,RESET信號被拉高,系統(tǒng)進行程序下載
5、,待程序下載完畢后,RESET重新拉低。用戶可以通過切斷電源進行手動復位,或者通過重新下載新的程序進行復位。圖5 STC89C52的引腳排列圖 圖6 時鐘電路圖 圖7復位電路圖4.1.2 顯示模塊的硬件部分介紹顯示模塊采用單色點陣液晶屏12864模塊,該模塊在點陣液晶屏基礎上集成了控制器kS0108,用戶只需設計好接口程序,就可讓模塊顯示出各種字符和圖像。通常我們所見到的 LCD 模塊,分為幾部分:LCM(玻璃)、背光、PCB 板;而背光和PCB板部分其實是可有可無的,視具體的LCD 模塊而定。點陣的LCD 模塊按照驅(qū)動控制器的集成方式,大可分為兩種:COB 和COG;COG 其實就是將驅(qū)動控
6、制IC 集成到了玻璃里面,這樣的而后面的PCB 板上其實只是一些驅(qū)動控制IC 無法集成的電容電阻而已;COB 也就是把驅(qū)動控制IC 焊接在LCD 模塊后面的PCB 板上。12864 為一塊128X64 點陣的LCD 顯示模塊,模塊上的 LCM 采用COG 技術將控制(包括顯存)、驅(qū)動器集成在LCM 的玻璃上,接口簡單、操作方便;為方便用戶的使用,在LCM 的基礎上設計了12864 模塊,將模塊所必需的外圍電容電阻集成到模塊上,并引出多種形式的引線接口方便用戶使用。12864 模塊與各種MCU 均可進行方便簡單的接口操作。LCD 的接口:一般來說,LCD 模塊(帶有驅(qū)動控制器)的接口多為總線的接
7、口,不是6800 就是8080,或者是串行SPI(及類SPI 時序);除了這些總線的端口外,有的LCD 模塊還引出了一些功能性的端口,如偏壓調(diào)節(jié)輸入、負壓輸出等。圖8 12864 模塊接口定義表顯示 RAM 區(qū)映射情況:對于 LCD 模塊,了解清楚驅(qū)動控制IC 當中的顯存與LCD 玻璃上的點的對應關系是非常重要的,這是編寫LCD 的驅(qū)動程序的基礎。12864 液晶顯示模塊的顯示器(玻璃)上的顯示點與驅(qū)動控制芯片中的顯示緩存RAM是一一對應的;驅(qū)動控制芯片當中共有65(8 Page x 8 bit+1)X 132 個位的顯示RAM 區(qū)。而顯示器的顯示點陣大小為64X128 點,所以實際上在液晶顯
8、示模塊中有用的顯示RAM 區(qū)為64 X 128 個位;按byte 為單位劃分,共分為8 個Page,每個Page 為8 行,而每一行為128 個位(即128 列)。驅(qū)動控制芯片的顯示RAM區(qū)每個byte的數(shù)據(jù)對應屏上的點的排列方式為:縱向排列,低位在上高位在下;如圖 8所示圖8 驅(qū)動控制芯片的顯示RAM區(qū)12864 液晶顯示模塊的顯示屏上的每一個點都對應有控制器片內(nèi)的顯示緩存RAM中的一個位,顯示屏上64X128 個點分別對應著顯示RAM的8 個Page,每一個Page有128 個byte的空間對應。因此可知顯示RAM區(qū)中的一個Page空間對應8 行的點,而該Page中的一個byte數(shù)據(jù)則對應
9、一列(8 個點)。圖9 為顯示RAM區(qū)與顯示屏的點映射圖:圖9 顯示RAM區(qū)與顯示屏的點映射圖行、列地址:用戶如要點亮 LCD 屏上的某一個點時,實際上就是對該點所對應的顯示RAM 區(qū)中的某一個位進行置1 操作;所以就要確定該點所處的行地址、列地址。從上圖中可以看出,MzL02-12864 液晶顯示模組的行地址實際上就是Page 的信息,每一個Page 應有8 行;而列地址則表示該點的橫坐標,在屏上為從左到右排列,Page 中的一個Byte 對應的是一列(8行,即8 個點),達128 列??梢愿鶕?jù)這樣的關系在程序中控制 LCD 顯示屏的顯示。注意:MzL02-12864 的顯示緩存RAM 區(qū)實
10、際上比模塊上的顯示器所對應的RAM 區(qū)要大;而LCD 模塊具體設置Page(有時也稱頁)時,屏上的位置與驅(qū)動控制IC 當中的哪里的RAM區(qū)對應,還與驅(qū)動控制IC 與屏的連接有關;所以,實際在使用時,請參考所提供的范例設置(主要是設置COM 反向掃描、SEG 設置為正向掃描,以此設置方法,則每個Page 中的前三列以及最后一列是不對應在LCD 屏幕上的)。4.1.3 矩陣鍵盤 要測試記憶的單詞,就要有字母的輸入接口,本接口設計為56矩陣鍵盤輸入,接入單片機的P1口和P3口進行鍵盤掃描。最大程度地提高了單片機IO口的利用率,設計共30個接鍵,包括了26個英文字母以及四個功能鍵:“確定”、“不認識”
11、、“上一個”、“下一個”。 矩陣鍵盤如圖10,由30個輕觸按鍵按照6行5列排列,連接到P1、P3端口。其掃描的原理是:先將行線所接的單片機的I/O口作為輸出端,而列線所接的I/O口則作為輸入。這樣,當按鍵沒有按下時,所有的輸出端都是高電平,代表無鍵按下。行線輸出是低電平,一旦有鍵按下,則輸入線就會被拉低,這樣,通過讀入輸入線的狀態(tài)就可得知是否有鍵按下了。然后再將行線所接的單片機的I/O口作為輸入端,而列線所接的I/O口則作為輸出,以相同的方法讀一次端口,程序中就可識別是啊個坐標的按鍵按下了。圖10 56矩陣鍵盤4.2 電路原理圖設計 電路原理圖設計使用集原理圖設計、PCB設計、電路仿真功能為一
12、體的PROTUES軟件。以該軟件設計的電路原理圖圖11。圖11 單片機單詞記憶測試器電路原理圖電路設計參數(shù):(1) C1 C2 為20-30PF瓷片電容,與12M晶振組成時鐘振蕩電路;(2) 復位電路使用R1為10K電阻、C3為10uF電解電容;(3) 12864液晶模塊與單片機P0口連接,因P0口為真正的三態(tài)門結構,因些作數(shù)據(jù)總線使用時要外接上拉電阻,可使用10K的排阻;(4) 按鍵如圖的行相連,列相連的矩陣接法連入單片機IO口;(5) 電路的供電為5V直流電源;(6) D1為輸入錯誤的狀態(tài)指示燈,加220歐限流電阻連到VCC,因為STC89C51單片機IO的電流灌入能力要強于電流輸出能力,
13、因此一般使IO為低電平時點亮LED燈。4.3 軟件程序設計4.3.1 程序設計思路因本系統(tǒng)為模塊化設計,為方便軟件編寫和移植,程序設計采用C語言,程序流程圖如下:開始單片機初始化鍵盤掃描輸入有按鍵命令?執(zhí)行按鍵命令NY顯示正確輸入正確字符比較確定鍵顯示下一個顯示上一個YLCD12864初始化N4.3.2矩陣鍵盤的程序設計矩陣鍵盤采用56 列與行掃描法,P1口依次接鍵盤的每一行,而P3口依次接鍵盤的每一列,程序開始先令P1全為高電平,P3口全為低電平,這樣一旦矩陣鍵盤中有一個鍵按下時,就會在某一行中出現(xiàn)低電平,而某一列中出現(xiàn)高電平,程序先讀P1口,以檢測到有低電平來確定行。再使P1全為低電平,P
14、3口全為高電平,再讀P3口,以檢測到低電平來確定列。這里還要考慮按鍵的機械抖動問題,因為按鍵的機械特性,可能在按下瞬間會有一組抖動的脈沖,一般程序中采用延時方法來去抖動。實現(xiàn)的C程序函數(shù)如下:/* 鍵盤掃描程序*/unsigned char kbscan() /鍵盤掃描 uchar hang,lie,key; /P1連行,P3連列if(P1!=0xFF|P3!=0) /按鍵去抖動 delayms(5); /延時5msif(P1!=0xFF|P3!=0)switch(P1&0xFF) /P1 掃行 case 0xFE:hang=5;break; /P1.0為第6行 case 0xFD:hang=
15、4;break; /P1.1為第5行 case 0xFB:hang=3;break; /P1.2為第4行 case 0xF7:hang=2;break; /P1.3為第3行 case 0xEF:hang=1;break; /P1.4為第2行 case 0xDF:hang=0;break; /P1.5為第1行 P1=0; /P1全低電平 P3=0xFF;/P3全高電平 switch(P3&0xFF)case 0xFE:lie=4;break; /P1.0為第5列case 0xFD:lie=3;break; /P0.5為第4列case 0xFB:lie=2;break; /P0.6為第3列case
16、 0xF7:lie=1;break; /P0.7為第2列case 0xEF:lie=0;break; /P0.7為第1列P1=0xFF; /P1全高電平 P3=0; /P3全低電平while(P1!=0xFF|P3!=0); /按鍵松開后才返回值key=tab1hanglie;elsekey=_; /沒鍵按下返回空return (key);4.3.3 LCD12864顯示模塊的驅(qū)動程序 LCD12864顯示模塊的程序作為顯示部分的底層程序,用戶可直接調(diào)用其函數(shù)來達到驅(qū)動和顯示功能。主要顯示命令和顯示的函數(shù)說明如下:清顯示屏:void ClearLCD() ,將LCD上的顯示字符清空漢字的顯示函
17、數(shù):void hz_disp(unsigned char x,unsigned char y,unsigned char n,unsigned char code * hz,bit flag) ;其中X Y為漢字的起始坐標,n為字數(shù),hz為存儲漢字字模碼(后述)的地址,flag為顯示為黑還是白。英文的顯示函數(shù)為:void en_disp(unsigned char x,unsigned char y,unsigned char n,unsigned char code *asc,unsigned char *string,bit flag) ;其中其中X Y為字母的起始坐標,n為字數(shù),asc為
18、存儲字形碼(后述)的地址,flag為顯示為黑還是白。LCD12864顯示一個單詞的示例代碼如下:en_disp(6,0,8,Asc,correct:,1); /在第7行,第1列開始顯示correct;LCD12864顯示一個漢字的示例代碼如下:hz_disp(0,48,1,hz1+hz_Num*32,1); /在第1行,第49列開始顯示測試的漢字4.3.4 顯示字模碼的提取為了使LCD12864能夠顯示用戶存儲的中文漢字和英文單詞,用戶必須將要顯示的漢字字模及英文字母字模碼存入單片機存儲器中,因LCD12864只能顯示點陣圖形,因此存儲入單片機的字模碼必須是通過點陣碼轉(zhuǎn)換而成,為了軟換更方便,
19、設計使用了字模轉(zhuǎn)換軟件實現(xiàn)漢字和英文碼的取模。圖12 中英文取字模軟件界面例如漢字“中國”,取得的字模碼為:/*- 文字: 中 -*/0x00,0x00,0xFC,0x08,0x08,0x08,0x08,0xFF,0x08,0x08,0x08,0x08,0xFC,0x08,0x00,0x00,0x00,0x00,0x07,0x02,0x02,0x02,0x02,0xFF,0x02,0x02,0x02,0x02,0x07,0x00,0x00,0x00,/*- 文字: 國 -*/0x00,0xFE,0x02,0x0A,0x8A,0x8A,0x8A,0xFA,0x8A,0x8A,0x8A,0x0A,
20、0x02,0xFE,0x00,0x00,0x00,0xFF,0x40,0x48,0x48,0x48,0x48,0x4F,0x48,0x49,0x4E,0x48,0x40,0xFF,0x00,0x00,將此碼存入單片機程序存儲器里,使用液晶顯示的函數(shù)就可方便地顯示漢字或英文字形。本單片機記憶測試系統(tǒng)的程序中將英文字符的字模碼表以asc.h文件形式保存,為節(jié)約單片機的RAM,生成的二進制文件以只讀形式儲在單片機的FLASH ROM中。4.3 系統(tǒng)軟件主程序結構及其函數(shù)系統(tǒng)主程序完成主循環(huán)和對各模塊函數(shù)的調(diào)用,調(diào)用的文件包括:reg52.h、asc.h、 12864.h,其中reg52.h是 805
21、1內(nèi)核單片機的標準頭文件,定義了單片機內(nèi)部各寄存器的地址,使用戶編程更方便;asc.h存儲了本單詞記憶測試器的單詞和中文漢字字模塊,供顯示函數(shù)調(diào)用,而12864.h為LCD12864顯示屏的底層驅(qū)動程序,包括了屏顯示的指令函數(shù)和顯示中英文的函數(shù)。在KEIL uV3環(huán)境下將 主程序文件和reg52.h、asc.h、12864.h放在同一工程工作組中,以便主程序調(diào)用,如圖13。圖13 keil下的 程序工程文件主程序的函數(shù):主程序首先進行存儲變量的定義:bit ERROR; /輸入字符錯誤標志位,輸入錯誤為 1bit result; /輸入的最終結果對錯的標志位,為0是正確bit verify;
22、/標志按過一次確認鍵sbit ERR=P27; /P2.7 口接一個指示燈警告輸入錯誤uchar correctNUM; /統(tǒng)計測試正確的單詞數(shù),即得分uchar code SL10=4,4,5,3,2,4,4,3,4,3; /存儲各測試單詞的長度,如果輸入的單詞長度與存儲的不同,也為錯誤為能動態(tài)地顯示測試的單詞,先將要測試的單詞存在一個二維數(shù)組中,顯示了該數(shù)組中的字符時,12864.h中的顯示函數(shù)會調(diào)用 相應字符的字模碼(asc.h中); /*/* 存儲要測試的單詞,放在ROM中/*/uchar code S105= tree , /樹 rain , /雨 water, /水 fly , /
23、飛 go , /去 fish , /魚 snow , /雪 eat , /吃 rice , /米 ice , /冰 ;該二維數(shù)組為行*列 10*5,即10行5列,10行表示有10個單詞,實際根據(jù)存儲ROM的大小,可以增加單詞數(shù);列數(shù)表示單詞在存儲器中占的字符數(shù),以最長單詞(5個字符)定義,不足5個字符的單詞后補空格表示。前節(jié)介紹過鍵盤的輸入是通過矩陣掃描的方法,通過矩陣掃描可使單片機找到按鍵所在的某行某列,但要得到一個英文字母值,還得在單片機返回的某行某列位置預先定義個字母值,因此5*6矩陣鍵盤的整個返回字母表可定義一個二維數(shù)組存儲: /*/* 存儲鍵盤的字母值 ,放在ROM中/*/uchar
24、 code tab165=a,b,c,d,e, f,g,h,i,j , k,l,m,n,o , p,q,r,s,t , u,v,w,x,y, z, 1, 2 , 3 , 4 ;例如在按下鍵盤時,單片機返回鍵盤位置為 第二行第三列,就可從上表中查出是對應位置的字母。 鍵盤掃描函數(shù)返回的是鍵值。 key=tab1hanglie;進入主程序后,先對LCD12864屏進行初始化和清屏操作,然后在LCD12864屏上顯示單片機單詞記憶測試器的靜態(tài)的圖文,需要動態(tài)刷新的字符則在主循環(huán)中進行。 LCD12864_init();/LCD12864初始化ClearLCD();/清屏en_disp(2,1,11,
25、Asc,INPUT WORD:,1); /在第3行 第21列 顯示INPUT WORD: /最后的“1”表示顯示為白底黑字,如是0則為黑底白字,即反顯 en_disp(4,1,1,Asc,1); /在第5行,第5列開始顯示en_disp(6,0,8,Asc,correct:,1); /在第7行,第1列開始顯示correct:en_disp(6,80,5,Asc,00/10,1); /在第7行 第81列顯示00/10LCD12864的顯示效果如下,此時系統(tǒng)進入單詞輸入測試就緒狀態(tài)。在系統(tǒng)進入單詞輸入測試就緒狀態(tài)后,主程序即進入while(1)的主循環(huán)中,循環(huán)進行鍵盤掃描,并判斷鍵盤輸入值,再與待
26、測試的單詞進行比較,如果輸入的字符和字符長度均與被測試的單詞一致,則顯示correct加1,即為加1分,并進入下一個單詞的測試,測試完10個單詞后,重新進入第1個單詞的測試。 主程序的主循環(huán)部分代碼及注釋如下:while(1) KeyNumiword=kbscan(); /進行矩陣按鍵掃描,得到掃描鍵盤的輸入值 hz_disp(0,48,1,hz1+hz_Num*32,1); /在第1行,第49列開始顯示測試的漢字 temp0=(hz_Num+1)/10+0x30; /將十進制數(shù)轉(zhuǎn)換為ASCII字符 /temp數(shù)組用來存儲測試的序號 temp1=(hz_Num+1)%10+0x30; /算出測
27、試漢字的序號的第一位和第二位 en_disp(0,20,1,Asc,:,1); /在第1行 第21列顯示: en_disp(0,4,2,Asc,temp,1); /在第1行 第5列顯示測試序號 if(KeyNumiword!=_) /鍵盤有按鍵按下,無按下返回的是_ if(KeyNumiword=1) /如果按下了確定鍵 if(SLhz_Num=iword&verify) /輸入長度等于測試單詞的長度,則正確 ,verify表示按下了確認后有效一次 correctNUM+=1; if(correctNUM10) correctNUM=10; /最多10個正確的 verify=0; /標志位清零
28、 hz_Num+; /測試下一個單詞 if(hz_Num=10) hz_Num=0; /最多設10個單詞 temp0=(correctNUM)/10+0x30; /將十進制數(shù)轉(zhuǎn)換為ASCII字符 temp1=(correctNUM)%10+0x30; /算出測試漢字的序號的第一位和第二位 en_disp(6,80,2,Asc,temp,1); /在第7行 第81列 iword=0; Nword=0; en_disp(4,16,8,Asc, ,1); /在第5行,第17列開始顯示 else if(KeyNumiword=2|KeyNumiword=4)/如果按下了“不認識”或“下一個”鍵 ,直接
29、跳到下一個單詞 result=0; /跳下一個時錯誤燈滅 ERROR=0; hz_Num+; /測試下一個單詞 if(hz_Num=10) hz_Num=0; /最多設10個單詞 iword=0; Nword=0; en_disp(4,16,8,Asc, ,1); /在第5行,第17列開始顯示 else if(KeyNumiword=3) /如果按下了“上一個”鍵 ,直接跳到上一個單詞 result=0; /跳下一個時錯誤燈滅 ERROR=0; /測試下一個單詞 if(hz_Num=0) hz_Num=10; /最多設10個單詞 hz_Num-; iword=0; Nword=0; en_di
30、sp(4,16,8,Asc, ,1); /在第5行,第17列開始顯示 else if(Shz_Numiword=KeyNumiword)/輸入的字符與測試的標準字符比較 temp0=KeyNumiword; ERROR=0; /正確就標志位置0 en_disp(4,Nword+16,1,Asc,temp,1); /在第5行,第17列開始顯示 iword+; if(iword=8) iword=0; Nword=iword*8; verify=1; else temp0=KeyNumiword; ERROR=1;/錯誤就置1 en_disp(4,Nword+16,1,Asc,temp,1); /
31、在第5行,第17列開始顯示 iword+; if(iword=8) iword=0; Nword=iword*8; result=ERROR|result;/0表示結果正確 ERR=!result; /錯誤指示燈 4.4 軟件的仿真軟件的仿真使用protues環(huán)境,在畫好protues原理圖后,將keil環(huán)境下生成的目標文件HEX文件載入protues中,即可進行軟件仿真。因仿真軟件中沒有STC89C52元件 ,故可使用完全兼容的AT89C52單片機仿真。晶振選用12M此處加入HEX文件仿真的結果:輸入錯誤時黃色LED報警:第五章 結語由于本人對單片機的認識有限,在設計過程中遇到不少困難。在設
32、計程序方面出現(xiàn)不少問題,所以用了比較簡單的程序運算。雖然花了幾個月的時間盡力把畢業(yè)做好,但由于本人能力的原因,整個系統(tǒng)做的并不理想,但是在整個設計的過程中我積累了不少的經(jīng)驗,學會一些系統(tǒng)的應用。我一直認為畢業(yè)設計重在過程。確實是這樣的。這個畢業(yè)設計的過程,其實也就是我不斷學習的過程。在這個過程中我學到了許多新的知識,能力也提高了不少。這些收獲給我?guī)淼南矏傔h遠超過了完成畢業(yè)設計時給我?guī)淼南矏?。我相信,以后再做這些設計的時候一定還可以做得更好。參考文獻1 何立民主編. 單片機應用文集. 北京:北京航空航天大學出版社,19942 王福瑞主編. 單片微機測控系統(tǒng)設計大全. 北京:北京航空航天大學出
33、版社,19993 夏繼強 沈德金主編. 單片機實驗與實踐教程. 北京:北京航空航天大學出版社,20024 李朝青主編. PC機及單片機數(shù)據(jù)通信技術. 北京:北京航空航天大學出版社,20015 馬忠梅主編. 單片機的c語言應用程序設計.北京:北京航空航天大學出版社,20036 沈美明、溫冬嬋主編.IBM-PC匯編語言程序設計.北京:清華大學出版社20037 何立民主編. MCS-51系列單片機應用系統(tǒng)設計.北京:北京航空航天大學出版社20018 劉慶江 張曉光. 一種實用的集成芯片測試儀的設計. 中國礦業(yè)大學信息與電氣工程學院, 2005word memory test deviceabstra
34、ctThe aim of this paper is to research and design, is based on single chip word memory test device, this word memory test device can achieve the entry word and decide whether the words correctly, inputting words are back after accuracy. The word memory side is functional, in real life in a wide rang
35、e of applications, especially for learning English has a great role. This paper studies the theory of MCU based on using the latest technology and device, design develop word memory test device scheme. And the main circuit was investigated. Among them main control chip accomplished by AT89C52 single
36、, so as to ensure the quality of the signals and flexible modulation mode, in addition, but also increased the input the wrong indicator, facilitate intuitionistic judgment input is correct or not. KEY WORDS :MCU chip word memory test device AT89C52附 錄單片機單詞記憶測試器C程序源代碼/*/*單片機單詞測試程序/*設計一個以單片機為核心的單詞記憶測
37、試器;/* 實現(xiàn)單詞的錄入(為使程序具有可演示性,單詞不少于10個);/*單詞用按鍵控制依次在屏幕上顯示,按鍵選擇認識還是不認識,/*也可以直接進入下一個或者上一個;/*單詞背完后給出正確率。/*/#define uchar unsigned char#define uint unsigned int#include #include asc.h /ASCII字模表#include 12864.h/12864液晶屏底層驅(qū)動程序bit ERROR=1; /輸入字符錯誤標志位bit result=0; /輸入結果對錯的標志位,為0是正確bit verify=1;/已按了確認鍵后清零sbit ERR
38、=P27;uchar correctNUM; /統(tǒng)計測試正確的單詞數(shù),即得分/*/* 存儲要測試的單詞,放在ROM中/*/uchar code S105= tree , /樹 rain , /雨 water, /水 fly , /飛 go , /去 fish , /魚 snow , /雪 eat , /吃 rice , /米 ice , /冰 ;uchar code SL10=4,4,5,3,2,4,4,3,4,3;/存儲各測試單詞的長度uchar KeyNum8; /儲存輸入的單詞/*/* 存儲鍵盤的字母值 ,放在ROM中/*/uchar code tab165=a,b,c,d,e, f,g
39、,h,i,j, k,l,m,n,o, p,q,r,s,t, u,v,w,x,y, z,1,2,3,4; /最后的 1234 鍵盤值為功能鍵, 1表示確定鍵,2表示不認識,3表示上一個,4表示下一個 /* 鍵盤掃描程序*/unsigned char kbscan() /鍵盤掃描 uchar hang,lie,key; /P1連行,P3連列if(P1!=0xFF|P3!=0)switch(P1&0xFF) /P1 掃行 case 0xFE:hang=5;break;/P1.0為第6行case 0xFD:hang=4;break;/P1.1為第5行case 0xFB:hang=3;break;/P1
40、.2為第4行case 0xF7:hang=2;break;/P1.3為第3行case 0xEF:hang=1;break;/P1.4為第2行case 0xDF:hang=0;break;/P1.5為第1行P1=0; /P1全低電平 P3=0xFF;/P3全高電平switch(P3&0xFF)case 0xFE:lie=4;break; /P1.0為第5列case 0xFD:lie=3;break; /P0.5為第4列case 0xFB:lie=2;break; /P0.6為第3列case 0xF7:lie=1;break; /P0.7為第2列 case 0xEF:lie=0;break; /P
41、0.7為第1列P1=0xFF; /P1全高電平 P3=0; /P3全低電平while(P1!=0xFF|P3!=0); /按鍵松開后才返回值key=tab1hanglie;elsekey=_;return (key);/*/* 主函數(shù)/* /* /*/void main(void) uchar hz_Num; /用于計當前測試的是第幾個詞,第一個為0uchar temp8; /用于送液晶屏顯示的臨時變量uchar iword=0,Nword=0; /輸入單詞字母下一個計數(shù) LCD12864_init(); /LCD12864初始化ClearLCD();/清屏en_disp(2,1,11,Asc
42、,INPUT WORD:,1); /在第2行 第1列 en_disp(4,1,1,Asc,1); /在第5行,第2列開始顯示en_disp(6,0,8,Asc,correct:,1); /在第7行,第1列開始顯示en_disp(6,80,5,Asc,00/10,1); /在第7行 第81列P1=0xFF; /P1全高電平 P3=0; /P3全低電平 while(1) KeyNumiword=kbscan(); /掃描鍵盤的輸入值,沒按下時返回下橫線 hz_disp(0,48,1,hz1+hz_Num*32,1); /在第1行,第49列開始顯示測試的漢字 temp0=(hz_Num+1)/10+
43、0x30; /將十進制數(shù)轉(zhuǎn)換為ASCII字符 temp1=(hz_Num+1)%10+0x30; /算出測試漢字的序號的第一位和第二位 en_disp(0,20,1,Asc,:,1); /在第1行 第21列 en_disp(0,4,2,Asc,temp,1); /在第1行 第5列顯示測試序號 if(KeyNumiword!=_) /鍵盤有按鍵按下 if(KeyNumiword=1) /如果按下了確定鍵 if(SLhz_Num=iword&verify) /輸入長度等于測試單詞的長度,則正確 ,verify表示按下了確認后有效一次 correctNUM+=1; if(correctNUM10) correctNUM=10; /最多10個正確的 verify=0; /標志位清零 hz_Num+; /測試下一個單詞 if(hz_Num=10) hz_Num=0; /最多設10個單詞 temp0=(correctNUM)/10+0x30; /將十進制數(shù)轉(zhuǎn)換為ASCII字符 temp1=(correctNUM)%10+0x30; /算出測試漢字的序號的第一位和第二位 en_disp(6,80,2,Asc
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 家紡企業(yè)社會責任報告編寫考核試卷
- 面門出租合同范本
- 電影合同范本4篇
- 煤炭居間費合同范本
- 小學生頒獎視頻模板課件
- 基于大數(shù)據(jù)的智能種植管理平臺構建
- 人才派遣與招聘協(xié)議
- 日常照護培訓課件
- 農(nóng)業(yè)生產(chǎn)安全防范指南
- 互聯(lián)網(wǎng)行業(yè)數(shù)據(jù)安全防護策略
- DL∕T 584-2017 3kV~110kV電網(wǎng)繼電保護裝置運行整定規(guī)程
- (正式版)FZ∕T 80018-2024 服裝 防靜電性能要求及試驗方法
- 玻璃體腔注藥及圍注射期管理
- 北師大版八年級下冊生物教案全冊
- 技術學院各部門廉政風險點、防控措施匯編
- JGJ133-2001 金屬與石材幕墻工程技術規(guī)范
- 穩(wěn)定性冠心病診斷與治療指南
- DL-T5704-2014火力發(fā)電廠熱力設備及管道保溫防腐施工質(zhì)量驗收規(guī)程
- (高清版)JGT 225-2020 預應力混凝土用金屬波紋管
- JT-T-610-2004公路隧道火災報警系統(tǒng)技術條件
- 初中英語比較級和最高級專項練習題含答案
評論
0/150
提交評論