基于單片機(jī)的創(chuàng)新《向“日”葵》課程設(shè)計(jì)說明書1_第1頁(yè)
基于單片機(jī)的創(chuàng)新《向“日”葵》課程設(shè)計(jì)說明書1_第2頁(yè)
基于單片機(jī)的創(chuàng)新《向“日”葵》課程設(shè)計(jì)說明書1_第3頁(yè)
基于單片機(jī)的創(chuàng)新《向“日”葵》課程設(shè)計(jì)說明書1_第4頁(yè)
基于單片機(jī)的創(chuàng)新《向“日”葵》課程設(shè)計(jì)說明書1_第5頁(yè)
已閱讀5頁(yè),還剩25頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、db1211b8d84aa3782f52b35abb4047f5.pdf電子科技大學(xué)中山學(xué)院機(jī)電一體化控制器課程設(shè)計(jì)說明書 姓 名:學(xué) 號(hào):院 別:機(jī)電工程學(xué)院 專 業(yè):機(jī)械設(shè)計(jì)制造及其自動(dòng)化 題 目:向“日”葵目 錄1、課程設(shè)計(jì)目的42、本課程設(shè)計(jì)的背景知識(shí)43、課程設(shè)計(jì)內(nèi)容44、工具/準(zhǔn)備工作55、設(shè)計(jì)步驟及原理55.1 單片機(jī)控制系統(tǒng)原理.55.2 單片機(jī)主機(jī)系統(tǒng)電路.55.2.1時(shí)鐘電路.65.2.2復(fù)位電路.65.2.3按鍵.75.3.1數(shù)據(jù)采集處理電路.75.3.2 紅外傳感器的物理擺放位置.75.3.3 紅外傳感器的驅(qū)動(dòng)組.85.4溫度檢測(cè)電路.85.5時(shí)鐘模塊.95.6液晶模塊

2、.95.7步進(jìn)電機(jī)驅(qū)動(dòng).96 系統(tǒng)軟件設(shè)計(jì).106.1溫度采集.106.2電機(jī)驅(qū)動(dòng). 136.3時(shí)鐘讀取. 156.4諾基亞5110驅(qū)動(dòng). 186.5主程序. 247、設(shè)計(jì)結(jié)果及分析278、總結(jié)及心得體會(huì)289、對(duì)本設(shè)計(jì)過程及方法、手段的改進(jìn)建議2810、參考文獻(xiàn)2811、評(píng)價(jià)(教師)29 1、 課程設(shè)計(jì)目的1) 通過正確地應(yīng)用單片機(jī)或微型計(jì)算機(jī)等控制器,培養(yǎng)解決工業(yè)領(lǐng)域控制、工業(yè)檢測(cè)等領(lǐng)域具體問題的初步能力。2) 通過所做課題,熟悉單片微機(jī)應(yīng)用系統(tǒng)開發(fā)、研制的過程,軟硬件設(shè)計(jì)的方法、工作內(nèi)容、工作步驟,完成機(jī)電一體化控制器設(shè)計(jì)。3) 加強(qiáng)進(jìn)行基本技能訓(xùn)練,例如組成系統(tǒng)、編程、調(diào)試、查閱資料、

3、繪圖、編寫說明書等;理論聯(lián)系實(shí)際,提高動(dòng)手能力和分析問題、解決問題的能力,訓(xùn)練基本的工程能力。2、 本課程設(shè)計(jì)的背景知識(shí)在現(xiàn)代,人們生活上的消費(fèi)不僅僅是生活必需品上的消費(fèi),隨著人們生活水平的提高,在精神娛樂、家居以及辦公環(huán)境的消費(fèi)比例也逐步提高。一個(gè)好的家居環(huán)境和辦公環(huán)境自然能給人們帶來好的心情。隨著時(shí)代的進(jìn)步,各種家居擺設(shè)層出不窮,一批批生活小玩意涌向市場(chǎng)。然而一批批的靜態(tài)的擺設(shè)遠(yuǎn)遠(yuǎn)不能滿足人們的需求,一些循環(huán)動(dòng)作的玩意也人們也是司空見慣。本小組就想要一種智能的充滿活力的居家辦公裝飾品,向“日”葵,人就是那朵花心中的太陽。當(dāng)然此作品不只是用于家居辦公的擺設(shè),也可以用于商店、酒店等用于歡迎顧客

