




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、 學(xué)號: 密級: 基于單片機的CO濃度檢測及報警系統(tǒng) 設(shè)計與制作學(xué) 院 名 稱:培黎工程技術(shù)學(xué)院專 業(yè) 名 稱:電子信息科學(xué)與技術(shù)學(xué) 生 姓 名:指 導(dǎo) 教 師: 二一五年五月Design and Manufacture of CO Concentration Detection and Alarm System Based on SCMCollege :School of Bailie EngineeringTechnologySubject :Electronic Information Science and TechnologyName :Directed by :May 2015鄭
2、重 聲 明本人呈交的學(xué)位論文,是在導(dǎo)師的指導(dǎo)下,獨立進行研究工作所取得的成果,所有數(shù)據(jù)、圖片資料真實可靠。盡我所知,除文中已經(jīng)注明引用的內(nèi)容外,本學(xué)位論文的研究成果不包含他人享有著作權(quán)的內(nèi)容。對本論文所涉及的研究工作做出貢獻的其他個人和集體,均已在文中以明確的方式標(biāo)明。本學(xué)位論文的知識產(chǎn)權(quán)歸屬于培養(yǎng)單位。本人簽名: 日期: I摘 要本文是以STC89C52芯片為核心設(shè)計制作了一種CO濃度檢測及報警系統(tǒng)。通過CO傳感器檢測空氣中CO濃度,經(jīng)電路處理實現(xiàn)報警及降低其濃度作用。該系統(tǒng)主要包括ADC0832模數(shù)轉(zhuǎn)換芯片,CO檢測,蜂鳴器預(yù)警電路,LCD液晶顯示電路等。軟件編程采用C語言,具有功耗低,成
3、本低等特點。關(guān)鍵詞:CO檢測;單片機;報警系統(tǒng) IIABSTRACT A detection and alarm system for CO concentration is designed with STC89C52 chip. It detects concentration of CO in air through carbon monoxide sensors, the role of alarm and reduce its concentration is achieved by circuit.This system mainly consists of ADC0832 chi
4、p,detection of CO, buzzer alarm circuit and LCD liquid crystal display circuit.The software is programmed with C language. Therefore,the system is characterized by low power dissipation and low cost. Key words: detection of CO;Single chip microcomputer; alarmsystem III目 錄TOC o 1-3 h u HYPERLINK l _T
5、oc21777 第1章 緒論 第1章 緒論1.1課題的背景和意義一氧化碳是無色、無臭、無味、有毒的氣體,熔點199,沸點191.5。標(biāo)準狀況下氣體密度為l.25g/L,和空氣密度(標(biāo)準狀況下1.293g/L)相差很小,這也是容易發(fā)生煤氣中毒的因素之一。一氧化碳分子中碳元素的化合價是2價,能進一步被氧比成4價,從而使一氧化碳具有可燃性和還原性,一氧化碳能夠在空氣中或氧氣中燃燒,生成二氧化碳。一氧化碳中毒(carbon monoxide poisoning),亦稱煤氣中毒。一氧化碳是無色、無臭、無味的氣體,故易于忽略而致中毒。常見于家庭居室通風(fēng)差的情況下,煤爐產(chǎn)生的煤氣或液化氣管道漏氣或工業(yè)生產(chǎn)煤
6、氣以及礦井中的一氧化碳吸入而致中毒。中毒原理:一氧化碳會與肺部的血紅蛋白結(jié)合,造成機體缺氧。一是輕度中毒?;颊呖沙霈F(xiàn)頭痛、頭暈、失眠、視物模糊、耳鳴、惡心、嘔吐、全身乏力、心動過速、短暫昏厥。血中碳氧血紅蛋白含量達10%-20%。二是中度中毒。除上述癥狀加重外,口唇、指甲、皮膚粘膜出現(xiàn)櫻桃紅色,多汗,血壓先升高后降低,心率加速,心律失常,煩躁,一時性感覺和運動分離(即尚有思維,但不能行動)。癥狀繼續(xù)加重,可出現(xiàn)嗜睡、昏迷。血中碳氧血紅蛋白約在30%-40%。經(jīng)及時搶救,可較快清醒,一般無并發(fā)癥和后遺癥。三是重度中毒。患者迅速進入昏迷狀態(tài)。初期四肢肌張力增加,或有陣發(fā)性強直性痙攣;晚期肌張力顯著
7、降低,患者面色蒼白或青紫,血壓下降,瞳孔散大,最后因呼吸麻痹而死亡。經(jīng)搶救存活者可有嚴重合并癥及后遺癥。一氧化碳的后遺癥。中、重度中毒病人有神經(jīng)衰弱、震顫麻痹、偏癱、偏盲、失語、吞咽困難、智力障礙、中毒性精神病。部分患者可發(fā)生繼發(fā)性腦病。在當(dāng)今社會發(fā)展中,現(xiàn)代化的發(fā)展給人類帶了很大的方便,但與此同時,人生安全越來越受到人們的重視,一氧化碳在工業(yè)領(lǐng)域所給我們帶來的方便不言而喻,但它對人體的危害也是顯而易見的。所以我們設(shè)計一款基于單片機控制的一氧化碳檢測儀,對一氧化碳進行檢測,為人們提供了安全的保障。1.2 CO檢測儀的種類目前,市場上一氧化碳檢測儀的種類是多種多樣,目前應(yīng)用得較為廣泛的是熱催化監(jiān)
8、測方式,但由于多種可熱性氣體都能催化氧化燃燒,導(dǎo)致檢測精度下降,另外,采用這種方式的檢測儀體積和功率都較大,不便于隨身攜帶,本設(shè)計使用的是一種采用點調(diào)制非光紅外(NDIR)氣體成分分析技術(shù)檢測一氧化碳氣體的方法的一氧化碳傳感器,該方法提高了檢測精度,大大降低了檢測儀的尺度和功耗,延長了電池供給時間,體積和功耗的有效降低。1.3 設(shè)計任務(wù)本設(shè)計的任務(wù)是設(shè)計一個由單片機控制的一氧化碳的濃度檢測及報警系統(tǒng),它將傳感器輸出的電壓信號進行A/D轉(zhuǎn)換、濾波、線性化,由單片機將電壓值轉(zhuǎn)換為氣體濃度和溫度送LCD1602液晶顯示,并判斷是否超過報警上限,若超過,則發(fā)出聲光報警,并打開風(fēng)扇降低一氧化碳的濃度。同
9、時用戶可以自己設(shè)定報警上限,使用戶可以根據(jù)實際情況方便的掌握安全狀況。該系統(tǒng)以STC89C52單片機為核心,可以實現(xiàn)聲光報警、故障自診斷、濃度顯示、報警限設(shè)置。它結(jié)構(gòu)簡單、性能穩(wěn)定、使用方便、價格低廉、智能化,具有一定的實用價值。第2章 CO檢測系統(tǒng)硬件設(shè)計本論文主要完成一氧化碳檢測儀軟件和硬件仿真設(shè)計,設(shè)計內(nèi)容包括:A/D轉(zhuǎn)換器程序、控制程序、超標(biāo)報警、鍵盤檢測、數(shù)據(jù)顯示等。硬件設(shè)計部分主要包括:單片機、A/D轉(zhuǎn)換器、時鐘芯片、LCD、外圍擴展數(shù)據(jù)RAM等芯片的選擇;硬件主電路設(shè)計、數(shù)據(jù)采集、模數(shù)轉(zhuǎn)換電路設(shè)計、液晶顯示電路設(shè)計、外圍擴充存儲器接口電路、時鐘電路、復(fù)位電路、鍵盤接口電路等功能模
10、塊電路設(shè)計。硬件結(jié)構(gòu)框圖2.1。硬件設(shè)計總體電路圖見附錄A1。圖2.1 硬件結(jié)構(gòu)框圖2.1 STC89C52單片機簡介本系統(tǒng)采用STC89C52單片機。而目前世界上較為著名的8位單片機的生產(chǎn)廠家和主要機型如下:美國Intel公司:MCS51系列及其增強型系列;美國Motorola公司:6801系列和6805系列;美國Atmel公司:89C51等單片機;美國Zilog公司:Z8系列及SUPER8;美國Fairchild公司:F8系列和3870系列;美國Rockwell公司:6500/1系列;美國TI(德克薩司儀器儀表)公司:TMS7000系列;NS(美國國家半導(dǎo)體)公司:NS8070系列等等。M
11、CS51系列單片機包括三個基本型8031、8051、8751。本系統(tǒng)采用STC89C52單片機為控制核心。而相比之下52型功能更為強大,ROM和RAM存儲空間更大,52還兼容51指令系統(tǒng)?;诒鞠到y(tǒng)設(shè)計內(nèi)容的需要,綜合考慮后,我們選擇單片機ATME公司的STC89C52為控制核心;主要基于考慮 HYPERLINK /datasheet/atmel/At89c52_cn.pdf t _blank STC89C52是一個低電壓,高性能CMOS 8位單片機,片內(nèi)含8KB的可反復(fù)擦寫的Flash只讀程序存儲器和256 bytes的隨機存取數(shù)據(jù)存儲器(RAM)、6個中斷源;時鐘頻率024MHz;器件采用
12、高密度、非易失性存儲技術(shù)生產(chǎn),并兼容標(biāo)準MCS-51指令系統(tǒng),功能強大。STC89C52是美國ATMEL公司生產(chǎn)的低電壓,高性能CMOS 8位單片機,片內(nèi)含8K bytes的可反復(fù)擦寫的只讀程序存儲器(PEROM)和256K bytes的隨機存取數(shù)據(jù)存儲器,器件采用ATMEL公司的高密度,非易失性存儲技術(shù)生產(chǎn),與標(biāo)準MCS-51指令系統(tǒng)及8052產(chǎn)品引腳兼容,片內(nèi)置通用8位中央處理器和FLASH存儲單元,功能強大,STC89C52單片機適合于許多較為復(fù)雜控制應(yīng)用場合。 圖2.2 引腳圖主要性能參數(shù):與MCS-51產(chǎn)品指令和引腳完全兼容;8K字節(jié)可重擦寫FLASH閃存存儲器;1000次寫/擦循環(huán)
13、;時鐘頻率:0Hz24MHz;三級加密存儲器;256字節(jié)內(nèi)部RAM;32個可編程I/O口線;3個16位定時/計數(shù)器;6個中斷源;可編程串行UART通道。2.2單片機最小系統(tǒng)的設(shè)計 采用STC89C52來設(shè)計一個單片機系統(tǒng)能運行起來的需求最小的系統(tǒng)15,電路圖見圖2.3:圖2.3 單片機最小系統(tǒng)圖上圖的最小單片機系統(tǒng)包含有晶振電路和復(fù)位電路,STC89C52芯片組成。晶振電路在各種指令的微操作在時間上有嚴格的次序,這種微操作的時間次序稱作時序, STC89C52的時鐘產(chǎn)生方式有兩種,一種是內(nèi)部時鐘方式,一種是外部時鐘方式。本系統(tǒng)中采用了內(nèi)部時鐘方式,為了盡量降低功耗的原則。電路圖見圖2.4。圖2
14、.4 晶振電路圖在89C52單片機的內(nèi)部有一個震蕩電路,只要在單片機的XTAL1和XTAL2引腳外接石英晶體(簡稱晶振)就構(gòu)成了自激振蕩器并在單片機內(nèi)部產(chǎn)生時鐘脈沖信號,圖中電容器C1和C2穩(wěn)定頻率和快速起振,晶振CRY選擇的是12MHz。復(fù)位電路在單片機工作中仍然是不可缺少的主要部件中,單片機工作時必須處于一種確定的狀態(tài)。端口線電平和輸入輸出狀態(tài)不確定可能使外圍設(shè)備誤動作,導(dǎo)致嚴重事故的發(fā)生;內(nèi)部一些控制寄存器(專用寄存器)內(nèi)容不確定可能導(dǎo)致定時器溢出、程序尚未開始就要中斷及串口亂傳向外設(shè)發(fā)送數(shù)據(jù)1。 圖2.5 上電復(fù)位電路圖本設(shè)計中復(fù)位電路采用的是上電復(fù)位與手動復(fù)位電路,開關(guān)未按下是上電復(fù)
15、位電路,上電復(fù)位電路在上電的瞬間,由于電容上的電壓不能突變,電容處于充電(導(dǎo)通)狀態(tài),故RST腳的電壓與VCC相同。隨著電容的充電,RST腳上的電壓才慢慢下降。選擇合理的充電常數(shù),就能保證在開關(guān)按下時是RST端有兩個機器周期以上的高電平從而使STC89C52內(nèi)部復(fù)位。開關(guān)按下時是按鍵手動復(fù)位電路,RST端通過電阻與VCC電源接通,通過電阻的分壓就可以實現(xiàn)單片機的復(fù)位4。電路圖見圖2.6: 圖2.6 復(fù)位電路圖2.3數(shù)據(jù)采集系統(tǒng)的簡介CO傳感器選用CO/CF-1000探頭組成,如下表2.1。表2.1 傳感器參數(shù)名稱一氧化碳傳感器 CO/CF-1000測量范圍0 - 1 000 ppm輸 出100
16、20nA/ppm分辨率0.05 ppm響應(yīng)時間 (T 90)50 seconds濕度范圍15-90 %RH(非凝結(jié))最大零點漂移(20to 40)10 ppm長期漂移2% /每月推薦負載值10線性度輸出線性測量電路由CO/CF-1000一氧化碳傳感器、ADC0832組成。當(dāng)空氣被內(nèi)部的采樣系統(tǒng)接收后,產(chǎn)生一個與一氧化碳濃度成正比的電壓信號,該電壓信號經(jīng)ADC0832與STC89C52單片機相連,在顯示器上顯示出一氧化碳的濃度值,當(dāng)超過國家規(guī)定的標(biāo)準時報警5。2.4模數(shù)轉(zhuǎn)換器的簡介由于ADC0832模數(shù)轉(zhuǎn)換器具有8位分辨率、雙通道A/D轉(zhuǎn)換、輸入輸出電平與TTL/CMOS相兼容、5V電源供電時輸
17、入電壓在05V之間、工作頻率為250KHZ 、轉(zhuǎn)換時間為32微秒、一般功耗僅為15MW等優(yōu)點,適合本系統(tǒng)的應(yīng)用,所以我們采用ADC0832為模數(shù)轉(zhuǎn)換器件3。電路圖見圖2.7如下:圖2.7 模數(shù)轉(zhuǎn)換電路圖ADC0832 具有以下特點:8位分辨率;雙通道A/D轉(zhuǎn)換;輸入輸出電平與TTL/CMOS相兼容;5V電源供電時輸入電壓在05V之間;工作頻率為250KHZ,轉(zhuǎn)換時間為32S;一般功耗僅為15mW;8P、14PDIP(雙列直插)、PICC 多種封裝;商用級芯片溫寬為0到+70,工業(yè)級芯片溫寬為40到+85;芯片接口說明:CS_片選使能,低電平芯片使能;CH0模擬輸入通道0,或作為IN+/-使用;
18、CH1模擬輸入通道1,或作為IN+/-使用;GND芯片參考0電位(地);DI數(shù)據(jù)信號輸入,選擇通道控制;DO數(shù)據(jù)信號輸出,轉(zhuǎn)換數(shù)據(jù)輸出;CLK芯片時鐘輸入;Vcc/REF電源輸入及參考電壓輸入(復(fù)用)。由于ADC0832模數(shù)轉(zhuǎn)換器的位數(shù)為8位,所以ADC0832模數(shù)轉(zhuǎn)換器的精度為:10ppm/256=0.039ppm。2.5按鍵電路的設(shè)計本系統(tǒng)選擇獨立式按鍵。鍵盤分為:獨立式和矩陣式兩類,每一類按其編碼方法又可以分為編碼和非編碼兩種。本系統(tǒng)具有人機對話功能,該功能即能隨時發(fā)出各種控制命令和數(shù)據(jù)輸入以及和LCD連接顯示運行狀態(tài)和運行結(jié)果。由于本系統(tǒng)只有UP、DOWN、OK、CANCEL4個控制命
19、令,所需按鍵較少,所以本系統(tǒng)選擇獨立式按鍵13。電路圖見圖2.8。圖2.8 按鍵電路圖2.6外圍擴充存儲器的簡介由于考慮STC89C52單片機具有8KB的程序存儲器(ROM),256B的數(shù)據(jù)存儲器(RAM),由于考慮到本系統(tǒng)的數(shù)據(jù)處理與存儲所需的容量,現(xiàn)在需要擴充存儲器的容量。在應(yīng)用中要保存一些參數(shù)和狀態(tài),本系統(tǒng)選用AT24C128存儲器8。電路圖見圖2.9。 圖2.9 外圍擴充存儲電路圖2.7上拉電阻電路的設(shè)計在主電路圖中接在P0口處有一個排阻RP1,由于P0口沒有內(nèi)接上拉電阻,為了為P0口外接線路有確定的高電平,所以要接上排阻RP1,以確保有P0口有穩(wěn)定的電平11。電路連接圖見圖2.10。
20、 圖2.10 上拉電阻電路圖2.8液晶顯示器簡介我們選用了AMPIRE128X64液晶顯示模塊,是由于本系統(tǒng)要有顯示裝置完成顯示功能,顯示器最好能夠顯示數(shù)據(jù)、圖形,考慮到同種LCD顯示器的屏幕越大體積越大,功耗越大的特點,該型號顯示器消耗電量比較低,可以滿足系統(tǒng)要求。該類液晶顯示模塊采用動態(tài)的液晶驅(qū)動,可用5V供電。AMPIRE128X64液晶共有22個引腳9。AMPIRE128X64液晶顯示模塊與計算機的接口電路有兩種方式。分為直接訪問方式和間接控制方式。直接訪問方式是把液晶模塊作為存儲器或I/O設(shè)備直接接在單片機的總線上,單片機以訪問存儲器或I/O設(shè)備的方式操作液晶顯示模塊的工作。間接控制
21、方式則不使用單片機的數(shù)據(jù)系統(tǒng),而是利用它的I/O口來實與顯示模塊的聯(lián)系。即將液晶顯示模塊的數(shù)據(jù)線與單片機的Pl口連接作為數(shù)據(jù)總線,另外三根時序控制信號線通常利用單片機的P3口中未被使用的I/O口來控制。這種訪問方式不占用存儲器空間,它的接口電路與時序無關(guān),其時序完全靠軟件編程實現(xiàn)。本系統(tǒng)采用間接控制方式14。液晶顯示電路連接原理圖見圖下:圖2.11 液晶顯示器電路圖2.9報警電路的設(shè)計圖2.12 報警電路接線圖報警信號通常有三種類型:一是閃光報警,因為閃動的指示燈更能提醒人們注意;二是鳴音報警,發(fā)出特定的音響,作用于人的聽覺器官,易于引起和加強警覺;三是語音報警,不僅能起到報警作用,還能直接給
22、出警報種類的信息。其中,前兩種報警裝置因硬件結(jié)構(gòu)簡單,軟件編程方便,常常在單片機應(yīng)用系統(tǒng)中使用;而語音報警雖然警報信息較直接,但硬件成本高,結(jié)構(gòu)較復(fù)雜。單頻音報警實現(xiàn)單頻音報警的接口電路比較簡單,其發(fā)音元件通常可采用壓電蜂鳴器,當(dāng)在蜂鳴器兩引腳上加315V直流工作電壓,就能產(chǎn)生3kHZ左右的蜂鳴振蕩音響。壓電式蜂鳴器,約需10mA的驅(qū)動電流,可在某端口接上一只三極管和電阻組成的驅(qū)動電路來驅(qū)動,如圖2.12所示。在圖2.12中,P1.0接三極管基極輸入端,當(dāng)P1.0輸出高電平“1”時,三極管導(dǎo)通,蜂鳴器的通電而發(fā)音,當(dāng)P1.0輸出低電平“0”時,三極管截止,蜂鳴器停止發(fā)音12。第3章 CO檢測系
23、統(tǒng)軟件設(shè)計3.1軟件設(shè)計結(jié)構(gòu)軟件設(shè)計部分主要包括:主程序/子程序流程的設(shè)計、功能模塊程序的編寫、軟/硬件結(jié)合調(diào)試與演示。主要包括以下功能模塊:51驅(qū)動、檢測、液晶顯示、時鐘、鍵盤、模數(shù)軟換10,軟件結(jié)構(gòu)框圖3.1。 系統(tǒng)初始化、按鍵掃描顯示選擇菜單測量相關(guān)設(shè)置數(shù)據(jù)處理串行通信對軟件進行處理圖3.1 軟件結(jié)構(gòu)框圖3.2主程序模塊的設(shè)計主程序?qū)崿F(xiàn)的功能:與硬件相結(jié)合實現(xiàn)便攜式一氧化碳檢測儀的各個功能。主要是檢測與顯示,時間調(diào)整與顯示,數(shù)據(jù)存儲,功能子函數(shù)的調(diào)用,見圖3.2。檢測主程序程序見附錄A2。開 始初始化CPU初始化時鐘初始化LED屏顯示開機畫面顯示時間顯示主菜單讀 鍵 圖3.2 主程序流程
24、圖3.3模數(shù)轉(zhuǎn)換的設(shè)計ADC0832轉(zhuǎn)換的流程圖見下圖3.3;ADC0832程序見附錄A3。開始使能芯片產(chǎn)生時鐘信號輸入通道控制字讀取2字節(jié)數(shù)據(jù)讀取2字節(jié)數(shù)據(jù)字節(jié)數(shù)據(jù)校正送入指定寄存器結(jié)束圖3.3 數(shù)轉(zhuǎn)換流程圖3.4按鍵模塊的設(shè)計和時鐘模塊的設(shè)計按鍵查詢式的流程圖見下圖,按鍵程序見附錄A4。按鍵程序入口按鍵按下調(diào)用延時程序按鍵釋放NYN鍵值傳送 圖3.4 按鍵查詢式的流程圖時鐘模塊操作流程圖見下圖,時鐘程序見附錄A5。開始初始化保護寄存器操作向DS寫入字節(jié)數(shù)據(jù)向DS讀取字節(jié)數(shù)據(jù)結(jié)束圖3.5 時鐘模塊操作流程圖3.5液晶顯示模塊的設(shè)計 LCD模塊在本系統(tǒng)中主要起著開界面漢字顯示,以及各控制效果的
25、顯示。采用直接訪問方式。液晶顯示的操作流程圖見下圖3.6,液晶程序見附錄A6。入口 讀狀態(tài)字 否忙? 是寫指令代碼/顯示數(shù)據(jù)讀顯示數(shù)據(jù)圖3.6 液晶顯示的操作流程圖系統(tǒng)調(diào)試及功能實現(xiàn)4.1總體系統(tǒng)調(diào)試 4.1.1軟件調(diào)試打開keil軟件,打開程序,檢查后單擊編譯按鍵,如果未發(fā)現(xiàn)錯誤和警告則說明程序能夠正常運行。編譯結(jié)果如圖所示:圖4.1 軟件編譯結(jié)果圖所以程序能夠正常運行。 4.1.2 軟件下載通過串口將電腦中已經(jīng)編寫好的程序傳輸入51單片機中,打開電源,檢查各模塊是否正常工作。首先將STC_ISP_V483這個串口通信軟件打開,選擇打開程序文件選項,找到需要錄入單片機的hex文件,選擇下載選
26、項,點擊后給單片機上電復(fù)位,等待信息框中顯示已下載成功,說明程序已經(jīng)錄入單片機。接下來首先通過按鍵選擇工作模式,然后根據(jù)傳感器模塊的類型將相應(yīng)的氣體放置在傳感器探頭附近,等待聲光報警模塊工作,當(dāng)報警模塊工作后,通過按下外部中斷按鍵選擇報警模式,按一下則led二極管關(guān)閉,按第二下則蜂鳴器關(guān)閉,按第三下則led和蜂鳴器都打開。將三個傳感器模塊都檢查完畢后,按下復(fù)位鍵,并關(guān)閉電源。通過監(jiān)測總體系統(tǒng)能夠正常工作。4.2 實物展示焊接成品如下圖4.2所示:4.2 焊接成品圖在焊接過程中,本設(shè)計采用萬能板來焊接,同時外接電源采用的是USB供電。接通電源初始圖如4.3所示 :4.3 接通電源初始圖在電源剛接
27、通時,液晶屏顯示當(dāng)前CO濃度為000 PM,設(shè)置的界限值為100 PM,風(fēng)扇處于未轉(zhuǎn)動狀態(tài),發(fā)光二極管未亮并且蜂鳴器不報警。系統(tǒng)工作時如圖4.4所示:4.4 工作實物圖當(dāng)CO傳感器檢測到的CO濃度大于國家標(biāo)準值100ppm時,蜂鳴器報警同時紅色指示燈發(fā)光、風(fēng)扇轉(zhuǎn)動。結(jié)論本次設(shè)計的任務(wù)是設(shè)計制作CO濃度檢測報警器,設(shè)計中使用了低電壓、高性能CMOS8位微處理器STC89C52 單片機作為控制核心,總體電路具有運行速度快,穩(wěn)定,結(jié)構(gòu)簡單,散熱迅速等特點,采用模塊化設(shè)計,這樣不僅有利于系統(tǒng)硬件的設(shè)計和調(diào)試,同時也方便對系統(tǒng)進行更改和系統(tǒng)硬件的升級。CO/CF-1000氣體傳感器模塊的特點在于其簡易性
28、和高效性,由于其輸出口在監(jiān)測到有害氣體時直接輸出低電平,這樣就免去了從氣體傳感器上采集信號,這樣硬件設(shè)計更加簡潔,所需的器件也更加易于購買,硬件出錯率也就更小,更加符合本設(shè)計的目的。本次設(shè)計涉及到的知識面較多,由于本人理論水平和實踐經(jīng)驗有限,本次設(shè)計還存在一些有待改進和優(yōu)化的地方,比如在檢測氣體種類上可以增加對煙霧、NO等方面。在實用性方面可以考慮將濃度監(jiān)測系統(tǒng)與室內(nèi)換氣系統(tǒng)連接,這樣就不僅做到了氣體監(jiān)測和警報,還做到了對有害氣體及時處理,使整個室內(nèi)監(jiān)控系統(tǒng)更加完善。參考文獻1何立民MCS-51系列單片機應(yīng)用系統(tǒng)設(shè)計 M北京航空航天大學(xué)出版社,1990,34-50.2馬忠梅單片機的C語言應(yīng)用程
29、序設(shè)計M北京航空航天大學(xué)出版社,2001,60-90.3陳小忠單片機接口技術(shù)實用子程序M人民郵電大學(xué)出版社,2005,80-120.4張淑清單片微型計算機接口技術(shù)及其應(yīng)用M國防工業(yè)大學(xué)出版社,2001,60-70.5曹琳琳單片機原理及接口技術(shù)M國防科技大學(xué)出版社,2000,80-102.6郭天祥.新概念51單片機C語言教程M.北京:電子工業(yè)出版社,2009,120-140.7周航慈.單片機應(yīng)用程序設(shè)計技術(shù)M.北京:北京航空航天大學(xué)出版社,2011,70-103.8石秀名.嵌入式系統(tǒng)原理與應(yīng)用M.北京:北京航空航天大學(xué)出版社,2009,30-50.9王宜懷.嵌入式技術(shù)基礎(chǔ)與實踐M.北京:北京航空
30、航天大學(xué)出版社,2007,90-100.10譚浩強.C程序設(shè)計M.第四版.北京:清華大學(xué)出版社,2010,87-90.11陳志旺.51系列單片機系統(tǒng)設(shè)計與實踐M.北京:電子工業(yè)出版社,2008,98-115.12余錫存,曹國華.單片機原理及接口技術(shù).第二版.西安:西安電子科技大學(xué)出版社,2012,150-170.13徐煜明單片機原理及接口技術(shù)M電子工業(yè)出版社,2005,110-140.14趙新民智能儀器原理及設(shè)計M哈爾濱工業(yè)大學(xué)出版社,1995,67-98.15徐英慧.嵌入式系統(tǒng)設(shè)計M.北京航空航天大學(xué)出版社,2010,35-60.致謝 我的畢業(yè)課題是便攜式一氧化碳檢測儀的設(shè)計,是一個實際的小
31、工程。作為一個本科的學(xué)生,我對實際的工程設(shè)計認識不夠,經(jīng)驗不足,難免在設(shè)計的整體框架中,有很多的細節(jié)沒有考慮。但*老師和同學(xué)們給予我鼓勵和很多寶貴的建議,并且悉心引導(dǎo),給予我一個比較清晰的設(shè)計思路,幫助我解決了許多設(shè)計上的困難。最后還要感謝在百忙之中進行論文評審的老師們,對論文的不足之處敬請批評點。附錄附錄A1 硬件設(shè)計總體電路圖附錄A2 檢測主程序程序#include /調(diào)用外函數(shù)/#include #include #include #include #include #include /*初始化CPU*2/void init_cpu() /初始化cpu EA=1;TR0=1;TR1=1;
32、TMOD=0 x11;TH1=0 x3c;TL1=0 xb0;/*void time1(void) interrupt 3 using 1 TH1=(65536-50000)/256;TL1=(65536-50000)%256; keyval=P1; * /初始化CPU結(jié)束/void main_menu_initial() /LCD主菜單初始化./main1_menu0.menu_count=4; /有4個菜單項./main1_menu0.display=measurearray; /定義一個”開始測量“數(shù)組/main1_menu0.subs=NULL; main1_menu0.childre
33、n_menus=measure_menu;/當(dāng)前菜單子菜單的指針main1_menu0.parent_menus=NULL;void measure_menu_initial() /“開始測量”菜單設(shè)置/ measure_menu0.menu_count=2; measure_menu0.display=qr; /開始測量函數(shù), 確認. measure_menu0.subs=start_measure_function; /開始測量函數(shù) measure_menu0.children_menus=NULL; measure_menu0.parent_menus=main1_menu; measu
34、re_menu1.menu_count=2; measure_menu1.display=qx; /開始測量函數(shù), 取消. measure_menu1.subs=NULL; measure_menu1.children_menus=NULL; measure_menu1.parent_menus=main1_menu; /還有void store_menu_initial()、void time_menu_initial()/void led_menu_pro() max_item=menu_led-menu_count;switch(keyval)case 0: break;case 1:
35、/向上鍵.if(user_choosen=0)user_choosen=max_item;shuaxin=1;user_choosen-;break; /“向上”“向下”“確認”“取消”鍵/if(shuaxin)/是否需要刷新LCD標(biāo)志位. Clr_Scr(); shuaxin=0;led_menu_show();v oid led_menu_show()uchar n;max_item=menu_led-menu_count;if (max_item=4) /菜單項為3則表示為主菜單.for(n=0;n4;n+) draw_bmp(n*2,20,96,0,menu_ledn.display)
36、;select_item(user_choosen); /標(biāo)記出當(dāng)前菜單項.elseswitch(temp_choosen) case 0:draw_bmp(0,20,96,0,measurearray); /“開始測量”數(shù)組/break; default:break;for(n=0;n1)&0 x1; _nop_(); _nop_(); ADCLK=0;/拉低CLK端,形成下降沿3 ADDI=1;/控制命令結(jié)束 _nop_(); _nop_(); dat=0; for(i=0;i8;i+) dat|=ADDO;/收數(shù)據(jù) ADCLK=1; _nop_(); _nop_(); ADCLK=0;/
37、形成一次時鐘脈沖 _nop_(); _nop_(); dat=1; if(i=7)dat|=ADDO; for(i=0;i8;i+) j=0; j=j|ADDO;/收數(shù)據(jù) ADCLK=1; _nop_(); _nop_(); ADCLK=0;/形成一次時鐘脈沖 _nop_(); _nop_(); j=j7; ndat=ndat|j; if(i=1; ADCS=1;/拉低CS端 ADCLK=0;/拉低CLK端 ADDO=1;/拉高數(shù)據(jù)端,回到初始狀態(tài) dat0; i-) IO = ACC0; CLK = 1; /下降沿寫入數(shù)據(jù)/ CLK = 0; ACC = ACC 1; /*函數(shù):讀出字節(jié)子函
38、數(shù)*/OutputByte(void) /上升沿讀出數(shù)據(jù)/*函數(shù):設(shè)置初始時間*/void SetTime(unsigned char *pSecDa) WriteTo1302(0 x8e,0 x00); / 控制命令,WP=0,寫操作 / for(i =7;i0;i-) WriteTo1302(Addr,*pSecDa); / 秒 分 時 日 月 星期 年 / pSecDa+; Addr +=2; WriteTo1302(0 x8e,0 x80); / 控制命令,WP=1,寫保護 / /*函數(shù):讀取DS1302當(dāng)前時間*/void GetTime(void) for (i=0;i 返回給小時
39、位/ if(sec&0 x0f)=0 x0a) sec&=0 xf0; sec+=0 x10; / 如果秒位滿十,向十秒位進一 if(day=8) day=1; / 如果星期滿七,重新從星期一開始計 / if(sec&0 xf0)=0 x60) sec&=0 x0f; / 如果十秒位滿六,清零 /if(date&0 xf0)=0 x30)&(date&0 x0f)=0 x02) date&=0 x00;if(month&0 xf0)=0 x10)&(month&0 x0f)=0 x03) month&=0 x00;if(year&0 xf0)=0 xa0) year&=0 x0f; Curti
40、me0 = sec; Curtime1 = min; SetTime(&Curtime0); / 將調(diào)整過后的時間值寫入DS1302 / / *時鐘初始化子函數(shù)*/void Init_Clock(void) K1=1; K2=1; K3=1; K4=1; K5=1; K6=1; K7=1; KT=0; n=0; Init_T0(); /*刷新顯示子函數(shù)*/ void Refresh(void) GetTime(); CS1=1;CS2=0; if(K6) sz_disp16(5,40,1,shuzisec&0 x0f); / 秒位 / sz_disp16(5,32,1,shuzisec4);
41、/ 十秒位 / else hz_disp16(5,32,1,kongbai2); / 秒位 十秒位 / if(K5) sz_disp16(5,8,1,shuzimin&0 x0f); / 分鐘位 / sz_disp16(5,0,1,shuzimin4); / 十分位 / else hz_disp16(5,0,1,kongbai2); /*狀態(tài)判斷于提示*/void State(void)CS1=1;CS2=0;if(KT=1) hz_disp16(1,32,1,tiao); hz_disp16(1,48,1,shi2); else hz_disp16(1,32,1,kongbai2); hz_
42、disp16(1,48,1,kongbai2); 附錄A6 液晶程序/*位定義*/sbit RST = P20; / 復(fù)位端 /sbit E = P21; / 使能端 / #define Disp_On 0 x3f / 顯示開指令 /#define Disp_Off 0 x3e / 顯示關(guān)指令 /#define Col_Add 0 x40 / 定位到第0列指令 /#define Page_Add 0 xb8 / 定位到第0頁指令 /#define Start_Line 0 xc0 / 定位從DDROM中的第0行開始往屏幕上顯示 unsigned char code measurearray/*
43、調(diào)入了一幅圖像:測量:寬度x高度=96x16*/ unsigned char code storearray /*調(diào)入了一幅圖像:存儲:寬度x高度=96x16*/ /還有時間設(shè)置,開始測量等圖像/*漢字點陣碼*/char code huan= / 歡 16*16 /0 x14,0 x24,0 x44,0 x84,0 x64,0 x1C,0 x20,0 x18,0 x0F,0 xE8,0 x08,0 x08,0 x28,0 x18,0 x08,0 x00,0 x20,0 x10,0 x4C,0 x43,0 x43,0 x2C,0 x20,0 x10,0 x0C,0 x03,0 x06,0 x18
44、,0 x30,0 x60,0 x20,0 x00;/迎,使,用,等漢字如其所示/*字母點陣碼*/char code Kg_K= / 字母K 8*16 /0 x08,0 xF8,0 x88,0 xC0,0 x28,0 x18,0 x08,0 x00,0 x20,0 x3F,0 x20,0 x01,0 x26,0 x38,0 x20,0 x00,;nsigned char code FirstPage= / 開機畫面 DPY工作室 /void delay(unsigned int t) /延時/ unsigned int i,j; for(i=0;it;i+) for(j=0;j10;j+) ;
45、/*寫命令到LCD*/void write_command(unsigned char cmdcode) RS = 0; RW = 0; P0 = cmdcode; delay(0); E = 1; delay(0); E = 0; /*寫數(shù)據(jù)到LCD*/void write_data(unsigned char Dispdata)/*清顯示屏*/void Clr_Scr() unsigned char j ,k; CS2=1;CS1=0; / 清左半屏 / write_command(Page_Add+0); write_command(Col_Add+0); for(k=0;k4;k+)
46、/ 清左上半屏 / / write_command(Page_Add+k); for(j=0;j64;j+) write_data(0 x00); for(k=0;k4;k+) / 清左下半屏 / write_command(Page_Add+4); for(j=0;j64;j+) write_data(0 x00); CS2=0;CS1=1; / 清右半屏 / write_command(Page_Add+0); write_command(Col_Add+0); for(k=0;k4;k+) / 清右上半屏 / for(j=0;j64;j+) write_data(0 x00); for(
47、k=0;k4;k+) / 清右下半屏 / write_command(Page_Add+4); for(j=0;j64;j+) write_data(0 x00); /*顯示12864圖片*/void Disp_Img(unsigned char code *img)/*指定位置顯示數(shù)字8*16*/void sz_disp16(unsigned char pag,unsigned char col,unsigned char mod, unsigned char code *szk) unsigned char j=0,i=0; for(j=0;j2;j+) write_command(Pag
48、e_Add+pag+j); write_command(Col_Add+col); for(i=0;i 1. 在.h/.cpp的開頭應(yīng)有一段格式統(tǒng)一的說明,內(nèi)容包括: a. 文件名 (FileName); b. 創(chuàng)建人 (Creater); c. 文件創(chuàng)建時間 (Date); d. 簡短說明文件功能、用途 (Comment)。好習(xí)慣 2. 除非極其簡單,否則對函數(shù)應(yīng)有注釋說明。內(nèi)容包括:功能、入口/出口參數(shù),必要 時還可有備注或補充說明。還是好習(xí)慣 3. 每列代碼的長度推薦為 80列,最長不得超過120列;折行以對齊為準。太寬了,我的限制是60列,因為文本方式下屏幕一共80列,如果你用BC這一
49、類的編輯器,窗口邊框等又要占據(jù)一定空間,所以80列太寬 4. 循環(huán)、分支代碼,判斷條件與執(zhí)行代碼不得在同一行上。很對 5. 指針的定義,* 號既可以緊接類型,也可以在變量名之前。 例:可寫做:int*pnsize; 也可寫做:int*pnsize; 但不得寫做:int*pnsize;建議采用第二種,除非附加另外一條規(guī)定:一次只聲明一個變量,否則就會讓人混淆,比如:int* a, b;看起來b好像也是個指針,其實不是。 6. 在類的成員函數(shù)內(nèi)調(diào)用非成員函數(shù)時,在非成員函數(shù)名前必須加上:。這一條我倒覺得并不是必需的,我的看法是決不要讓你的類成員函數(shù)和全局函數(shù)的名稱相同(或類似) 7. 函數(shù)入口參數(shù)
50、有缺省值時,應(yīng)注釋說明。 例:BOOL CWpsDib:PaintDIB(CDC* pDC, CRect& rc,int nBrightness, file:/*=0*/BOOL bGrayScale file:/*=FALSE*/ )每個變量寫一行,必要時加上/*in, out*/注釋 8. elseif 必須寫在一行。應(yīng)該盡量避免else if這樣的結(jié)構(gòu) 9. 與、有關(guān)的各項規(guī)定:9.1、應(yīng)獨占一行。在該行內(nèi)可有注釋。 9.2 必須另起一行, 之后的代碼必須縮進一個Tab。與必須在同 一列上。 9.3 在循環(huán)、分支之后若只有一行代碼,雖然可省略、,但不推薦這么 做。若省略后可能引起歧義,則
51、必須加上、。持保留意見,因為GNU的代碼規(guī)范是這樣的:if ( NULL = ptr )/ do something here或者if ( NULL = ptr ) / do something here爭論哪個更好并沒有意義,關(guān)鍵是統(tǒng)一,如果用VC當(dāng)然你的辦法最方便,可是如果你用emacs或者vi,就不是這樣了。 10. 與空格有關(guān)的各項規(guī)定。 10.1 在所有兩目、三目運算符的兩邊都必須有空格。在單目運算符兩端不必空格。但 在、:、.、等運算符前后,及&(取地址)、* (取值)等運算符之后不得有空格。 10.2for、while、if 等關(guān)鍵詞之后應(yīng)有1個空格,再接(,之后無空格;在結(jié)尾
52、的)前不得有空格。我認為在括號兩端加空格并不是什么錯誤,尤其是在一個條件十分復(fù)雜的if語句里 10.3 調(diào)用函數(shù)、宏時,(、)前后不得有空格。 10.4類型強制轉(zhuǎn)換時,()前后不得有空格同上 11. 與縮進有關(guān)的各項規(guī)定 11.1 縮進以 Tab 為單位。1 個 Tab 為 4 個空格我認為這個值應(yīng)該更大,我自己使用8個空格,如果你的代碼因為縮進幅度太大而導(dǎo)致折行,那么幾乎可以肯定你的程序設(shè)計方案有問題。 11.2 下列情況,代碼縮進一個 Tab: 1. 函數(shù)體相對函數(shù)名及、。 2. if、else、for、while、do 等之后的代碼。 3. 一行之內(nèi)寫不下,折行之后的代碼,應(yīng)在合理的位置
53、進行折行。若有 + - * / 等運 算符,則運算符應(yīng)在上一行末尾,而不應(yīng)在下一行的行首。這一條我反對,運算符應(yīng)該放在下一行行首,以使人能清楚的知道這一行是續(xù)上一行的,比如if ( something& somethingelse& otherthings )如果寫做if ( something &somethingelse &otherthings )反而看不清楚 11.3 下列情況,不必縮進:switch 之后的 case、default。編程規(guī)范與范例目 錄1 排版 62 注釋 113 標(biāo)識符命名 184 可讀性 205 變量、結(jié)構(gòu) 226 函數(shù)、過程 287 可測性 368 程序效率
54、409 質(zhì)量保證 4410 代碼編輯、編譯、審查 5011 代碼測試、維護 5212 宏 53 1 排版1-1:程序塊要采用縮進風(fēng)格編寫,縮進的空格數(shù)為4個。說明:對于由開發(fā)工具自動生成的代碼可以有不一致。1-2:相對獨立的程序塊之間、變量說明之后必須加空行。示例:如下例子不符合規(guī)范。if (!valid_ni(ni) . / program coderepssn_ind = ssn_dataindex.repssn_index;repssn_ni = ssn_dataindex.ni;應(yīng)如下書寫if (!valid_ni(ni) . / program coderepssn_ind = ss
55、n_dataindex.repssn_index;repssn_ni = ssn_dataindex.ni;1-3:較長的語句(80字符)要分成多行書寫,長表達式要在低優(yōu)先級操作符處劃分新行,操作符放在新行之首,劃分出的新行要進行適當(dāng)?shù)目s進,使排版整齊,語句可讀。示例:perm_count_msg.head.len = NO7_TO_STAT_PERM_COUNT_LEN + STAT_SIZE_PER_FRAM * sizeof( _UL );act_task_tableframe_id * STAT_TASK_CHECK_NUMBER + index.occupied = stat_poi
56、index.occupied;act_task_tabletaskno.duration_true_or_false = SYS_get_sccp_statistic_state( stat_item );report_or_not_flag = (taskno MAX_ACT_TASK_NUMBER) & (n7stat_stat_item_valid (stat_item) & (act_task_tabletaskno.result_data != 0); 1-4:循環(huán)、判斷等語句中若有較長的表達式或語句,則要進行適應(yīng)的劃分,長表達式要在低優(yōu)先級操作符處劃分新行,操作符放在新行之首。示例
57、:if (taskno max_act_task_number) & (n7stat_stat_item_valid (stat_item) . / program codefor (i = 0, j = 0; (i BufferKeywordword_index.word_length) & (j NewKeyword.word_length); i+, j+) . / program codefor (i = 0, j = 0; (i first_word_length) & (j ),后不應(yīng)加空格。說明:采用這種松散方式編寫代碼的目的是使代碼更加清晰。由于留空格所產(chǎn)生的清晰性是相對的,所
58、以,在已經(jīng)非常清晰的語句中沒有必要再留空格,如果語句已足夠清晰則括號內(nèi)側(cè)(即左括號后面和右括號前面)不需要加空格,多重括號間不必加空格,因為在C/C+語言中括號已經(jīng)是最清晰的標(biāo)志了。在長語句中,如果需要加的空格非常多,那么應(yīng)該保持整體清晰,而在局部不加空格。給操作符留空格時不要連續(xù)留兩個以上空格。示例:(1) 逗號、分號只在后面加空格。int a, b, c; (2)比較操作符, 賦值操作符=、 +=,算術(shù)操作符+、%,邏輯操作符&、&,位域操作符= MAX_TIME_VALUE) a = b + c;a *= 2;a = b 2;(3)!、+、-、&(地址運算符)等單目操作符前后不加空格。*
59、p = a; / 內(nèi)容操作*與內(nèi)容之間flag = !isEmpty; / 非操作!與內(nèi)容之間p = &mem; / 地址操作& 與內(nèi)容之間i+; / +,-與內(nèi)容之間(4)-、.前后不加空格。p-id = pid; / -指針前后不加空格(5) if、for、while、switch等與后面的括號間應(yīng)加空格,使if等關(guān)鍵字更為突出、明顯。if (a = b & c d) 1-1:一行程序以小于80字符為宜,不要寫得過長。 2 注釋2-1:一般情況下,源程序有效注釋量必須在20以上。說明:注釋的原則是有助于對程序的閱讀理解,在該加的地方都加了,注釋不宜太多也不能太少,注釋語言必須準確、易懂、簡
60、潔。2-2:說明性文件(如頭文件.h文件、.inc文件、.def文件、編譯說明文件.cfg等)頭部應(yīng)進行注釋,注釋必須列出:版權(quán)說明、版本號、生成日期、作者、內(nèi)容、功能、與其它文件的關(guān)系、修改日志等,頭文件的注釋中還應(yīng)有函數(shù)功能簡要說明。示例:下面這段頭文件的頭注釋比較標(biāo)準,當(dāng)然,并不局限于此格式,但上述信息建議要包含在內(nèi)。/* Copyright (C), 1988-1999, Huawei Tech. Co., Ltd. File name: / 文件名 Author: Version: Date: / 作者、版本及完成日期 Description: / 用于詳細說明此程序文件完成的主要功
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五公司股份質(zhì)押合同書
- 貨物運輸合同責(zé)任保險范例
- 維護維修簡單合同范例
- 消防用購買合同范本
- 2025租賃合同和租賃物買賣合同范文
- 2025年平頂山職業(yè)技術(shù)學(xué)院高職單招語文2019-2024歷年真題考點試卷含答案解析
- 細胞抗衰課程介紹
- 2025年寧波衛(wèi)生職業(yè)技術(shù)學(xué)院高職單招職業(yè)技能測試近5年常考版參考題庫含答案解析
- 2025年天津濱海職業(yè)學(xué)院高職單招(數(shù)學(xué))歷年真題考點含答案解析
- 2025年天津工程職業(yè)技術(shù)學(xué)院高職單招語文2019-2024歷年真題考點試卷含答案解析
- 臨床輸血規(guī)范
- 護理實習(xí)生崗前培訓(xùn)課件
- 早期大腸癌的診斷與內(nèi)鏡下治療課件
- 艾賓浩斯記憶表格遺忘曲線
- 第6章-非線性有限元法(幾何非線性)課件
- 初中物理-流體壓強與流速的關(guān)系教學(xué)設(shè)計學(xué)情分析教材分析課后反思
- 差額定率分檔累進法計算
- 第5章全程導(dǎo)游服務(wù)程序與服務(wù)質(zhì)量(課件)《導(dǎo)游業(yè)務(wù)》(第五版)
- 專項資金支出明細表參考模板范本
- 《陳情表》《項脊軒志》默寫練習(xí)-統(tǒng)編版高中語文選擇性必修下冊
- 動能和勢能的相互轉(zhuǎn)化
評論
0/150
提交評論