摘 要: 本文介紹了使用16位單片機(jī)SPCE061A設(shè)計(jì)的一個(gè)盲人導(dǎo)向系統(tǒng)的過(guò)程。在硬件電路設(shè)計(jì)過(guò)程中,采用了PIN公司的PNI-11096芯片組模塊進(jìn)行導(dǎo)向,選擇了一款SPLC501的點(diǎn)陣式LCD顯示屏進(jìn)行數(shù)據(jù)顯示。該系統(tǒng)還可以外接其他功能模塊,在導(dǎo)航系統(tǒng)、盲人拐杖、汽車內(nèi)置設(shè)備等諸多領(lǐng)域有著廣泛的應(yīng)用。
關(guān)鍵詞: 16位單片機(jī)SPCE061A 盲人導(dǎo)向系統(tǒng) 數(shù)據(jù)校正
1.引言
盲人導(dǎo)向儀是為盲人指引方向的重要儀器,也可作為指南針,而指南針是航海航行的重要儀器,也是人們外出旅行、考察的必備工具。本方案使用16位單片機(jī)實(shí)現(xiàn)系統(tǒng)和SPLC501液晶模組,可以實(shí)現(xiàn)圖形及文字顯示當(dāng)前方向,語(yǔ)音播報(bào)方向,方向校正,顯示日期、時(shí)間,有秒表、鬧鐘、語(yǔ)音報(bào)時(shí)等功能。
2.系統(tǒng)結(jié)構(gòu)及其功能
2.1系統(tǒng)結(jié)構(gòu)
盲人導(dǎo)向儀系統(tǒng)框圖如圖1所示,該系統(tǒng)以16位單片機(jī)SPCE061A為數(shù)據(jù)處理核心,外擴(kuò)SPLC501液晶模組,利用電子導(dǎo)向模組得到與正北方向沿順時(shí)針?lè)较虻膴A角,在液晶屏上顯示角度信息。
2.2各模塊功能以及硬件實(shí)現(xiàn)
2.2.1電子導(dǎo)向模塊
如圖2所示,電子導(dǎo)向模組由兩個(gè)磁性傳感器SEN-S65和一個(gè)驅(qū)動(dòng)芯片PNI-11096構(gòu)成。磁性傳感器SEN-S65里面包含一個(gè)LR振蕩電路,當(dāng)磁性傳感器SEN-S65與地球磁感線平行方向夾角發(fā)生變化時(shí),LR振蕩電路的磁感應(yīng)系數(shù)也會(huì)發(fā)生變化。驅(qū)動(dòng)芯片PNI-11096通過(guò)磁性傳感器SEN-S65磁感應(yīng)系數(shù)的變化可以計(jì)算出磁性傳感器與地球磁感線之間的夾角,驅(qū)動(dòng)芯片PNI-11096最多可以連接三個(gè)磁性傳感器SEN-S65,這三個(gè)磁性傳感器SEN-S65方向互為垂直,這樣就可以測(cè)量在三維方向上與地球磁感線的夾角,從而得到當(dāng)前的三維方向。只要電子導(dǎo)向模組得到水平方向上與地球磁感線的夾角就可以測(cè)得方向了,因此驅(qū)動(dòng)芯片PNI-11096上使用了兩個(gè)磁性傳感器SEN-S65。
電子導(dǎo)向模組采用SPI接口輸入與輸出,16位單片機(jī)使用I/O口模擬SPI接口與電子導(dǎo)向模組通訊。電子導(dǎo)向模組在每個(gè)時(shí)鐘周期的上升沿,鎖存數(shù)據(jù)。
2.2.2液晶顯示模塊
液晶顯示模塊采用的SPLC501型圖形點(diǎn)陣式液晶顯示器。液晶顯示器(LCD)具有顯示信息豐富,功耗低,體積小,重量輕,超薄,無(wú)輻射等許多其他顯示器無(wú)法比擬的優(yōu)點(diǎn),被廣泛應(yīng)用于微處理器控制的智能儀表、儀器和低功耗電子產(chǎn)品中。LCD可分為段位式、字符式和點(diǎn)陣式。其中,段位式LCD和字符式LCD只能用于字符和數(shù)字的簡(jiǎn)單顯示,不能滿足圖形曲線和漢字顯示的要求。本文中所采用的MG12864型點(diǎn)陣式液晶顯示器不僅可以顯示字符和數(shù)字,而且可以顯示各種圖形、曲線與漢字,并且可以具有實(shí)現(xiàn)屏幕上下左右滾動(dòng)、反轉(zhuǎn)、閃爍、動(dòng)畫等功能。
2.2.3 SPCE061A核心處理模塊
本系統(tǒng)采用SPCE061A開發(fā)板作為數(shù)據(jù)處理核心,通過(guò)向電子導(dǎo)向模組發(fā)送不同的命令字,得到X軸和Y軸磁性傳感器的測(cè)量值,經(jīng)過(guò)計(jì)算可以得到電子導(dǎo)向模組與正北方向的順時(shí)針夾角。并將處理后的數(shù)據(jù)在SPLC501液晶模組上進(jìn)行顯示。
3.系統(tǒng)的軟件實(shí)現(xiàn)
3.1電子導(dǎo)向模塊的軟件實(shí)現(xiàn)
電子導(dǎo)向模塊的軟件實(shí)現(xiàn)主要由PNI11096驅(qū)動(dòng)程序和導(dǎo)向功能程序兩部分組成。
PNI11096驅(qū)動(dòng)程序PNI_Driver主要是用來(lái)模擬SPI時(shí)序完成對(duì)PNI11096的控制及讀取數(shù)據(jù),16位單片機(jī)SPCE061A是通過(guò)I/O口模擬SPI接口與電子導(dǎo)向模組通信。PNI11096驅(qū)動(dòng)程序包括兩個(gè)函數(shù),PNI11096初始化函數(shù)F_PNI_11096_Init PNI,PNI11096讀取函數(shù)F_PNI_11096_Read。PNI11096驅(qū)動(dòng)程序函數(shù)PNI_Driver的程序流程如圖3所示。
導(dǎo)向功能程序主要是用來(lái)實(shí)現(xiàn)命令的發(fā)送與接收、數(shù)據(jù)校正、圖形顯示,以及方向數(shù)值顯示。電子導(dǎo)向模塊在接收到系統(tǒng)發(fā)送的命令字后,根據(jù)命令讀取x和y軸的數(shù)據(jù),然后將得到的x和y軸的值進(jìn)行校正,根據(jù)校正后的值進(jìn)行進(jìn)一步計(jì)算,將得到的結(jié)果返回系統(tǒng)。導(dǎo)向功能程序的核心部分在于誤差的校正。
在理想狀態(tài)下,X軸測(cè)量數(shù)據(jù)與Y軸測(cè)量數(shù)據(jù)變化范圍都應(yīng)是-32768—32767之間,X軸數(shù)據(jù)與Y軸數(shù)據(jù)組成的坐標(biāo)剛好構(gòu)成一個(gè)正圓形,但實(shí)際測(cè)量中,X軸測(cè)量數(shù)據(jù)與Y軸測(cè)量數(shù)據(jù)最大值或最小值均達(dá)不到-32768—32767這個(gè)范圍,則導(dǎo)致這兩個(gè)數(shù)據(jù)組成坐標(biāo)構(gòu)成的圖形成為一個(gè)中心不在原點(diǎn)的橢圓形。通過(guò)計(jì)算x軸和y軸的偏移量和測(cè)量數(shù)據(jù)的極大極小值,為了得到準(zhǔn)確的方向值我們必須對(duì)電子導(dǎo)向模組返回的數(shù)據(jù)進(jìn)行校正,將橢圓調(diào)整為正圓形,圖4(a)和圖4(b)為顯示了測(cè)量坐標(biāo)圖在校正前后的對(duì)比情況。
從電子導(dǎo)向模組得到X軸方向和Y軸方向測(cè)量數(shù)據(jù)經(jīng)過(guò)較正后,根據(jù)公式angle=atan(y/x)就可以計(jì)算出電子導(dǎo)向模組與正北方向的順時(shí)針夾角了。還有一個(gè)問(wèn)題是要根據(jù)角度所在的不同的象限,對(duì)求得的角度值加以修正。角度值修正程序的示意性代碼如下所示:
Ratio=yRevise/xRevise;
if(角度值小于0)
{
Ratio=0 - Ratio;
使用反正玄函數(shù)計(jì)算角度值;
}
else if(角度值在第一象限)
{
return 360 - Angle;
}
else if(角度值在第二象限))
{
return 180 + Angle;
}
else if(角度值在第三象限))
{
return 180 - Angle;
}
else (角度值在第四象限))
{
return Angle;
}
3.2液晶顯示模塊的軟件實(shí)現(xiàn)
液晶顯示模塊SPLC501的驅(qū)動(dòng)程序由5個(gè)部分組成,分別為底層驅(qū)動(dòng)程序文件SPLC501Driver_IO.inc、SPLC501Driver_IO.asm;用戶API 功能接口函數(shù)文件SPLC501User.h、SPLC501User.c、DataOSforLCD.asm。各文件的主要功能如下。
SPLC501Driver_IO.inc:該文件為底層驅(qū)動(dòng)程序的頭文件,主要對(duì)使用到的寄存器(如端口控制寄存器等)進(jìn)行定義,還對(duì)SPCE061A與SPLC501液晶顯示模組的接口進(jìn)行配置;用戶可以根據(jù)自已的需求來(lái)配置此文件,但要使端口的分配符合實(shí)際硬件的接線。
SPLC501Driver_IO.asm:該文件為底層驅(qū)動(dòng)程序,負(fù)責(zé)與SPLC501液晶顯示模組進(jìn)行數(shù)據(jù)傳輸?shù)娜蝿?wù),主要包括端口初始化、寫控制指令、寫數(shù)據(jù)、讀數(shù)據(jù)等函數(shù);這些函數(shù)僅供SPLC501User.c調(diào)用,不建議用戶在應(yīng)用程序中調(diào)用這些函數(shù)。
SPLC501User.h:該文件為用戶API功能函數(shù)文件的頭文件,主要對(duì)一些記住符進(jìn)行定義,以及配置LCD的一些設(shè)置,另外該文件里還對(duì)SPLC501User.c中的函數(shù)作了外部聲明,用戶需要使用LCD的API功能函數(shù)時(shí),需要把該文件包含在用戶的C文件中。
SPLC501User.c:文件中定義了針對(duì)LCD顯示的各種API功能函數(shù)。
DataOSforLCD.asm:該文件中提供了一些供API功能函數(shù)調(diào)用的數(shù)據(jù)處理子程序,主要完成顯示效果的疊加、畫圓偏差量的計(jì)算等。
3.3 SPCE061A核心處理模塊的軟件實(shí)現(xiàn)
SPCE061A核心處理模塊主要由鍵盤掃描程序和系統(tǒng)主程序兩部分組成。
鍵盤掃描程序先通過(guò)調(diào)用Key_Init()函數(shù)對(duì)鍵盤進(jìn)行初始化,然后通過(guò)函數(shù)Key_Scan()對(duì)鍵盤進(jìn)行掃描,若發(fā)現(xiàn)有按鍵按下,則使用Key_GetValue()函數(shù)獲得按鍵值,并保存下來(lái)供系統(tǒng)調(diào)用。
程序運(yùn)行后首先初始化各個(gè)硬件模塊,校正指南針模組,然后程序進(jìn)入主循環(huán),不停地讀取指南針模組的方向并顯示,同時(shí)進(jìn)行按鍵掃描,根據(jù)按鍵進(jìn)入相應(yīng)的功能模塊。主程序流程圖如圖5所示。
4.結(jié)語(yǔ)
本文利用16位單片機(jī)SPCE061A強(qiáng)大的處理能力,配合電子導(dǎo)向模組設(shè)計(jì)了一個(gè)語(yǔ)音播報(bào)盲人導(dǎo)向儀,此系統(tǒng)可以完成圖形及文字顯示當(dāng)前方向,語(yǔ)音播報(bào)方向,方向校正,顯示日期、時(shí)間,有秒表、鬧鐘、語(yǔ)音報(bào)時(shí)等功能,對(duì)開發(fā)一款功能豐富的盲人導(dǎo)向儀系統(tǒng),有一定的參考價(jià)值。語(yǔ)音播報(bào)盲人導(dǎo)向儀可以快速添加到各種產(chǎn)品中,作為成熟系統(tǒng)的子模塊,其應(yīng)用在導(dǎo)航系統(tǒng)、盲人拐杖、汽車內(nèi)置設(shè)備等諸多領(lǐng)域。
參考文獻(xiàn):
[1]嵌入式微處理器SPCE3200原理及應(yīng)用[M].凌陽(yáng)科技有限公司資料,2007,08.
[2]61板課程設(shè)計(jì)指導(dǎo)書[M].凌陽(yáng)科技有限公司資料,2005,10.
[3]61板畢業(yè)設(shè)計(jì)指導(dǎo)書[M].凌陽(yáng)科技有限公司資料,2004,02.