4、和歡送顧客的一個(gè)工具、甚至可以用于跟蹤偵查及檢測(cè)。3、 課程設(shè)計(jì)內(nèi)容 本論文主要研究單片機(jī)控制的向人,分別對(duì)人方向的定位以及通過電機(jī)控制花朵面向人,附加一些時(shí)間以及溫度的lcd顯示(如果要更進(jìn)一步可以給花增加一個(gè)脾氣系統(tǒng));面向控制技術(shù)及系統(tǒng)設(shè)備的軟、硬件各個(gè)部分進(jìn)行了研究。主要內(nèi)容如下: 1.根據(jù)紅外傳感器的特點(diǎn)對(duì)人體所在方向進(jìn)行定位。 2.通過定位所得的信息進(jìn)行對(duì)步進(jìn)電機(jī)的控制,使之面向人。3. lcd顯示當(dāng)前溫度以及時(shí)間。4、 工具/準(zhǔn)備工作 萬用表,單片機(jī)實(shí)驗(yàn)板,選購(gòu)人體或外傳感器,單片機(jī),三極管,諾基亞5110液晶,時(shí)鐘芯片ds1302,溫度芯片ds18b20杜邦線等等。5、 設(shè)計(jì)步

5、驟及原理5.1 單片機(jī)控制系統(tǒng)原理5.2 單片機(jī)主機(jī)系統(tǒng)電路at89c51單片機(jī)是51系列單片機(jī)的一個(gè)成員,是8051單片機(jī)的簡(jiǎn)化版。內(nèi)部自帶2k字節(jié)可編程flash存儲(chǔ)器的低電壓、高性能coms八位微處理器,與intel mcs-51系列單片機(jī)的指令和輸出管腳相兼容。由于將多功能八位cpu和閃速存儲(chǔ)器結(jié)合在單個(gè)芯片中,因此,at89c2051構(gòu)成的單片機(jī)系統(tǒng)是具有結(jié)構(gòu)最簡(jiǎn)單、造價(jià)最低廉、效率最高的微控制系統(tǒng),省去了外部的ram、rom和接口器件,減少了硬件開銷,節(jié)省了成本,提高了系統(tǒng)的性價(jià)比。 單片機(jī)系統(tǒng)圖5.2.1時(shí)鐘電路 單片機(jī)的時(shí)鐘信號(hào)用來提供單片機(jī)片內(nèi)各種微操作的時(shí)間基準(zhǔn),時(shí)鐘信號(hào)通

6、常用兩種電路形式得到:內(nèi)部振蕩和外部振蕩。mcs-51單片機(jī)內(nèi)部有一個(gè)用于構(gòu)成振蕩器的高增益反向放大器,引腳xtall和xtal2分別是此放大電器的輸入端和輸出端,由于采用內(nèi)部方式時(shí),電路簡(jiǎn)單,所得的時(shí)鐘信號(hào)比較穩(wěn)定,實(shí)際使用中常采用這種方式,如圖3所示在其外接晶體振蕩器(簡(jiǎn)稱晶振)或陶瓷諧振器就構(gòu)成了內(nèi)部振蕩方式,片內(nèi)高增益反向放大器與作為反饋元件的片外石英晶體或陶瓷諧振器一起可構(gòu)成一個(gè)自激振蕩器并產(chǎn)生振蕩時(shí)鐘脈沖。 圖中外接晶體以及電容c2和c1構(gòu)成并聯(lián)諧振電路,它們起穩(wěn)定振蕩頻率、快速起振的作用,其值均為30p左右,晶振頻率選12m oreset5.2.2復(fù)位電路 為了初始化單片機(jī)內(nèi)部的

