畢業(yè)設(shè)計(jì)--基于51單片機(jī)的燈光控制系統(tǒng)_第1頁
已閱讀1頁,還剩8頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、<p>  基于51單片機(jī)的燈光控制系統(tǒng)</p><p>  摘 要:本設(shè)計(jì)主要以ATMEL公司生產(chǎn)的AT89C52為核心處理器,利用其內(nèi)部的定時(shí)器進(jìn)行精確定時(shí),并通過74HC573鎖存器做驅(qū)動通過I/O口在數(shù)碼管顯示時(shí)間,通過CPU檢測程序設(shè)定的時(shí)間,控制5v繼電器的通斷已達(dá)到控制照明器件的通斷。本系統(tǒng)還具有外部可調(diào)時(shí)間部分以便対誤差進(jìn)行修正,以及備用電源防止停電造成單片機(jī)復(fù)位,使下次來電時(shí)不能對程序

2、設(shè)定的時(shí)間進(jìn)行準(zhǔn)確響應(yīng)。本試驗(yàn)通過在研展YZ200單片實(shí)驗(yàn)箱上進(jìn)行硬件調(diào)試,用Keil uVision3進(jìn)行軟件的調(diào)試。通過調(diào)試仿真是單片機(jī)能精確地控制電源的通斷時(shí)間即照明設(shè)備的通斷時(shí)間,調(diào)試之后定時(shí)可以精確到秒。</p><p>  關(guān)鍵詞:AT89C52 定時(shí)器 仿真調(diào)試</p><p>  1 方案比較,設(shè)計(jì)與論證</p><p>  方案一:通過單片機(jī)內(nèi)部定

3、時(shí),不接外部顯示設(shè)備(數(shù)碼管)以及外部調(diào)整設(shè)備(獨(dú)立鍵盤)。只要單片機(jī)內(nèi)部定時(shí)器到程序設(shè)定的時(shí)間就控制繼電器的通斷,以達(dá)到控制照明設(shè)備通斷的目的,但存在誤差不能修正</p><p>  方案二:通過單片機(jī)控制數(shù)碼管把單片機(jī)內(nèi)部程序控制時(shí)間直觀的在數(shù)碼管上顯示出來,在用三個獨(dú)立鍵盤來控制時(shí)間即便是出現(xiàn)誤差也可以通過鍵盤來調(diào)整,是誤差始終在容許范圍之內(nèi)已實(shí)現(xiàn)精確的定時(shí)。</p><p>  方

4、案一:不能直觀的顯示單片機(jī)內(nèi)部情況,而且對系統(tǒng)產(chǎn)生的誤差時(shí)間不能修正,雖說可以通過仿真調(diào)試減小誤差短時(shí)間內(nèi)影響不是很大但是長時(shí)間使用的話誤差還是很大的。 </p><p>  方案二:不但直觀地顯示了單片機(jī)內(nèi)部的情況,而且對系統(tǒng)經(jīng)過時(shí)間累積產(chǎn)生的誤差進(jìn)行修正,再加上仿真調(diào)試減小誤差,以達(dá)到定時(shí)精確到秒的要求。</p><p>  2 理論分析系統(tǒng)設(shè)計(jì)</p><p>

5、;<b>  2.1定時(shí)顯示模塊</b></p><p>  單片機(jī)時(shí)鐘產(chǎn)生方式有兩種,一是內(nèi)部時(shí)鐘方式(圖a),二是外部時(shí)鐘方式(圖b) ,內(nèi)部時(shí)鐘方式要在單片機(jī)的XTAL1和XTAL2引腳外接晶振即可。圖中電容器CI和C2的作用是穩(wěn)定頻率和快速起振,電容值在5~30pF,典型值為30pF。晶振CYS的振蕩頻率要小于12MHz,典型值為6MHz,12MHz或11.05926MHz。<

6、/p><p>  外部時(shí)鐘方式是把外部已有的時(shí)鐘信號引如單片機(jī)內(nèi),此方式多用于多片80C51單片機(jī)同時(shí)工作,并要求各單片機(jī)同步運(yùn)行的場所。本實(shí)驗(yàn)因?yàn)槭嵌〞r(shí)所以采用12MHz晶振。          </p><p>  圖a   圖b</p><p>  晶振周期為最小的時(shí)序單位,晶振信號經(jīng)分頻后形成兩相錯開的信號P

7、1和P2。P1和P2的周期也稱為S狀態(tài),他是晶振周期的2倍,即一個S狀態(tài)包含2個晶振周期。在每個S狀態(tài)的前半周期,相位1(P1)信號有效;在每個S狀態(tài)的前后半周期,相位2(P2)信號有效;每個S狀態(tài)有兩個節(jié)拍(相),P1和P2,CPU以P1和P2為基本節(jié)拍指揮各個部件協(xié)調(diào)工作。晶振信號12分頻后形成機(jī)器周期,即一個機(jī)器周期包含12個晶蕩周期。</p><p>  這樣以來采用12MHZ晶振則機(jī)器周期為1us,本設(shè)

