




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、基于單片機的紅外熱釋電防盜報警器摘 要:隨著現(xiàn)在社會的發(fā)展,時代進步,高新技術的快速融入,人們的生活發(fā)生了巨大的改變,人們置購了大量高新技術的產(chǎn)品,許多高科技產(chǎn)品的使用越來越成為家庭生活的主旋律,因此人們對自己所處環(huán)境的安全要求就越來越高,特別是家居安全,不得不時刻留意不速之客的光顧。許多家庭都安裝了報警系統(tǒng),這有效的保護了大家的財產(chǎn)安全。在本文中,介紹一種利用熱釋電紅外傳感器進行監(jiān)控,并進行報警。此次設計的紅外熱釋電防盜器在工作過程中較隱蔽,大大提高了用戶的安全系數(shù)。此次設計主要由硬件和軟件兩個模塊組成。硬件部分有數(shù)據(jù)采集、狀態(tài)指示燈、按鍵設定、單片機STC89C52最小系統(tǒng)、蜂鳴器報警模塊
2、和DYP-ME003人體紅外傳感器部分組成。關鍵詞: 蜂鳴器報警模塊;單片機STC89C52;防盜報警器1 概述1.1 設計背景 隨著人們生活水平與安全防范意識的提高,人們對自己所處環(huán)境的安全性提出了更高要求。私人用地,公共場所與國家機關等對安全意識與自動報警的迫切需要逐漸被專家,廠商與社會所重視。尤其是在家居安全方面,不得不時刻留意那些不速之客。本次設計的被動式紅外報警器則采用的傳感元件是熱釋電紅外傳感器,這種熱釋電紅外傳感器能以非接觸形式檢測出人體輻射的紅外線,并將其轉(zhuǎn)變?yōu)殡妷盒盘?,同時,它還能鑒別出運動的生物與其它非生物。熱釋電紅外傳感器既可用于防盜報警裝置,也可以用于自動控制、接近開關
3、、遙測等領域。用它制作的防盜報警器與目前市場上銷售的許多防盜報警器材相比,具有如下特點: 靈敏度高,控制范圍大 隱蔽性好,安裝方便1.2 設計概述隨著電子技術的發(fā)展,人類不斷研究,不斷創(chuàng)新紀錄,人們自身的安防意識也在逐漸增強。此類裝置設計的要點:其一是能有效判斷是否有人員進入;其二是盡可能大地增加防護范圍。 該報警器能探測人體發(fā)出的紅外線,當人進入報警器的監(jiān)視區(qū)域內(nèi),即可發(fā)出報警聲,適用于家庭、辦公室、倉庫、實驗室等比較重要場合防盜報警。本設計是利用熱釋電紅外線傳感器探測人體輻射出的紅外線信號原理設計出來的人體紅外線感應報警器。 該報警器主要由熱釋電紅外傳感器及其檢測電路,報警電路組成。熱釋電
4、紅外傳感器是報警器設計中的核心器件,它可把人體的紅外信號轉(zhuǎn)換為電信號以供信號處理部分使用。檢測電路主要是把傳感器輸出的微弱電信號進行放大、濾波、延遲、比較,從而實現(xiàn)報警功能內(nèi)容廣泛,靈活應用。1.3 實現(xiàn)功能當不法分子闖入,當不法分子闖入時,將被紅外熱釋電檢測到,促使蜂鳴器和指示燈報警。并且能夠自動或者手動取消報警。隨時隨地保障家庭,企業(yè),公眾等的財產(chǎn)安全。應作品的功能、外觀及實用性等的要求。1.4設計思路 熱釋紅外傳感系統(tǒng)由傳感器、光學系統(tǒng)和檢測電路三部分構(gòu)成,其中傳感器由敏感元(紅外熱釋電材料PZT制成)、場效應管(作阻抗變換)、高阻Rg(釋放柵極電荷使場效應管安全正常工作)和濾光片(有效
5、地防止抑制電燈、太陽光的干擾,選取人體的紅外輻射)等組成;熱釋電傳感器前面安裝菲涅爾透鏡,使外來紅外輻射通過透鏡僅會聚光于一個傳感元上,產(chǎn)生的信號不會被抵消,增加傳感器的探測距離;在探測范圍內(nèi),傳感器的輸出信號頻率大約為0.110Hz,檢測電路由檢測、放 大、比較電路、延時電路驅(qū)動電路等組成。最終將信號轉(zhuǎn)化為發(fā)光二極管亮的光信號或蜂鳴器響的聲信號。2.硬件設施2.1 STC89C52單片機簡介其擁有較高的集成度和可靠性,控制能力強,體積小,低電壓,低功耗,高性能以及便于攜帶的CMOS8位微控制器。(1)STC89C52單片機把所有功能都集中在了同一個芯片上,有相當高的集成度,體積自然而然的就小
6、了。(2)許多單片機的電流為數(shù)百微安,電壓僅僅是1.8V到3.6V之間。 2.2 硬件電路設計本次設計的硬件部分主要由單片機最小系統(tǒng)、按鍵模塊、電源模塊、LED指示燈和蜂鳴器報警模塊、紅外熱釋電傳感器DYP-ME003組成。單片機采用51系列STC89C52為此次設計的處理器。人體輻射的紅外光譜被設置在監(jiān)測點上的紅外探頭變換成了電信號,將TTL電平傳送到STC89C52單片機。在STC89C52中,通過系統(tǒng)程序的檢查、判別等過程及時發(fā)出入侵報警狀態(tài)控制信號。2.3紅外感應電源模塊,三節(jié)干電池組成了次設計的電源電壓為4.5v。按下SW1電源開關后,D4為電源指示燈,熱釋電傳感器。BISS0001
7、紅外傳感信號處理器是由運算放大器、電壓比較器、和狀態(tài)控制、延遲時間定時器、封鎖時間定時器以及參考電壓源等構(gòu)成的數(shù)?;旌蠈S眉呻娐???蓮V泛應用于多種傳感器和延時控制器。圖1為其信號處理器的原理。圖1信號處理器的原理圖2.4數(shù)據(jù)采集及處理前置放大器OP1把輸入的熱釋紅外感應2腳放大,緊接著運算放大器OP2把由C4耦合所給的進行第二級放大,然后經(jīng)過由COP1與COP2所構(gòu)成的雙向鑒幅器處理后,延時時間定時器被檢測出的有效觸發(fā)信號所啟動從而輸出信號,在通過R3進入到單片機進行處理。可通過R12進行延時周期的調(diào)節(jié)輸出,只要Vs在延時時間內(nèi)發(fā)生了上跳變,那么Vo就會繼續(xù)延長一個周期從Vs上跳變的時刻開始
8、,電路中的電容為了更好的實現(xiàn)對芯片內(nèi)的定時器的控制,只要Vs一直都是高電平,就能由P10傳送到單片機內(nèi)做更一步的操作。一個高電平被1腳用跳線連連接住后,其將一直是高電平的輸出狀態(tài),當人離去以后它才會由高電平的狀態(tài)轉(zhuǎn)變?yōu)榈碗娖降臓顟B(tài),本電路就是可觸發(fā)方式的設計。2.5 STC89C52單片機引腳功能l腳:紅外信號輸入端,接紅外接收管VDL 2腳:該腳與GND之間連接RC串聯(lián)網(wǎng)絡,它們是負反饋串聯(lián)網(wǎng)絡的一個組成部分,改變它們的數(shù)值能改變前置放大器的增益和頻率特性。增大電阻R或減小C,將使負反饋量增大,放大倍數(shù)下降,反之則放大倍數(shù)增大。但C的改變會影響到頻率特性,一般在實際使用中不必改動,選用參數(shù)為
9、R4=4.7,C4=3.3F電源端:VCC(40腳),一般+5V。接地端:VSS(20腳)時鐘XTAL1與XTAL2。XTAL1(19腳):晶體振蕩電路的反向輸入端。(1)PSEN(29腳):外部ROM讀選通信號。該引腳接入ERROM的OE端口。(2)XTAL2(18腳):晶體振蕩電路的輸出端控制線:PSEN、 EA、ALE、RST。(3)ALE(30引腳):地址所存允許/編程脈沖。在STC89C52正常工作以后,該引腳不斷地向外輸出正弦脈沖信號。(4)RST(9腳):復位引腳,在高電平的時候有效。圖2 引腳功能2.6菲涅爾透鏡 菲涅爾透鏡 (Fresnel lens) 多是由聚烯烴材料注壓而
10、成的薄片,也有玻璃制作的,鏡片表面一面為光面,另一面刻錄了由小到大的同心圓,它的紋理是利用光的干涉及擾射和根據(jù)相對靈敏度和接收角度要求來設計的,透鏡的要求很高,一片優(yōu)質(zhì)的透鏡必須是表面光潔,紋理清晰,其厚度隨用途而變,多在1mm左右,特性為面積較大厚度薄及偵測距離遠。菲涅爾透鏡的在很多時候相當于紅外線及可見光的凸透鏡,效果較好,但成本比普通的凸透鏡低很多。多用于對精度要求不是很高的場合,如幻燈機、薄膜放大鏡、紅外探測器等。 菲涅爾透鏡作用有兩個:一是聚焦作用,即將熱釋紅外信號折射(反射)在PIR上,第二個作用是將探測區(qū)域內(nèi)分為若干個明區(qū)和暗區(qū),使進入探測區(qū)域的移動物體能以溫度變化的形式在PIR
11、上產(chǎn)生變化熱釋紅外信。 一、菲涅爾透鏡作用 作用:一是聚焦作用,即將熱釋紅外信號折射(反射)在PIR上,第二個作用是將探測區(qū)域內(nèi)分為若干個明區(qū)和暗區(qū),使進入探測區(qū)域的移動物體能以溫度變化的形式在PIR上產(chǎn)生變化熱釋紅外信號。圖3 菲涅爾透鏡檢測示意圖2.7 指示燈和報警電路蜂鳴器和紅色led燈組成了我們的報警電路。用S8550功率驅(qū)動管來驅(qū)動蜂鳴器,單片機為低電平,此時三極管S8550飽和導通,蜂鳴器會發(fā)出報警聲,當單片機P23口為高電平,此時的三極管S8550截止,蜂鳴器立即停止報警。圖4 報警流程圖3 操作流程及方法我們分別用紅、黃、綠三個led指示燈,其中紅色代表報警信號,黃代表紅外熱釋
12、傳感器信號,綠色代表布防信號。按鍵部分分別由手動報警鍵、布防鍵、取消報警和撤防鍵三個部分組成。手動報警鍵(左邊第一個),按此鍵后紅色led燈會閃爍同時蜂鳴器發(fā)出報警聲,布防鍵(左邊第二個),按此鍵后,綠色led燈閃爍表示布防開始,直到led燈常亮,表示布防結(jié)束(布防時間為30秒)。如果此時有人進入傳感器的監(jiān)測范圍單片機P13口將檢測到紅外熱釋輸出的高電平,從而點亮黃色led燈,同時蜂鳴器發(fā)出報警聲,代表有人侵入。取消報警和撤防鍵(左邊第三個),按此鍵后,無論是報警狀態(tài)還是布防狀態(tài)都會被取消。4 結(jié)束語本次畢業(yè)設計的是基于單片機的紅外熱釋電防盜報警器。從最初的茫然,到慢慢的進入狀態(tài),再到對思路逐
13、漸的清晰,整個寫作過程難以用語言來表達。歷經(jīng)了幾天的奮戰(zhàn),大大提升了自己的能力,最后總算基本完成了。對自己知識面的擴展都有了很大的提高,我也深深的體會到,實踐必須在充分理解電路原理的基礎上,才能做到目標明確,操作準確。我也將許多遺忘的知識又給溫習了。這段旅程看似荊棘密布,實則蘊藏著無盡的寶藏。當然由于時間關系和水平有限,設計中存在著一些缺陷和不足,還有待于在今后的進一步設計過程中不斷進步。在此,感謝我的指導老師在這個過程中對我的幫助和指導。參考文獻1傳感器與自動檢測技術(第二版).余成波主編.2 周海波.基于HN91 1的紅外線報警系統(tǒng).長江工程職業(yè)技術學學.電子技術基礎 數(shù)字部分(第五版).
14、康華光主編.3劉仁宇主編. 模擬電子技術.機械工業(yè)出版社.4房漢雄,王艷春.基于51系列單片機的被動式熱釋電型紅外防盜報警器的設計.齊齊哈爾大學學報.附錄資料:不需要的可以自行刪除 C語言圖形模式速成第一節(jié) 圖形模式的初始化Turbo C 提供了非常豐富的圖形函數(shù),所有圖形函數(shù)的原型均在graphics. h 中,本節(jié)主要介紹圖形模式的初始化、獨立圖形程序的建立、基本圖形功能、圖形窗口以及圖形模式下的文本輸出等函數(shù)。另外,使用圖形函數(shù)時要確保有顯示器圖形驅(qū)動程序*.BGI,同時將集成開發(fā)環(huán)境options/Linker中的Graphics lib選為on,只有這樣才能保證正確使用圖形函數(shù)。 不
15、同的顯示器適配器有不同的圖形分辨率。即是同一顯示器適配器,在不同模式下也有不同分辨率。因此,在屏幕作圖之前,必須根據(jù)顯示器適配器種類將顯示器設置成為某種圖形模式,在未設置圖形模式之前,微機系統(tǒng)默認屏幕為文本模式(80列,25行字符模式),此時所有圖形函數(shù)均不能工作。設置屏幕為圖形模式,可用下列圖形初始化函數(shù):void far initgraph(int far *gdriver, int far *gmode,char *path);其中gdriver和gmode分別表示圖形驅(qū)動器和模式,path是指圖形驅(qū)動程序所在的目錄路徑。有關圖形驅(qū)動器、圖形模式的符號常數(shù)及對應的分辨率見graphics
16、. h。圖形驅(qū)動程序由Turbo C出版商提供,文件擴展名為.BGI。 根據(jù)不同的圖形適配器有不同的圖形驅(qū)動程序。例如對于EGA、 VGA 圖形適配器就調(diào)用驅(qū)動程序EGAVGA.BGI。#include stdio.h#include graphics.hint main()int gdriver, gmode;gdriver=VGA;gmode=VGAHI;initgraph(&gdriver, &gmode, C:TC2.0BGI);bar3d(100, 100, 300, 250, 50, 1); /*畫一長方體*/getch();closegraph();return 0;有時編程者并
17、不知道所用的圖形顯示器適配器種類,或者需要將編寫的程序用于不同圖形驅(qū)動器,Turbo C 提供了一個自動檢測顯示器硬件的函數(shù),其調(diào)用格式為:void far detectgraph(int *gdriver, *gmode);其中gdriver和gmode的意義與上面相同。 自動進行硬件測試后進行圖形初始化:#include stdio.h#include graphics.hint main()int gdriver, gmode;detectgraph(&gdriver, &gmode); /*自動測試硬件*/printf(the graphics driver is %d, mode i
18、s %dn,gdriver,gmode); /*輸出測試結(jié)果*/getch();initgraph(&gdriver, &gmode, C:TC2.0BGI);/* 根據(jù)測試結(jié)果初始化圖形*/bar3d(100, 100, 300, 250, 50, 1); /*畫一長方體*/getch();closegraph();return 0;上例程序中先對圖形顯示器自動檢測,然后再用圖形初始化函數(shù)進行初始化設置,但Turbo C提供了一種更簡單的方法, 即用gdriver=DETECT 語句后再跟initgraph()函數(shù)就行了。采用這種方法后,上例可改為:#include stdio.h#incl
19、ude graphics.hint main()int gdriver=DETECT, gmode;initgraph(&gdriver, &gmode, C:TC2.0BGI);bar3d(50, 50, 150, 30, 50, 1);getch();closegraph();return 0;另外,Turbo C 提供了退出圖形狀態(tài)的函數(shù)closegraph(),其調(diào)用格式為:void far closegraph(void);第二節(jié) 屏幕顏色的設置和清屏函數(shù)對于圖形模式的屏幕顏色設置,同樣分為背景色的設置和前景色的設置。在Turbo C中分別用下面兩個函數(shù): 設置背景色: void f
20、ar setbkcolor(int color);設置作圖色: void far setcolor(int color);其中color 為圖形方式下顏色的規(guī)定數(shù)值,對EGA,VGA顯示器適配器,有關顏色的符號常數(shù)及數(shù)值見graphics.h。清除圖形屏幕內(nèi)容但不清除圖形背景使用清屏函數(shù),其調(diào)用格式如下: voide far cleardevice(void);#include stdio.h#include graphics.hint main()int gdriver, gmode, i,aa;gdriver=DETECT;initgraph(&gdriver, &gmode, C:TC2
21、.0BGI); /*圖形初始化*/setbkcolor(0); /*設置圖形背景*/cleardevice();for(i=0; i=15; i+)setcolor(i); /*設置不同作圖色*/circle(320, 240, 20+i*10); /*畫半徑不同的圓*/getch();for(i=0; i=15; i+)setbkcolor(i); /*設置不同背景色*/cleardevice();circle(320, 240, 20+i*10);getch();aa=getmaxcolor();printf(maxcolor=%d,aa);getch();closegraph();ret
22、urn 0;另外,TURBO C也提供了幾個獲得現(xiàn)行顏色設置情況的函數(shù)。 int far getbkcolor(void); 返回現(xiàn)行背景顏色值。int far getcolor(void); 返回現(xiàn)行作圖顏色值。int far getmaxcolor(void); 返回最高可用的顏色值。第三節(jié) 基本畫圖函數(shù)基本圖形函數(shù)包括畫點,線以及其它一些基本圖形的函數(shù)。本節(jié)對這些函數(shù)作一全面的介紹。 、畫點. 畫點函數(shù) void far putpixel(int x, int y, int color); 該函數(shù)表示有指定的象元畫一個按color 所確定顏色的點。對于顏色color的值可從表3中獲得而對
23、x, y是指圖形象元的坐標。在圖形模式下,是按象元來定義坐標的。對VGA適配器,它的最高分辨率為640 x480,其中640為整個屏幕從左到右所有象元的個數(shù),480為整個屏幕從上到下所有象元的個數(shù)。屏幕的左上角坐標為(0,0),右下角坐標為(639, 479),水平方向從左到右為x 軸正向,垂直方向從上到下為y軸正向。TURBO C的圖形函數(shù)都是相對于圖形屏幕坐標,即象元來說的。關于點的另外一個函數(shù)是: int far getpixel(int x, int y); 它獲得當前點(x, y)的顏色值。 II、有關坐標位置的函數(shù) int far getmaxx(void);返回x軸的最大值。in
24、t far getmaxy(void);返回y軸的最大值。int far getx(void); 返回游標在x軸的位置。void far gety(void); 返回游標有y軸的位置。void far moveto(int x, int y); 移動游標到(x, y)點,不是畫點,在移動過程中亦畫點。void far moverel(int dx, int dy); 移動游標從現(xiàn)行位置(x, y)移動到(x+dx, y+dy)的位置,移動過程中不畫點。、畫線I. 畫線函數(shù)TURBO C提供了一系列畫線函數(shù): void far line(int x0, int y0, int x1, int y
25、1); 畫一條從點(x0, y0)到(x1, y1)的直線。void far lineto(int x, int y); 畫一作從現(xiàn)行游標到點(x, y)的直線。void far linerel(int dx, int dy); 畫一條從現(xiàn)行游標(x,y)到按相對增量確定的點(x+dx, y+dy)的直線。void far circle(int x, int y, int radius); 以(x, y)為圓心,radius為半徑,畫一個圓。void far arc(int x, int y, int stangle, int endangle,int radius); 以(x,y)為圓心,r
26、adius為半徑,從stangle開始到endangle結(jié)束(用度表示)畫一段圓弧線。在TURBO C中規(guī)定x軸正向為0 度,逆時針方向旋轉(zhuǎn)一周, 依次為90,180, 270和360度(其它有關函數(shù)也按此規(guī)定,不再重述)。 void ellipse(int x, int y, int stangle, int endangle,int xradius,int yradius);以(x, y)為中心,xradius,yradius為x軸和y軸半徑,從角stangle 開始到endangle結(jié)束畫一段橢圓線,當stangle=0,endangle=360時, 畫出一個完整的橢圓。void far
27、 rectangle(int x1, int y1, int x2, inty2); 以(x1, y1)為左上角,(x2, y2)為右下角畫一個矩形框。 void far drawpoly(int numpoints, int far *polypoints); 畫一個頂點數(shù)為numpoints,各頂點坐標由polypoints給出的多邊形。polypoints整型數(shù)組必須至少有2 倍頂點數(shù)個無素。每一個頂點的坐標都定義為x,y,并且x在前。值得注意的是當畫一個封閉的多邊形時,numpoints 的值取實際多邊形的頂點數(shù)加一,并且數(shù)組polypoints中第一個和最后一個點的坐標相同。下面舉一
28、個用drawpoly()函數(shù)畫箭頭的例子。#include stdio.h#include graphics.hint main()int gdriver, gmode, i;int arw16=200,102,300,102,300,107,330,100,300,93,300,98,200,98,200,102;gdriver=DETECT;initgraph(&gdriver, &gmode, C:TC2.0BGI);setbkcolor(BLUE);cleardevice();setcolor(12); /*設置作圖顏色*/drawpoly(8, arw); /*畫一箭頭*/getch
29、();closegraph();return 0;II、設定線型函數(shù)在沒有對線的特性進行設定之前,TURBO C 用其默認值,即一點寬的實線,但TURBO C 也提供了可以改變線型的函數(shù)。線型包括:寬度和形狀。其中寬度只有兩種選擇:一點寬和三點寬。而線的形狀則有五種。下面介紹有關線型的設置函數(shù)。void far setlinestyle(int linestyle,unsigned upattern,int thickness);該函數(shù)用來設置線的有關信息,其中l(wèi)inestyle是線形狀的規(guī)定,見graphics.h。對于upattern,只有l(wèi)inestyle選USERBIT_LINE 時才
30、有意義 (選其它線型,uppattern取0即可)。此時uppattern的16位二進制數(shù)的每一位代表一個象元,如果那位為1,則該象元打開,否則該象元關閉。 void far getlinesettings(struct linesettingstypefar *lineinfo);該函數(shù)將有關線的信息存放到由lineinfo 指向的結(jié)構(gòu)中,表中l(wèi)inesettingstype的結(jié)構(gòu)如下:struct linesettingstypeint linestyle;unsigned upattern;int thickness;例如下面兩句程序可以讀出當前線的特性 struct linesetti
31、ngstype *info;getlinesettings(info);void far setwritemode(int mode);該函數(shù)規(guī)定畫線的方式。如果mode=0,則表示畫線時將所畫位置的原來信息覆蓋了(這是TURBO C的默認方式)。如果mode=1, 則表示畫線時用現(xiàn)在特性的線與所畫之處原有的線進行異或(XOR)操作,實際上畫出的線是原有線與現(xiàn)在規(guī)定的線進行異或后的結(jié)果。因此,當線的特性不變,進行兩次畫線操作相當于沒有畫線。有關線型設定和畫線函數(shù)的例子如下所示。#include stdio.h#include graphics.hint main()int gdriver, g
32、mode, i;gdriver=DETECT;initgraph(&gdriver, &gmode, C:TC2.0BGI);setbkcolor(BLUE);cleardevice();setcolor(GREEN);circle(320, 240, 98);setlinestyle(0, 0, 3); /*設置三點寬實線*/setcolor(2);rectangle(220, 140, 420, 340);setcolor(WHITE);setlinestyle(4, 0 xaaaa, 1);/*設置一點寬用戶定義線*/line(220, 240, 420, 240);line(320,
33、140, 320, 340);getch();closegraph();return 0;第四節(jié) 基本圖形的填充填充就是用規(guī)定的顏色和圖模填滿一個封閉圖形。 一般是先畫輪廓再填充。TURBO C提供了一些先畫出基本圖形輪廓, 再按規(guī)定圖模和顏色填充整個封閉圖形的函數(shù)。在沒有改變填充方式時,TURBO C 以默認方式填充。 void far bar(int x1, int y1, int x2, int y2);確定一個以(x1,y1)為左上角,(x2,y2)為右下角的矩形窗口,再按規(guī)定圖模和顏色填充。說明:此函數(shù)不畫出邊框,所以填充色為邊框。void far bar3d(int x1, int
34、 y1, int x2, int y2,int depth,int topflag);當topflag為非0時, 畫出一個三維的長方體。當topflag為0時,三維圖形不封頂,實際上很少這樣使用。說明: bar3d()函數(shù)中,長方體第三維的方向不隨任何參數(shù)而變,即始終為45度的方向。void far pieslice(int x,int y,int stangle,int endangle,int radius);畫一個以(x, y)為圓心,radius為半徑,stangle為起始角度,endangle 為終止角度的扇形,再按規(guī)定方式填充。當stangle=0,endangle=360 時變成
35、一個實心圓,并在圓內(nèi)從圓點沿X軸正向畫一條半徑。void far sector(int x, int y,int stanle,intendangle,int xradius, int yradius);畫一個以(x, y)為圓心分別以xradius, yradius為x軸和y軸半徑,stangle 為起始角,endangle為終止角的橢圓扇形,再按規(guī)定方式填充。第五節(jié) 設定填充方式TURBO C有四個與填充方式有關的函數(shù)。下面分別介紹: void far setfillstyle(int pattern, int color); color的值是當前屏幕圖形模式時顏色的有效值。pattern
36、的值及與其等價的符號常數(shù)見graphics.h。除USER_FILL(用戶定義填充式樣)以外,其它填充式樣均可由setfillstyle() 函數(shù)設置。當選用USER_FILL時,該函數(shù)對填充圖模和顏色不作任何改變。 之所以定義USER_FILL主要因為在獲得有關填充信息時用到此項。void far setfillpattern(char * upattern,int color); 設置用戶定義的填充圖模的顏色以供對封閉圖形填充。其中upattern是一個指向8個字節(jié)的指針。這8個字節(jié)定義了8x8點陣的圖形。每個字節(jié)的8位二進制數(shù)表示水平8點,8個字節(jié)表示8行,然后以此為模型向個封閉區(qū)域填充
37、。void far getfillpattern(char * upattern); 該函數(shù)將用戶定義的填充圖模存入upattern指針指向的內(nèi)存區(qū)域。void far getfillsetings(struct fillsettingstypefar * fillinfo); 獲得現(xiàn)行圖模的顏色并將存入結(jié)構(gòu)指針變量fillinfo中。其中fillsettingstype結(jié)構(gòu)定義如下:struct fillsettingstypeint pattern; /* 現(xiàn)行填充模式 * /int color; /* 現(xiàn)行填充模式 * /; 有關圖形填充圖模的顏色的選擇,請看下面例程。#include
38、stdio.h#include graphics.hmain()char str8=10,20,30,40,50,60,70,80; /*用戶定義圖模*/int gdriver,gmode,i;struct fillsettingstype save;/*定義一個用來存儲填充信息的結(jié)構(gòu)變量*/gdriver=DETECT;initgraph(&gdriver,&gmode,C:TC2.0BGI);setbkcolor(BLUE);cleardevice();for(i=0;i13;i+)setcolor(i+3);setfillstyle(i,2+i); /* 設置填充類型 */bar(100
39、,150,200,50); /*畫矩形并填充*/bar3d(300,100,500,200,70,1); /* 畫長方體并填充*/pieslice(200, 300, 90, 180, 90);/*畫扇形并填充*/sector(500,300,180,270,200,100);/*畫橢圓扇形并填充*/getch();cleardevice();setcolor(14);setfillpattern(str, RED);bar(100,150,200,50);bar3d(300,100,500,200,70,0);pieslice(200,300,0,360,90);sector(500,300
40、,0,360,100,50);getch();getfillsettings(&save);/*獲得用戶定義的填充模式信息*/closegraph();clrscr();printf(The pattern is %d, The color of filling is %d,save.pattern, save.color);/*輸出目前填充圖模和顏色值*/getch();第六節(jié) 任意封閉圖形的填充截止目前為止,我們只能對一些特定形狀的封閉圖形進行填充,但還不能對任意封閉圖形進行填充。為此,TURBO C 提供了一個可對任意封閉圖形填充的函數(shù),其調(diào)用格式如下: void far floodfi
41、ll(int x, int y, int border); 其中:x, y為封閉圖形內(nèi)的任意一點,border為邊界的顏色,也就是封閉圖形輪廓的顏色。調(diào)用了該函數(shù)后,將用由函數(shù)setfillstyle()規(guī)定的顏色和模式填滿整個封閉圖形。注意:a. 如果x或y取在邊界上,則不進行填充。b. 如果不是封閉圖形則填充會從沒有封閉的地方溢出去,填滿其它地方。c. 如果x或y在圖形外面,則填充封閉圖形外的屏幕區(qū)域。d. 由border指定的顏色值必須與圖形輪廓的顏色值相同, 但填充色可選任意顏色。下例是有關floodfill()函數(shù)的用法,該程序填充了bar3d()所畫長方體中其它兩個未填充的面。#i
42、nclude stdio.h#include graphics.hmain()int gdriver, gmode;struct fillsettingstype save;gdriver=DETECT;initgraph(&gdriver, &gmode, C:TC2.0BGI);setbkcolor(BLUE);cleardevice();setcolor(LIGHTRED);setlinestyle(0,0,3);setfillstyle(1,14); /*設置填充方式*/bar3d(100,200,400,350,200,1); /*畫長方體并填充*/floodfill(450,300
43、,LIGHTRED);/*填充長方體另外兩個面*/floodfill(250,150, LIGHTRED);rectangle(450,400,500,450); /*畫一矩形*/floodfill(470,420, LIGHTRED); /*填充矩形*/getch();closegraph();第七節(jié)屏幕操作函數(shù)除了清屏函數(shù)以外,關于屏幕操作還有以下函數(shù): void far setactivepage(int pagenum); void far setvisualpage(int pagenum);這兩個函數(shù)只用于EGA,VGA 以及HERCULES圖形適配器。setctivepage()
44、函數(shù)是為圖形輸出選擇激活頁。所謂激活頁是指后續(xù)圖形的輸出被寫到函數(shù)選定的pagenum頁面,該頁面并不一定可見。setvisualpage()函數(shù)才使pagenum所指定的頁面變成可見頁。頁面從0開始(Turbo C默認頁)。如果先用setactivepage() 函數(shù)在不同頁面上畫出一幅幅圖像,再用setvisualpage() 函數(shù)交替顯示,就可以實現(xiàn)一些動畫的效果。void far getimage(int xl,int yl, int x2,int y2,void far *mapbuf); void far putimge(int x,int,y,void * mapbuf, int
45、 op); unsined far imagesize(int xl,int yl,int x2,int y2);這三個函數(shù)用于將屏幕上的圖像復制到內(nèi)存,然后再將內(nèi)存中的圖像送回到屏幕上。首先通過函數(shù)imagesize() 測試要保存左上角為(xl,yl),右上角為(x2,y2)的圖形屏幕區(qū)域內(nèi)的全部內(nèi)容需多少個字節(jié),然后再給mapbuf分配一個所測數(shù)字節(jié)內(nèi)存空間的指針。通過調(diào)用getimage()函數(shù)就可將該區(qū)域內(nèi)的圖像保存在內(nèi)存中,需要時可用putimage()函數(shù)將該圖像輸出到左上角為點(x, y)的位置上,其中getimage()函數(shù)中的參數(shù)op規(guī)定如何釋放內(nèi)存中圖像。 關于這個參數(shù)的
46、定義參見下表。對于imagesize()函數(shù),只能返回字節(jié)數(shù)小于64K字節(jié)的圖像區(qū)域,否則將會出錯,出錯時返回-1。本節(jié)介紹的函數(shù)在圖像動畫處理、菜單設計技巧中非常有用。下面程序模擬兩個小球動態(tài)碰撞過程。#include stdio.h#include graphics.h#include malloc.hint main()int i, gdriver, gmode, size;void *buf;gdriver=DETECT;initgraph(&gdriver, &gmode, C:TC2.0BGI);setbkcolor(BLUE);cleardevice();setcolor(LIG
47、HTRED);setlinestyle(0,0,1);setfillstyle(1, 10);circle(100, 200, 30);floodfill(100, 200, 12);size=imagesize(69, 169, 131, 231);buf=malloc(size);if(!buf) return -1;getimage(69, 169, 131, 231,buf);putimage(500, 269, buf, COPY_PUT);for(i=0; i185; i+)putimage(70+i, 170, buf, COPY_PUT);putimage(500-i, 170
48、, buf, COPY_PUT);for(i=0;i185; i+)putimage(255-i, 170, buf, COPY_PUT);putimage(315+i, 170, buf, COPY_PUT);getch();closegraph();第八節(jié)用戶對文本字符大小的設置前面介紹的settextstyle()函數(shù),可以設定圖形方式下輸出文本字符這字體和大小但對于筆劃型字體(除8*8點陣字以個的字體),只能在水平和垂直方向以相同的放大倍數(shù)放大。 為此Turbo C2.0又提供了另外一個setusercharsize() 函數(shù),對筆劃字體可以分別設置水平和垂直方向的放大倍數(shù)。該函數(shù)的調(diào)
49、用格式為: void far setusercharsize(int mulx, intdivx, int muly, int divy); 該函數(shù)用來設置筆劃型字和放大系數(shù),它只有在settextstyle()函數(shù)中的charsize為0(或USER_CHAR_SIZE)時才起作用,并且字體為函數(shù)settextstyle()規(guī)定的字體。 調(diào)用函數(shù)setusercharsize()后,每個顯示在屏幕上的字符都以其缺省大小乘以mulx/divx為輸出字符寬,乘以muly/divy為輸出字符高。 #include stdio.h#include graphics.hint main()int gd
50、river, gmode;gdriver=DETECT;initgraph(&gdriver, &gmode, C:TC2.0BGI);setbkcolor(BLUE);cleardevice();setfillstyle(1, 2); /*設置填充方式*/setcolor(WHITE); /*設置白色作圖*/rectangle(100, 100, 330, 380);floodfill(50, 50, 14); /*填充方框以外的區(qū)域*/setcolor(12); /*作圖色為淡紅*/settextstyle(1, 0, 8); /*三重筆劃字體,放大8倍*/outtextxy(120, 1
51、20, Very Good);setusercharsize(2, 1, 4, 1);/*水平放大2倍,垂直放大4倍*/setcolor(15);settextstyle(3, 0, 5);/*無襯字筆劃,放大5倍*/outtextxy(220, 220, Very Good);setusercharsize(4, 1, 1, 1);settextstyle(3, 0, 0);outtextxy(180, 320, Good);getch();closegraph();return 0;第九節(jié)文本字體、字型和輸出方式的設置有關圖形方式下的文本輸出函數(shù),可以通過setcolor()函數(shù)設置輸出文
52、本的顏色。另外,也可以改變文本字體大小以及選擇是水平方向輸出還是垂直方向輸出。 void far settexjustify(int horiz, int vert); 該函數(shù)用于定位輸出字符串。對使用outtextxy(int x, int y, char far *str textstring)函數(shù)所輸出的字符串,其中哪個點對應于定位坐標(x,y)在TurboC2.0中是有規(guī)定的。如果把一個字符串看成一個長方形的圖形,在水平方向顯示時,字符串長方形按垂直方向可分為頂部,中部和底部三個位置,水平方向可分為左,中,右三個位置,兩者結(jié)合就有9個位置。settextjustify()函數(shù)的第一個參
53、數(shù)horiz 指出水平方向三個位置中的一個,第二個參數(shù)vert指出垂直方向三個位置中的一個,二者就確定了其中一個位置。當規(guī)定了這個位置后,用outtextxy() 函數(shù)輸出字符串時, 字符串長方形的這個規(guī)定位置就對準函數(shù)中的(x,y)位置。而對用uttext()函數(shù)輸出字符串時,這個規(guī)定的位置就位于現(xiàn)行游標的位置。 有關參數(shù)horiz和vert的取值參見graphics.h。void far settextstyle(int font, int direction,int charsize); 該函數(shù)用來設置輸出字符的字形(由font確定)、輸出方向(由direction確定)和字符大小(由c
54、harsize確定)等特性。 Turbo C2.0對函數(shù)中各個參數(shù)的規(guī)定見graphics.h。有關圖形屏幕下文本輸出和字體字型設置函數(shù)的用法請看下例: #include stdio.h#include graphics.hint main()int i, gdriver, gmode;char s30;gdriver=DETECT;initgraph(&gdriver, &gmode, C:TC2.0BGI);setbkcolor(BLUE);cleardevice();setviewport(100, 100, 540, 380, 1);/*定義一個圖形窗口*/setfillstyle(1
55、, 2); /*綠色以實填充*/setcolor(YELLOW);rectangle(0, 0, 439, 279);floodfill(50, 50, 14);setcolor(12);settextstyle(1, 0, 8);/*三重筆劃字體, 水平放大8倍*/outtextxy(20, 20, Good Better);setcolor(15);settextstyle(3, 0, 5);/*無襯筆劃字體, 水平放大5倍*/outtextxy(120, 120, Good Better);setcolor(14);settextstyle(2, 0, 8);i=620;sprintf(s, You
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 退役重武器測試題及答案
- 2023-2024學年山西省太原市迎澤區(qū)三年級(上)期末數(shù)學試卷(含答案)
- 小黑子考試試題及答案
- 2025年消防設施操作員之消防設備高級技能押題練習試題A卷含答案
- 2019-2025年消防設施操作員之消防設備中級技能能力檢測試卷B卷附答案
- 2023年全國翻譯專業(yè)資格(水平)考試英語三級筆譯實務試題真題及答案
- 配電柜知識培訓課件
- 卸妝膏護膚知識培訓課件
- 小紅船讀后感
- 市場營銷策略制定服務協(xié)議
- 車輛掛靠協(xié)議書
- 2025年湖南交通職業(yè)技術學院單招職業(yè)適應性測試題庫1套
- 2017年公務員多省聯(lián)考《申論》真題(吉林甲級卷)及參考答案(含詳細解析)
- 一年級下冊健康成長教案
- 電力系統(tǒng)老化問題及其隱患解決方案研究報告發(fā)布
- 2025年江西建設職業(yè)技術學院高職單招職業(yè)適應性測試近5年??及鎱⒖碱}庫含答案解析
- 鹽酸安非他酮合成工藝優(yōu)化-洞察分析
- 2021年考研英語一真題
- 2024中國移動上海分公司招聘340人易考易錯模擬試題(共500題)試卷后附參考答案
- 巨量千川營銷科學(初級)營銷師認證考試題(附答案)
- 2024年電力工程設備進口與清關合同
評論
0/150
提交評論