內(nèi)容:本項目利用AD加光敏電阻傳感器,按鍵及DA對直流電機(jī)的控制實(shí)現(xiàn)智能百葉窗的控制。具體功能:數(shù)碼管顯示測量結(jié)果光強(qiáng),設(shè)置三個按鍵:手動/自動切換、手動正轉(zhuǎn)和手動反轉(zhuǎn),用一個發(fā)光二極管顯示手動/自動狀態(tài),自動狀態(tài)時二極管亮。設(shè)置兩個極限位置保護(hù)行程開關(guān),用于保護(hù)百葉窗葉片:當(dāng)正轉(zhuǎn)到極限位置壓下行程開關(guān)時,電機(jī)停止正轉(zhuǎn),但還可以反轉(zhuǎn);當(dāng)反轉(zhuǎn)到極限位置壓下行程開關(guān)時,電機(jī)停止反轉(zhuǎn),但還可以正轉(zhuǎn)。 意義:利用單片機(jī)進(jìn)行光照監(jiān)控及窗戶自動化控制,能夠很好的理解和學(xué)習(xí)單片機(jī)的控制及設(shè)計。 二、整體設(shè)計原理及方案
2.1使用器件本次實(shí)驗(yàn)使用器件為Generic-8051系列單片機(jī),ADC0809芯片,DAC0832芯片,8279鍵盤、顯示控制器芯片,兩個電位開關(guān),三個發(fā)光二極管,LED燈以及自行焊接的光強(qiáng)信號采集電路板一塊。 2.2工作原理光強(qiáng)信號采集電路每一次采集光強(qiáng)信號之后,將光強(qiáng)信號傳輸至ADC0809芯片,通過模/數(shù)轉(zhuǎn)換后,由單片機(jī)采集轉(zhuǎn)換后的數(shù)字信號,實(shí)行判斷光強(qiáng)是否超過閾值,通過8279鍵盤、顯示控制器芯片顯示光強(qiáng)信號的數(shù)值,并結(jié)合鍵盤上按鍵的控制(自動/手動切換,手動正轉(zhuǎn),手動反轉(zhuǎn)),實(shí)現(xiàn)預(yù)定的輸出。輸出的數(shù)字信號經(jīng)由DAC0832芯片轉(zhuǎn)換成模擬信號,并將模擬信號輸送到電機(jī)控制端實(shí)現(xiàn)執(zhí)行功能。 因本實(shí)驗(yàn)電機(jī)不能實(shí)現(xiàn)反轉(zhuǎn),故用快轉(zhuǎn)代替正轉(zhuǎn),慢轉(zhuǎn)代替反轉(zhuǎn)。 2.3設(shè)計方案
2.3.1 功能切換及功能指示 該部分有3個按鍵及1個紅色LED燈組成。其中一個按鍵為功能切換按鍵,連接著8051的外部中斷接口。另外兩個按鍵為手動正轉(zhuǎn)和手動反轉(zhuǎn)。接外部中斷的按鍵按下可以切換工作模式:自動模式,手動模式。LED燈1為模式指示燈,當(dāng)為自動模式的時候亮,手動模式的時候滅。當(dāng)自動模式時,根據(jù)自設(shè)定的閾值,當(dāng)超過最強(qiáng)光照強(qiáng)度時控制電機(jī)慢轉(zhuǎn),當(dāng)?shù)陀谧钊豕鈴?qiáng)時控制電機(jī)快轉(zhuǎn)。當(dāng)處于手動模式時與光強(qiáng)度無關(guān),按下手動正轉(zhuǎn)鍵則電機(jī)正轉(zhuǎn),按下手動反轉(zhuǎn)鍵則電機(jī)反轉(zhuǎn)。 2.3.2光照獲取及光照顯示首先由光敏電阻組成的傳感器模塊提供隨光照強(qiáng)度變化的電壓值,在由A/D0809轉(zhuǎn)換電路,將模擬量轉(zhuǎn)換為數(shù)字量。還有一個由8279控制的6位數(shù)碼管,我們將光照信息實(shí)時顯示在數(shù)碼管的前2位。 2.3.3極限開關(guān)的設(shè)置極限開關(guān)通過P0.1和P0.2分別控制手動正轉(zhuǎn)和手動反轉(zhuǎn)停止。當(dāng)極限開關(guān)為低電平時使電機(jī)停轉(zhuǎn),高電平時不影響電機(jī)轉(zhuǎn)動。同時當(dāng)開關(guān)低電平時點(diǎn)亮一個發(fā)光二極管代表極限開關(guān)打開,電機(jī)停止轉(zhuǎn)動。 三、硬件電路圖
3.1單片機(jī)最小系統(tǒng)該設(shè)計中除了熱敏電阻電路其余電路均由實(shí)驗(yàn)臺提供,實(shí)驗(yàn)臺上提供了51單片機(jī)的最小系統(tǒng)并做了相關(guān)設(shè)定。 1)、微處理器:i80c31,它的P1口、P3口皆對用戶開放,供用戶使用。 2)、時鐘頻率:6.0MHz 3)、存儲器:程序存儲器與數(shù)據(jù)存儲器統(tǒng)一編址,最多可達(dá)64k,板載ROM12k;RAM1(程序存儲器6264)8k供用戶下載實(shí)驗(yàn)程序,可擴(kuò)展達(dá)32k;RAM2(數(shù)據(jù)存儲器6264)8k供用戶程序使用,可擴(kuò)展達(dá)32k。在程序存儲器中,0000H----2FFFH為監(jiān)控程序存儲器區(qū),用戶不可用,4000H----5FFFH為用戶實(shí)驗(yàn)程序存儲區(qū),供用戶下載實(shí)驗(yàn)程序。數(shù)據(jù)存儲器的范圍為:6000H----7FFFH,供用戶實(shí)驗(yàn)程序使用。 注意:因用戶實(shí)驗(yàn)程序區(qū)位于4000H-----5FFFH,用戶在編寫實(shí)驗(yàn)程序時要注意,程序的起始地址應(yīng)為4000H,所用的中斷入口地址均應(yīng)在原地址的基礎(chǔ)上,加上4000H。例如:外部中斷0的原中斷入口為0003H,用戶實(shí)驗(yàn)程序的外部中斷0的中斷程序入口為4003H。 中斷名稱 8051原中斷程序入口 用戶實(shí)驗(yàn)程序響應(yīng)程序入口 外部中斷0 0003H 4003H 定時器0中斷 000BH 400BH 外部中斷1 0013H 4013H 定時器1中斷 001BH 401BH 串行口中斷 0023H 4023H 表1-1:用戶中斷程序入口表 利用這些提供的基本硬件電路就可以進(jìn)行相關(guān)的設(shè)計。 3.2 A/D轉(zhuǎn)換八路八位A/D實(shí)驗(yàn)電路由一片ADC0809,一片74LS04,一片74LS32組成,該電路中,ADIN0—ADIN7是ADC0809的模擬量輸入插孔,CS0809是0809的AD啟動和片選的輸入插孔,EOC是0809轉(zhuǎn)換結(jié)束標(biāo)志,高電平表示轉(zhuǎn)換結(jié)束。齊納二極管LM336-5提供5V的參考電源,ADC0809的參考電壓,數(shù)據(jù)總線輸出,通道控制線均已接好。  3.3 D/A轉(zhuǎn)換電路原理八路八位A/D實(shí)驗(yàn)電路由一片ADC0809,一片74LS04,一片74LS32組成,該電路中,ADIN0—ADIN7是ADC0809的模擬量輸入插孔,CS0809是0809的AD啟動和片選的輸入插孔,EOC是0809轉(zhuǎn)換結(jié)束標(biāo)志,高電平表示轉(zhuǎn)換結(jié)束。齊納二極管LM336-5提供5V的參考電源,ADC0809的參考電壓,數(shù)據(jù)總線輸出,通道控制線均已接好。 D/A0832電路設(shè)計3.3.1電路原理八位雙緩沖D/A實(shí)驗(yàn)電路由一片DAC0832。一片74LS00,一片74LS04,一片LM324組成,該電路中除DAC0832的片選未接好外,其他信號均已接好,片選插孔標(biāo)號CS0832。輸出插孔標(biāo)號DAOUT。該電路為非偏移二進(jìn)制D/A轉(zhuǎn)換電路,通過調(diào)節(jié)POT3,可調(diào)節(jié)D/A轉(zhuǎn)換器的滿偏值,調(diào)節(jié)POT2,可調(diào)節(jié)D/A轉(zhuǎn)換器的零偏值。 
3.4 8279鍵盤、顯示電路
3.4.1電路原理8279顯示電路由6位共陰極數(shù)碼管顯示,74LS244為段驅(qū)動器,75451為位驅(qū)動器,可編程鍵盤電路由1片74LS138組成,8279的數(shù)據(jù)口,地址,讀寫線,復(fù)位,時鐘,片選都已經(jīng)接好,鍵盤行列掃描線均有插孔輸出。鍵盤行掃描線插孔號為KA0~KA3;列掃描線插孔號為RL0~RL7;8279還引出CTRL、SHIFT插孔。六位數(shù)碼管的位選、段選信號可以從8279引入,也可以有外部的其他電路引入,原理圖如下:  3.4.2電路測試見整機(jī)測試六位數(shù)碼管電路的測試:除去電路板上數(shù)碼管右側(cè)的跳線,系統(tǒng)加點(diǎn),用導(dǎo)線將插孔LED1接低電平(GND),再將插孔LED-A,LED-B,LED-C,LED-D,LED-E,LED-F,LED-G,LED-DP依次接高電平(VCC),則數(shù)碼管SLED1的相應(yīng)段應(yīng)點(diǎn)亮,如果所有的段都不亮,則檢查相應(yīng)的芯片75451,如果個別段不亮,則檢查該段的連線、及數(shù)碼管是否損壞。用同樣的方法依次檢查其它數(shù)碼管。 8279顯示、鍵盤控制芯片電路的測試:加上數(shù)碼管右邊的所有短路線,復(fù)位系統(tǒng),應(yīng)能正常顯示。否則檢查8279芯片、244芯片、138芯片是否正常。
3.5 光強(qiáng)信號采集電路 該信號采集電路由電壓跟隨器(輸入級),差動比例放大器(中間級)以及反向比例放大器(輸出級)構(gòu)成。中間級為調(diào)零電路,輸出級將高于零點(diǎn)的電位放大,并將測量上限放大為ADC輸入上限。 3.6直流調(diào)壓調(diào)速測速電機(jī)直流調(diào)壓調(diào)速電機(jī)模塊由測速電路和調(diào)速電路兩部分組成。模塊的電源由接口總線引入。本模塊中使用的電機(jī)為12V的直流電機(jī)。 3.6.1電機(jī)測速部分(1)直流電機(jī)測速原理介紹 電機(jī)測速部分由一個霍爾開關(guān)和信號放大電路組成。與電機(jī)同軸的轉(zhuǎn)盤上裝有兩塊的強(qiáng)力磁鋼,它們的磁極性相反,以保持轉(zhuǎn)盤的平衡并保證轉(zhuǎn)盤每轉(zhuǎn)一周霍爾開關(guān)只導(dǎo)通一次;魻栭_關(guān)平時輸出為正電壓,當(dāng)轉(zhuǎn)盤上的磁鋼與霍爾開關(guān)正對時,霍爾開關(guān)輸出負(fù)電壓,經(jīng)整形、放大輸出。單片機(jī)通過對負(fù)脈沖計數(shù),可計算出電機(jī)的轉(zhuǎn)速。 (2)電機(jī)測速部分電路原理及說明 3144為霍爾開關(guān),整形、放大由LM358完成。LM358作為比較器使用。SIGNAL為負(fù)脈沖輸出接口,對應(yīng)于模塊上的SIGNAL插孔。可直接用SIGNAL信號進(jìn)行測速。 此外,模塊還提供了另一種測速方法。如下圖所示: 
平時使START保持低電平,OUT2輸出為低電平,OUT1為高電平。拉高START表示允許測速,此時OUT1的下降沿啟動計數(shù),上升沿停止計數(shù),表示測速結(jié)束。 (3)電機(jī)測速部分電路測試方法 將模塊插在接口掛箱或?qū)ο髵煜渖喜⒔油娫矗{(diào)節(jié)電位器R9,使電機(jī)轉(zhuǎn)動。用示波器在SIGNAL插孔處可以看到連續(xù)的負(fù)脈沖。 3.6.2電機(jī)調(diào)速部分電機(jī)調(diào)速的原理是通過改變電機(jī)兩端的電壓來改變電機(jī)的轉(zhuǎn)速。其原理如下:
該部分電路測試方法: DRV接GND,調(diào)節(jié)電位器R9,可以觀察到電機(jī)轉(zhuǎn)速的變化。
四、程序設(shè)計流程圖
自動模式
手動模式
五、實(shí)驗(yàn)結(jié)果及數(shù)據(jù)開機(jī)默認(rèn)情況下是電機(jī)停轉(zhuǎn)。 開關(guān)第一個鍵切換至自動模式,模式指示燈點(diǎn)亮,8279控制的數(shù)碼管能夠?qū)崟r的顯示A/D0809讀取的值,并且跟隨光照強(qiáng)度變化。而D/A輸出值跟隨A/D值同步變化。 當(dāng)光強(qiáng)位于兩個閾值中間值時,電機(jī)停轉(zhuǎn)。當(dāng)用手遮住一部分燈光,A/D值馬上下降,達(dá)到最弱光強(qiáng)(60H)之下時,電機(jī)開始正轉(zhuǎn)(快轉(zhuǎn)),當(dāng)用強(qiáng)光照射后,A/D值上升,超過設(shè)定最強(qiáng)光強(qiáng)(E0H)后,電機(jī)轉(zhuǎn)速反轉(zhuǎn)(慢轉(zhuǎn))。 開關(guān)第二個鍵為切換到手動正轉(zhuǎn)鍵,電機(jī)正轉(zhuǎn)(快轉(zhuǎn)),當(dāng)極限開關(guān)1為低電平時,電機(jī)停止轉(zhuǎn)動,高電平時不影響。開關(guān)第三個鍵為切換到手動反轉(zhuǎn)轉(zhuǎn)鍵,電機(jī)反轉(zhuǎn)(慢轉(zhuǎn))當(dāng)極限開關(guān)2為低電平時,電機(jī)停止轉(zhuǎn)動,高電平時不影響。 當(dāng)工作在手動模式情況下,光強(qiáng)變化對電機(jī)工作狀態(tài)均不起影響。 六、問題及心得在本次設(shè)計中遇到的最大問題是在最后一周的時候才發(fā)現(xiàn)焊的電路板有問題,經(jīng)過反復(fù)檢查后決定重新焊電路板花費(fèi)很長時間。之后程序設(shè)計經(jīng)過反復(fù)修改得以順利完成本次課程設(shè)計。 這次我學(xué)會了8279鍵盤的使用,以及AD轉(zhuǎn)換和DA轉(zhuǎn)換的原理,對單片機(jī)編程更加熟練,焊電路板也更加熟練。 - AD0809IN0 EQU 0CFA0H ;0809地址
- CON8279 EQU 0CFE9H ;8279命令字
- DATA8279 EQU 0CFE8H ;8279數(shù)據(jù)字
- DA0832 EQU 0CFB0H ;0832地址
- ORG 0000H
- MOV R2,#00H ;DAC初值
- MOV R3,#00H ;自動手動標(biāo)志
- LJMP START
- ORG 0100H
- START: MOV DPTR,#CON8279 ;8279命令字
- MOV A,#0D1H ;清屏、清緩存命令
- MOVX @DPTR,A
- MOV R2,#0FFH ;DA轉(zhuǎn)換初值設(shè)為FFH,為停轉(zhuǎn)
- MOV R3,#00H ;R3自動標(biāo)志位
- WAIT: MOVX A,@DPTR ;讀狀態(tài)
- JB ACC.7,WAIT ;等待清屏幕完成
- LJMP START1 ;有按鍵則跳轉(zhuǎn)去判斷鍵值
- ;****************AD轉(zhuǎn)換函數(shù)*****************
- STARTADC:
- MOV DPTR,#AD0809IN0 ;啟動通道0
- MOVX @DPTR,A
- MOV R6,#0FFH ;等待轉(zhuǎn)換完成
- LOOP1: DJNZ R6,LOOP1 ;等待轉(zhuǎn)換,完成后向下繼續(xù)
- MOVX A,@DPTR ;讀取轉(zhuǎn)換值
- CJNE R3,#0FFH,DISP ;判斷是否自動,不是自動模式跳轉(zhuǎn)
- MOV R1,A ;儲存光強(qiáng)轉(zhuǎn)換的數(shù)字量
- ;****************與閾值進(jìn)行比較****************
- CLR C ;清除進(jìn)位位
- SUBB A,#0E0H ;與最強(qiáng)光照閾值進(jìn)行比較
- JC A0 ;小于最強(qiáng)光則轉(zhuǎn)移去和最小值比較
- MOV R2,#20H ;如果光強(qiáng)超過閾值,R2附初值FFH使其慢轉(zhuǎn)
- LJMP DISP ;跳轉(zhuǎn)去顯示函數(shù)
- A0: MOV A,R1
- CLR C
- SUBB A,#60H ;與最小光強(qiáng)閾值進(jìn)行比較
- JNC A1 ;大于最小光強(qiáng)大則跳轉(zhuǎn)
- MOV R2,#00H ;小于最小光強(qiáng),R2附初值00H使其快轉(zhuǎn)
- LJMP DISP ;跳轉(zhuǎn)去顯示函數(shù)
- A1: MOV R2,#0FFH ;中間值則停轉(zhuǎn)
- LJMP DISP
- ;****************顯示函數(shù)**********************
- DISP: MOV A,R1 ;從R1中取轉(zhuǎn)換結(jié)果
- SWAP A ;分離高四位和低四位
- ANL A,#0FH ;并依次存放在50H到51H中
- MOV 50H,A ;高4位存在50H
- MOV A,R1
- ANL A,#0FH ;低四位存在51H
- MOV 51H,A
- LOOP2: MOV DPTR,#CON8279 ;寫顯示RAM命令字
- MOV A,#90H ;每寫入數(shù)據(jù)都自動加一,從0地址開始
- MOVX @DPTR,A
- MOV R0,#50H ;存放轉(zhuǎn)換結(jié)果地址初值送R0
- MOV R1,#02H ;2次取出
- MOV DPTR,#DATA8279 ;8279數(shù)據(jù)口地址
- DL0: MOV A,@R0 ;取出存到A中
- ACALL TABLE ;轉(zhuǎn)換為顯碼
- MOVX @DPTR,A ;送顯碼輸出
- INC R0 ;加一
- DJNZ R1,DL0
- LCALL DEL1 ;延遲一段時間使顯示更穩(wěn)定
- ;***************DA轉(zhuǎn)換函數(shù)********************
- DAC: MOV A,R2 ;初值送ACC
- LCALL DAZH ;調(diào)DA轉(zhuǎn)換子程序
- LCALL DEL1 ;延遲使穩(wěn)定
- LJMP START ;循環(huán)
- ;**************鍵盤掃描函數(shù)******************
- START1: SETB P1.0 ;第一個燈先滅
- MOV DPTR,#CON8279
- MOV A,#0A0H ;顯示\消隱命令
- MOVX @DPTR,A
- MOV A,#40H ;讀FIFO命令
- MOVX @DPTR,A
- MOV DPTR,#DATA8279 ;讀鍵值
- MOVX A,@DPTR
- MOV R1,A ;保存鍵值
- ;****************判斷按得哪個鍵****************************
- A9: MOV A,R1
- CJNE A,#0C0H,A10 ;判斷是不是自動按鍵,不是自動轉(zhuǎn)移
- CLR P1.0 ;是自動點(diǎn)亮第一個燈
- MOV R3,#0FFH ;自動標(biāo)志位
- MOV R2,#0FFH ;DAC初值停轉(zhuǎn)
- LJMP LJSTART ;判斷完后回到AD轉(zhuǎn)換
- A10: MOV A,R1 ;手動正轉(zhuǎn)
- CJNE A,#0C1H,A11 ;比較是不是手動正轉(zhuǎn)按鍵
- SETB P1.0 ;使第一個燈滅
- MOV R3,#00H ;清零自動標(biāo)志位
- MOV R2,#00H ;快轉(zhuǎn)
- A13: JB P1.1,LJSTART ;極限按鍵,判斷有木有低電平
- MOV R2,#0FFH ;低電平有效則停止轉(zhuǎn)動
- A11: MOV A,R1 ;手動反轉(zhuǎn)
- CJNE A,#0C2H,A12 ;比較是不是手動反轉(zhuǎn)按鍵
- SETB P1.0 ;使第一個燈滅
- MOV R3,#00H ;清零自動標(biāo)志位
- MOV R2,#10H ;慢轉(zhuǎn)
- A14: JB P1.2,LJSTART ;極限按鍵,判斷有木有低電平
- MOV R2,#0FFH ;低電平有效則停止轉(zhuǎn)動
- A12: SETB P1.0 ;如果都不是這些按鍵,使第一個燈滅
- MOV R2,#0FFH ;R2初值慢轉(zhuǎn)
- MOV R3,#00H ;自動標(biāo)志位00
- LJMP LJSTART ;判斷完后回到AD轉(zhuǎn)換
- ;************DA執(zhí)行函數(shù)**********************
- DAZH: MOV DPTR,#DA0832 ;DAC輸入寄存器端口地址
- MOVX @DPTR,A ;送出數(shù)據(jù)
- INC DPTR ;加一,為DAC寄存器端口地址
- MOVX @DPTR,A ;啟動轉(zhuǎn)換
- RET
- ;*************跳轉(zhuǎn)接力***********************
- LJSTART:
- LJMP STARTADC ;循環(huán)
- ;**************延時函數(shù)************************
- DEL1: MOV R6,#255 ;延時一段時間使顯示更穩(wěn)定
- DEL2: MOV R5,#255
- DEL3: DJNZ R5,DEL3
- DJNZ R6,DEL2
- RET
- ;***************顯示字表***********************
- TABLE: INC A
- MOVC A,@A+PC
- RET
- DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H
- DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H,00H
- END
復(fù)制代碼
試驗(yàn)圖: 1.遮光時 2.強(qiáng)光照射時 3.自動處于中間值時 4.手動正轉(zhuǎn) 5.手動反轉(zhuǎn) 6.電路板正面 7.電路板反面
以上的Word格式文檔51黑下載地址:
|