8、計(jì)用定時(shí)器0的定時(shí)方式1,即十六位,設(shè)定</p><p> ?。裕停希?0x01  </p><p>  TH0=(65536-50000)/256</p><p> ?。裕蹋?(65536-50000)%256 </p><p>  這樣定時(shí)時(shí)間為50ms,計(jì)數(shù)200次就是一秒。滿60秒則分鐘加1而秒清零,滿60分鐘時(shí)小時(shí)數(shù)加1分鐘清零,把

9、時(shí)分秒分成兩位分別在數(shù)碼管上顯示,顯示電路如下:  </p><p>  本設(shè)計(jì)選用的數(shù)碼管是共陽極的及圖中所示的com1到com4,而P00到P07則控制相應(yīng)的各段及圖中二極管的a,b,c,d,e,f,dp.分別送十六進(jìn)制顯示碼是不同的二極管發(fā)光已達(dá)到顯示不同數(shù)的目地,如要左邊第一個顯示顯示‘1’其他不顯示,則P1口要送0x80而P0口要送0xf9以此類推就可以顯示各數(shù)字了。本設(shè)計(jì)鎖存器74HC573主

10、要做驅(qū)動使數(shù)碼管發(fā)光因?yàn)閱纹瑱C(jī)的驅(qū)動能力很弱不能驅(qū)動數(shù)碼管顯示,而顯示原理是數(shù)碼管動態(tài)顯示原理,分別給每個數(shù)碼管送十六進(jìn)制顯示編碼,然后延時(shí)在給下一個數(shù)碼管送十六進(jìn)制顯示編碼,以此類推給八位送完后循環(huán)再送新的一組十六進(jìn)制編碼,使數(shù)碼掛動態(tài)顯示時(shí)間。值得注意的是要在顯示過程中消隱,及送完一位后要給P0口送0xff,使數(shù)碼管短時(shí)熄滅(小于5ms),再給下一位送數(shù)顯示,以不影響下一位的顯示。使顯示更清晰以防出現(xiàn)亂碼。</p>&

11、lt;p><b>  2.2 鍵盤模塊</b></p><p>  本設(shè)計(jì)再用三個獨(dú)立鍵盤來控制數(shù)碼管的時(shí)分秒顯示,相應(yīng)按鍵按下后時(shí)分秒相對應(yīng)的加1,已達(dá)到調(diào)整時(shí)間的目的,更可以對內(nèi)部程序的時(shí)間進(jìn)行修正。使系統(tǒng)誤差也得到修正,這樣單片機(jī)就能更準(zhǔn)確地定時(shí)。但需要注意的是,按鍵按下時(shí)由于機(jī)械接觸點(diǎn)的彈性作用,按鍵在閉合時(shí)不會馬上接通,在斷開時(shí)也不會一下斷開。所以在閉合瞬間伴有一連串的抖動

12、,抖動時(shí)間長短由按鍵的機(jī)械性及操作人員按鍵動作決定,一般為5到20毫秒,按鍵穩(wěn)定閉合時(shí)間的長短是有操作人員按鍵按壓時(shí)間長短決定的,一般為零點(diǎn)幾秒至數(shù)秒不等。所以在程序中要用程序進(jìn)行延時(shí)消抖。</p><p>  按鍵原理是單片機(jī)上電后所有的IO口都是高電平,而當(dāng)按鍵按下后是單片機(jī)的IO口接地這樣一相應(yīng)的IO口就變成了低電平,只要通過單片機(jī)檢測接鍵盤的哪個IO口變成低電平就知道哪個鍵按下了,再通過相應(yīng)的程序控制顯示

13、時(shí)間達(dá)到修正時(shí)間的目的,本設(shè)計(jì)是當(dāng)按鍵按下時(shí),對應(yīng)的時(shí)分秒各自加1,使時(shí)間得到調(diào)整保持精確這樣定時(shí)時(shí)間就更加準(zhǔn)確,之所以加這個顯示電路和控制電路是因?yàn)閱纹瑱C(jī)自身執(zhí)行程序時(shí)要消耗時(shí)間,即便是經(jīng)過精確的調(diào)試修改延時(shí)等手段這個時(shí)間誤差總是存在的,隨所短時(shí)間內(nèi)影響不大但長時(shí)間的工作后日積月累這個誤差當(dāng)然就不可忽視了。加這個電路后當(dāng)發(fā)現(xiàn)時(shí)間誤差在秒上時(shí)就可以修正了,讓時(shí)間更加精確,還有當(dāng)長時(shí)間停電時(shí)備用電池電量耗完,如果沒這個電路當(dāng)再次來電時(shí)內(nèi)部

