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