電子技術(shù)課程設(shè)計-基于51單片機(jī)的彩燈控制_第1頁
已閱讀1頁,還剩18頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p>  電子技術(shù)應(yīng)用課程設(shè)計</p><p>  課題: 基于51單片機(jī)的彩燈制作 </p><p>  專業(yè)班級: </p><p>  學(xué)生姓名: </p><p>  學(xué)號: &

2、lt;/p><p>  指導(dǎo)老師: </p><p>  日期: 2012年9月 24日-9月28日 </p><p><b>  系統(tǒng)描述</b></p><p><b>  實驗?zāi)康?lt;/b></p><p>  為掌

3、握和熟悉STC80C51 4個I/O口的應(yīng)用及對I/O的一般控制方法,了解4094芯片的8位串行輸入轉(zhuǎn)為8位并行輸出的工作方式,利用STC80C51 4個I/O口實現(xiàn)32個LED控制和用P3.1、P3.2、P1.0及4094實現(xiàn)串口控制8個彩燈。通過完成這一包括電路設(shè)計和程序開發(fā)的完整過程,了解開發(fā)一單片機(jī)應(yīng)用系統(tǒng)的全過程,為今后的設(shè)計打下基礎(chǔ)。</p><p><b>  硬件分析</b>

4、</p><p>  STC80C51共有4個I/O口,可控制32個彩燈,在實現(xiàn)過程中要控制的彩燈分為4個部分,每一部分均由8個彩燈組成。第1部分由P0口控制;第2部分由P1口控制;第3部分由P2口控制;第4部分由P3口控制。另外8個彩燈由以P3.0、P3.1、P1.0控制的4094芯片組成的電路控制,這兩組彩燈分別由兩個程序控制,各不影響。</p><p>  在并口控制彩燈的實現(xiàn)中,由

5、于芯片STC80C51供電能力有限,所以在單片機(jī)控制的彩燈處各加上拉電阻,以防供電能力不足而導(dǎo)致的電路設(shè)計缺陷。</p><p>  在串口控制彩燈的實現(xiàn)中,P3.0為數(shù)據(jù)輸入口,P3.1為時鐘輸入口,驅(qū)動P3.0口的數(shù)據(jù)到4094芯片。4094為串口數(shù)據(jù)輸入轉(zhuǎn)換為8位并口數(shù)據(jù)輸出。P1.O為4094串口輸入轉(zhuǎn)變?yōu)閿?shù)據(jù)輸出的使能控制,當(dāng)P1.0為高電平時,4094串口輸入變?yōu)椴⒖谳敵?;P1.0為低電平時,4094

6、輸出的數(shù)據(jù)不變。同樣,4094控制的彩燈也各加上拉電阻。</p><p>  由于STC80C51 4個I/O的每個串口都有對彩燈的控制,同時P3.0、P3.1、P1.0又對串口8個彩燈控制,P3.0、P3.1、P1.0在實現(xiàn)功能控制中有沖突,所以在這次彩燈設(shè)計中采用了一個跳線功能(相當(dāng)于一個二路開關(guān)功能)。當(dāng)開關(guān)打到一端時,P3.0、P3.1、P1.0控制并口彩燈;而當(dāng)開關(guān)打到另一端時,P3.0、P3.1、P1

7、.0控制串口彩燈,所以實現(xiàn)過程中采取的是兩個主程序,以實現(xiàn)其功能。</p><p><b>  電路設(shè)計</b></p><p>  STC80C51 4個I/O分別對應(yīng)控制32個LED彩燈,4094芯片將串口數(shù)據(jù)輸入轉(zhuǎn)換為8位并口數(shù)據(jù)輸出。為保護(hù)這兩個IC片,我們增加了一個穩(wěn)壓模塊,將輸入電壓范圍為6~9V穩(wěn)定在5V左右。</p><p>&