7、某些特殊功能寄存器,必須采用復(fù)位的方式,復(fù)位后可使cpu及系統(tǒng)各部件處于確定的初始狀態(tài),并從初始狀態(tài)開始正常工作。單片機(jī)的復(fù)位是靠外電路來實(shí)現(xiàn)的,在正常運(yùn)行情況下,只要rst引腳上出現(xiàn)兩個(gè)機(jī)器周期時(shí)間以上的高電平,即可引起系統(tǒng)復(fù)位,但如果rst引腳上持續(xù)為高電平,單片機(jī)就處于循環(huán)復(fù)位狀態(tài)。復(fù)位后系統(tǒng)將輸入/輸出(1/0)端口寄存器置為ffh,堆棧指針sp置為07h, sbuf內(nèi)置為不定值,其余的寄存器全部清0,內(nèi)部ram的狀態(tài)不受復(fù)位的影響,在系統(tǒng)上電時(shí)ram的內(nèi)容是不定的。復(fù)位操作有兩種情況,即上電復(fù)位和手動(dòng)(開關(guān))復(fù)位。本系統(tǒng)采用上電復(fù)位方式。圖中r9和cl組成上電復(fù)位電路,其值r取為1k

8、q, c取為22uf.5.2.3電機(jī)復(fù)位按鍵 電機(jī)復(fù)位按鍵用于電機(jī)復(fù)位初始化。 5.3.1數(shù)據(jù)采集處理電路 上圖為人體紅外傳感器模塊原理圖,調(diào)節(jié)滑動(dòng)電阻可以調(diào)節(jié)測(cè)量距離以及是否重復(fù)觸發(fā)。5.3.2 紅外傳感器的物理擺放位置紅外傳感器的擺放為4擺成一個(gè)正方形。用于感應(yīng)人所在的方位。如圖,這種擺放方式能感應(yīng)出擺個(gè)方位的不同,增加傳感器的數(shù)量可以感應(yīng)可多方位,如圖所示,在非常接近傳感器的4個(gè)角的方位上要有4個(gè)盲區(qū)。但盲區(qū)非常小一般人不會(huì)如此接近傳感器,所以可以忽略。5.3.3 紅外傳感器的驅(qū)動(dòng)組5.4溫度檢測(cè)電路 ds18b20采用一線制通信,檢測(cè)的最小變化值為0.5度,是一款性價(jià)比較高的傳感器。5

9、.5時(shí)鐘模塊 時(shí)鐘芯片有兩個(gè)電源端,一個(gè)是工作電源,一個(gè)是保存數(shù)據(jù)和掉點(diǎn)時(shí)工作的電源 。5.6液晶模塊 諾基亞5110是一款性價(jià)比較高的液晶顯示器,操作簡(jiǎn)單。內(nèi)部電路如下:采用的是單片的spi通信,占用端口少。5.7步進(jìn)電機(jī)驅(qū)動(dòng)減速電機(jī)28byj-48是一個(gè)5線4向電機(jī),采用ulm2003a驅(qū)動(dòng),8拍信號(hào)可以很精確的控制其角度。6、 系統(tǒng)軟件設(shè)計(jì)6.1溫度采集sbit dq=p14;/函數(shù)功能:將ds18b20傳感器初始化,讀取應(yīng)答信號(hào)bit init_ds18b20(void)bit flag; /儲(chǔ)存ds18b20是否存在的標(biāo)志,flag=0,表示存在;flag=1,dq = 1; /先將

