基于單片機(jī)的指紋考勤系統(tǒng)畢業(yè)論文_第1頁(yè)
已閱讀1頁(yè),還剩38頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、<p><b>  畢業(yè)設(shè)計(jì)(論文)</b></p><p><b>  摘 要</b></p><p>  單片機(jī)控制無(wú)疑是人們追求的目標(biāo)之一。單片機(jī)是一個(gè)單芯片形態(tài),面向控制對(duì)象的嵌入式應(yīng)用計(jì)算機(jī)系統(tǒng)。</p><p>  文章介紹的指紋考勤系統(tǒng)是基于單片機(jī)系統(tǒng)實(shí)現(xiàn)的。以單片機(jī)系統(tǒng)為核心的指紋考勤系統(tǒng)是一個(gè)

2、相對(duì)獨(dú)立的系統(tǒng),可以完成指紋信息的采集處理。通過(guò)串口與上位機(jī)實(shí)現(xiàn)通信,可以將指紋信息傳給VC電腦端,實(shí)現(xiàn)指紋信息的管理,以應(yīng)對(duì)實(shí)際應(yīng)用。</p><p>  本文基本實(shí)現(xiàn)了串口通信與上位機(jī)的指紋信息處理。在整個(gè)指紋考勤系統(tǒng)中利用VC++實(shí)現(xiàn)上位機(jī)編程,利用ODBC對(duì)信息作出合理的分類,該應(yīng)用程序能夠較好的實(shí)現(xiàn)上班時(shí)間的設(shè)定;能夠提供員工出入單位的情況記錄;能夠提供請(qǐng)假、加班和出差情況的記錄,并實(shí)現(xiàn)查詢、添加、修改

3、、刪除、瀏覽等處理功能;能夠擁有一定的安全性、協(xié)調(diào)性和完整性。</p><p>  關(guān)鍵字:指紋考勤;單片機(jī)系統(tǒng);FPS200;串口通信;上位機(jī)編程</p><p><b>  Abstract</b></p><p>  SCM is undoubtedly one of the goals that people pursue. The m

4、icrocontroller is a single-chip form, the computer system of the control object-oriented embedded applications.</p><p>  The article describes the fingerprint attendance system is implemented based on the SC

5、M system. SCM system as the core fingerprint attendance system is a relatively independent system, fingerprint information acquisition and processing can be completed. Communication through the serial port with the host

6、computer, the fingerprint information can be passed to the VC PC fingerprint information management to cope with the practical application.</p><p>  The basic serial communication between PC and the fingerpr

7、int information processing. Entire fingerprint attendance system using VC + + host computer programming, using ODBC to make a reasonable classification of the information, the application can better achieve the setting o

8、f working hours; to provide employees access units recorded; to provide leave, overtime and travel records of query, add, modify, delete, browse and other processing functions; to have a certain security, coordination an

9、d </p><p>  Keywords: fingerprint time and attendance; SCM system; FPS200; serial communication; host computer programming</p><p><b>  目 錄</b></p><p>  第一章 系統(tǒng)總體設(shè)計(jì)方案1&l

10、t;/p><p>  第二章 指紋識(shí)別系統(tǒng)的硬件設(shè)計(jì)2</p><p>  2.1系統(tǒng)硬件的總體描述2</p><p>  2.2單片機(jī)最小系統(tǒng)2</p><p>  2.2.1 AT89S51單片機(jī)的基本組成2</p><p>  2.2.2 AT89S51引腳功能4</p><p> 

11、 2.2.3 AT89S51的CPU5</p><p>  2.2.4 AT89S51的存儲(chǔ)器結(jié)構(gòu)5</p><p>  2.2.5 74LS373芯片結(jié)構(gòu)介紹6</p><p>  2.3指紋傳感器FPS2006</p><p>  2.4.1串行通信接口8</p><p>  2.4.2 串行口的特殊功能

12、控制寄存器8</p><p>  2.4.3串行口的工作方式9</p><p>  2.4.4波特率的設(shè)置10</p><p>  2.5常用串行通信接口標(biāo)準(zhǔn)11</p><p>  2.5.1 RS-232C接口11</p><p>  2.5.2 RS-232C的EIA電平和TTL電平轉(zhuǎn)換12<

13、;/p><p>  2.6基于單片機(jī)的指紋采集系統(tǒng)的基本結(jié)構(gòu)14</p><p>  第三章 指紋識(shí)別系統(tǒng)軟件實(shí)現(xiàn)部分15</p><p>  3.1 控件MSComm串口編程15</p><p>  3.2控件MSComm串口編程 實(shí)例15</p><p><b>  附錄24</b&

14、gt;</p><p><b>  結(jié)束語(yǔ)41</b></p><p><b>  致謝42</b></p><p><b>  參考文獻(xiàn)43</b></p><p>  第一章 系統(tǒng)總體設(shè)計(jì)方案</p><p>  硬件平臺(tái)大致可以分為5個(gè)部分

15、:成像系統(tǒng)(傳感器FPS200)、核心部分AT89S51單片機(jī)、RAM、EEPROM等器件。在工作過(guò)程中,指紋經(jīng)傳感器采集后,由傳感器直接轉(zhuǎn)成RGB格式,并且數(shù)據(jù)傳輸?shù)組CU。MCU需要執(zhí)行大量的模式識(shí)別和圖像處理相關(guān)計(jì)算。固化的程序存儲(chǔ)在EEPROM中,這些指令控制了整個(gè)指紋識(shí)別系統(tǒng)的工作流程。RAM為內(nèi)存,存儲(chǔ)臨時(shí)數(shù)據(jù)。構(gòu)成數(shù)據(jù)通道。文章對(duì)每部分硬件將分類作出介紹,如單片機(jī)的結(jié)構(gòu)與連接方法,外設(shè)寄存器選取,串口通信的實(shí)現(xiàn)等。而對(duì)于整

16、個(gè)硬件部分單獨(dú)拿出來(lái)就是一個(gè)完整的考勤模塊,實(shí)現(xiàn)指紋信息采集與處理。在不需上位機(jī)參與下也可實(shí)現(xiàn)指紋采集功能。</p><p>  在系統(tǒng)的軟件實(shí)現(xiàn)方面介紹了單片機(jī)系統(tǒng)與PC端實(shí)現(xiàn)通訊的過(guò)程,可以完成指紋信息的傳輸,在上位機(jī)建立數(shù)據(jù)庫(kù),通過(guò)VC編程實(shí)現(xiàn)指紋信息的存儲(chǔ)。最終達(dá)到實(shí)際的應(yīng)用目的。當(dāng)然,對(duì)于單片機(jī)所處理的指紋算法方面的程序,沒(méi)有做出學(xué)習(xí)研究。</p><p>  第二章 指紋識(shí)別系

17、統(tǒng)的硬件設(shè)計(jì)</p><p>  2.1系統(tǒng)硬件的總體描述</p><p>  基于單片機(jī)的指紋識(shí)別系統(tǒng)是由AT89S51單片機(jī)、62128片外RAM、EEPROM芯片、FPS200等構(gòu)成,在無(wú)需上位機(jī)的管理下,具有指紋錄入、圖像處理、指紋對(duì)比、存儲(chǔ)信息功能。是一個(gè)相對(duì)獨(dú)立的指紋識(shí)別系統(tǒng)、一個(gè)獨(dú)立的外部設(shè)備。</p><p>  過(guò)程中,指紋傳感器FPS200采集指