8、lt;b>  電路原理圖 </b></p><p><b>  系統(tǒng)硬件框圖</b></p><p><b>  2.系統(tǒng)原理圖設(shè)計</b></p><p>  Proteus 仿真原理圖</p><p><b>  3.PCB布線設(shè)計</b></p&g

9、t;<p>  三.單片機(jī)彩燈控制應(yīng)用程序設(shè)計</p><p><b>  程序流程圖</b></p><p>  并口控制彩燈程序流程圖 串口控制彩燈程序流程圖</p><p><b>  調(diào)試與測試 </b></p><p>  畫完P(guān)CB圖并印刷

10、電路板之后,我們便開始焊接元件和調(diào)試。剛開始通電時,發(fā)現(xiàn)所有LED燈都不亮,包括穩(wěn)壓模塊的指示燈。通電幾分鐘后,穩(wěn)壓塊和STC80C51都開始發(fā)燙,我們急忙關(guān)掉電源,檢查電路。后來發(fā)現(xiàn)是穩(wěn)壓模塊并沒有接在電源的入口處,于是我們改正后,又重新接上電源,這回LED彩燈終于綻放了它的光彩??墒牵€是有些美中不足,有些LED燈光芒很微弱甚至不亮,我們猜測是焊接得不好或者是虛焊,于是又重新把不亮的LED燈重新焊接。之后再進(jìn)行調(diào)試,LED彩燈果真按

11、著程序閃動變換。</p><p><b>  成品圖片</b></p><p><b>  附1.元件清單:</b></p><p>  附2.系統(tǒng)詳細(xì)軟件代碼:</p><p><b>  1.彩燈并口程序</b></p><p>  //******

12、*******包含的頭文件****************</p><p>  #include<reg52.h></p><p>  #include<intrins.h></p><p>  //*************變量定義****************</p><p>  #define DELAY_TI

13、ME 550</p><p>  unsigned char change,change1,change2;</p><p>  unsigned char i,j;</p><p>  sbit P00=P0^0;</p><p>  sbit P01=P0^1;</p><p>  sbit P02=P0^2;&l

14、t;/p><p>  sbit P03=P0^3;</p><p>  sbit P04=P0^4;</p><p>  sbit P05=P0^5;</p><p>  sbit P06=P0^6;</p><p>  sbit P07=P0^7;</p><p>  sbit P17=P1^7;

15、</p><p>  sbit P27=P2^7;</p><p>  sbit P32=P3^2;</p><p>  sbit P33=P3^3;</p><p>  sbit P34=P3^4;</p><p>  sbit P35=P3^5;</p><p>  sbit P36=P3^

16、6;</p><p>  sbit P37=P3^7;</p><p>  //*************函數(shù)聲明****************</p><p>  void de_lay(void);</p><p>  void lig_rotate1(void);</p><p>  void lig_rota

17、te0(void);</p><p>  void lig_circle(void);</p><p>  void lig_jump(void);</p><p>  void lig_circle_light(void);</p><p>  void lig_all_put_out(void);</p><p>

18、  void Delay_us(int time);</p><p>  void Delay_ms(int time);</p><p>  //*************主程序開始****************</p><p>  void main()</p><p><b>  {</b></p>

19、<p><b>  while(1)</b></p><p><b>  {</b></p><p>  lig_all_put_out();</p><p>  Delay_ms(200);</p><p>  lig_rotate0();</p><p>  

20、lig_rotate1();</p><p>  for(j=0;j<5;j++)</p><p>  lig_circle();</p><p>  for(j=0;j<4;j++)</p><p>  lig_jump();</p><p>  for(j=0;j<4;j++)</p>

21、<p><b>  {</b></p><p>  lig_circle_light();</p><p>  lig_all_put_out();</p><p><b>  }</b></p><p>  for(j=0;j<4;j++)</p><p&g

22、t;  lig_jump();</p><p><b>  }</b></p><p><b>  }</b></p><p>  //************使彩燈由P0.0-P3.7順時針依次點亮*****************</p><p>  void lig_rotate0(void)

