光感自動控制百葉窗單片機_第1頁
光感自動控制百葉窗單片機_第2頁
光感自動控制百葉窗單片機_第3頁
光感自動控制百葉窗單片機_第4頁
光感自動控制百葉窗單片機_第5頁
已閱讀5頁,還剩9頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、題目:光感自動控制百葉窗課程:單片機課程設計制作人:XXX學號:3XXXX班級:材加二班目錄一、課題簡介31、基本要求 32、基本工作原理 33、各器件資料 3二、硬件總體設計61、AD轉換模塊 62、LCD顯示73、步進電動機驅動74、暫停控制8三、軟件總體設計9四、所遇問題及解決方法 17五、實物圖展示17六、心得體會19一、課題簡介:題目:光感自動控制百葉窗基本要求:以MCS-51系列單片機為核心,采用利用常用電子器件設計,用一臺步進電動機控制百葉窗的旋轉包括正轉、反轉和暫停,用一個光敏電阻傳感器測量室內光強度,并用LCD顯示測量結果。基本工作原理:利用光敏電阻與標準電阻串聯輸入模擬信號

2、,通過ADC0809芯片轉換成數字信號傳送給單片機,通過單片機處理并控制LCD顯示當前的測量光強值,以及輸出步進電動機的驅動信號,再利用達林頓管ULN2003提高單片機的輸出功率驅動步進電動機。各器件資料:LCD1602表1 各引腳說明表表2 寄存器選擇功能表利用內部復位電路進行初始化 清屏(DISPLAY CLEAR); 功能設置(FUNCTION SET);DL = 1: 8Bit 接口數據;N = 0: 1行顯示; F = 0:57dot字形; 顯示開/關控制(DISPLAY ON/OFF CONTROL)D = 0: 顯示關; C = 0: 光標關; B = 0: 消隱關 輸入方式設置

3、(ENTRY MODE SET )I/D = 1:(增量): S = 0: 無移位:ADC0809圖1ADC0809內部結構圖IN7IN0模擬量輸入通道ALE地址鎖存允許信號。對應ALE上跳沿,A、B、C地址狀態送入地址鎖存器中。START轉換啟動信號。START下降沿時啟動芯片,開始進行A/D轉換;在A/D轉換期間,START應保持 低電平。A、B、C地址線。 通道端口選擇線,A為低地址,C為高地址,CLK時鐘信號。通常使用頻率為500KHz的時鐘信號EOC轉換結束信號。EOC=0,正在進行轉換;EOC=1,轉換結束。D7D0數據輸出線。D0為最低位,D7為最高 OE輸出允許信號。OE=0,

4、輸出數據線呈高阻;OE=1,輸出轉換得到的數據。Vref參考電源參考電壓用來與輸入的模擬信號進行比較,作為逐次逼近的基準。ULN2003圖2ULN2003引腳圖步進電動機28BYJ-48 圖 3 內部接線圖表3八相勵磁順序表二、硬件總體設計:系統組成方案:1、 AD轉換模塊 如圖1R10為標準10K電阻,RV1為10K滑動變阻器,以代替光敏電阻仿真。由于仿真軟件只支持ADC0808芯片仿真,故在仿真時使用此芯片,實際電路板中選用了ADC0809。處于實際電路板焊接時候引腳選用方便考慮,選用IN7輸出口。即將模擬輸入選擇口ADD A、ADD B、ADD C接入VCC。處于實際電路焊接考慮,將ST

5、接入P3.0口,EOC接入P3.1口,OE接入P3.2口,CLK接入P3.3口,具體電路如右圖。 圖4 AD轉換電路圖圖5 ADC0808控制端接口圖2、 LCD顯示LCD接口如圖所示,由于單片機P0口和P2口在單片機的右邊,故將LCD的輸入口和控制口分別接入P0和P2口,由于P0口無上拉電阻,故接入LCD時接入一排上拉電阻。如右圖 圖6 LCD電路圖3、 步進電動機驅動如果直接用單片機驅動步進電動機,因為單片機的輸出電流太低,功率不夠,無法驅動步進電動機,故接入達林頓管ULN2003來增加輸出功率,處于實際電路焊接考慮,使用P3.4P3.7端口。電路如下圖圖7 步進電動機驅動電路4、暫停控制

6、用開關控制,開關閉合時步進電動機暫停,LCD顯示暫停狀態(*字符),但依舊可以測量出光強值。 圖9,暫停開關電路總體電路圖如下(仿真,未接晶振及復位電路)圖10 總電路仿真圖三、軟件總體設計:設計程序以及設計的原因和方法如下#include unsigned char get_data;unsigned int temp;unsigned char code tab1=welcome on!;unsigned char code tab2=light:;unsigned char code tab3=mcd;sbit ST = P30;sbit EOC= P31;sbit OE = P32;s