18、紋信息,經(jīng)過(guò)串口傳遞給單片機(jī)接收命令,單片機(jī)同意接收信息后,指紋傳感器將轉(zhuǎn)換的數(shù)據(jù)傳到單片機(jī),單片機(jī)通過(guò)存儲(chǔ)在EEPROM中的固化程序執(zhí)行大量模式識(shí)別的相關(guān)計(jì)算,當(dāng)用戶指紋被確認(rèn),單片機(jī)將命令執(zhí)行機(jī)構(gòu)動(dòng)作,開關(guān)開。</p><p>  指紋系統(tǒng)主要包括:?jiǎn)纹瑱C(jī)最小系統(tǒng)、指紋采集部分、串口通信部分、開關(guān)按鈕、供電系統(tǒng)組成。本章分別做出介紹,最后給出總的電路設(shè)計(jì)圖。</p><p>  2.2

19、單片機(jī)最小系統(tǒng)</p><p>  單片機(jī)最小系統(tǒng)以AT89S51單片機(jī)位核心,連同外設(shè)的62128RAM芯片和EEPROM芯片等組成。此系統(tǒng)能夠?qū)崿F(xiàn)指紋算法的處理,串行通信的設(shè)定,數(shù)據(jù)處理方面內(nèi)容。</p><p>  2.2.1 AT89S51單片機(jī)的基本組成</p><p>  選取單片機(jī)AT89S51主要原因是功耗低、可通過(guò)軟件設(shè)置省電模式??臻e模式下,C

20、PU暫停工作,而RAM定時(shí)計(jì)數(shù)器,串行口,外中斷系統(tǒng)可繼續(xù)工作,128B內(nèi)部RAM,能滿足設(shè)計(jì)要求。</p><p>  AT89S51S是一個(gè)低功耗、高性能CMOS8位單片機(jī),片內(nèi)含4KB ISP(In-system programmable)的可反復(fù)擦寫1000次的Flash片內(nèi)程序存儲(chǔ)器,器件采用Atmel公司的高密度、非易失性 存儲(chǔ)技術(shù)制造,兼容標(biāo)準(zhǔn)MCS-51指令系統(tǒng)及80C51引腳結(jié)構(gòu)。

21、 </p><p>  AT89S51 單片機(jī)的基本組成如圖1.1所示。從AT89S51單片機(jī)的結(jié)構(gòu)框圖可以看到,該芯片上集成了一個(gè)微型計(jì)算機(jī),它包括如下幾個(gè)部分:</p><p> ?。?)8位微處理器(CPU)</p>

22、;<p> ?。?)數(shù)據(jù)存儲(chǔ)器(128B RAM);</p><p> ?。?)程序存儲(chǔ)器(4KB Flash ROM);</p><p> ?。?)4個(gè)8位可編程并行I/O口(P0口、P1口、P2口、P3口);</p><p> ?。?)一個(gè)全雙工的異步串行口;</p><p>  (6)2個(gè)可編程的16位定時(shí)器/計(jì)數(shù)器;&l

23、t;/p><p> ?。?)一個(gè)看門狗定時(shí)器;</p><p> ?。?)中斷系統(tǒng)具有五個(gè)中斷源、5個(gè)中斷向量;</p><p> ?。?)特殊功能寄存器(SFR)26個(gè);</p><p>  (10)低功耗模式有空閑模式和掉電模式,具有掉電模式下的中斷恢復(fù)模式;</p><p>  (11)3個(gè)程序加密鎖存位。</

24、p><p>  其基本結(jié)構(gòu)圖如1.1</p><p>  圖2-1 AT89S51單片機(jī)的基本結(jié)構(gòu)示意圖</p><p>  2.2.2 AT89S51引腳功能</p><p>  P0口是8位的漏極開路的雙向I/O口。當(dāng)外擴(kuò)存儲(chǔ)器及I/O接口芯片時(shí),P0口作為低8位地址總線及數(shù)據(jù)總線的分時(shí)復(fù)用端口。另外,P0口也可用作通用的I/O口,需加上拉

25、電阻,這時(shí)為準(zhǔn)雙向口。作為通用I/O輸入,應(yīng)先向端口寫入1??沈?qū)動(dòng)8個(gè)LS型TTL負(fù)載。</p><p>  P1口是8位的準(zhǔn)雙向I/O口,具有內(nèi)部上拉電阻。準(zhǔn)雙向I/O口,作為通用I/O輸入時(shí),應(yīng)先向端口鎖存器寫1。P1口可驅(qū)動(dòng)4個(gè)LS型TTL負(fù)載。</p><p>  P2口是準(zhǔn)雙向的8位I/O口,具有內(nèi)部上拉電阻,當(dāng)AT89S51擴(kuò)展外部存儲(chǔ)器及I/O口時(shí),P2口作為高8位地址總線用

26、,輸出高8位地址。P2口也可作為普通的I/O口使用。當(dāng)作為通用I/O輸入時(shí), 應(yīng)先向端口輸出鎖存器寫1。P2口可驅(qū)動(dòng)4個(gè)LS型TTL負(fù)載。</p><p>  圖2-2 AT89S51管腳圖</p><p>  P3口也是準(zhǔn)雙向的8位I/O口,具有內(nèi)部上拉電阻。作為準(zhǔn)向口,其功能和前兩個(gè)相似。另外P3口還有重要的第二功能。</p><p>  2.2.3 AT89

27、S51的CPU</p><p>  AT89S51的CPU由運(yùn)算器和控制器組成。其中,運(yùn)算器對(duì)操作數(shù)進(jìn)行算術(shù)、邏輯和位操作運(yùn)算。主要包括算術(shù)邏輯運(yùn)算單元ALU、累加器A、位處理器、程序狀態(tài)字寄存器PSW及兩個(gè)暫存器等。而控制器的任務(wù)是識(shí)別指令,并根據(jù)指令的性質(zhì)控制單片機(jī)各功能部件,從而保證單片機(jī)各部分能自動(dòng)協(xié)調(diào)地工作??刂破靼ǎ撼绦蛴?jì)數(shù)器、指令寄存器、指令譯碼器、定時(shí)及控制邏輯電路等。</p>&

28、lt;p>  2.2.4 AT89S51的存儲(chǔ)器結(jié)構(gòu)</p><p>  存儲(chǔ)器的結(jié)構(gòu)特點(diǎn)之一是將程序存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器分開(哈佛結(jié)構(gòu)),并有各自的訪問(wèn)指令。</p><p>  存儲(chǔ)器的空間可以分為以下四類:</p><p>  1.程序存儲(chǔ)器空間。分為片內(nèi)和片外兩部分。片內(nèi)4KB Flash ,編程和擦除完全是電氣實(shí)現(xiàn)。可用通用編程器對(duì)其編程,也可在線編程

29、。當(dāng)片內(nèi)4KB Flash 存儲(chǔ)器不夠用時(shí),可片外擴(kuò)展,最多可擴(kuò)展至64KB程序存儲(chǔ)器。存放程序和表格之類的固定常數(shù)。片內(nèi)為4KB的 Flash ,地址為0000H~0FFFH。16位地址線,可外擴(kuò)的程序存儲(chǔ)器空間最大為64KB,地址為0000H~FFFFH。在使用時(shí)訪問(wèn)片內(nèi)的還是片外的程序存儲(chǔ)器,由EA引腳電平?jīng)Q定。當(dāng)EA=1時(shí)CPU從片內(nèi)0000H開始取指令,當(dāng)PC值沒(méi)有超出0FFFH時(shí),只訪問(wèn)片內(nèi)Flash 存儲(chǔ)器,當(dāng)PC值超出0