10、數(shù)據(jù)線拉高 for(time=0;time<2;time+); /略微延時(shí)約6微秒 dq = 0; /再將數(shù)據(jù)線從高拉低,要求保持480960us for(time=0;time<200;time+); /略微延時(shí)約600微秒 dq = 1; /釋放數(shù)據(jù)線(將數(shù)據(jù)線拉高) for(time=0;time<10;time+) ; /延時(shí)約30us(釋放總線后需等待1560us讓 flag=dq; /讓單片機(jī)檢測(cè)是否輸出了存在脈沖(dq=0表示存在) for(time=0;time<200;time+); /延時(shí)足夠長(zhǎng)時(shí)間,等待存在脈沖輸出完畢 return (flag);

11、 /返回檢測(cè)成功標(biāo)志/函數(shù)功能:從ds18b20讀取一個(gè)字節(jié)數(shù)據(jù)unsigned char readonechar(void) unsigned char i=0;unsigned char dat; /儲(chǔ)存讀出的一個(gè)字節(jié)數(shù)據(jù)for (i=0;i<8;i+) dq =1; _nop_(); / 先將數(shù)據(jù)線拉高 /等待一個(gè)機(jī) dq = 0; _nop_(); /單片機(jī)從ds18b20讀書據(jù)時(shí),將數(shù)據(jù)線從 dq = 1; /將數(shù)據(jù)線"人為"拉高,為單片機(jī)檢測(cè)ds18b20的輸出 for(time=0;time<2;time+) ; /延時(shí)約6us,使主機(jī)在15us內(nèi)

12、采樣 dat>>=1; if(dq=1) dat|=0x80; /如果讀到的數(shù)據(jù)是1,則將1存入datelsedat|=0x00;/如果讀到的數(shù)據(jù)是0,則將0存入dat for(time=0;time<8;time+); /延時(shí)3us,兩個(gè)讀時(shí)序之間 return(dat); /返回讀出的十六進(jìn)制數(shù)據(jù)/函數(shù)功能:向ds18b20寫入一個(gè)字節(jié)數(shù)據(jù)writeonechar(unsigned char dat)unsigned char i=0;for (i=0; i<8; i+) dq =1; _nop_(); / 先將數(shù)據(jù)線拉高 dq=0; /將數(shù)據(jù)線從高拉低時(shí)即啟動(dòng)寫時(shí)

13、序 dq=dat&0x01; /利用與運(yùn)算取出要寫的某位二進(jìn)制數(shù)據(jù), for(time=0;time<10;time+);/延時(shí)約30us, dq=1; /釋放數(shù)據(jù)線 for(time=0;time<1;time+) ;/延時(shí)3us,兩個(gè)寫時(shí)序間至少需要1us的恢 dat>>=1; /將dat中的各二進(jìn)制位數(shù)據(jù)右移1位 for(time=0;time<4;time+); /稍作延時(shí),給硬件一點(diǎn)反應(yīng)時(shí)間/函數(shù)功能:做好讀溫度的準(zhǔn)備void readyreadtemp(void) init_ds18b20(); /將ds18b20初始化writeonechar

14、(0xcc); / 跳過讀序號(hào)列號(hào)的操作writeonechar(0x44); / 啟動(dòng)溫度轉(zhuǎn)換 ys(200); /轉(zhuǎn)換一次需要延時(shí)一段時(shí)間 init_ds18b20(); /將ds18b20初始化writeonechar(0xcc); /跳過讀序號(hào)列號(hào)的操作writeonechar(0xbe); /讀取溫度寄存器,前兩個(gè)分別是溫度的低位和高char dwd()/讀取溫度,返回溫度值char wd; unsigned char tl,th,tn,td; /儲(chǔ)存暫存器的溫度低位 flag=0;readyreadtemp(); /讀溫度準(zhǔn)備tl=readonechar(); /先讀的是溫度值低位

15、th=readonechar(); /接著讀的是溫度值高位if(th&0xf8)!=0x00)/判斷高五位 得到溫度正負(fù)標(biāo)志flag=1;tl=tl; /取反th=th; /取反tltemp=tl+1; /低位加1tl=tltemp;if(tltemp>255) th+; /如果低8位大于255,向高8位進(jìn)1 tn=th*16+tl/16; /實(shí)際溫度值=(th*256+tl)/16,即: td=(tl%16)*10/16; /計(jì)算溫度的小數(shù)部分,tn=th*16+tl/16; /實(shí)際溫度值=(th*256+tl)/16,即: td=(tl%16)*10/16; /計(jì)算溫度的小數(shù)