14、程序復(fù)位這樣定時(shí)就亂了,而加上這的電路后當(dāng)點(diǎn)來時(shí)就可以人工調(diào)整時(shí)間,時(shí)使用更加方便,定時(shí)更加精確。</p><p><b>  獨(dú)立鍵盤原理圖</b></p><p><b>  2.3繼電器模塊</b></p><p>  本設(shè)計(jì)采用的繼電器是5V繼電器,有電路圖可知當(dāng)通電時(shí)LED2點(diǎn)亮說明繼電器模塊電源正常反之則沒有電

15、,而LED1的作用是當(dāng)開關(guān)三極管導(dǎo)通也就是說繼電器工作時(shí)它點(diǎn)亮,而二極管D1的作用是當(dāng)繼電器斷電后,防止繼電器內(nèi)部的電磁感應(yīng)現(xiàn)象所產(chǎn)生的反向電動勢,對發(fā)光極管等造成損害。因?yàn)槠綍r(shí)D1是不導(dǎo)通的而當(dāng)繼電器產(chǎn)生反向電動勢時(shí),產(chǎn)生的電動勢就會經(jīng)過二極管形和繼電器本身形成通路,這樣就保護(hù)了整個電路中的器件。當(dāng)單片機(jī)輸出一個低電平時(shí)三極管導(dǎo)通,繼電器通電內(nèi)部就產(chǎn)生了磁場把開關(guān)K1通過磁力吸下使其與3閉合這樣使外部設(shè)備的電路接通達(dá)到了用低電壓控制高

16、壓的的目的。</p><p><b>  3 軟件設(shè)計(jì)</b></p><p><b>  程序如下:</b></p><p>  #include<reg52.h></p><p>  #define uchar unsigned char</p><p>  

17、uchar shi,shi1,shi2,fen,fen1,fen2,miao,miao1,miao2,num,tt,h,h1,h2,f,f1,f2,m,m1,m2;</p><p>  uchar code table[]={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};</p><p>  void display();</

18、p><p>  void display1();</p><p>  void keyscan1();</p><p>  sbit s1=P3^0;</p><p>  sbit s2=P3^1;</p><p>  sbit s3=P3^2;</p><p>  sbit s4=P3^3;<