30、FFFH自動(dòng)轉(zhuǎn)向讀片外程序存儲(chǔ)器空間1000H~FFFFH 內(nèi)的程序。 =0時(shí),只能執(zhí)行片外程序存儲(chǔ)器(0000H~FFFFH)中的程序。不理會(huì)片內(nèi)4KB Flash 存儲(chǔ)器。在本系統(tǒng)中選用的片外EEPROM是SST29EE010。</p><p>  2.數(shù)據(jù)存儲(chǔ)器空間。也分片內(nèi)與片外兩部分。片內(nèi)有128 B RAM(52子系列為256B)。片內(nèi)RAM 不夠用時(shí),在片外可擴(kuò)展至64KB RAM 。片內(nèi)RAM與

31、片外RAM兩個(gè)空間是相互獨(dú)立的,片內(nèi)RAM與片外RAM的低128B的地址是相同的,但由于使用的是不同的訪問(wèn)指令,所以不會(huì)發(fā)生沖突。</p><p><b>  3.特殊功能寄存器</b></p><p><b>  4.位地址空間</b></p><p>  2.2.5 74LS373芯片結(jié)構(gòu)介紹</p>&

32、lt;p>  本系統(tǒng)在擴(kuò)展外部存儲(chǔ)器時(shí)選用77LS373芯片實(shí)現(xiàn)外部存儲(chǔ)器的擴(kuò)展。因此,文章在這里介紹下74LS373芯片。74ls373是常用的地址鎖存器芯片,它實(shí)質(zhì)是一個(gè)是帶三態(tài)緩沖輸出的8D觸發(fā)器。在MCS-51單片機(jī)系統(tǒng)中,常采用74LS373作為地址鎖存器使用,其連接方法如上圖所示。其中輸入端1D~8D接至單片機(jī)的P0口,輸出端提供的是低8位地址,C端接至單片機(jī)的地址鎖存允許信號(hào)ALE。輸出允許端OE接地。</p&

33、gt;<p>  其中,1D~8D為8個(gè)輸入端。1Q~8Q為8個(gè)輸出端。C是數(shù)據(jù)鎖存控制端,接入單片機(jī)的地址鎖存允許信號(hào)ALE。</p><p>  圖2-3 74L373外接RAM和ROM的連接方法</p><p>  2.3指紋傳感器FPS200</p><p>  FPS200是一種非光學(xué)的CMOS器件,其傳感區(qū)為1.28cm×1.50

34、cm,256×300傳感陣列,分辨率為500dpi,工作電壓為3~5.5V,內(nèi)置8位FLASH模數(shù)轉(zhuǎn)換器(ADC)。三種總線接口為8位微處理器總線接口、內(nèi)置USB全速接口和內(nèi)置串行接口。由MODE0和MODE1決定所處的接口模式。指紋可自動(dòng)檢測(cè),并可直接與8位微處理器接口。</p><p>  FPS200基于電容器充放電原理。傳感器陣列的沒(méi)點(diǎn)都是一個(gè)金屬電極,充當(dāng)電容器的一極,按照手指頭上對(duì)應(yīng)的點(diǎn)作為

35、令一極。傳感面形成兩極之間的介電層。由于指紋的脊和谷,導(dǎo)致各點(diǎn)的電容值不同,這個(gè)電容值陣列就形成一幅指紋圖形。相關(guān)公式C=</p><p>  FPS200是面向行的器件,每次可獲得一行圖像。每列接有兩個(gè)采樣保持(S/H)電路。當(dāng)選定一行后,對(duì)此行的所有電容充電至VDD。充電結(jié)束時(shí),第一組采樣保持電路將保存該電壓值。接著,該行電容將被放電,經(jīng)過(guò)一段放電時(shí)間,令一組采樣保持電路將保存剩余電壓值。那么,兩組S/H電路

36、電壓值之差正比于電容值,將其數(shù)字化就可表示該行的指紋圖像。采集時(shí)的行,放電時(shí)間,電流等寫入FPS200里的相關(guān)寄存器,結(jié)合A/D轉(zhuǎn)換的灰度值,以及自動(dòng)換行等設(shè)置實(shí)現(xiàn)指紋圖像的獲取。</p><p>  設(shè)計(jì)過(guò)程中以單片機(jī)系統(tǒng)作為控制核心。指紋經(jīng)傳感器采集后,由傳感器直接轉(zhuǎn)成RGB格式,并且數(shù)據(jù)傳輸?shù)組CU。MCU需要執(zhí)行大量的模式識(shí)別和圖像處理相關(guān)計(jì)算。固化的程序存儲(chǔ)在EEPROM中,這些指令控制了整個(gè)指紋識(shí)別系

37、統(tǒng)的工作流程。RAM為內(nèi)存存儲(chǔ)臨時(shí)數(shù)據(jù)。構(gòu)成數(shù)據(jù)通道。</p><p>  圖2-4 基于單片機(jī)的考勤硬件圖</p><p>  FPS200具有自動(dòng)指紋檢測(cè)功能。當(dāng)手指按到傳感器上,F(xiàn)PS200便會(huì)發(fā)出中斷信號(hào)給MCU,MCU查詢到中斷,開始采集指紋數(shù)據(jù)并將數(shù)據(jù)傳給PC機(jī)。在后面軟件部分文章介紹串口通信部分,主要是上位機(jī)編程。而對(duì)下位機(jī),指紋提取的程序不做介紹。</p>&

38、lt;p>  圖2-5 FPS200引腳與單片機(jī)管腳連接圖實(shí)例</p><p><b>  2.4串行通信</b></p><p>  89S51單片機(jī)有一個(gè)全雙工異步串行I\O口,占用P3.0(串行數(shù)據(jù)接收端RXD)和P3.1(串行數(shù)據(jù)發(fā)送端TXD)兩個(gè)引腳,是P3口的第二個(gè)功能。該接口電路不僅可以同時(shí)進(jìn)行數(shù)據(jù)的接收和發(fā)送,也可以作為一個(gè)同步移位寄存器使用。

39、 </p><p>  2.4.1串行通信接口</p><p>  串行口由發(fā)送控制器、接受控制器、波特率輸入管理和發(fā)送/接收緩沖器SBUF組成。通常定時(shí)器T1作為串行口波特率發(fā)生器使用。串行口的通信操作視為累加器A與發(fā)送/接受緩沖器SBUF之間的數(shù)據(jù)傳送操作。</p><p>  串行口的工作過(guò)程可概括如下。</p><p>  用戶通

40、過(guò)串行口的初始化操作規(guī)定串行口的工作方式。</p><p>  串行口自動(dòng)完成發(fā)送和接受。</p><p>  ①發(fā)送:將待發(fā)送的數(shù)據(jù)由A送入SBUF(以指令“MOV SBUF,A”實(shí)現(xiàn),在發(fā)送控制器的控制下組成幀結(jié)構(gòu),并自動(dòng)以串行方式發(fā)送到TXD端。在發(fā)送完畢后自動(dòng)將T1置1,向CPU申請(qǐng)中斷。</p><p> ?、诮邮埽合扔弥噶睿⊿ETB REN)置位接受允許

41、位才能開始串行接受操作。在接受控制器的控制下,通過(guò)移位寄存器將串行數(shù)據(jù)送入SBUF中。在接收完畢后自動(dòng)將RI置1,向CPU申請(qǐng)中斷。</p><p>  2.4.2 串行口的特殊功能控制寄存器</p><p>  與串行口有關(guān)的特殊功能寄存器有SBUF、SCON、PCON,與串行口中斷有關(guān)的特殊功能寄存器有IE、IP。</p><p>  串口的發(fā)送/接收緩沖器SB