16、部分,將余數(shù)乘以10再除以16wd=tn+td/10.0;if(flag=1)wd=-wd;return wd; /(wd%1)*10為小數(shù)位6.2電機(jī)驅(qū)動(dòng)unsigned char dj=0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09;void ys(unsigned int z)unsigned int x; unsigned int y;for(x=z;x>0;x-)for(y=114;y>0;y-);/ 電機(jī)程序void djzd(unsigned char k,bit c) /轉(zhuǎn)過的角度=k*16*360/128,c代表正反轉(zhuǎn)unsigne

17、d char i,j,temp; if(c=1)for(j=0;j<(k*16);j+)for(i=0;i<8;i+)p1=dji;ys(5);elsefor(j=0;j<(k*16);j+)for(i=8;i>0;i-)temp=i-1;p1=djtemp;ys(5);6.3時(shí)鐘讀取sbit rst=p37;sbit clk=p33;sbit din=p34;/函數(shù)功能:延時(shí)若干微秒void delaynus(unsigned char n) unsigned char i; for(i=0;i<n;i+);/函數(shù)功能:向1302寫一個(gè)字節(jié)數(shù)據(jù)void writ

18、e1302(unsigned char dat) unsigned char i; sclk=0; /拉低sclk,為脈沖上升沿寫入數(shù)據(jù)做好準(zhǔn)備 delaynus(2); /稍微等待,使硬件做好準(zhǔn)備 for(i=0;i<8;i+) /連續(xù)寫8個(gè)二進(jìn)制位數(shù)據(jù) data=dat&0x01;delaynus(2); /取出dat的第0位數(shù)據(jù)寫入1302 sclk=1; delaynus(2); /上升沿寫入數(shù)據(jù) sclk=0; /重新拉低sclk,形成脈沖 dat>>=1; /將dat的各數(shù)據(jù)位右移1位,準(zhǔn)備寫入下一個(gè)數(shù) /函數(shù)功能:根據(jù)命令字,向1302寫一個(gè)字節(jié)數(shù)據(jù)vo

19、id writeset1302(unsigned char cmd,unsigned char dat) rst=0; /禁止數(shù)據(jù)傳遞 sclk=0; /確保寫數(shù)居前sclk被拉低 rst=1; delaynus(2); /啟動(dòng)數(shù)據(jù)傳輸 write1302(cmd); /寫入命令字 write1302(dat); /寫數(shù)據(jù) sclk=1; /將時(shí)鐘電平置于高電平狀態(tài) rst=0; /禁止數(shù)據(jù)傳遞 /函數(shù)功能:從1302讀一個(gè)字節(jié)數(shù)據(jù) unsigned char read1302(void) unsigned char i,dat;delaynus(2); /稍微等待,使硬件做好準(zhǔn)備for(i=

20、0;i<8;i+) /連續(xù)讀8個(gè)二進(jìn)制位數(shù)據(jù) dat>>=1; if(data=1) /如果讀出的數(shù)據(jù)是1 dat|=0x80; /將1取出,寫在dat的最高位 sclk=1; delaynus(2); /將sclk置于高電平,為下降沿讀出 sclk=0; delaynus(2); /拉低sclk,形成脈沖下降沿 i=dat/16; i=i*10+dat%16; return i; /將讀出的數(shù)據(jù)返回 /函數(shù)功能:根據(jù)命令字,從1302讀取一個(gè)字節(jié)數(shù)據(jù)unsigned char readset1302(unsigned char cmd) unsigned char dat;

21、 rst=0; /拉低rst sclk=0; /確保寫數(shù)居前sclk被拉低 rst=1; /啟動(dòng)數(shù)據(jù)傳輸 write1302(cmd); /寫入命令字 dat=read1302(); /讀出數(shù)據(jù) sclk=1; /將時(shí)鐘電平置于已知狀態(tài) rst=0; /禁止數(shù)據(jù)傳遞 return dat; /將讀出的數(shù)據(jù)返回/*函數(shù)功能: 1302進(jìn)行初始化設(shè)置*/ void init_ds1302(void) unsigned char flag; writeset1302(0x8e,0x00); /根據(jù)寫狀態(tài)寄存器命令字, writeset1302(0x80,0x30); /根據(jù)寫秒寄存器命令字,寫入秒的

