




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、目 錄第1章 緒論11.1單片機(jī)的現(xiàn)狀11.1.1 單片機(jī)在我國(guó)的普及11.2 單片機(jī)的發(fā)展趨勢(shì)21.2.2 單片機(jī)速度越來(lái)越快21.2.3 低電壓與低電耗21.2.4 微型單片化21.2.5 大容量 高性能31.2.6 串行擴(kuò)展技術(shù)3第2章 8051單片機(jī) 芯片的特點(diǎn)及引腳42.1 8051單片機(jī) 芯片的特點(diǎn)42.3 8051單片機(jī)的擴(kuò)展及系統(tǒng)電路5第三章 相關(guān)軟件的說(shuō)明7第三章 相關(guān)軟件的說(shuō)明83.1 proteus83.1.1 proteus簡(jiǎn)介83.1.2 proteus功能介紹93.2 keil軟件10第四章 單詞記憶測(cè)試器的設(shè)計(jì)114.1 硬件模塊設(shè)計(jì)114.1.1中央處理模塊11
2、4.1.2 顯示模塊的硬件部分介紹124.1.3 矩陣鍵盤154.2 電路原理圖設(shè)計(jì)164.3 軟件程序設(shè)計(jì)174.3.1 程序設(shè)計(jì)思路174.3.2矩陣鍵盤的程序設(shè)計(jì)184.3.3 LCD12864顯示模塊的驅(qū)動(dòng)程序194.3.4 顯示字模碼的提取204.3 系統(tǒng)軟件主程序結(jié)構(gòu)及其函數(shù)214.4 軟件的仿真26第五章 結(jié)語(yǔ)28附 錄 單片機(jī)單詞記憶測(cè)試器C程序源代碼基于單片機(jī)的單詞記憶測(cè)試器摘要本論文的研究對(duì)象是基于單片機(jī)的單詞記憶測(cè)試器的設(shè)計(jì),此單詞記憶測(cè)試器可以實(shí)現(xiàn)單詞的輸入并判斷輸入的單詞是否正確,單詞背完后給出正確率。該單片機(jī)單詞記憶測(cè)試器為在現(xiàn)實(shí)生活中有著廣泛的應(yīng)用,特別是對(duì)學(xué)習(xí)英
3、語(yǔ)方面有很大的作用。 本設(shè)計(jì)以STC89C52單片機(jī)為處理器,以12854點(diǎn)陣液晶屏為顯示器件,并使用5×6距陣鍵盤為輸入設(shè)備,實(shí)現(xiàn)了功能全面的人機(jī)界面和高速的數(shù)據(jù)處理功能,利用單片機(jī)片上FLASH ROM,可儲(chǔ)存10-20個(gè)英文單詞和漢字,作為記憶測(cè)試用。關(guān)鍵詞: 單片機(jī) 單詞記憶測(cè)試器 AT89C52 12864液晶屏第四章 單詞記憶測(cè)試器的設(shè)計(jì)4.1 硬件模塊設(shè)計(jì) 本單詞記憶測(cè)試器系統(tǒng)硬件部分分為三個(gè)模塊:中央處理模塊、顯示模塊、鍵盤輸入模塊。系統(tǒng)模型圖如下:?jiǎn)纹瑱C(jī)中央處理模塊5×6矩陣鍵盤模塊LCD12864液晶顯示模塊圖4 系統(tǒng)硬件模塊圖4.1.1中央處理模塊 中
4、央處理模塊選用STC89C52單片機(jī)系統(tǒng)組成,電路包括:STC89C52單片機(jī)、復(fù)位電路、時(shí)鐘振蕩電路。STC89C52單片機(jī)需在復(fù)位電路和時(shí)鐘振蕩電路組成的最小系統(tǒng)下工作,單片機(jī)引腳圖如圖5,外圍電路如圖6和圖7所示,時(shí)鐘電路采用頻率采用為12MHZ的晶振,C1、C2與晶振構(gòu)成了外部振蕩電路。復(fù)位電路采用電解電容與電阻串聯(lián),當(dāng)系統(tǒng)上電時(shí),由于電容充電,在RST端會(huì)產(chǎn)生一個(gè)高電平,高電平持續(xù)的時(shí)間由電容和電阻的值決定,當(dāng)RESET信號(hào)為低電平時(shí),系統(tǒng)為工作狀態(tài)。 STC89C52具有ISP的功能,可以通過(guò)串行口直接將程序下載到單片機(jī)內(nèi)。在下載程序狀態(tài)下,RESET信號(hào)被拉高,系統(tǒng)進(jìn)行程序下載,
5、待程序下載完畢后,RESET重新拉低。用戶可以通過(guò)切斷電源進(jìn)行手動(dòng)復(fù)位,或者通過(guò)重新下載新的程序進(jìn)行復(fù)位。圖5 STC89C52的引腳排列圖 圖6 時(shí)鐘電路圖 圖7復(fù)位電路圖4.1.2 顯示模塊的硬件部分介紹顯示模塊采用單色點(diǎn)陣液晶屏12864模塊,該模塊在點(diǎn)陣液晶屏基礎(chǔ)上集成了控制器kS0108,用戶只需設(shè)計(jì)好接口程序,就可讓模塊顯示出各種字符和圖像。通常我們所見(jiàn)到的 LCD 模塊,分為幾部分:LCM(玻璃)、背光、PCB 板;而背光和PCB板部分其實(shí)是可有可無(wú)的,視具體的LCD 模塊而定。點(diǎn)陣的LCD 模塊按照驅(qū)動(dòng)控制器的集成方式,大可分為兩種:COB 和COG;COG 其實(shí)就是將驅(qū)動(dòng)控制
6、IC 集成到了玻璃里面,這樣的而后面的PCB 板上其實(shí)只是一些驅(qū)動(dòng)控制IC 無(wú)法集成的電容電阻而已;COB 也就是把驅(qū)動(dòng)控制IC 焊接在LCD 模塊后面的PCB 板上。12864 為一塊128X64 點(diǎn)陣的LCD 顯示模塊,模塊上的 LCM 采用COG 技術(shù)將控制(包括顯存)、驅(qū)動(dòng)器集成在LCM 的玻璃上,接口簡(jiǎn)單、操作方便;為方便用戶的使用,在LCM 的基礎(chǔ)上設(shè)計(jì)了12864 模塊,將模塊所必需的外圍電容電阻集成到模塊上,并引出多種形式的引線接口方便用戶使用。12864 模塊與各種MCU 均可進(jìn)行方便簡(jiǎn)單的接口操作。LCD 的接口:一般來(lái)說(shuō),LCD 模塊(帶有驅(qū)動(dòng)控制器)的接口多為總線的接口
7、,不是6800 就是8080,或者是串行SPI(及類SPI 時(shí)序);除了這些總線的端口外,有的LCD 模塊還引出了一些功能性的端口,如偏壓調(diào)節(jié)輸入、負(fù)壓輸出等。圖8 12864 模塊接口定義表顯示 RAM 區(qū)映射情況:對(duì)于 LCD 模塊,了解清楚驅(qū)動(dòng)控制IC 當(dāng)中的顯存與LCD 玻璃上的點(diǎn)的對(duì)應(yīng)關(guān)系是非常重要的,這是編寫(xiě)LCD 的驅(qū)動(dòng)程序的基礎(chǔ)。12864 液晶顯示模塊的顯示器(玻璃)上的顯示點(diǎn)與驅(qū)動(dòng)控制芯片中的顯示緩存RAM是一一對(duì)應(yīng)的;驅(qū)動(dòng)控制芯片當(dāng)中共有65(8 Page x 8 bit+1)X 132 個(gè)位的顯示RAM 區(qū)。而顯示器的顯示點(diǎn)陣大小為64X128 點(diǎn),所以實(shí)際上在液晶顯示
8、模塊中有用的顯示RAM 區(qū)為64 X 128 個(gè)位;按byte 為單位劃分,共分為8 個(gè)Page,每個(gè)Page 為8 行,而每一行為128 個(gè)位(即128 列)。驅(qū)動(dòng)控制芯片的顯示RAM區(qū)每個(gè)byte的數(shù)據(jù)對(duì)應(yīng)屏上的點(diǎn)的排列方式為:縱向排列,低位在上高位在下;如圖 8所示圖8 驅(qū)動(dòng)控制芯片的顯示RAM區(qū)12864 液晶顯示模塊的顯示屏上的每一個(gè)點(diǎn)都對(duì)應(yīng)有控制器片內(nèi)的顯示緩存RAM中的一個(gè)位,顯示屏上64X128 個(gè)點(diǎn)分別對(duì)應(yīng)著顯示RAM的8 個(gè)Page,每一個(gè)Page有128 個(gè)byte的空間對(duì)應(yīng)。因此可知顯示RAM區(qū)中的一個(gè)Page空間對(duì)應(yīng)8 行的點(diǎn),而該P(yáng)age中的一個(gè)byte數(shù)據(jù)則對(duì)應(yīng)一
9、列(8 個(gè)點(diǎn))。圖9 為顯示RAM區(qū)與顯示屏的點(diǎn)映射圖:圖9 顯示RAM區(qū)與顯示屏的點(diǎn)映射圖行、列地址:用戶如要點(diǎn)亮 LCD 屏上的某一個(gè)點(diǎn)時(shí),實(shí)際上就是對(duì)該點(diǎn)所對(duì)應(yīng)的顯示RAM 區(qū)中的某一個(gè)位進(jìn)行置1 操作;所以就要確定該點(diǎn)所處的行地址、列地址。從上圖中可以看出,MzL02-12864 液晶顯示模組的行地址實(shí)際上就是Page 的信息,每一個(gè)Page 應(yīng)有8 行;而列地址則表示該點(diǎn)的橫坐標(biāo),在屏上為從左到右排列,Page 中的一個(gè)Byte 對(duì)應(yīng)的是一列(8行,即8 個(gè)點(diǎn)),達(dá)128 列??梢愿鶕?jù)這樣的關(guān)系在程序中控制 LCD 顯示屏的顯示。注意:MzL02-12864 的顯示緩存RAM 區(qū)實(shí)際
10、上比模塊上的顯示器所對(duì)應(yīng)的RAM 區(qū)要大;而LCD 模塊具體設(shè)置Page(有時(shí)也稱頁(yè))時(shí),屏上的位置與驅(qū)動(dòng)控制IC 當(dāng)中的哪里的RAM區(qū)對(duì)應(yīng),還與驅(qū)動(dòng)控制IC 與屏的連接有關(guān);所以,實(shí)際在使用時(shí),請(qǐng)參考所提供的范例設(shè)置(主要是設(shè)置COM 反向掃描、SEG 設(shè)置為正向掃描,以此設(shè)置方法,則每個(gè)Page 中的前三列以及最后一列是不對(duì)應(yīng)在LCD 屏幕上的)。4.1.3 矩陣鍵盤 要測(cè)試記憶的單詞,就要有字母的輸入接口,本接口設(shè)計(jì)為5×6矩陣鍵盤輸入,接入單片機(jī)的P1口和P3口進(jìn)行鍵盤掃描。最大程度地提高了單片機(jī)IO口的利用率,設(shè)計(jì)共30個(gè)接鍵,包括了26個(gè)英文字母以及四個(gè)功能鍵:“確定”、
11、“不認(rèn)識(shí)”、“上一個(gè)”、“下一個(gè)”。 矩陣鍵盤如圖10,由30個(gè)輕觸按鍵按照6行5列排列,連接到P1、P3端口。其掃描的原理是:先將行線所接的單片機(jī)的I/O口作為輸出端,而列線所接的I/O口則作為輸入。這樣,當(dāng)按鍵沒(méi)有按下時(shí),所有的輸出端都是高電平,代表無(wú)鍵按下。行線輸出是低電平,一旦有鍵按下,則輸入線就會(huì)被拉低,這樣,通過(guò)讀入輸入線的狀態(tài)就可得知是否有鍵按下了。然后再將行線所接的單片機(jī)的I/O口作為輸入端,而列線所接的I/O口則作為輸出,以相同的方法讀一次端口,程序中就可識(shí)別是啊個(gè)坐標(biāo)的按鍵按下了。圖10 5×6矩陣鍵盤4.2 電路原理圖設(shè)計(jì) 電路原理圖設(shè)計(jì)使用集原理圖設(shè)計(jì)、PCB
12、設(shè)計(jì)、電路仿真功能為一體的PROTUES軟件。以該軟件設(shè)計(jì)的電路原理圖圖11。圖11 單片機(jī)單詞記憶測(cè)試器電路原理圖電路設(shè)計(jì)參數(shù):(1) C1 C2 為20-30PF瓷片電容,與12M晶振組成時(shí)鐘振蕩電路;(2) 復(fù)位電路使用R1為10K電阻、C3為10uF電解電容;(3) 12864液晶模塊與單片機(jī)P0口連接,因P0口為真正的三態(tài)門結(jié)構(gòu),因些作數(shù)據(jù)總線使用時(shí)要外接上拉電阻,可使用10K的排阻;(4) 按鍵如圖的行相連,列相連的矩陣接法連入單片機(jī)IO口;(5) 電路的供電為5V直流電源;(6) D1為輸入錯(cuò)誤的狀態(tài)指示燈,加220歐限流電阻連到VCC,因?yàn)镾TC89C51單片機(jī)IO的電流灌入能
13、力要強(qiáng)于電流輸出能力,因此一般使IO為低電平時(shí)點(diǎn)亮LED燈。4.3 軟件程序設(shè)計(jì)4.3.1 程序設(shè)計(jì)思路因本系統(tǒng)為模塊化設(shè)計(jì),為方便軟件編寫(xiě)和移植,程序設(shè)計(jì)采用C語(yǔ)言,程序流程圖如下:開(kāi)始單片機(jī)初始化鍵盤掃描輸入有按鍵命令?執(zhí)行按鍵命令NY顯示正確輸入正確字符比較確定鍵顯示下一個(gè)顯示上一個(gè)YLCD12864初始化N4.3.2矩陣鍵盤的程序設(shè)計(jì)矩陣鍵盤采用5×6 列與行掃描法,P1口依次接鍵盤的每一行,而P3口依次接鍵盤的每一列,程序開(kāi)始先令P1全為高電平,P3口全為低電平,這樣一旦矩陣鍵盤中有一個(gè)鍵按下時(shí),就會(huì)在某一行中出現(xiàn)低電平,而某一列中出現(xiàn)高電平,程序先讀P1口,以檢測(cè)到有低電
14、平來(lái)確定行。再使P1全為低電平,P3口全為高電平,再讀P3口,以檢測(cè)到低電平來(lái)確定列。這里還要考慮按鍵的機(jī)械抖動(dòng)問(wèn)題,因?yàn)榘存I的機(jī)械特性,可能在按下瞬間會(huì)有一組抖動(dòng)的脈沖,一般程序中采用延時(shí)方法來(lái)去抖動(dòng)。實(shí)現(xiàn)的C程序函數(shù)如下:/* 鍵盤掃描程序*/unsigned char kbscan() /鍵盤掃描 uchar hang,lie,key; /P1連行,P3連列if(P1!=0xFF|P3!=0) /按鍵去抖動(dòng) delayms(5); /延時(shí)5msif(P1!=0xFF|P3!=0)switch(P1&0xFF) /P1 掃行 case 0xFE:hang=5;break; /P1.
15、0為第6行 case 0xFD:hang=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:l
16、ie=2;break; /P0.6為第3列case 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); /按鍵松開(kāi)后才返回值key=tab1hanglie;elsekey='_' /沒(méi)鍵按下返回空return (key);4.3.3 LCD12864顯示模塊的驅(qū)動(dòng)程序 LCD12864顯示模塊的程序作為顯示部分的底層程序,用戶可直接調(diào)用其函數(shù)來(lái)達(dá)到驅(qū)動(dòng)和顯示功能。主要顯示命令和顯示的函數(shù)說(shuō)明如下:清顯示屏:v
17、oid ClearLCD() ,將LCD上的顯示字符清空漢字的顯示函數(shù):void hz_disp(unsigned char x,unsigned char y,unsigned char n,unsigned char code * hz,bit flag) ;其中X Y為漢字的起始坐標(biāo),n為字?jǐn)?shù),hz為存儲(chǔ)漢字字模碼(后述)的地址,flag為顯示為黑還是白。英文的顯示函數(shù)為:void en_disp(unsigned char x,unsigned char y,unsigned char n,unsigned char code *asc,unsigned char *string,bi
18、t flag) ;其中其中X Y為字母的起始坐標(biāo),n為字?jǐn)?shù),asc為存儲(chǔ)字形碼(后述)的地址,flag為顯示為黑還是白。LCD12864顯示一個(gè)單詞的示例代碼如下:en_disp(6,0,8,Asc,"correct:",1); /在第7行,第1列開(kāi)始顯示correct;LCD12864顯示一個(gè)漢字的示例代碼如下:hz_disp(0,48,1,hz1+hz_Num*32,1); /在第1行,第49列開(kāi)始顯示測(cè)試的漢字4.3.4 顯示字模碼的提取為了使LCD12864能夠顯示用戶存儲(chǔ)的中文漢字和英文單詞,用戶必須將要顯示的漢字字模及英文字母字模碼存入單片機(jī)存儲(chǔ)器中,因LCD1
19、2864只能顯示點(diǎn)陣圖形,因此存儲(chǔ)入單片機(jī)的字模碼必須是通過(guò)點(diǎn)陣碼轉(zhuǎn)換而成,為了軟換更方便,設(shè)計(jì)使用了字模轉(zhuǎn)換軟件實(shí)現(xiàn)漢字和英文碼的取模。圖12 中英文取字模軟件界面例如漢字“中國(guó)”,取得的字模碼為:/*- 文字: 中 -*/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,/*- 文字: 國(guó) -*/0x00,0xFE,0x02
20、,0x0A,0x8A,0x8A,0x8A,0xFA,0x8A,0x8A,0x8A,0x0A,0x02,0xFE,0x00,0x00,0x00,0xFF,0x40,0x48,0x48,0x48,0x48,0x4F,0x48,0x49,0x4E,0x48,0x40,0xFF,0x00,0x00,將此碼存入單片機(jī)程序存儲(chǔ)器里,使用液晶顯示的函數(shù)就可方便地顯示漢字或英文字形。本單片機(jī)記憶測(cè)試系統(tǒng)的程序中將英文字符的字模碼表以asc.h文件形式保存,為節(jié)約單片機(jī)的RAM,生成的二進(jìn)制文件以只讀形式儲(chǔ)在單片機(jī)的FLASH ROM中。4.3 系統(tǒng)軟件主程序結(jié)構(gòu)及其函數(shù)系統(tǒng)主程序完成主循環(huán)和對(duì)各模塊函數(shù)的調(diào)用
21、,調(diào)用的文件包括:reg52.h、asc.h、 12864.h,其中reg52.h是 8051內(nèi)核單片機(jī)的標(biāo)準(zhǔn)頭文件,定義了單片機(jī)內(nèi)部各寄存器的地址,使用戶編程更方便;asc.h存儲(chǔ)了本單詞記憶測(cè)試器的單詞和中文漢字字模塊,供顯示函數(shù)調(diào)用,而12864.h為L(zhǎng)CD12864顯示屏的底層驅(qū)動(dòng)程序,包括了屏顯示的指令函數(shù)和顯示中英文的函數(shù)。在KEIL uV3環(huán)境下將 主程序文件和reg52.h、asc.h、12864.h放在同一工程工作組中,以便主程序調(diào)用,如圖13。圖13 keil下的 程序工程文件主程序的函數(shù):主程序首先進(jìn)行存儲(chǔ)變量的定義:bit ERROR; /輸入字符錯(cuò)誤標(biāo)志位,輸入錯(cuò)誤為
22、 1bit result; /輸入的最終結(jié)果對(duì)錯(cuò)的標(biāo)志位,為0是正確bit verify; /標(biāo)志按過(guò)一次確認(rèn)鍵sbit ERR=P27; /P2.7 口接一個(gè)指示燈警告輸入錯(cuò)誤uchar correctNUM; /統(tǒng)計(jì)測(cè)試正確的單詞數(shù),即得分uchar code SL10=4,4,5,3,2,4,4,3,4,3; /存儲(chǔ)各測(cè)試單詞的長(zhǎng)度,如果輸入的單詞長(zhǎng)度與存儲(chǔ)的不同,也為錯(cuò)誤為能動(dòng)態(tài)地顯示測(cè)試的單詞,先將要測(cè)試的單詞存在一個(gè)二維數(shù)組中,顯示了該數(shù)組中的字符時(shí),12864.h中的顯示函數(shù)會(huì)調(diào)用 相應(yīng)字符的字模碼(asc.h中); /*/* 存儲(chǔ)要測(cè)試的單詞,放在ROM中/*/uchar co
23、de S105= "tree ", /樹(shù) "rain ", /雨 "water", /水 "fly ", /飛 "go ", /去 "fish ", /魚(yú) "snow ", /雪 "eat ", /吃 "rice ", /米 "ice ", /冰 ;該二維數(shù)組為行*列 10*5,即10行5列,10行表示有10個(gè)單詞,實(shí)際根據(jù)存儲(chǔ)ROM的大小,可以增加單詞數(shù);列數(shù)表示單詞在存儲(chǔ)器中占的字符數(shù),以最長(zhǎng)
24、單詞(5個(gè)字符)定義,不足5個(gè)字符的單詞后補(bǔ)空格表示。前節(jié)介紹過(guò)鍵盤的輸入是通過(guò)矩陣掃描的方法,通過(guò)矩陣掃描可使單片機(jī)找到按鍵所在的某行某列,但要得到一個(gè)英文字母值,還得在單片機(jī)返回的某行某列位置預(yù)先定義個(gè)字母值,因此5*6矩陣鍵盤的整個(gè)返回字母表可定義一個(gè)二維數(shù)組存儲(chǔ): /*/* 存儲(chǔ)鍵盤的字母值 ,放在ROM中/*/uchar code tab165='a','b','c','d','e', 'f','g','h','i','j'
25、, 'k','l','m','n','o' , 'p','q','r','s','t' , 'u','v','w','x','y', 'z', 1, 2 , 3 , 4 ;例如在按下鍵盤時(shí),單片機(jī)返回鍵盤位置為 第二行第三列,就可從上表中查出是對(duì)應(yīng)位置的字母。 鍵盤掃描函數(shù)返回的是鍵值。 key=tab1hanglie;進(jìn)入主程序后,先對(duì)LC
26、D12864屏進(jìn)行初始化和清屏操作,然后在LCD12864屏上顯示單片機(jī)單詞記憶測(cè)試器的靜態(tài)的圖文,需要?jiǎng)討B(tài)刷新的字符則在主循環(huán)中進(jìn)行。 LCD12864_init();/LCD12864初始化ClearLCD();/清屏en_disp(2,1,11,Asc,"INPUT WORD:",1); /在第3行 第21列 顯示"INPUT WORD:" /最后的“1”表示顯示為白底黑字,如是0則為黑底白字,即反顯 en_disp(4,1,1,Asc,">",1); /在第5行,第5列開(kāi)始顯示">"en_dis
27、p(6,0,8,Asc,"correct:",1); /在第7行,第1列開(kāi)始顯示"correct:"en_disp(6,80,5,Asc,"00/10",1); /在第7行 第81列顯示"00/10"LCD12864的顯示效果如下,此時(shí)系統(tǒng)進(jìn)入單詞輸入測(cè)試就緒狀態(tài)。在系統(tǒng)進(jìn)入單詞輸入測(cè)試就緒狀態(tài)后,主程序即進(jìn)入while(1)的主循環(huán)中,循環(huán)進(jìn)行鍵盤掃描,并判斷鍵盤輸入值,再與待測(cè)試的單詞進(jìn)行比較,如果輸入的字符和字符長(zhǎng)度均與被測(cè)試的單詞一致,則顯示correct加1,即為加1分,并進(jìn)入下一個(gè)單詞的測(cè)試,測(cè)試完10
28、個(gè)單詞后,重新進(jìn)入第1個(gè)單詞的測(cè)試。 主程序的主循環(huán)部分代碼及注釋如下:while(1) KeyNumiword=kbscan(); /進(jìn)行矩陣按鍵掃描,得到掃描鍵盤的輸入值 hz_disp(0,48,1,hz1+hz_Num*32,1); /在第1行,第49列開(kāi)始顯示測(cè)試的漢字 temp0=(hz_Num+1)/10+0x30; /將十進(jìn)制數(shù)轉(zhuǎn)換為ASCII字符 /temp數(shù)組用來(lái)存儲(chǔ)測(cè)試的序號(hào) temp1=(hz_Num+1)%10+0x30; /算出測(cè)試漢字的序號(hào)的第一位和第二位 en_disp(0,20,1,Asc,":",1); /在第1行 第21列顯示"
29、;:" en_disp(0,4,2,Asc,temp,1); /在第1行 第5列顯示測(cè)試序號(hào) if(KeyNumiword!='_') /鍵盤有按鍵按下,無(wú)按下返回的是'_' if(KeyNumiword=1) /如果按下了確定鍵 if(SLhz_Num=iword&&verify) /輸入長(zhǎng)度等于測(cè)試單詞的長(zhǎng)度,則正確 ,verify表示按下了確認(rèn)后有效一次 correctNUM+=1; if(correctNUM>10) correctNUM=10; /最多10個(gè)正確的 verify=0; /標(biāo)志位清零 hz_Num+; /測(cè)
30、試下一個(gè)單詞 if(hz_Num=10) hz_Num=0; /最多設(shè)10個(gè)單詞 temp0=(correctNUM)/10+0x30; /將十進(jìn)制數(shù)轉(zhuǎn)換為ASCII字符 temp1=(correctNUM)%10+0x30; /算出測(cè)試漢字的序號(hào)的第一位和第二位 en_disp(6,80,2,Asc,temp,1); /在第7行 第81列 iword=0; Nword=0; en_disp(4,16,8,Asc," ",1); /在第5行,第17列開(kāi)始顯示 else if(KeyNumiword=2|KeyNumiword=4)/如果按下了“不認(rèn)識(shí)”或“下一個(gè)”鍵 ,直接
31、跳到下一個(gè)單詞 result=0; /跳下一個(gè)時(shí)錯(cuò)誤燈滅 ERROR=0; hz_Num+; /測(cè)試下一個(gè)單詞 if(hz_Num=10) hz_Num=0; /最多設(shè)10個(gè)單詞 iword=0; Nword=0; en_disp(4,16,8,Asc," ",1); /在第5行,第17列開(kāi)始顯示 else if(KeyNumiword=3) /如果按下了“上一個(gè)”鍵 ,直接跳到上一個(gè)單詞 result=0; /跳下一個(gè)時(shí)錯(cuò)誤燈滅 ERROR=0; /測(cè)試下一個(gè)單詞 if(hz_Num=0) hz_Num=10; /最多設(shè)10個(gè)單詞 hz_Num-; iword=0; Nw
32、ord=0; en_disp(4,16,8,Asc," ",1); /在第5行,第17列開(kāi)始顯示 else if(Shz_Numiword=KeyNumiword)/輸入的字符與測(cè)試的標(biāo)準(zhǔn)字符比較 temp0=KeyNumiword; ERROR=0; /正確就標(biāo)志位置0 en_disp(4,Nword+16,1,Asc,temp,1); /在第5行,第17列開(kāi)始顯示 iword+; if(iword=8) iword=0; Nword=iword*8; verify=1; else temp0=KeyNumiword; ERROR=1;/錯(cuò)誤就置1 en_disp(4,N
33、word+16,1,Asc,temp,1); /在第5行,第17列開(kāi)始顯示 iword+; if(iword=8) iword=0; Nword=iword*8; result=ERROR|result;/0表示結(jié)果正確 ERR=!result; /錯(cuò)誤指示燈 4.4 軟件的仿真軟件的仿真使用protues環(huán)境,在畫(huà)好protues原理圖后,將keil環(huán)境下生成的目標(biāo)文件HEX文件載入protues中,即可進(jìn)行軟件仿真。因仿真軟件中沒(méi)有STC89C52元件 ,故可使用完全兼容的AT89C52單片機(jī)仿真。晶振選用12M此處加入HEX文件仿真的結(jié)果:輸入錯(cuò)誤時(shí)黃色LED報(bào)警:第五章 結(jié)語(yǔ)由于本人對(duì)
34、單片機(jī)的認(rèn)識(shí)有限,在設(shè)計(jì)過(guò)程中遇到不少困難。在設(shè)計(jì)程序方面出現(xiàn)不少問(wèn)題,所以用了比較簡(jiǎn)單的程序運(yùn)算。雖然花了幾個(gè)月的時(shí)間盡力把畢業(yè)做好,但由于本人能力的原因,整個(gè)系統(tǒng)做的并不理想,但是在整個(gè)設(shè)計(jì)的過(guò)程中我積累了不少的經(jīng)驗(yàn),學(xué)會(huì)一些系統(tǒng)的應(yīng)用。我一直認(rèn)為畢業(yè)設(shè)計(jì)重在過(guò)程。確實(shí)是這樣的。這個(gè)畢業(yè)設(shè)計(jì)的過(guò)程,其實(shí)也就是我不斷學(xué)習(xí)的過(guò)程。在這個(gè)過(guò)程中我學(xué)到了許多新的知識(shí),能力也提高了不少。這些收獲給我?guī)?lái)的喜悅遠(yuǎn)遠(yuǎn)超過(guò)了完成畢業(yè)設(shè)計(jì)時(shí)給我?guī)?lái)的喜悅。我相信,以后再做這些設(shè)計(jì)的時(shí)候一定還可以做得更好。參考文獻(xiàn)1 何立民主編. 單片機(jī)應(yīng)用文集. 北京:北京航空航天大學(xué)出版社,19942 王福瑞主編. 單片
35、微機(jī)測(cè)控系統(tǒng)設(shè)計(jì)大全. 北京:北京航空航天大學(xué)出版社,19993 夏繼強(qiáng) 沈德金主編. 單片機(jī)實(shí)驗(yàn)與實(shí)踐教程. 北京:北京航空航天大學(xué)出版社,20024 李朝青主編. PC機(jī)及單片機(jī)數(shù)據(jù)通信技術(shù). 北京:北京航空航天大學(xué)出版社,20015 馬忠梅主編. 單片機(jī)的c語(yǔ)言應(yīng)用程序設(shè)計(jì).北京:北京航空航天大學(xué)出版社,20036 沈美明、溫冬嬋主編.IBM-PC匯編語(yǔ)言程序設(shè)計(jì).北京:清華大學(xué)出版社20037 何立民主編. MCS-51系列單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì).北京:北京航空航天大學(xué)出版社20018 劉慶江 張曉光. 一種實(shí)用的集成芯片測(cè)試儀的設(shè)計(jì). 中國(guó)礦業(yè)大學(xué)信息與電氣工程學(xué)院, 200520附 錄
36、單片機(jī)單詞記憶測(cè)試器C程序源代碼/*/*單片機(jī)單詞測(cè)試程序/*設(shè)計(jì)一個(gè)以單片機(jī)為核心的單詞記憶測(cè)試器;/* 實(shí)現(xiàn)單詞的錄入(為使程序具有可演示性,單詞不少于10個(gè));/*單詞用按鍵控制依次在屏幕上顯示,按鍵選擇認(rèn)識(shí)還是不認(rèn)識(shí),/*也可以直接進(jìn)入下一個(gè)或者上一個(gè);/*單詞背完后給出正確率。/*/#define uchar unsigned char#define uint unsigned int#include <reg52.h>#include "asc.h" /ASCII字模表#include "12864.h"/12864液晶屏底層驅(qū)動(dòng)
37、程序bit ERROR=1; /輸入字符錯(cuò)誤標(biāo)志位bit result=0; /輸入結(jié)果對(duì)錯(cuò)的標(biāo)志位,為0是正確bit verify=1;/已按了確認(rèn)鍵后清零sbit ERR=P27;uchar correctNUM; /統(tǒng)計(jì)測(cè)試正確的單詞數(shù),即得分/*/* 存儲(chǔ)要測(cè)試的單詞,放在ROM中/*/uchar code S105= "tree ", /樹(shù) "rain ", /雨 "water", /水 "fly ", /飛 "go ", /去 "fish ", /魚(yú) "
38、snow ", /雪 "eat ", /吃 "rice ", /米 "ice ", /冰 ;uchar code SL10=4,4,5,3,2,4,4,3,4,3;/存儲(chǔ)各測(cè)試單詞的長(zhǎng)度uchar KeyNum8; /儲(chǔ)存輸入的單詞/*/* 存儲(chǔ)鍵盤的字母值 ,放在ROM中/*/uchar code tab165='a','b','c','d','e', 'f','g','h','i'
39、;,'j', 'k','l','m','n','o', 'p','q','r','s','t', 'u','v','w','x','y', 'z',1,2,3,4; /最后的 1234 鍵盤值為功能鍵, 1表示確定鍵,2表示不認(rèn)識(shí),3表示上一個(gè),4表示下一個(gè) /* 鍵盤掃描程序*/unsigned char kbscan()
40、/鍵盤掃描 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.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全高
41、電平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; /P0.7為第1列P1=0xFF; /P1全高電平 P3=0; /P3全低電平while(P1!=0xFF|P3!=0); /按鍵松開(kāi)后才返回值key=tab1hanglie;elsekey='_'return (key);/*/* 主函
42、數(shù)/* /* /*/void main(void) uchar hz_Num; /用于計(jì)當(dāng)前測(cè)試的是第幾個(gè)詞,第一個(gè)為0uchar temp8; /用于送液晶屏顯示的臨時(shí)變量uchar iword=0,Nword=0; /輸入單詞字母下一個(gè)計(jì)數(shù) LCD12864_init(); /LCD12864初始化ClearLCD();/清屏en_disp(2,1,11,Asc,"INPUT WORD:",1); /在第2行 第1列 en_disp(4,1,1,Asc,">",1); /在第5行,第2列開(kāi)始顯示en_disp(6,0,8,Asc,"c
43、orrect:",1); /在第7行,第1列開(kāi)始顯示en_disp(6,80,5,Asc,"00/10",1); /在第7行 第81列P1=0xFF; /P1全高電平 P3=0; /P3全低電平 while(1) KeyNumiword=kbscan(); /掃描鍵盤的輸入值,沒(méi)按下時(shí)返回下橫線 hz_disp(0,48,1,hz1+hz_Num*32,1); /在第1行,第49列開(kāi)始顯示測(cè)試的漢字 temp0=(hz_Num+1)/10+0x30; /將十進(jìn)制數(shù)轉(zhuǎn)換為ASCII字符 temp1=(hz_Num+1)%10+0x30; /算出測(cè)試漢字的序號(hào)的第一位
44、和第二位 en_disp(0,20,1,Asc,":",1); /在第1行 第21列 en_disp(0,4,2,Asc,temp,1); /在第1行 第5列顯示測(cè)試序號(hào) if(KeyNumiword!='_') /鍵盤有按鍵按下 if(KeyNumiword=1) /如果按下了確定鍵 if(SLhz_Num=iword&&verify) /輸入長(zhǎng)度等于測(cè)試單詞的長(zhǎng)度,則正確 ,verify表示按下了確認(rèn)后有效一次 correctNUM+=1; if(correctNUM>10) correctNUM=10; /最多10個(gè)正確的 ver
45、ify=0; /標(biāo)志位清零 hz_Num+; /測(cè)試下一個(gè)單詞 if(hz_Num=10) hz_Num=0; /最多設(shè)10個(gè)單詞 temp0=(correctNUM)/10+0x30; /將十進(jìn)制數(shù)轉(zhuǎn)換為ASCII字符 temp1=(correctNUM)%10+0x30; /算出測(cè)試漢字的序號(hào)的第一位和第二位 en_disp(6,80,2,Asc,temp,1); /在第7行 第81列 iword=0; Nword=0; en_disp(4,16,8,Asc," ",1); /在第5行,第17列開(kāi)始顯示 else if(KeyNumiword=2|KeyNumiword
46、=4)/如果按下了“不認(rèn)識(shí)”或“下一個(gè)”鍵 ,直接跳到下一個(gè)單詞 result=0; /跳下一個(gè)時(shí)錯(cuò)誤燈滅 ERROR=0; hz_Num+; /測(cè)試下一個(gè)單詞 if(hz_Num=10) hz_Num=0; /最多設(shè)10個(gè)單詞 iword=0; Nword=0; en_disp(4,16,8,Asc," ",1); /在第5行,第17列開(kāi)始顯示 else if(KeyNumiword=3) /如果按下了“上一個(gè)”鍵 ,直接跳到上一個(gè)單詞 result=0;/跳下一個(gè)時(shí)錯(cuò)誤燈滅 ERROR=0; /測(cè)試下一個(gè)單詞 if(hz_Num=0) hz_Num=10; /最多設(shè)10個(gè)單詞 hz_Num-; iword=0; Nword=0; en_disp(4,16,8,Asc," ",1); /在第4行,第16列開(kāi)始顯示 else if(Shz_Numiword=KeyNumiword) /輸入的字符與測(cè)試的標(biāo)準(zhǔn)字符比較 temp0=KeyNumiword; ERROR=0; /正確就標(biāo)志位置0 en_disp(4,Nword+16,1,Asc,temp,1); /在第5行,第17列開(kāi)始顯示 iword+; if(iword=8) iword=0; Nword=iword*8; verify=1
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 抹灰班勞務(wù)承包合同
- 房屋多人股權(quán)轉(zhuǎn)讓協(xié)議
- 自建房樓板加固施工方案
- 《高品質(zhì)住宅建設(shè)標(biāo)準(zhǔn)》編制說(shuō)明
- 五系專車專用后杠施工方案
- 鋁合金桁架腳手架施工方案
- 對(duì)開(kāi)原地區(qū)玉米螟發(fā)生原因及綠色防控對(duì)策的研究分析
- 湖北省宜昌市興山縣一中2024-2025學(xué)年高三下學(xué)期入學(xué)檢測(cè)語(yǔ)文試題(原卷版+解析版)
- 碳排放交易與碳市場(chǎng)機(jī)制的策略及實(shí)施路徑
- 安全生產(chǎn)責(zé)任體系重點(diǎn)崗位履職清單
- 四川省成都市2024年中考道德與法治真題試卷(含答案)
- 大學(xué)物理實(shí)驗(yàn)(緒論)學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 不合格產(chǎn)品處置管理制度
- 《現(xiàn)代家政導(dǎo)論》電子教案 2.2模塊二項(xiàng)目二家庭制度認(rèn)知
- 商務(wù)禮儀課件教學(xué)課件
- 2024年資格考試-良好農(nóng)業(yè)規(guī)范認(rèn)證檢查員考試近5年真題集錦(頻考類試題)帶答案
- 2024年普通高等學(xué)校招生全國(guó)統(tǒng)一考試·新課標(biāo)卷(生物)附試卷分析
- 2024中國(guó)軟件供應(yīng)鏈安全分析報(bào)告-2024.08-56正式版
- 優(yōu)化熱處理工藝的機(jī)器學(xué)習(xí)
- 2024年1月時(shí)政熱點(diǎn)題庫(kù)及答案
評(píng)論
0/150
提交評(píng)論