42、UF</p><p>  SBUF是兩個(gè)在物理上獨(dú)立的接收、發(fā)送緩沖器,它們占用同一字地址99H,可同時(shí)發(fā)送、接收數(shù)據(jù)。CPU能通過(guò)對(duì)SBUF的讀/寫指令來(lái)區(qū)別是對(duì)接收緩沖器操作還是對(duì)發(fā)送緩沖器操作,不會(huì)產(chǎn)生錯(cuò)誤。</p><p>  串行口控制寄存器SCON</p><p>  SCON是可以按位尋址的8位控制寄存器,用于串行口的方式設(shè)定和數(shù)據(jù)傳送控制,地址為98

43、H。SCON各位的定義和功能如下:</p><p> ?。?)SM0、SM1:串行口工作方式選擇位。</p><p>  SM2:多機(jī)通信控制位。</p><p>  REN:串行接收允許位。由軟件對(duì)其置一或清零。軟件置一時(shí),串行口允許接收,清零后則禁止接收。</p><p>  TB8:在方式2和方式3中時(shí)發(fā)送的第九位數(shù)據(jù)。</p&g

44、t;<p>  RB8:在方式2和方式3中是接收的第9位數(shù)據(jù)。</p><p>  TI:發(fā)送中斷標(biāo)志位,發(fā)送結(jié)束時(shí)由硬件置位。該位必須用軟件清零。</p><p>  RI:接收中斷標(biāo)志位,接收結(jié)束時(shí)由硬件置位。該位必須用軟件清零。</p><p>  3.電源控制寄存器PCON</p><p>  串行口借用了電源控制寄存器

45、PCON的最高位。PCON是8位寄存器,字節(jié)地址為87H,不可進(jìn)行位尋址。它的低四位全部用于單片機(jī)的電源控制,只有最高位SMOD位用于串行口波特率系數(shù)的控制。當(dāng)SMOD=1時(shí),方式1、2、3的波特率加倍,否則不加倍。PCON的格式如下:</p><p>  2.4.3串行口的工作方式</p><p>  89S51單片機(jī)串行口有4種工作方式,用特殊功能寄存器SM0、SM1兩位進(jìn)行設(shè)定,如下

46、表所示</p><p>  其中,定時(shí)器T1溢出率=fosc/[12×(12×(-N))](K=13、16、8分別對(duì)應(yīng)于方式0、1、2)。</p><p><b>  1.方式0</b></p><p><b>  1)特點(diǎn)。</b></p><p> ?、儆糜诖蠭/ O(口擴(kuò)

47、展,有固定的波特率,為fosc/12。</p><p> ?、谕桨l(fā)送/接收功能,由TXD提供移位脈沖,RXD用作數(shù)據(jù)的輸入/輸出通道。</p><p> ?、郯l(fā)送/接收8位數(shù)據(jù),低位在前高位在后。</p><p><b> ?。?)發(fā)送操作。</b></p><p>  由指令“MOV SBUF,A”啟動(dòng)發(fā)送操作,發(fā)送

48、時(shí)由TXD輸出移位脈沖,RXD發(fā)送SBUF中的數(shù)據(jù)。發(fā)送完8位數(shù)據(jù)后,TI自動(dòng)置1,請(qǐng)求中斷。要繼續(xù)發(fā)送時(shí),T1必須由指令清零(CLR TI)。</p><p><b>  (3)接受操作。</b></p><p>  在RI=0的前提下,用指令置REN=1,可以啟動(dòng)一陣數(shù)據(jù)接收。同樣由TXD輸出移位脈沖,由RXD接收串行數(shù)據(jù)。接收完一幀后RI自動(dòng)置1,請(qǐng)求中斷。要繼

49、續(xù)接收時(shí),要用指令清除RI。</p><p><b>  2.方式1</b></p><p><b> ?。?)特點(diǎn)。</b></p><p>  ①8位異步串行通信UART接口。</p><p> ?、趲Y(jié)構(gòu)為10位,包括起始位0、8位數(shù)據(jù)位和1位停止位。</p><p>

50、 ?、鄄ㄌ芈视绍浖O(shè)置,由T1的溢出率決定。</p><p><b> ?。?)發(fā)送操作。</b></p><p>  由指令“MOV SBUF,A”啟動(dòng)A中的數(shù)據(jù)從TXD端異步發(fā)送。發(fā)送完一幀數(shù)據(jù)后,TI自動(dòng)置1,請(qǐng)求中斷。要繼續(xù)發(fā)送時(shí),TI必須由指令清零(CLR TI)。</p><p><b> ?。?)接收操作。</b&

51、gt;</p><p>  在RI=0的前提下,用指令置REN=1,啟動(dòng)一幀數(shù)據(jù)的接收。串行口采樣RXD,當(dāng)采用到由1至0的跳變時(shí),表明接收到穿行數(shù)據(jù)的起始位,開始接收一陣數(shù)據(jù),直至停止位到來(lái)時(shí),把停止位送到RB8中,此RI自動(dòng)置1,請(qǐng)求中斷并通知CPU從工作出發(fā)SBUF中取走已接收的數(shù)據(jù)。</p><p><b>  3.方式2和方式3</b></p>

52、<p>  方式2和方式3具有多機(jī)通信功能。兩種方式除了波特率設(shè)置不同之處外,其余功能完全相同。</p><p>  2.4.4波特率的設(shè)置</p><p>  串行通信的波特率取決于串行口的工作方式。</p><p><b>  1.方式0的波特率</b></p><p>  方式0的波特率是固定的,為fo

53、sc/12.</p><p><b>  2.方式2的波特率</b></p><p>  方式2的波特率有兩種,取決于SMOD(PCON.7),SMOD=1時(shí)為fosc/32;SMOD=0時(shí)為fosc/64。由于PCON無(wú)位尋址功能,通常用以下指令清零或置1:ANL PCON,#7FH</p><p>  ORL PCON#80H<

54、/p><p>  3.方式1和方式3的波特率</p><p>  這兩種方式下波特率取決于定時(shí)器/計(jì)數(shù)器1的溢出率及SMOD,并有以下關(guān)系式: 波特率=×T1溢出率/32</p><p>  式中T1溢出率/T1溢出周期,而溢出周期即為T1定時(shí)時(shí)間。</p><p><b>  4.應(yīng)用</b></p>

55、<p>  在應(yīng)用時(shí)往往根據(jù)所需要波特率,先選取SMOD,計(jì)算出T1的溢出率,然后計(jì)算出T1的時(shí)間常數(shù)。T1可以工作在方式0、方式1和方式2。方式2為自動(dòng)裝入時(shí)間常數(shù)的8位定時(shí)器,使用時(shí)只需進(jìn)行初始化,不需在中斷服務(wù)程序中重裝時(shí)間常數(shù),是一種常用方式。</p><p>  2.5常用串行通信接口標(biāo)準(zhǔn) </p><p>  常用的串行通信接口標(biāo)準(zhǔn)有RS-232C、RS-422

56、A和RS-485等。文章將對(duì)RS-232接口作出介紹。</p><p>  2.5.1 RS-232C接口</p><p>  RS-232接口實(shí)際上是一種串行通信標(biāo)準(zhǔn),是由美國(guó)EIA(電子工業(yè)協(xié)會(huì))和Bell公司一起開發(fā)的通信協(xié)議,它對(duì)信號(hào)的功能、電器特性、連接器等都作了明確的規(guī)定,RS-232C是廣泛應(yīng)用的一個(gè)版本。RS-232C采用的是EIA電平,采用反邏輯,其規(guī)定如下:<