23、</p><p><b>  {</b></p><p>  change=0xff;</p><p>  for(i=0;i<=7;i++)</p><p><b>  {</b></p><p>  change<<=1;</p><

24、p>  P0=change;</p><p>  Delay_ms(DELAY_TIME);</p><p><b>  }</b></p><p>  change=0xff;</p><p>  for(i=0;i<=7;i++)</p><p><b>  {</

25、b></p><p>  change>>=1;</p><p>  P2=change;</p><p>  Delay_ms(DELAY_TIME);</p><p><b>  }</b></p><p>  change=0xff;</p><p>

26、;  for(i=0;i<=7;i++)</p><p><b>  {</b></p><p>  change>>=1;</p><p>  P3=change;</p><p>  Delay_ms(DELAY_TIME);</p><p><b>  }<

27、/b></p><p>  change=0xff;</p><p>  for(i=0;i<=7;i++)</p><p><b>  {</b></p><p>  change>>=1;</p><p>  P1=change;</p><p>

28、;  Delay_ms(DELAY_TIME);</p><p><b>  }</b></p><p><b>  }</b></p><p>  //*************使彩燈由P0.0-P3.7順時針依次熄滅****************</p><p>  void lig_rota

29、te1(void)</p><p><b>  {</b></p><p><b>  P00=1;</b></p><p>  Delay_ms(DELAY_TIME);</p><p><b>  P01=1;</b></p><p>  Delay

30、_ms(DELAY_TIME);</p><p><b>  P02=1;</b></p><p>  Delay_ms(DELAY_TIME);</p><p><b>  P03=1;</b></p><p>  Delay_ms(DELAY_TIME);</p><p>

31、;<b>  P04=1;</b></p><p>  Delay_ms(DELAY_TIME);</p><p><b>  P05=1;</b></p><p>  Delay_ms(DELAY_TIME);</p><p><b>  P06=1;</b></p&g

32、t;<p>  Delay_ms(DELAY_TIME);</p><p><b>  P07=1;</b></p><p>  Delay_ms(DELAY_TIME);</p><p>  change=0x00;</p><p>  for(i=0;i<=7;i++)</p>&l

33、t;p><b>  {</b></p><p>  change>>=1;</p><p>  change+=0x80;</p><p>  P2=change;</p><p>  Delay_ms(DELAY_TIME);</p><p><b>  }</

34、b></p><p>  change=0x00;</p><p>  for(i=0;i<=7;i++)</p><p><b>  {</b></p><p>  change>>=1;</p><p>  change+=0x80;</p><p&

35、gt;  P3=change;</p><p>  Delay_ms(DELAY_TIME);</p><p><b>  }</b></p><p>  change=0x00;</p><p>  for(i=0;i<=7;i++)</p><p><b>  {</b&

36、gt;</p><p>  change>>=1;</p><p>  change+=0x80;</p><p>  P1=change;</p><p>  Delay_ms(DELAY_TIME);</p><p><b>  }</b></p><p>

37、<b>  }</b></p><p>  //***********使P0,P1,P2,P3分別控制的所有的燈順時針點亮*************</p><p>  void lig_circle(void)</p><p><b>  {</b></p><p>  change1=0xaa;

38、</p><p>  change2=0x55;</p><p><b>  P0=0x00;</b></p><p>  Delay_ms(DELAY_TIME);</p><p><b>  P0=0xff;</b></p><p><b>  P2=0x00;

39、</b></p><p>  Delay_ms(DELAY_TIME);</p><p><b>  P2=0xff;</b></p><p><b>  P3=0x00;</b></p><p>  Delay_ms(DELAY_TIME);</p><p>&

40、lt;b>  P3=0xff;</b></p><p><b>  P1=0x00;</b></p><p>  Delay_ms(DELAY_TIME);</p><p><b>  P1=0xff;</b></p><p><b>  }</b></