22、初始值writeset1302(0x82,0x17); /根據(jù)寫分寄存器命令字,寫入分的初始值writeset1302(0x84,0x08); /根據(jù)寫小時(shí)寄存器命令字,寫入小時(shí)的初始值writeset1302(0x86,0x01); /根據(jù)寫日寄存器命令字,寫入日的初始值writeset1302(0x88,0x07); /根據(jù)寫月寄存器命令字,寫入月的初始值writeset1302(0x8c,0x13); /根據(jù)寫年寄存器命令字,寫入年的初始值writeset1302(0x8a,0x1); /根據(jù)寫年寄存器命令字,寫入年的初始值writeset1302(0x90,0xa5); /打開充電功能

23、 選擇2k電阻充writeset1302(0x8e,0x80); /根據(jù)寫狀態(tài)寄存器命令字,寫入保6.4諾基亞5110驅(qū)動(dòng)sbit rst=p37;sbit clk=p33;sbit din=p34;sbit dq=p14;sbit sclk=p26; /位定義1302芯片的接口,時(shí)鐘輸出端口定義在p1.0引腳sbit data=p25; /位定義1302芯片的接口,數(shù)據(jù)輸出端定義在p1.1引腳sbit rst=p24; /位定義1302芯片的接口,復(fù)位端口定義在p1.2引腳void delay_1us(void) unsigned int i; for(i=0;i<1000;i+);

24、void xdc(unsigned char dcc,bit k) /k=0寫命令,k=1寫數(shù)據(jù)unsigned char i;ce=0; /片選選通if(k=0) /命令dc=0;else dc=1; /數(shù)據(jù)for(i=0;i<8;i+)if(dcc&0x80)din=1;elsedin=0;clk=0;dcc=dcc<<1;/放在這里的主要原因是等待一點(diǎn)時(shí)間clk=1;ce=1; /寫入完成后禁止寫入void lcd_clear(void) unsigned int i; xdc(0x0c,0); xdc(0x80, 0); for (i=0; i<504;

25、 i+) xdc(0, 1); /函數(shù)功能:5110初始化void csh5110(void) rst=0; / 產(chǎn)生一個(gè)讓lcd復(fù)位的低電平脈沖 delay_1us(); rst=1; ce=0; / 關(guān)閉lcd delay_1us(); ce=1; / 使能lcd delay_1us();xdc(0x21, 0);/ 使用擴(kuò)展命令設(shè)置lcd模式 xdc(0xbf, 0);/ 設(shè)置液晶偏置電壓 可調(diào)節(jié)屏幕的對(duì)比度 xdc(0x06, 0);/ 溫度校正 xdc(0x13, 0);/ 1:48 xdc(0x20, 0);/ 使用基本命令,v=0,水平尋址 lcd_clear(); / 清屏 x

26、dc(0x0c, 0);/ 設(shè)定顯示模式,正常顯示 ce=0; / 關(guān)閉lcd /函數(shù)功能:設(shè)置lcd坐標(biāo)函數(shù)void lcd_set_xy(unsigned char x, unsigned char y) xdc(0x40 | y, 0); / column xdc(0x80 | x, 0); / row /函數(shù)功能:顯示英文字符void lcd_write_char(unsigned char c,unsigned char h,unsigned char l) unsigned char line;c=c-32;lcd_set_xy(h,l); for (line=0;line<

27、6;line+) xdc(zfbcline,1);/顯示小四漢字void hz(unsigned char *c,unsigned char h,unsigned char l)unsigned char line;lcd_set_xy(h,l); for (line=0;line<16;line+) xdc(cline,1);lcd_set_xy(h,l+1); for (line=16;line<32;line+) xdc(cline,1);/顯示小五漢字void xshz(unsigned char *c,unsigned char h,unsigned char l)uns