57、/p><p>  *邏輯1(MARK)時(shí),電壓為-3~-15V;</p><p>  *邏輯0(SPACE)時(shí),電壓為+3~+15V;</p><p>  RS-232C是通過(guò)提高傳輸電壓來(lái)延長(zhǎng)傳輸距離的,一般可以達(dá)到15m。 RS-232C有25針的D型連接器和9針的D型連接器,目前PC機(jī)都是采用9針的D型連接器。9針D型連接器的信號(hào)及引腳如下圖所示。</p&g

58、t;<p>  圖2-6 RS232管腳結(jié)構(gòu)</p><p>  RS-232C除通過(guò)它傳送數(shù)據(jù)(TXD和RXD)外,還對(duì)雙方的互傳起協(xié)調(diào)作用,這就是握手信號(hào),9根信號(hào)分為兩類:</p><p><b>  基本的數(shù)據(jù)傳送引腳</b></p><p>  TXD(Transmitted Date):數(shù)據(jù)發(fā)送引腳。串行數(shù)據(jù)從該引腳出

59、發(fā)。</p><p>  RXD(Received Date):數(shù)據(jù)接收引腳。串行數(shù)據(jù)由此輸入。</p><p>  GND(Ground):信號(hào)地線。</p><p>  在串行通信中最簡(jiǎn)單的通信只需連接這三根線。在PC機(jī)PC機(jī)、PC機(jī)與單片機(jī)、單片機(jī)與單片機(jī)間,多采用這種連接方式。</p><p><b>  握手信號(hào)</

60、b></p><p>  RTS(request to send):請(qǐng)求發(fā)送信號(hào)。輸出信號(hào)。</p><p>  CTS(clear to send):清除傳送。它是對(duì)RTS的響應(yīng)信號(hào),輸入信號(hào)。</p><p>  DCD(date carrier detection):數(shù)據(jù)載波檢測(cè)。輸入信號(hào)。</p><p>  DSR(date

61、 set ready):數(shù)據(jù)通信準(zhǔn)備就緒。輸入信號(hào)。</p><p>  DTR(data terminal ready):數(shù)據(jù)終端就緒。輸出信號(hào),表面計(jì)算機(jī)已做好接受準(zhǔn)備。</p><p>  2.5.2 RS-232C的EIA電平和TTL電平轉(zhuǎn)換</p><p>  RS-232的EIA標(biāo)準(zhǔn)是以正負(fù)電壓來(lái)表示邏輯狀態(tài),與TTL以高低電平表示邏輯狀態(tài)的規(guī)定不同。

62、所以,為了能夠同計(jì)算機(jī)接口或終端的TTL器件連接,必須在EIA電平與TTL電平之間進(jìn)行電平變換。目前較廣泛地采用集成電路轉(zhuǎn)換器件MAX232可實(shí)現(xiàn)兩者的雙向電平轉(zhuǎn)換。</p><p>  單片機(jī)與傳感器或單片機(jī)與計(jì)算機(jī)之間直接使用RS-232C通訊標(biāo)準(zhǔn)進(jìn)行串行通訊時(shí),信號(hào)在通訊過(guò)程之中可能會(huì)被全部或部分使用。最簡(jiǎn)單的通訊僅需TXD及RXD及SG最基本的信號(hào)線完成,其他的握手信號(hào)可以做適當(dāng)處理或直接懸空。</

63、p><p>  在設(shè)計(jì)單片機(jī)和PC機(jī)的硬件電路時(shí),使用MAX232芯片實(shí)現(xiàn)TTL電平和PC機(jī)RS-232電平的轉(zhuǎn)換,使用該芯片使電路外圍電路簡(jiǎn)單,工作可靠[9]。</p><p>  MAX232是一種雙組驅(qū)動(dòng)器/接收器,片內(nèi)含有一個(gè)電容性電壓發(fā)生器以便在單5V電源供電時(shí)提供EIA/T工A-232-E電平。每個(gè)接收器將EIA/TIA-232-E電平輸入轉(zhuǎn)換為5V TTL/CMOS電平。這些接收

64、器具有1. 3V的典型門限值及0. 5V的典型遲滯,而且可以接收士30V的輸入。每個(gè)驅(qū)動(dòng)器將TTL/CMOS輸入電平轉(zhuǎn)換為EIA/TIA-232-E電平。工作溫度范圍為0℃至70℃。</p><p>  MAX232芯片的性能特點(diǎn)如下:</p><p>  圖2-7 MAX232管腳結(jié)構(gòu)</p><p>  1.單5V電源工作;</p><p&g

65、t;  2.兩個(gè)驅(qū)動(dòng)器及兩個(gè)接收器;</p><p>  3.士30v輸入電平;</p><p>  4.低電源電流:典型值是8mA;</p><p>  5.符合甚至優(yōu)于ANSI標(biāo)準(zhǔn)EIA/TIA-232-E及工TU推薦標(biāo)準(zhǔn)V. 28MAX232引腳中1~6腳為電容端,7~14腳包含4路RS232/TTL電平轉(zhuǎn)換器。</p><p>  圖

66、2-8 MAX232工作電路圖</p><p>  2.6基于單片機(jī)的指紋采集系統(tǒng)的基本結(jié)構(gòu)</p><p>  本系統(tǒng)采用AT89S51作為指紋識(shí)別系統(tǒng)的核心處理器,使用單片機(jī)內(nèi)部的4K程序存儲(chǔ)器,接+5V電源。。</p><p>  復(fù)位電路則采用簡(jiǎn)單RC復(fù)位電路,同時(shí)又可與一些需要復(fù)位的外圍電路相連,達(dá)到復(fù)位與單片機(jī)同步。</p><p&g

67、t;  /Vpp為訪問(wèn)內(nèi)部或外部程序存儲(chǔ)器的選擇信號(hào).由于AT89S51單片機(jī)有4K的內(nèi)部程序存儲(chǔ)器,又外接了128Kx8的EEPROM存儲(chǔ)器,故該引腳必須接+5V高電平.為外部程序存儲(chǔ)器讀選通控制信號(hào).此電路中無(wú)擴(kuò)展程序存儲(chǔ)器.故該腳懸空.</p><p>  串口通信接口設(shè)計(jì)采用MAX232實(shí)現(xiàn)TTL與RS-232的轉(zhuǎn)換,實(shí)現(xiàn)與計(jì)算機(jī)通信。</p><p>  下圖為總的基于單片機(jī)的指

68、紋識(shí)別系統(tǒng)的硬件電路圖。</p><p>  圖2-9 基于單片機(jī)的考勤系統(tǒng)的電路原理圖</p><p>  第三章 指紋識(shí)別系統(tǒng)軟件實(shí)現(xiàn)部分</p><p>  軟件部分總的設(shè)計(jì)思路是:先把用戶的指紋信息存入數(shù)組,然后通過(guò)單片機(jī)串口發(fā)送數(shù)據(jù),VC電腦端接收到數(shù)據(jù)后把相應(yīng)的數(shù)據(jù)存入數(shù)據(jù)庫(kù)中。因?yàn)樵谙挛粰C(jī)部分需要處理大量關(guān)于指紋的模式識(shí)別算法,所以沒(méi)有研究,文章著重從