41、p><p>  //*************彩燈間隔點亮******************</p><p>  void lig_jump(void)</p><p><b>  {</b></p><p>  P1=P3=0xaa;</p><p>  P2=P0=0x55;</p>

42、<p>  Delay_ms(900);</p><p>  P1=P3=0x55;</p><p>  P2=P0=0xaa;</p><p>  Delay_ms(900);</p><p><b>  }</b></p><p>  //***********使P0,P1,P2

43、,P3分別控制的所有的燈逆時針點亮******************</p><p>  void lig_circle_light(void)</p><p><b>  {</b></p><p>  change1=0xaa;</p><p>  change2=0x55;</p><p>

44、;<b>  P1=0x00;</b></p><p>  Delay_ms(DELAY_TIME);</p><p><b>  P1=0xff;</b></p><p><b>  P3=0x00;</b></p><p>  Delay_ms(DELAY_TIME);&l

45、t;/p><p><b>  P3=0xff;</b></p><p><b>  P2=0x00;</b></p><p>  Delay_ms(DELAY_TIME);</p><p><b>  P2=0xff;</b></p><p><b&g

46、t;  P0=0x00;</b></p><p>  Delay_ms(DELAY_TIME);</p><p><b>  P0=0xff;</b></p><p><b>  }</b></p><p>  //************熄滅所有的燈****************&l

47、t;/p><p>  void lig_all_put_out(void)</p><p><b>  {</b></p><p>  P1=P2=P3=P0=0xff;</p><p><b>  }</b></p><p>  //************us時間延時****

48、***********</p><p>  void Delay_us(int time)</p><p><b>  {</b></p><p>  while(time--)_nop_();</p><p><b>  }</b></p><p>  //********

49、*****ms時間延時***************</p><p>  void Delay_ms(int time)</p><p><b>  {</b></p><p>  while(time--)Delay_us(20);</p><p><b>  }</b></p>&

50、lt;p><b>  彩燈串口程序</b></p><p>  //*************包含的頭文件*****************</p><p>  #include<reg52.h></p><p>  #include<intrins.h></p><p>  //*****

51、********宏定義*****************</p><p>  #define uchar unsigned char</p><p>  #define DELAY_TIME 600</p><p>  //************函數(shù)聲明******************</p><p>  void Effect1(vo

52、id);</p><p>  void Effect2(void);</p><p>  void Effect3(uchar n);</p><p>  void Effect4(void);</p><p>  void lig_put_out(void);</p><p>  void Init_Programm

53、e(void);</p><p>  void Delay_us(int time);</p><p>  void Delay_ms(int time);</p><p>  //*************變量聲明*****************</p><p>  uchar change,change1,change2;</p&

54、gt;<p>  sbit P10=P1^0;</p><p>  uchar i,j;</p><p>  //**************主函數(shù)****************</p><p>  void main()</p><p><b>  {</b></p><p> 

55、 Init_Programme();</p><p><b>  while(1)</b></p><p><b>  {</b></p><p>  Effect1();</p><p>  Effect2();</p><p>  Effect3(5);</p>

56、;<p>  Effect4();</p><p><b>  }</b></p><p><b>  }</b></p><p>  //*************小燈漸亮*****************</p><p>  void Effect1(void)</p>

57、<p><b>  {</b></p><p>  change=0xff;</p><p>  for(i=0;i<=7;i++)</p><p><b>  {</b></p><p>  change<<=1;</p><p>  SBU

58、F=change;</p><p><b>  TI=0;</b></p><p>  while(!TI);</p><p><b>  P10=1;</b></p><p><b>  P10=0;</b></p><p>  Delay_ms(DE

59、LAY_TIME);</p><p><b>  }</b></p><p>  lig_put_out();</p><p><b>  }</b></p><p>  //*************小燈漸滅*****************</p><p>  void