28、igned char line;lcd_set_xy(h,l); for (line=0;line<12;line+) xdc(cline,1);lcd_set_xy(h,l+1); for (line=12;line<24;line+) xdc(cline,1);/整個(gè)屏幕顯示void display(uchar n,uchar y,uchar r,uchar s,uchar f,uchar z,char wd) unsigned char ka; hz(zhou1,0,0); hz(xingqi+(z-1)*32,16,0);ka=n/10;lcd_write_char(ka+

29、48,32,0);ka=n%10;lcd_write_char(ka+48,38,0);lcd_write_char('/',44,0);ka=y/10;lcd_write_char(ka+48,50,0);ka=y%10;lcd_write_char(ka+48,56,0);lcd_write_char('/',62,0);ka=r/10;lcd_write_char(ka+48,68,0);ka=r%10;lcd_write_char(ka+48,74,0);ka=s/10;lcd_write_char(ka+48,32,1);ka=s%10;lcd_wri

30、te_char(ka+48,38,1);lcd_write_char(':',44,1);ka=f/10;lcd_write_char(ka+48,50,1);ka=f%10;lcd_write_char(ka+48,56,1); if(wd<0)lcd_write_char('-',48,5);wd=-wd;ka=wd/10;lcd_write_char(ka+48,60,5);ka=wd%10;lcd_write_char(ka+48,66,5); lcd_write_char('c',78,5); lcd_write_char(124

31、,72,5);xshz(hai,0,2); xshz(fu,12,2); xshz(wei,26,2); xshz(xiong,38,2); xshz(wei,52,2); xshz(jun,64,2); xshz(xiang,0,4); xshz(ri,12,4); xshz(kui,24,4);/6.5主程序 void main()csh5110(); /液晶初始化readyreadtemp(); /溫度初始化init_ds1302(); dusj();display(n,y,r,s,f,z,wd1); it0=1; ex0=1; ea=1;while(1)if(ks) dusj(); d

32、isplay(n,y,r,s,f,z,wd1);a1=p2&0x0f;p3=p2;for(i2=0;i2<14;i2+) /查表找出人的方位,0初始位置,1+ 45度 if(biaoi2=a1)break;a2=i2;if(a2<14) /則有人if(a2>=8&&a<=11) a2=(a2-8)*2;else if(a2>=12)a2=(a2-12)*6;elsea2=a2;a2=a2+8; switch(a2-a) case 1:djzd(1,0);a2=a2-8;a=a2;break;case 2: djzd(2,0);a2=a2-8

33、;a=a2; break;case 3: djzd(3,0);a2=a2-8;a=a2; break;case 4: djzd(4,0);a2=a2-8;a=a2; break;case 5: djzd(3,1); a2=a2-8;a=a2; break;case 6: djzd(2,1); a2=a2-8;a=a2;break;case 7: djzd(1,1); a2=a2-8;a=a2; break;case 8: break;case 9: djzd(1,0); a2=a2-8;a=a2; break; case 10: djzd(2,0);a2=a2-8;a=a2; break;ca

34、se 11: djzd(3,0);a2=a2-8;a=a2; break;case 12: djzd(4,0); a2=a2-8;a=a2; break;case 13: djzd(3,1); a2=a2-8;a=a2;break;case 14: djzd(2,1); a2=a2-8;a=a2; break;case 15: djzd(1,1);a2=a2-8;a=a2; break; default:break; void aaaa() interrupt 0 /電機(jī)位置初始化程序unsigned char i1;while(!p32)for(i1=0;i1<8;i1+)p1=dji1;ys(5);ks=1;ea=0;7、 設(shè)計(jì)結(jié)果及分析 設(shè)計(jì)結(jié)果,電機(jī)在初始化位置后能根據(jù)人體紅外傳感器檢測(cè)出人的位置從而改變轉(zhuǎn)向并面向人。由于傳感器模塊的電路決定了紅外傳感器在感應(yīng)人體進(jìn)入?yún)^(qū)域時(shí)有最低5s的輸出時(shí)間,造成單片機(jī)判斷上有一定的困難,在人體方位確定下來后單片機(jī)能在5

溫馨提示

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

評(píng)論

0/150

提交評(píng)論