69、上位機(jī)的串口通信,簡(jiǎn)單數(shù)據(jù)庫(kù)存儲(chǔ)方面來(lái)介紹。文章運(yùn)用MFC Windows程序設(shè)計(jì)實(shí)現(xiàn),介紹了一個(gè)比較好用的串口控件MCSomm,并做了簡(jiǎn)單數(shù)據(jù)庫(kù)。</p><p>  3.1 控件MSComm串口編程 </p><p>  本系統(tǒng)采用MSComm控件來(lái)實(shí)現(xiàn)上位機(jī)的串口通信過(guò)程。MSComm控件通過(guò)串行端口傳輸和接收數(shù)據(jù),為應(yīng)用程序提供串行通信功能。選用這個(gè)控件的原因是在串口編

70、程時(shí)比較方便,不必花時(shí)間去了解較為復(fù)雜的API函數(shù)。當(dāng)然,也要知道一點(diǎn):那就是這個(gè)控件通信功能的實(shí)現(xiàn),還是間接調(diào)用Windows API編程的結(jié)果,只是先通過(guò)Comm.drv解釋,然后再傳遞給設(shè)備驅(qū)動(dòng)程序進(jìn)行的。</p><p>  它提供了一系列標(biāo)準(zhǔn)通信命令的使用接口,利用它可以建立與串口的連接,發(fā)出命令,交換數(shù)據(jù)以及監(jiān)視和響應(yīng)串行連接中發(fā)生的事件和錯(cuò)誤。MSComm控件可以用于創(chuàng)建電話撥號(hào)程序、串口通信程序和

71、功能完備的終端程序。</p><p>  首先,簡(jiǎn)單總結(jié)一下用MSComm控件進(jìn)行串口編程的步驟:</p><p> ?。?)在建立的程序工程中插入Microsoft Communications Control控件;</p><p> ?。?)添加MSComm控件ID的控制變量(或者對(duì)象);</p><p> ?。?)對(duì)串口進(jìn)行初始化,設(shè)置

72、MSComm控件的屬性;</p><p> ?。?)添加串口事件的消息處理函數(shù)OnComm()函數(shù),在函數(shù)中根據(jù)應(yīng)用需要,編寫數(shù)據(jù)處理代碼;</p><p>  (5)編寫串口發(fā)送等其他代碼</p><p><b> ?。?)關(guān)閉串口</b></p><p>  3.2 控件MSComm串口編程 實(shí)例<

73、;/p><p>  在系統(tǒng)中單片機(jī)傳來(lái)的指紋信息通過(guò)串口傳遞給PC,對(duì)于PC上串口的編程大體分為:打開串口,設(shè)定串口,讀取串口和關(guān)閉串口四個(gè)部分。下面通過(guò)一個(gè)簡(jiǎn)單的實(shí)例演示下串口的收發(fā)過(guò)程。在這個(gè)過(guò)程中還用到串口調(diào)試助手,虛擬串口VSPD等軟件。下面介紹其簡(jiǎn)單過(guò)程。</p><p>  1.在當(dāng)前Project中插入MSComm控件。</p><p>  選擇 ,那么M

74、SComm控件就插入到當(dāng)前的工程中,結(jié)果就添加了類CMSComm,類CMSComm的相關(guān)的文件mscomm.h和mxcomm.cpp也一并加入Project中。</p><p>  打開所需串口后,需要考慮通信時(shí)機(jī)。在接受和或發(fā)送數(shù)據(jù)的過(guò)程中,要監(jiān)視并響應(yīng)一些事件和錯(cuò)誤,所以事件驅(qū)動(dòng)是處理串口交互作用的一種非常有效的方法。使用OnComm事件和CommEvent屬性捕捉并檢查通信事件和錯(cuò)誤的值。發(fā)生通信事件或錯(cuò)誤

75、時(shí),將觸發(fā)OnComm事件,CommEvent屬性的值將該變,應(yīng)用程序檢查CommEvent屬性值并作出相應(yīng)反應(yīng)。</p><p>  利用ClassWizard定義CMSComm類控制對(duì)象。</p><p>  打開ClassWizard中的Member Viariables選項(xiàng)卡,選擇CSCommTestDlg類,為IDC_MSCOMM1添加控制變量:m_ctrlComm,這是對(duì)話框里

76、自動(dòng)加入:</p><p>  //{{AFX_INCLUDES()</p><p>  #include "mscomm.h"(這時(shí)運(yùn)行程序,如果有錯(cuò),那就再?gòu)念^開始)。</p><p>  2. 在對(duì)話框中添加控件。</p><p>  向主對(duì)話框中添加兩個(gè)編輯框,一個(gè)用于接收顯示數(shù)據(jù)ID為IDC_EDIT_RXDAT

77、A,令一個(gè)用于輸入發(fā)送數(shù)據(jù),ID為IDC_EDIT_TXDATA,再添加一個(gè)按鈕,功能是按一次就把發(fā)送編輯框中的內(nèi)容發(fā)送一次,將其ID設(shè)為IDC_BUTTON_MANUALSEND。再打開ClassWizard的Member Viariables選項(xiàng)卡,選擇CSCommTestDlg類,為IDC_EDIT_RXDATA添加CString變量m_strRXData,為IDC_EDIT_TXDATA添加CString變量m_strTXDat

78、a,指明分別用來(lái)放入接收和發(fā)送的字符數(shù)據(jù)。</p><p>  圖3-1 設(shè)計(jì)完的通信對(duì)話框</p><p>  下面,在CSCommTestDlg::OnInitDialog()函數(shù)中寫入對(duì)串口的初始化語(yǔ)句,串口初始化語(yǔ)句由IDC_MSCOMM1的CMSComm控制變量m_ctrlComm來(lái)設(shè)置串口控件屬性。要添加的代碼如下:</p><p>  m_ctrlCo

79、mm.SetCommPort(1);//選擇COM1</p><p>  //波特率為9600,無(wú)校驗(yàn),8個(gè)數(shù)據(jù)位,1個(gè)停止位</p><p>  m_ctrlComm.SetInputMode(1);</p><p>  //輸入方式為二進(jìn)制方式</p><p>  m_ctrlComm.SetInBufferSize(1024);//設(shè)置

80、輸入緩沖區(qū)大小</p><p>  m_ctrlComm.SetOutBufferSize(512);//設(shè)置輸出緩沖區(qū)大小</p><p>  //波特率9600,無(wú)校驗(yàn),8個(gè)數(shù)據(jù)位,1個(gè)停止位</p><p>  m_ctrlComm.SetSettings("9600,n,8,1");</p><p>  //參數(shù)1

81、表示每當(dāng)串口接收緩沖區(qū)有多于或等于1個(gè)字符時(shí)將引發(fā)一個(gè)數(shù)據(jù)的ONcomm事件</p><p>  if(!m_ctrlComm.GetPortOpen())</p><p>  m_ctrlComm.SetPortOpen(TRUE);//打開串口</p><p>  m_ctrlComm.SetRThreshold(1);</p><p>

82、  m_ctrlComm.SetInputLen(0);//設(shè)置當(dāng)前接收去數(shù)據(jù)長(zhǎng)度為0</p><p>  m_ctrlComm.GetInput();//先預(yù)存緩沖區(qū)以清除殘留數(shù)據(jù)</p><p>  3.添加串口事件消息處理函數(shù)OnComm()。</p><p>  打開ClassWizard中的Message Maps選項(xiàng),選擇類CSCommTestDlg,選

83、擇IDC-MSCOMM1,雙擊消息OnComm,將彈出對(duì)話框中將函數(shù)名改為OnComm。</p><p>  這個(gè)函數(shù)用來(lái)處理串口消息事件的,如每當(dāng)串口接收到數(shù)據(jù),就會(huì)產(chǎn)生一個(gè)串口接收數(shù)據(jù)緩沖區(qū)中有字符的消息事件,我們剛才添加的函數(shù)就會(huì)執(zhí)行,在OnComm()函數(shù)加入相應(yīng)代碼就能實(shí)現(xiàn)自己想要的功能。需要添加的代碼如下:</p><p>  VARIANT variant_inp;</