19、;/p><p>  sbit relay=P3^5;</p><p>  void delay(uchar z)</p><p><b>  {</b></p><p>  uchar x,y;</p><p>  for(x=z;x>0;x--)</p><p>  f

20、or(y=110;y>0;y--);</p><p><b>  }</b></p><p>  void init()</p><p><b>  {</b></p><p><b>  shi=0;</b></p><p><b> 

21、 fen=0;</b></p><p><b>  miao=0;</b></p><p><b>  tt=0;</b></p><p>  TMOD=0x01;</p><p>  TH0=(65536-49990)/256</p><p>  TL0=(65

22、536-49990)%256</p><p><b>  EA=1;</b></p><p><b>  ET0=1;</b></p><p><b>  TR0=1;</b></p><p><b>  P3=0xff;</b></p>&

23、lt;p><b>  }</b></p><p>  void keyscan()</p><p><b>  { </b></p><p><b>  if(s1==0)</b></p><p><b>  { </b><

24、/p><p>  delay(5) ;</p><p><b>  if(s1==0)</b></p><p><b>  { </b></p><p><b>  TR0=0;</b></p><p><b>  shi++;</b

25、></p><p>  if(shi==24)</p><p><b>  shi=0;</b></p><p>  while(!s1);</p><p><b>  TR0=1;</b></p><p><b>  }</b></p>

26、;<p>  else display();</p><p>  } </p><p><b>  if(s2==0)</b></p><p><b>  { </b></p><p><b>  delay(5);</b></p&

27、gt;<p><b>  if(s2==0)</b></p><p><b>  {</b></p><p><b>  TR0=0;</b></p><p><b>  fen++;</b></p><p>  if(fen==60)<

28、;/p><p><b>  fen=0;</b></p><p>  while(!s2);</p><p><b>  TR0=1;</b></p><p><b>  }</b></p><p>  else display();</p>

29、<p><b>  }</b></p><p><b>  if(s3==0)</b></p><p><b>  { </b></p><p><b>  delay(5);</b></p><p><b>  if(s3==0)&l

30、t;/b></p><p><b>  {</b></p><p><b>  EA=0;</b></p><p>  TH0=(65536-49990)/256</p><p>  TL0=(65536-49990)%256</p><p><b>  mi

31、ao++;</b></p><p>  if(miao==60)</p><p><b>  miao=0;</b></p><p>  while(!s3);</p><p><b>  EA=1;</b></p><p><b>  }</b&

32、gt;</p><p>  else display();</p><p><b>  }</b></p><p><b>  }</b></p><p>  void main()</p><p><b>  {</b></p><

33、p><b>  init();</b></p><p><b>  while(1)</b></p><p><b>  {</b></p><p>  shi2=shi/10;</p><p>  shi1=shi%10;</p><p>  

34、fen2=fen/10;</p><p>  fen1=fen%10;</p><p>  miao2=miao/10;</p><p>  miao1=miao%10;</p><p>  keyscan();</p><p>  display();</p><p><b>  }

35、</b></p><p><b>  }</b></p><p>  void time() interrupt 1</p><p><b>  { </b></p><p>  TH0=(65536-49990)/256</p><p>  TL0=(65536

36、-49990)%256</p><p><b>  tt++;</b></p><p>  if(tt==20)</p><p><b>  {</b></p><p><b>  tt=0; </b></p><p><b>  miao

37、++;</b></p><p>  if((shi==1)&(fen==1)&(miao==3))</p><p><b>  relay=0;</b></p><p>  if((shi==1)&(fen==1)&(miao==9))</p><p><b>  r

38、elay=1;</b></p><p>  if(miao==60)</p><p><b>  {</b></p><p><b>  miao=0;</b></p><p><b>  fen++;</b></p><p>  if(fe

39、n==60)</p><p><b>  {</b></p><p><b>  fen=0;</b></p><p><b>  shi++;</b></p><p>  if(shi==24)</p><p><b>  shi=0;<

40、;/b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  void display()<

41、/p><p><b>  {</b></p><p><b>  P1=0x01;</b></p><p>  P0=table[miao1];</p><p><b>  delay(5);</b></p><p><b>  P0=0xff;&

42、lt;/b></p><p><b>  P1=0x02;</b></p><p>  P0=table[miao2];</p><p><b>  delay(5);</b></p><p><b>  P0=0xff;</b></p><p>

43、<b>  P1=0x04;</b></p><p>  P0=0xbf; //送間隔符</p><p><b>  delay(5);</b></p><p><b>  P0=0xff;</b></p><p><b>  P1=0x08;</b>

44、;</p><p>  P0=table[fen1];</p><p><b>  delay(5);</b></p><p><b>  P0=0xff;</b></p><p><b>  P1=0x10;</b></p><p>  P0=tabl

45、e[fen2];</p><p><b>  delay(5);</b></p><p><b>  P0=0xff;</b></p><p><b>  P1=0x20;</b></p><p>  P0=0xbf; //送間隔符</p><p&g

46、t;<b>  delay(5);</b></p><p><b>  P0=0xff;</b></p><p><b>  P1=0x40;</b></p><p>  P0=table[shi1];</p><p><b>  delay(5);</b>

47、;</p><p><b>  P0=0xff;</b></p><p><b>  P1=0x80;</b></p><p>  P0=table[shi2];</p><p><b>  delay(5);</b></p><p><b>

48、  P0=0xff;</b></p><p><b>  }</b></p><p><b>  4仿真調(diào)試</b></p><p>  本設(shè)計(jì)主要通過對定時(shí)時(shí)間進(jìn)行調(diào)試,已達(dá)到精確定時(shí)的目的。仿真工具是Keil uVision3,當(dāng)給定時(shí)器T0分別裝TH0=(65536-50000)/256, TH0=(65

49、536-50000)%256;調(diào)試結(jié)果如下圖:</p><p>  則每分鐘的誤差=0.01289400秒; 每小時(shí)誤差=0.74915800秒;</p><p>  24小時(shí)誤差= 24*0.7491588=17.9798112秒; </p><p>  最終調(diào)試后當(dāng)給TH0=(65536-49983)/256; TL0=(65536-49983)%256

50、;</p><p>  則每分鐘的誤差=0.000113秒; 每小時(shí)誤差=0.031233秒;</p><p>  24小時(shí)誤差=224*0.031233=0.749592秒;</p><p><b>  如下圖所示:</b></p><p><b>  參考文獻(xiàn):</b></p>&

51、lt;p>  李全利,單片機(jī)原理及接口技術(shù)【M】2版。高等教育出版社,2009.</p><p>  孫煥名,趙會成,王金,51單片機(jī)C程序應(yīng)用實(shí)例詳解【M】。北京航空航天大學(xué)出版社,2011.3</p><p>  趙建領(lǐng),薛圓圓,零基礎(chǔ)學(xué)單片機(jī)C語言程序設(shè)計(jì)【M】。機(jī)械工業(yè)出版社,2009.4</p><p>  郭天祥,新概念51單片機(jī)C語言教程 ——入

溫馨提示

  • 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論