60、Effect2(void)</p><p><b>  {</b></p><p>  change=0x00;</p><p>  for(i=0;i<=7;i++)</p><p><b>  {</b></p><p>  change>>=1;<

61、;/p><p>  change+=0x80;</p><p>  SBUF=change;</p><p><b>  TI=0;</b></p><p>  while(!TI);</p><p><b>  P10=1;</b></p><p>&l

62、t;b>  P10=0;</b></p><p>  Delay_ms(DELAY_TIME);</p><p><b>  }</b></p><p>  lig_put_out();</p><p><b>  }</b></p><p>  //***

63、**********小燈間隔亮與滅*****************</p><p>  void Effect3(uchar n)</p><p><b>  {</b></p><p>  change=0x55;</p><p>  change1=0xaa;</p><p>  for(i

64、=0;i<n;i++)</p><p><b>  {</b></p><p>  SBUF=change;</p><p><b>  TI=0;</b></p><p>  while(!TI);</p><p><b>  P10=1;</b>

65、;</p><p><b>  P10=0;</b></p><p>  Delay_ms(DELAY_TIME);</p><p>  SBUF=change1;</p><p><b>  TI=0;</b></p><p>  while(!TI);</p>

66、<p><b>  P10=1;</b></p><p><b>  P10=0;</b></p><p>  Delay_ms(DELAY_TIME);</p><p><b>  }</b></p><p>  lig_put_out();</p>

67、<p><b>  }</b></p><p>  //**************小燈的混合效果****************</p><p>  void Effect4(void)</p><p><b>  {</b></p><p>  int time=1000;<

68、/p><p>  change=change1=change2=0xfe;</p><p>  for(i=0;i<55;i++)</p><p><b>  {</b></p><p>  SBUF=change;</p><p><b>  TI=0;</b></

69、p><p>  while(!TI);</p><p><b>  P10=1;</b></p><p><b>  P10=0;</b></p><p>  change1<<=1;</p><p>  change2>>=7;</p>&

70、lt;p>  change=change1|change2;</p><p>  change1=change2=change;</p><p><b>  time-=15;</b></p><p>  Delay_ms(time);</p><p><b>  }</b></p>

71、;<p>  change=0xfe;</p><p>  change1=0xff;</p><p>  for(i=0;i<=7;i++)</p><p><b>  {</b></p><p>  for(j=0;j<5;j++)</p><p><b>

72、  {</b></p><p>  SBUF=change;</p><p><b>  TI=0;</b></p><p>  while(!TI);</p><p><b>  P10=1;</b></p><p><b>  P10=0;</

73、b></p><p>  Delay_ms(400);</p><p>  SBUF=change1;</p><p><b>  TI=0;</b></p><p>  while(!TI);</p><p><b>  P10=1;</b></p>&

74、lt;p><b>  P10=0;</b></p><p>  Delay_ms(400);</p><p><b>  }</b></p><p>  change<<=1;</p><p><b>  }</b></p><p> 

75、 Effect3(5);</p><p><b>  }</b></p><p>  //**************程序的初始化****************</p><p>  void Init_Programme(void)</p><p><b>  {</b></p>&

76、lt;p>  SCON=0x00;</p><p><b>  ES=0;</b></p><p><b>  P10=0;</b></p><p>  SBUF=Oxff;</p><p><b>  TI=0;</b></p><p>  wh

77、ile(!TI);</p><p><b>  P10=1;</b></p><p><b>  P10=0;</b></p><p><b>  }</b></p><p>  //**************熄滅所有的燈****************</p>

78、<p>  void lig_put_out(void)</p><p><b>  {</b></p><p>  SBUF=0xff;</p><p><b>  TI=0;</b></p><p>  while(!TI);</p><p><b>

79、;  P10=1;</b></p><p><b>  P10=0;</b></p><p><b>  }</b></p><p>  //**************us時間延時****************</p><p>  void Delay_us(int time)<

80、;/p><p><b>  {</b></p><p>  while(time--)_nop_();</p><p><b>  }</b></p><p>  //***************ms時間延時***************</p><p>  void Dela

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論