84、p><p>  COLeSafeArray safearray_inp;</p><p>  LONG len,k;</p><p>  BYTE rxdata[2048];//設(shè)置BYTE數(shù)組,8位無(wú)標(biāo)識(shí)</p><p>  CString strtemp;</p><p>  if(m_ctrlComm.GetComm

85、Event()==2//事件值為2表示接收緩沖區(qū)內(nèi)有字符</p><p><b>  {</b></p><p>  variant_inp=m_ctrlComm.GetInput();//讀緩沖區(qū)</p><p>  safearray_inp=variant_inp;//VARIANT型變量轉(zhuǎn)換為COLESAFEARRAY型變量</p

86、><p>  len=safearray_inp.GetOneDimSize();//得到有效數(shù)據(jù)的長(zhǎng)度</p><p>  for(k=0;k<len;k++)</p><p>  safearray_inp.GetElement(&k,rxdata+k);//轉(zhuǎn)換為BYTE型數(shù)組</p><p>  for(k=0;k<l

87、en;k++)//將數(shù)組轉(zhuǎn)換為cString型變量</p><p><b>  {</b></p><p>  BYTE bt=*(char*)(rxdata+k);//字符型</p><p>  strtemp.Format("%c",bt;)//將字符送入臨時(shí)變量strtemp</p><p> 

88、 m_strRXData+=strtemp;//加入接收編輯框相應(yīng)字符串</p><p><b>  }</b></p><p><b>  }</b></p><p>  UpdateData(FALSE);//更新編輯框內(nèi)容</p><p>  此處函數(shù)OnComm()中的代碼,主要任務(wù)是從串口

89、接收數(shù)據(jù)并顯示在接收編輯框中。</p><p><b>  4.發(fā)送數(shù)據(jù)。</b></p><p>  先為發(fā)送按鈕添加一個(gè)單擊消息即BN_CLICKED處理函數(shù),并在函數(shù)中添加如下代碼:</p><p>  UpdateData(TRUE);//讀取編輯框內(nèi)容</p><p>  m_ctrlComm.SetOutpu

90、t(COLeVariant(m_strTXData));//發(fā)送數(shù)據(jù)</p><p>  至此,這個(gè)簡(jiǎn)單的串口通信程序就完成了。編譯后出現(xiàn)自己編輯的對(duì)話框。為了檢驗(yàn)是否能夠進(jìn)行串口收發(fā)需要借助VSPD的虛擬串口軟件,將COM1和COM2連接起來(lái),然后打開串口小助手,這時(shí)在發(fā)送編輯框中輸入字符,單擊“發(fā)送”按鈕,再單擊串口調(diào)試助手的“手動(dòng)發(fā)送”按鈕,就可以運(yùn)行程序了。</p><p>  在

91、本系統(tǒng)中下位機(jī)傳來(lái)的指紋信息所含的信息量很大,要實(shí)現(xiàn)指紋信息的采集上位機(jī)在接收時(shí)需要連續(xù)多次接收,所以在程序中應(yīng)該設(shè)置一個(gè)自動(dòng)接收的功能。所以應(yīng)該設(shè)定自動(dòng)發(fā)送周期函數(shù)SetTimer()函數(shù),在控制中指令的傳送定時(shí)發(fā)送。</p><p>  下面介紹其方法:在ClassWizard中選上MessageMap卡,然后在Objects IDs選中CSCommTestDlg類,再在Messages框中選上WM_TIME

92、R消息,單擊ADD_FUNCTION加入void CSCommTestDlg::Ontimer(UINT nIDEvent)函數(shù),這個(gè)函數(shù)是放入“時(shí)間到”后要處理代碼。</p><p>  m_bAutoSend=!m_bAutoSend;</p><p>  if(m_bAutoSend)</p><p><b>  {</b></p&

93、gt;<p>  SetTimer(1,1,NULL);//時(shí)間為1毫秒</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  KillTimer(1);//取消定時(shí)<

94、;/p><p><b>  }</b></p><p>  運(yùn)行成功后下位機(jī)的數(shù)據(jù)就可以每隔1ms被PC接收。如果在PC中做一個(gè)處理數(shù)據(jù)庫(kù)的后臺(tái)程序就可以將下位機(jī)傳來(lái)的數(shù)據(jù)存入數(shù)據(jù)庫(kù),對(duì)指紋考勤信息做好統(tǒng)計(jì)處理,完成實(shí)際所需要的功能。</p><p>  下面將會(huì)用ACESS做一個(gè)簡(jiǎn)單的指紋考勤數(shù)據(jù)庫(kù),利用ODBC編程。</p>&l

95、t;p>  1.下面用ACESS所做的mdb文件,作為數(shù)據(jù)源。下面幾個(gè)表包括了所需的員工考勤信息。</p><p>  圖3-2 基于單片機(jī)指紋考勤的ATTENDANCE表(記錄員工出入情況)</p><p>  圖3-3 基于單片機(jī)指紋考勤的ATTENDANCE_STAT表(記錄員工月份考勤情況)</p><p>  圖3-4 基于單片機(jī)指紋考勤的LEAVE

96、表(記錄員工請(qǐng)假情況)</p><p>  圖3-5 基于單片機(jī)考勤的OVERTIME表(記錄員工加班情況)</p><p>  圖3-6基于單片機(jī)考勤的ERRAND表(記錄員工的出差記錄)</p><p>  圖3-7基于單片機(jī)考勤的PERSON表(記錄員工的個(gè)人信息)</p><p>  圖3-8基于單片機(jī)考勤的DEPARTMENT表(記

97、錄部門信息)</p><p>  2.數(shù)據(jù)庫(kù)操作準(zhǔn)備。</p><p>  打開控制面板管理工具,添加到數(shù)據(jù)源管理中。然后下面就是進(jìn)入MFC的數(shù)據(jù)庫(kù)連接與處理的階段。為了使用ODBC類,需要在stdafx.h中加入#include”afxdb.h”一行。因本程序只需要連接一個(gè)數(shù)據(jù)庫(kù),所以定義了一個(gè)Cdatabase型的全局變量db,一次性打開和關(guān)閉數(shù)據(jù)庫(kù)。數(shù)據(jù)庫(kù)的打開在登錄認(rèn)證對(duì)話框中。在

98、主程序結(jié)束前需關(guān)閉數(shù)據(jù)庫(kù),因此在App類的ExitInstance()函數(shù)中加入代碼:if (db.IsOpen()) db.Close();為了編程便捷,可以為數(shù)據(jù)庫(kù)中的每一個(gè)表映射一個(gè)記錄集類(從CrecordSet類繼承),其映射關(guān)系如表1-1所示。這些類通過(guò)RFX(Record Field Exchange)機(jī)制將成員變量與表格中的字段值聯(lián)系起來(lái),通過(guò)方問(wèn)成員變量可以訪問(wèn)當(dāng)前記錄中字段的值。</p><p&g

99、t;  3.設(shè)計(jì)主對(duì)話框和考勤對(duì)話框。</p><p>  其中主對(duì)話框作為登錄界面,實(shí)現(xiàn)添加記錄,統(tǒng)計(jì)記錄等功能。考勤對(duì)話框記錄員工姓名,年月等考勤信息。在VC中建立一個(gè)連接數(shù)據(jù)庫(kù)的程序,畫出程序?qū)υ捒?,添加?shù)據(jù)庫(kù)代碼,實(shí)現(xiàn)存儲(chǔ)指紋考勤信息的功能。</p><p><b>  圖3-9主對(duì)話框</b></p><p>  圖3-10考勤統(tǒng)計(jì)對(duì)