7、bit CLK= P33;sbit A1 = P35;sbit B1 = P36;sbit C1 = P37;sbit D1 = P34;sbit RS = P20;sbit RW = P21;sbit E = P22;sbit key= P24;/*步進步伐,根據所購買的步進電動機28BYJ-48說明書,使用八相驅動*/#define r1 A1=1;B1=1;C1=1;D1=0; #define r2 A1=1;B1=1;C1=0;D1=0;#define r3 A1=1;B1=1;C1=0;D1=1;#define r4 A1=1;B1=0;C1=0;D1=1;#define r5 A1

8、=1;B1=0;C1=1;D1=1;#define r6 A1=0;B1=0;C1=1;D1=1;#define r7 A1=0;B1=1;C1=1;D1=1;#define r8 A1=0;B1=1;C1=1;D1=0;/*產生定時信號,作為ADC芯片的時鐘信號*/void timer()TMOD=0x10;TH0=(65536-190)/256;TL0=(65536-190)%256;EA=1;ET0=1;TR0=1;/*延遲函數,單位為ms*/void delay(unsigned int t)int i,j;for(i=t;i0;i-)for(j=112;j0;j-);/*寫指令*/w

9、ritecom(unsigned char com)RS=0;RW=0;P0=com;E=0;delay(1);E=1;delay(1);E=0;/*寫數據*/writedata(unsigned char date)RS=1;RW=0;P0=date;E=0;delay(1);E=1;delay(1);E=0;/*寫數字*/void writecount(unsigned int Data)switch(Data)case 0: writedata(0x30);break;case 1: writedata(0x31);break;case 2: writedata(0x32);break;

10、case 3: writedata(0x33);break;case 4: writedata(0x34);break;case 5: writedata(0x35);break;case 6: writedata(0x36);break;case 7: writedata(0x37);break;case 8: writedata(0x38);break;case 9: writedata(0x39);break;/*步進電動機正、反轉*/void bujin(unsigned int pd)if(pd) r1delay(5);r2delay(5);r3delay(5);r4delay(5)

11、;r5delay(5);r6delay(5);r7delay(5);r8delay(5);elser8delay(5);r7delay(5);r6delay(5);r5delay(5);r4delay(5);r3delay(5);r2delay(5);r1delay(5);/*顯示函數,這里只是控制顯示的光強值,顯示為4位10進制數,*/void disp(unsigned int a) unsigned int c;a*=4; /*將轉換所得模擬信號(最大為255)轉成10進制數,因為10K光敏電阻對應的光強約為1cd,即1000mcd,為方便顯示,故將模擬信號乘以4,估算以作參考*/wri

12、tecom(0xc0+7);writecount(a/1000);writecom(0xc0+8);writecount(a%1000/100);writecom(0xc0+9);writecount(a%100/10);writecom(0xc0+10);writecount(a%10);writecom(0xc0+11);for(c=0;c3;c+)writedata(tab3c);/*判斷函數,為了防止光敏電阻隨各種因素導致的光強而不穩定的變動,使得驅動的步進電動機不停的微微轉動,將光強分為5個等級,不同等級驅動步進電動機轉的時間不同*/pduan(unsigned int a)unsi

13、gned int x;if(a51) x=0;else if(a102) x=1;else if(a153) x=2;else if(a204) x=3;else x=4;return(x);/*主函數,前面包括LCD初始化,寫入LCD第一行顯示字符“welcome on!”和第二行顯示字符“light:”、“mcd”*/main()unsigned int compare=0;unsigned int dji;unsigned int i,j,k;writecom(0x38);writecom(0x0c);writecom(0x06);writecom(0x80+1);for(i=0;i11

14、;i+)writedata(tab1i);writecom(0xc0+1);for(j=0;jcompare) /*判斷步進機為正轉還是反轉*/for(k=25*(dji-compare);k0;k-) /*所需轉的角度*/bujin(0);compare=dji;else if(dji0;k-)bujin(1);compare=dji;else compare=dji;/*中斷程序,產生時鐘定時信號*/void t0(void) interrupt 1 using 0TH0=(65536-190)/256;TL0=(65536-190)%256;CLK=CLK;四、所遇問題及解決方法:仿真時LCD無任何字符顯示,檢查源程序的LCD初始化是否正確,修改錯誤,重新載入源程序仿真。顯示的轉換數據為錯亂數據,網上查閱ADC0809芯片功能書發現改芯片的輸出口與IO口的高低位相反,OUT0OUT7為高位到低位,恰與

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論