100、話框</p><p>  添加完程序后運(yùn)行,出現(xiàn)結(jié)果,可以儲(chǔ)存考勤數(shù)據(jù)。那么至此這部分做完后,PC與單片機(jī)通過(guò)串口程序?qū)崿F(xiàn)串口通信,下位機(jī)處理指紋信息傳給PC,在PC上設(shè)計(jì)一個(gè)數(shù)據(jù)庫(kù)的處理程序以實(shí)現(xiàn)單片機(jī)傳送的信息存入數(shù)據(jù)庫(kù),那么整個(gè)的信息處理過(guò)程就算完成了。</p><p>  最后,注意單片機(jī)與PC設(shè)定的串口的初始化信息要一致,如波特率。信息自動(dòng)接收與發(fā)送時(shí)單片機(jī)串口通信部分采用中斷程

101、序,當(dāng)上位機(jī)需要數(shù)據(jù)時(shí),發(fā)出命令,單片機(jī)系統(tǒng)采用中斷程序,發(fā)出數(shù)據(jù)。</p><p>  文章附錄部分給出了主對(duì)話框所需代碼,考勤統(tǒng)計(jì)對(duì)話框所需代碼,以及一個(gè)單片機(jī)串口通信的代碼。</p><p><b>  結(jié)束語(yǔ)</b></p><p>  在本次論文設(shè)計(jì)中,學(xué)會(huì)了利用單片機(jī)系統(tǒng)實(shí)現(xiàn)指紋考勤的基本原理,雖然在算法方面沒(méi)有探討實(shí)現(xiàn)的方法,但總

102、體對(duì)基于單片機(jī)指紋考勤的基本路徑有了了解,另外在下位機(jī)與上位機(jī)通信方面也做了一定的學(xué)習(xí),能夠?qū)崿F(xiàn)基本的通信,另外在學(xué)習(xí)過(guò)程中初步了解了VC++面向過(guò)程編程的基本概念,體會(huì)了其功能的強(qiáng)大與方便性。但是在這些過(guò)程中仍存在諸多不足,對(duì)細(xì)節(jié)方面,以及系統(tǒng)完整性方面無(wú)法做到完善。</p><p><b>  致 謝</b></p><p>  論文在老師的指導(dǎo)下做完了。感謝王

103、翠萍老師做出的指導(dǎo),讓我學(xué)會(huì)了很多基本知識(shí),也學(xué)會(huì)了如何去自己學(xué)習(xí)一些東西。接著,我還要感謝我的任課老師他們交給我的知識(shí)。最后,感謝學(xué)校給我們創(chuàng)造了一個(gè)很好的學(xué)習(xí)環(huán)境,讓我可以不斷學(xué)習(xí)進(jìn)步。雖然,自己仍有很多不足,但是我相信我一定會(huì)實(shí)現(xiàn)自己理想。謝謝!</p><p><b>  參考文獻(xiàn)</b></p><p>  1、陳建春.Visual C++開發(fā)GIS系統(tǒng),開

104、發(fā)實(shí)例剖析,2000年.</p><p>  2、陳建春.Visual C++高級(jí)編程技術(shù),開發(fā)實(shí)例剖析,1999年.</p><p>  3、李于劍.Visual C++實(shí)踐與提高,圖形圖象編程篇, 2001年.</p><p>  4、同志工作室.Visual C++6.0開發(fā)技巧與實(shí)例教程, 2000年.</p><p>  5、趙仕健

105、. Visual C++6.0編程與實(shí)例解析, 2000年.</p><p>  6、錢 能. C++程序設(shè)計(jì)教程, 1999年.</p><p>  7、陳明熒.5051單片機(jī)課程設(shè)計(jì)實(shí)訓(xùn)教材[M].北京:清華大學(xué)出版社,2004</p><p>  8、 Atmel AT89C51SND1C User’s Guide[Z].2002.</p>&

106、lt;p>  9、何立民,單片機(jī)高級(jí)編程[M]. 北京:北京航空航天大學(xué)出版社,1999.</p><p>  10、John Markus.電子電路大全[M].北京:計(jì)量出版社.1995.</p><p>  11、 張?chǎng)?單片機(jī)原理及應(yīng)用[M] .北京:電子工業(yè)出版社,2005</p><p>  12、高鵬.Protel入門與提高[M] .北京:人民郵電

107、出版社,2000</p><p>  13、廣弟.單片機(jī)基礎(chǔ)[M] .北京:北京航空航天大學(xué)出版社,2001</p><p>  14、何宏.單片機(jī)原理與接口技術(shù)[M] .北京:國(guó)防工業(yè)出版社,2006</p><p>  15、馬忠梅.單片機(jī)的C語(yǔ)言應(yīng)用程序設(shè)計(jì)[M] .北京:北京航空航天大學(xué)出版社,2003</p><p>  16、 翁

108、漢興,閻有才。指紋自動(dòng)考勤系統(tǒng)在火電廠的應(yīng)用。華中電力,2006(1):67-68.</p><p>  17、 陳建孝。利用指紋識(shí)別器進(jìn)行考勤管理[J]。內(nèi)蒙古農(nóng)業(yè)大學(xué)報(bào),</p><p>  2006,27(1)</p><p>  18、常靜。基于指紋識(shí)別的汽車門鎖遙控器設(shè)計(jì)[J]。城市車輛,2006(4):46-48</p><p>

109、  19、馬忠梅。單片機(jī)C51程序設(shè)計(jì)[M]北京航空航天大學(xué)出版社</p><p>  20、梁中華,王子威等。PC機(jī)與單片機(jī)串行通信的研究[J]沈陽(yáng)工業(yè)大學(xué)報(bào),2005,27(3):302-307</p><p>  21、 劉海春,翁曉光。微機(jī)和單片機(jī)串行通信[J]電子測(cè)量技術(shù),2004(2):59-60</p><p>  22、 羅瑞明。MFC子窗口管理方法

110、及應(yīng)用[J]電腦知識(shí)與技術(shù),2006(7):167-168.</p><p>  23、謝命堅(jiān) MFC的ODBC數(shù)據(jù)庫(kù)編程技術(shù)[J]今IEI</p><p>  24、World Health Organization.Factors regulating the immune response:report of WHO Scientific Group[R].Geneva:WHO,19

111、70.</p><p><b>  附 錄</b></p><p><b>  1.主對(duì)話框代碼:</b></p><p>  BOOL CAttendanceDlg::OnInitDialog()</p><p><b>  {</b></p><p&g

112、t;  CDialog::OnInitDialog();</p><p>  // Add "About..." menu item to system menu.</p><p>  // IDM_ABOUTBOX must be in the system command range.</p><p>  ASSERT((IDM_ABOUTB

113、OX & 0xFFF0) == IDM_ABOUTBOX);</p><p>  ASSERT(IDM_ABOUTBOX < 0xF000);</p><p>  CMenu* pSysMenu = GetSystemMenu(FALSE);</p><p>  if (pSysMenu != NULL)</p><p><

114、;b>  {</b></p><p>  CString strAboutMenu;</p><p>  strAboutMenu.LoadString(IDS_ABOUTBOX);</p><p>  if (!strAboutMenu.IsEmpty())</p><p><b>  {</b>&l

溫馨提示

  • 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ù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論