心形流水燈課程設(shè)計_第1頁
已閱讀1頁,還剩24頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  心形流水燈設(shè)計</b></p><p><b>  摘 要</b></p><p>  本課題是利用STC89C52設(shè)計了一個心形流水燈電路,該電路可以實現(xiàn)32個LED燈循環(huán)閃亮、依次熄滅、對角閃亮、對角熄滅、間隔閃亮、間隔熄滅等多種功能。該電路主要由單片機芯片STC89C52、電源電路、時鐘電路、復(fù)位電路和顯示電

2、路組成。利用Keil軟件編寫C語言程序,并生成目標代碼Hex文件。使用Proteus軟件設(shè)計仿真電路,并調(diào)入已編譯好的目標代碼,即可在仿真圖中看到模擬實物的運行狀態(tài)和過程。使用Altium Designer軟件對電路進行原理圖設(shè)計和PCB設(shè)計,并對該電路行安裝和調(diào)試,調(diào)試結(jié)果可以實現(xiàn)流水燈的多種亮滅循環(huán)的功能。</p><p>  關(guān)鍵詞:AT89C52,復(fù)位電路,時鐘電路,發(fā)光二極管 </p>&

3、lt;p><b>  目 錄</b></p><p><b>  1 緒論1</b></p><p>  1.1 課題描述1</p><p>  1.2 基本工作原理及框圖1</p><p>  2 相關(guān)芯片及硬件電路設(shè)計2</p><p>  2.1

4、 AT89C52芯片2</p><p>  2.1.1 AT89C52的功能特性2</p><p>  2.1.2 AT89C52的主要性能參數(shù)2</p><p>  2.2 時鐘電路3</p><p>  2.3 復(fù)位電路4</p><p>  2.4 顯示電路4</p><

5、;p>  2.6 總原理圖設(shè)計5</p><p>  3 系統(tǒng)軟件設(shè)計6</p><p>  3.1 程序主要流程6</p><p>  3.2 程序設(shè)計7</p><p>  3.4 電路功能仿真20</p><p><b>  總 結(jié)21</b></p&

6、gt;<p><b>  致 謝22</b></p><p><b>  參考文獻23</b></p><p><b>  1 緒論</b></p><p>  1.1 課題描述 </p><p>  隨著現(xiàn)代科學(xué)技術(shù)的持續(xù)進步和發(fā)展以及人們生活

7、水平的不斷提高,以大規(guī)模、超大規(guī)模集成電路為首的電子工藝技術(shù)的使用也越來越廣泛,結(jié)合單片機技術(shù)設(shè)計的電子電路也層出不窮。 LED彩燈由于其豐富的燈光色彩、低廉的造價以及控制簡單等特點而得到了廣泛的應(yīng)用,用彩燈來裝飾街道和城市建筑物已經(jīng)成為一種時尚。利用控制電路可使彩燈按一定的規(guī)律不斷的改變狀態(tài),不僅可以獲得良好的觀賞效果,而且可以省電。</p><p>  彩燈的運用已經(jīng)遍布于人們的生活中,從歌舞廳到卡拉OK包房

8、,從節(jié)日的祝賀到日常生活中的點綴,這些不僅說明了我們對生活的要求有了質(zhì)的飛躍,也說明科技在現(xiàn)實生活中的運用有了較大的發(fā)展。在這一設(shè)計中我們將運用單片機技術(shù),與單片機芯片STC89C52的功能,對心形流水燈系統(tǒng)進行設(shè)計,來實現(xiàn)流水燈的多種亮與滅的循環(huán),給人帶來美感[1]。</p><p>  1.2 基本工作原理及框圖</p><p>  本課程設(shè)計的XX系統(tǒng)原理如圖1所示。</p&

9、gt;<p>  圖1 基本工作原理框圖</p><p>  2 相關(guān)芯片及硬件電路設(shè)計</p><p>  2.1 AT89C52芯片</p><p><b>  。</b></p><p>  圖2 AT89C52引腳圖</p><p>  2.1.1 AT89C52的

10、功能特性</p><p>  STC89C52是STC公司生產(chǎn)的一種低功耗、高性能的微控制器,具有8K的系統(tǒng)可編程Flash存儲器,其具有傳統(tǒng)51單片機不具備的功能,在經(jīng)典的MCS-51內(nèi)核上做了很多的改進,使得STC89C52在處理嵌入式控制應(yīng)用系統(tǒng)時更加高效、靈活。STC89C52具有以下標準功能:4個外部中斷、全雙工串行口、一個7向量4級中斷結(jié)構(gòu)、3個16位定時器/計數(shù)器、8K字節(jié)Flash、512字節(jié)RA

11、M(隨機存儲器)、看門狗定時器,其12周期和6周期可以任意選擇,其工作電壓在3V~5.5V之間,工作頻率在0~40MHZ,實際工作頻率可達48MHZ[2]。其管腳的封裝圖如圖2所示。</p><p>  2.1.2 AT89C52的主要性能參數(shù)</p><p>  AT89C52主要性能參數(shù)如下:</p><p>  與MC-51產(chǎn)品指令系統(tǒng)完全兼容</p&

12、gt;<p>  VCC(38腳):芯片電源,接+5V</p><p>  GND(16腳):接地端</p><p>  XTAL1(15腳):片內(nèi)振蕩器反相放大器和時鐘發(fā)生器電路的輸入端。當(dāng)使用片內(nèi)振蕩器時,該引腳連接外部石英晶體和微調(diào)電容;當(dāng)采用外接時鐘源時,該引腳接外部時鐘振蕩器的信號 </p><p>  XTAL2(14腳):片內(nèi)振蕩器反相放

13、大器的輸出端。當(dāng)使用片內(nèi)振蕩器時,該引腳連接外部石英晶體和微調(diào)電容;當(dāng)采用外部時鐘源時,該引腳懸空</p><p>  ALE(27腳):用來鎖存P0口送出的低8位地址</p><p>  PSEN(26腳:外部ROM讀選通信號</p><p>  RST(4腳):復(fù)位信號輸入端</p><p>  EA/Vpp(29腳):內(nèi)外ROM選擇/片

14、內(nèi)EPROM編程電源</p><p>  P0口:8位,漏極開路的雙向I/O口</p><p>  P1口:8位,準雙向I/O口,具有內(nèi)部上拉電阻</p><p>  P2口:8位,準雙向I/O口,具有內(nèi)部上拉電阻</p><p>  P3口:8位,準雙向I/O口,具有內(nèi)部上拉電阻</p><p><b> 

15、 2.2 時鐘電路</b></p><p>  單片機內(nèi)有一個由反相放大器所構(gòu)成的振蕩電路,XTAL1和XTAL2分別為振蕩電路的輸入端和輸出端。在XTAL1和XTAL2引腳上外接石英晶體和微調(diào)電容構(gòu)成并聯(lián)振蕩回路。晶振頻率設(shè)置為11.0592MHZ,作用是產(chǎn)生時鐘信號。單片機晶振提供的時鐘頻率越高,那么單片機運行速度就越快,單片接的一切指令的執(zhí)行都是建立在單片機晶振提供的時鐘頻率。電容值為30pF

16、,可以起到頻率微調(diào)作用[3]。時鐘電路如圖3所示。</p><p><b>  圖3 時鐘電路圖</b></p><p><b>  2.3 復(fù)位電路</b></p><p>  單片機RST接口為復(fù)位信號輸入端,高電平有效。在該引腳上加上持續(xù)時間大于兩個機器周期的高電平,就可以使單片機復(fù)位。在單片機正常工作時,此引腳

17、應(yīng)為小于或等于0.5V的低電平。復(fù)位電路接單片機RST端口,在RST輸入端出現(xiàn)高電平時實現(xiàn)復(fù)位和初始化[4]。復(fù)位電路如4所示。</p><p><b>  圖4 復(fù)位電路</b></p><p><b>  2.4 顯示電路</b></p><p>  單片機的P0口為8位的漏極開路的雙向I/O口,當(dāng)P0口作為普通的

18、I/O口使用時,需要上拉電阻,這時為準雙向口。P1 、P2、 P3 都為8位的準雙向口,具有內(nèi)部上拉電阻。圖5為顯示電路,單片機I/O口一對一直接控制LED燈,顯示電路中的32個電阻既為上拉電阻,也起到電路分</p><p>  壓作用,防止燒壞元器件[5]。顯示電路如圖5 所示 </p><p><b>  圖5 顯示電路圖</b></p><

19、p>  2.6 總原理圖設(shè)計</p><p>  總結(jié)時鐘電路、復(fù)位電路、以及顯示電路,把其放入一個電路。得到總體的電路。總體電路如圖6所示。</p><p><b>  圖6 電路原理圖</b></p><p><b>  3 系統(tǒng)軟件設(shè)計</b></p><p>  3.1 程序主

20、要流程</p><p>  單片機的應(yīng)用系統(tǒng)由硬件和軟件組成,在硬件原理圖搭建完成上電之后,暫時還不能看到流水燈循環(huán)點亮的現(xiàn)象,還需要編寫程序控制單片機管腳電平的高低變化,來實現(xiàn)LED燈的各種亮滅功能。</p><p>  先將P0、P1、P2、P3全部置1,即通入高電平,用16進制表示為0XFFH,則32個LED燈全部處于熄滅狀態(tài)。然后給P0口賦值0X7FH,即只有P0.0處于低電平時,

21、LED1燈點亮。使用延時函數(shù)delay,并設(shè)置延時時間為2秒,延時時間一到P0口的值就變?yōu)?X3FH,即P0.0和P0.1都為高電平,LED2也開始點亮,如此循環(huán)P0口控制的8個LED燈全部點亮,當(dāng)高電平變?yōu)榈碗娖綍r,LED燈熄滅。P1、P2、P3口控制的LED燈閃亮和熄滅原理同P0口一樣,所以就可以看到LED燈的流水效果了[6]。程序流程圖如圖7所示,</p><p><b>  低電平 </

22、b></p><p><b>  高電平 </b></p><p>  圖7 程序設(shè)計流程圖</p><p><b>  3.2 程序設(shè)計</b></p><p>  #include<reg52.h></p><p>  #include <in

23、trins.h></p><p>  #defineuint unsigned int</p><p>  #defineuchar unsigned char</p><p>  uchar code table[]={0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00}; // 逐個點亮0~7</p><

24、p>  uchar code table1[]={0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x00}; // 逐個點亮7~0</p><p>  uchar code table2[]={0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff}; // 逐個滅0~7</p><p>  uchar code table3[]={0

25、x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff}; // 逐個滅7~0</p><p>  void delay(uint t);//延時</p><p>  void zg(uint t,uchar a);//兩邊逐個亮</p><p>  void qs(uint t,uchar a);//全部閃爍</p><

26、p>  void zgxh(uint t,uchar a); // 逆時針逐個點亮</p><p>  //void zgxh1(uint t,uchar a); // 順時針逐個點亮</p><p>  void djs(uint t,uchar a); //對角閃</p><p>  void lbzgm(uint t,uchar a);//兩邊逐個

27、滅</p><p>  //void sszgm(uint t,uchar a); // 順時針逐個滅</p><p>  void nszgm(uint t,uchar a); // 逆時針逐個滅</p><p>  void sztl(uint t,uchar a);//順時逐個同步亮</p><p>  void nztl(uint t

28、,uchar a);//逆時逐個同步亮</p><p>  void sztm(uint t,uchar a);//順時逐個同步滅</p><p>  void nztm(uint t,uchar a);//逆時逐個同步滅</p><p>  void hwzjl(uint t,uchar a); //橫往中間亮</p><p>  void

29、 hwzjm(uint t,uchar a); //橫往中間滅</p><p>  //void swzjl(uint t,uchar a); //豎往中間亮</p><p>  //void swzjm(uint t,uchar a); //豎往中間滅</p><p>  void nzdl(uint t,uchar a); //逆時逐段亮</p>

30、<p>  void nzdgl(uint t,uchar a); //逆時逐段一個點亮</p><p>  void jgs(uint t,uchar a); //間隔閃</p><p>  void zg(uint t,uchar a)//兩邊逐個亮</p><p><b>  {</b></p><p

31、>  uchar i,j;</p><p>  for(j=0;j<a;j++)</p><p><b>  {</b></p><p>  P0=P1=P2=P3=0xff;</p><p>  P0=0x7f;delay(t);</p><p>  for(i=0;i<7;i

32、++)</p><p><b>  {</b></p><p>  P0=table1[i+1];</p><p>  P2=table1[i];</p><p>  delay(t);</p><p><b>  }</b></p><p>  P

33、2=0x00;P1=0xfe;</p><p><b>  delay(t);</b></p><p>  for(i=0;i<7;i++)</p><p><b>  {</b></p><p>  P1=table[i+1];</p><p>  P3=table1

34、[i];</p><p><b>  delay(t);</b></p><p><b>  }</b></p><p>  P3=0x00;delay(t);</p><p><b>  }</b></p><p><b>  }</b

35、></p><p>  void qs(uint t,uchar a) //全部閃爍</p><p><b>  {</b></p><p><b>  uchar j;</b></p><p>  for(j=0;j<a;j++)</p><p><b&

36、gt;  {</b></p><p>  P0=P1=P2=P3=0xff;</p><p><b>  delay(t);</b></p><p>  P0=P1=P2=P3=0x00;</p><p>  delay(t); </p><p><b>  } <

37、/b></p><p><b>  }</b></p><p>  void zgxh(uint t,uchar a) // 逆時針逐個點亮</p><p><b>  {</b></p><p>  uchar i,j;</p><p>  for (j=0;j&l

38、t;a;j++)</p><p><b>  {</b></p><p>  P0=P1=P2=P3=0xff;</p><p>  for (i=0;i<8;i++)</p><p><b>  {</b></p><p>  P0=table1[i];</p&

39、gt;<p><b>  delay(t);</b></p><p><b>  }</b></p><p>  for(i=0;i<8;i++)</p><p><b>  {</b></p><p>  P1=table[i];</p>&

40、lt;p><b>  delay(t);</b></p><p><b>  }</b></p><p>  for(i=0;i<8;i++)</p><p><b>  {</b></p><p>  P3=table[i];</p><p&g

41、t;<b>  delay(t);</b></p><p><b>  }</b></p><p>  for(i=0;i<8;i++)</p><p><b>  {</b></p><p>  P2=table[i];</p><p><

42、b>  delay(t);</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  void nszgm(uint t,uchar a) // 逆時針逐個滅</p

43、><p><b>  {</b></p><p>  uchar i,j;</p><p>  for(j=0;j<a;j++)</p><p><b>  {</b></p><p>  P0=P1=P2=P3=0x00;</p><p>  fo

44、r (i=0;i<8;i++)</p><p><b>  {</b></p><p>  P0=table3[i];delay(t);</p><p><b>  }</b></p><p>  for (i=0;i<8;i++)</p><p><b&

45、gt;  {</b></p><p>  P1=table2[i];delay(t);</p><p><b>  }</b></p><p>  for (i=0;i<8;i++)</p><p><b>  {</b></p><p>  P3=tab

46、le2[i];delay(t);</p><p><b>  }</b></p><p>  for (i=0;i<8;i++)</p><p><b>  {</b></p><p>  P2=table2[i];delay(t);</p><p><b&g

47、t;  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  void zgxh1(uint t,uchar a) // 順時針逐個點亮</p><p><b>  {</b></p><

48、;p>  uchar i,j;</p><p>  for (j=0;j<a;j++)</p><p><b>  {</b></p><p>  P0=P1=P2=P3=0xff;</p><p>  for (i=0;i<8;i++)</p><p><b>  {

49、</b></p><p>  P2=table1[i];</p><p><b>  delay(t);</b></p><p><b>  }</b></p><p>  for(i=0;i<8;i++)</p><p><b>  {</

50、b></p><p>  P3=table1[i];</p><p><b>  delay(t);</b></p><p><b>  }</b></p><p>  for(i=0;i<8;i++)</p><p><b>  {</b>

51、</p><p>  P1=table1[i];</p><p><b>  delay(t);</b></p><p><b>  }</b></p><p>  for(i=0;i<8;i++)</p><p><b>  {</b></

52、p><p>  P0=table[i];</p><p><b>  delay(t);</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p>

53、<p>  void sszgm(uint t,uchar a) // 順時針逐個滅</p><p><b>  {</b></p><p>  uchar i,j;</p><p>  for(j=0;j<a;j++)</p><p><b>  {</b></p>

54、<p>  P0=P1=P2=P3=0x00;</p><p>  for (i=0;i<8;i++)</p><p><b>  {</b></p><p>  P2=table3[i];delay(t);</p><p><b>  }</b></p><

55、;p>  for (i=0;i<8;i++)</p><p><b>  {</b></p><p>  P3=table3[i];delay(t);</p><p><b>  }</b></p><p>  for (i=0;i<8;i++)</p><p

56、><b>  {</b></p><p>  P1=table3[i];delay(t);</p><p><b>  }</b></p><p>  for (i=0;i<8;i++)</p><p><b>  {</b></p><p&g

57、t;  P0=table2[i];delay(t);</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  void djs(uint t,uchar a) //對角閃</p>

58、<p><b>  {</b></p><p><b>  uchar j;</b></p><p>  for(j=0;j<a;j++)</p><p><b>  {</b></p><p>  P0=P1=P2=P3=0xff;</p>

59、<p>  P0=P3=0x00;</p><p><b>  delay(t);</b></p><p>  P0=P1=P2=P3=0xff;</p><p>  P1=P2=0x00;</p><p><b>  delay(t);</b></p><p>&

60、lt;b>  }</b></p><p><b>  }</b></p><p>  void lbzgm(uint t,uchar a)//兩邊逐個滅</p><p><b>  {</b></p><p>  uchar i,j;</p><p>  f

61、or (j=0;j<a;j++)</p><p><b>  {</b></p><p>  P0=P2=0x00;</p><p>  P3=0x01;delay(t);</p><p>  for(i=7;i>1;i--)</p><p><b>  {</b>

62、;</p><p>  P1=table[i-1];P3=table1[i-2];</p><p><b>  delay(t);</b></p><p><b>  }</b></p><p>  P1=0xfe;P3=0xff;delay(t);</p><p>  P1

63、=0xff;P2=0x01;delay(t);</p><p>  for(i=7;i>1;i--)</p><p><b>  {</b></p><p>  P0=table1[i-1];</p><p>  P2=table1[i-2];</p><p><b>  dela

64、y(t);</b></p><p><b>  }</b></p><p>  P0=0x7f;P2=0xff;delay(t);</p><p>  P0=0xff;delay(t);</p><p><b>  }</b></p><p><b> 

65、 }</b></p><p>  void sztl(uint t,uchar a)//順時逐個同步亮</p><p><b>  {</b></p><p>  uchar i,j;</p><p>  for(j=0;j<a;j++)</p><p><b>  {

66、</b></p><p>  P0=P1=P2=P3=0xff;</p><p>  for(i=0;i<8;i++)</p><p><b>  {</b></p><p>  P0=table[i];</p><p>  P1=P2=P3=table1[i];</p&g

67、t;<p><b>  delay(t);</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  void nztl(uint t,uchar a)

68、//逆時逐個同步亮</p><p><b>  {</b></p><p>  uchar i,j;</p><p>  for(j=0;j<a;j++)</p><p><b>  {</b></p><p>  P0=P1=P2=P3=0xff;</p>

69、<p>  for(i=0;i<8;i++)</p><p><b>  {</b></p><p>  P0=table1[i];</p><p>  P1=P2=P3=table[i];</p><p><b>  delay(t);</b></p><p

70、><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  void sztm(uint t,uchar a)//順時逐個同步滅</p><p><b>  {</b></p&g

71、t;<p>  uchar i,j;</p><p>  for(j=0;j<a;j++)</p><p><b>  {</b></p><p>  P0=P1=P2=P3=0x00;</p><p>  for(i=0;i<8;i++)</p><p><b&g

72、t;  {</b></p><p>  P0=table2[i];</p><p>  P1=P2=P3=table3[i];</p><p><b>  delay(t);</b></p><p><b>  }</b></p><p><b>  }

73、</b></p><p><b>  }</b></p><p>  void nztm(uint t,uchar a)//逆時逐個同步滅</p><p><b>  {</b></p><p>  uchar i,j;</p><p>  for(j=0;j&l

74、t;a;j++)</p><p><b>  {</b></p><p>  P0=P1=P2=P3=0xff;</p><p>  for(i=0;i<8;i++)</p><p><b>  {</b></p><p>  P0=table3[i];</p&g

75、t;<p>  P1=P2=P3=table2[i];</p><p><b>  delay(t);</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p

76、><p>  void hwzjl(uint t,uchar a) //橫往中間亮</p><p><b>  {</b></p><p>  uchar i,j;</p><p>  for (j=0;j<a;j++)</p><p><b>  {</b></p&

77、gt;<p>  P0=P1=P2=P3=0xff;</p><p>  for(i=0;i<8;i++)</p><p><b>  {</b></p><p>  P0=P2=P1=table1[i];</p><p>  P3=table[i];delay(t);</p><

78、;p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  void hwzjm(uint t,uchar a) //橫往中間滅</p><p><b>  {</b></p

79、><p>  uchar i,j;</p><p>  for (j=0;j<a;j++)</p><p><b>  {</b></p><p>  P0=P1=P2=P3=0x00;</p><p>  for(i=0;i<8;i++)</p><p><

80、b>  {</b></p><p>  P0=P2=P1=table3[i];</p><p>  P3=table2[i];delay(t);</p><p><b>  }</b></p><p><b>  }</b></p><p><b&g

81、t;  }</b></p><p>  void swzjl(uint t,uchar a) //豎往中間亮</p><p><b>  {</b></p><p>  uchar i,j;</p><p>  for (j=0;j<a;j++)</p><p><b>

82、;  {</b></p><p>  P0=P1=P2=P3=0xff;</p><p>  for(i=0;i<8;i++)</p><p><b>  {</b></p><p>  P0=P2=P1=table[i];</p><p>  P3=table1[i];dela

83、y(t);</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  void swzjm(uint t,uchar a) //豎往中間滅</p><p><b&g

84、t;  {</b></p><p>  uchar i,j;</p><p>  for (j=0;j<a;j++)</p><p><b>  {</b></p><p>  P0=P1=P2=P3=0x00;</p><p>  for(i=0;i<8;i++)<

85、/p><p><b>  {</b></p><p>  P0=P2=P1=table2[i];</p><p>  P3=table3[i];delay(t);</p><p><b>  }</b></p><p><b>  }</b></p&

86、gt;<p><b>  }</b></p><p>  void nzdl(uint t,uchar a) //逆時逐段亮</p><p><b>  {</b></p><p>  uchar i,j;</p><p>  for (j=0;j<a;j++)</p>

87、;<p><b>  {</b></p><p>  P0=P1=P2=P3=0xff;</p><p>  for(i=0;i<8;i++)</p><p><b>  {</b></p><p>  P0=table1[i];</p><p><

88、b>  delay(t);</b></p><p><b>  }</b></p><p><b>  P0=0xff;</b></p><p>  for(i=0;i<8;i++)</p><p><b>  {</b></p><

89、p>  P1=table[i];</p><p><b>  delay(t);</b></p><p><b>  }</b></p><p><b>  P1=0xff;</b></p><p>  for(i=0;i<8;i++)</p><

90、;p><b>  {</b></p><p>  P3=table[i];</p><p><b>  delay(t);</b></p><p><b>  }</b></p><p><b>  P3=0xff;</b></p>&

91、lt;p>  for(i=0;i<8;i++)</p><p><b>  {</b></p><p>  P2=table[i];</p><p><b>  delay(t);</b></p><p><b>  }</b></p><p&g

92、t;  P2=0xff;</p><p><b>  }</b></p><p><b>  }</b></p><p>  void nzdgl(uint t,uchar a) //逆時逐段一個點亮</p><p><b>  {</b></p><

93、;p>  uchar i,j,k,l;</p><p>  for (j=0;j<a;j++)</p><p><b>  {</b></p><p>  k=table1[0];</p><p>  P0=k;l=table[0];</p><p>  P1=P2=P3=l;dela

94、y(t);</p><p>  for(i=0;i<8;i++)</p><p><b>  {</b></p><p>  k=_crol_(k,-1);</p><p><b>  P0=k;</b></p><p>  l=_crol_(l,1);</p&g

95、t;<p>  P1=P2=P3=l;</p><p><b>  delay(t);</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p>&l

96、t;p>  void jgs(uint t,uchar a) //間隔閃</p><p><b>  {</b></p><p><b>  uchar j;</b></p><p>  for (j=0;j<a;j++)</p><p><b>  {</b>

97、</p><p>  P0=0x55;P1=P2=P3=0xaa;</p><p><b>  delay(t);</b></p><p>  P0=0xaa;P1=P2=P3=0x55;</p><p>  delay(t);</p><p><b>  }</b><

98、;/p><p><b>  }</b></p><p>  void main()</p><p><b>  {</b></p><p><b>  uchar i;</b></p><p><b>  while(1)</b><

99、;/p><p><b>  {</b></p><p>  zg(100,1); //兩邊逐個亮</p><p>  lbzgm(100,1); //兩邊逐個滅</p><p>  jgs(300,10);</p><p>  djs(100,20); //對角閃</p>&

100、lt;p>  P1=P2=P3=0xff;</p><p>  for(i=0;i<3;i++)</p><p><b>  {</b></p><p>  P0=0x00;delay(800);</p><p>  P0=0xff;delay(800);</p><p><b&

101、gt;  }</b></p><p><b>  P0=0x00;</b></p><p>  for(i=0;i<3;i++)</p><p><b>  {</b></p><p>  P1=0x00;delay(800);</p><p>  P1=0

102、xff;delay(800);</p><p><b>  }</b></p><p><b>  P1=0x00;</b></p><p>  for(i=0;i<3;i++)</p><p><b>  {</b></p><p>  P3=0

103、x00;delay(800);</p><p>  P3=0xff;delay(800);</p><p><b>  }</b></p><p><b>  P3=0x00;</b></p><p>  for(i=0;i<3;i++)</p><p><b&g

104、t;  {</b></p><p>  P2=0x00;delay(800);</p><p>  P2=0xff;delay(800);</p><p><b>  }</b></p><p>  qs(500,3);</p><p>  for(i=0;i<6;i++)<

105、;/p><p><b>  {</b></p><p>  zgxh(50,1);</p><p>  nszgm(50,1);</p><p><b>  }</b></p><p>  djs(100,20); //對角閃</p><p>  for

106、(i=0;i<3;i++)</p><p><b>  {</b></p><p>  zg(100,1); //兩邊逐個亮</p><p>  lbzgm(100,1); //兩邊逐個滅</p><p><b>  }</b></p><p>  qs(20

107、0,10);djs(100,50);</p><p>  for(i=0;i<5;i++)</p><p><b>  {</b></p><p>  sztl(200,1); //順時逐個同步亮</p><p>  nztm(200,1);</p><p>  nztl(200,1);&l

108、t;/p><p>  sztm(200,1); //順時逐個同步滅</p><p><b>  }</b></p><p>  djs(300,10); //對角閃</p><p>  nzdgl(300,10); //逆時逐段一個點亮</p><p>  jgs(300,10); //間隔

109、閃</p><p>  for(i=0;i<3;i++)</p><p><b>  {</b></p><p>  zgxh(100,1);</p><p>  nszgm(100,1);</p><p><b>  }</b></p><p>

110、;  for(i=0;i<5;i++)</p><p><b>  {</b></p><p>  zgxh1(100,1);</p><p>  sszgm(100,1);</p><p><b>  }</b></p><p>  nzdl(200,3); //逆時

111、逐段亮</p><p>  jgs(50,100); //間隔閃</p><p>  P0=P1=P2=P3=0xff;</p><p>  for (i=0;i<8;i++)</p><p><b>  {</b></p><p>  P0=table1[i];</p>

112、<p>  delay(200);</p><p><b>  }</b></p><p>  for (i=0;i<8;i++)</p><p><b>  {</b></p><p>  P1=table[i];</p><p>  delay(200);

113、</p><p><b>  }</b></p><p>  for(i=0;i<3;i++)</p><p><b>  {</b></p><p>  P0=P1=0x00;delay(200);</p><p>  P0=P1=0xff;delay(200);&l

114、t;/p><p><b>  }</b></p><p>  for (i=0;i<8;i++)</p><p><b>  {</b></p><p>  P2=table1[i];</p><p>  delay(200);</p><p>&l

115、t;b>  }</b></p><p>  for (i=0;i<8;i++)</p><p><b>  {</b></p><p>  P3=table1[i];</p><p>  delay(200);</p><p><b>  }</b>&

116、lt;/p><p>  for(i=0;i<3;i++)</p><p><b>  {</b></p><p>  P2=P3=0x00;delay(200);</p><p>  P2=P3=0xff;delay(200);</p><p><b>  }</b>&l

117、t;/p><p>  nzdgl(50,40); //逆時逐段一個點亮</p><p>  for(i=0;i<4;i++)</p><p><b>  {</b></p><p>  zg(100,1);qs(100,10);</p><p>  lbzgm(100,1);</p&g

118、t;<p><b>  }</b></p><p>  djs(50,100); //對角閃</p><p>  for(i=0;i<3;i++)</p><p><b>  {</b></p><p>  zgxh(100,1);</p><p>  

119、nszgm(100,1);</p><p><b>  }</b></p><p>  djs(1000,10);</p><p>  for(i=0;i<10;i++)</p><p><b>  {</b></p><p>  hwzjl(200,1); //橫往中

120、間亮</p><p>  hwzjm(200,1); //橫往中間滅</p><p><b>  }</b></p><p>  djs(300,10); //對角閃</p><p>  for(i=0;i<10;i++)</p><p><b>  {</b><

121、;/p><p>  swzjl(200,1); //豎往中間亮</p><p>  swzjm(200,1); //豎往中間滅</p><p><b>  }</b></p><p>  for(i=0;i<5;i++)</p><p><b>  {</b></p&

122、gt;<p>  zgxh(100,1);</p><p>  nszgm(100,1);</p><p><b>  }</b></p><p>  djs(100,20); //對角閃</p><p>  zg(300,1);</p><p>  lbzgm(300,1);&l

123、t;/p><p>  for(i=0;i<5;i++)</p><p><b>  {</b></p><p>  zgxh1(100,1);</p><p>  sszgm(100,1);</p><p><b>  }</b></p><p> 

124、 for(i=0;i<5;i++)</p><p><b>  {</b></p><p>  sztl(200,1); //順時逐個同步亮</p><p>  nztm(200,1);</p><p>  nztl(200,1);</p><p>  sztm(200,1); //順時逐

125、個同步滅</p><p><b>  }</b></p><p>  djs(500,20); //對角閃</p><p>  djs(100,30); //對角閃</p><p>  djs(50,50); //對角閃</p><p>  // djs(10,100); //對角閃&l

126、t;/p><p>  delay(1000);</p><p><b>  }</b></p><p><b>  }</b></p><p>  void delay(uint t) </p><p><b>  {</b></p>&

127、lt;p><b>  uint x,y;</b></p><p>  for (x=t;x>0;x--)</p><p><b>  {</b></p><p>  for (y=120;y>0;y--);</p><p><b>  }</b></p&

128、gt;<p><b>  }</b></p><p>  3.4 電路功能仿真</p><p>  在各部分電路設(shè)計的基礎(chǔ)上,按照總體電路圖在Proteus上一一進行器件選擇,并連接。將電路連接好后,為各個器件選擇合適的參數(shù),然后調(diào)入已編譯好的目標代碼Hex文件,啟動仿真。根據(jù)LED燈是否發(fā)亮,判斷所設(shè)計的電路是否可以實現(xiàn)32個LED燈依次點亮、依次熄

129、滅、對角閃亮、對角熄滅、間隔閃亮、間隔熄滅等多種功能。剛開始時,LED燈不亮,仔細檢查原來是將LED燈接反了,改正之后LED燈便可以正常發(fā)光了。電路仿真的結(jié)果為32個LED燈依次發(fā)亮、依次熄滅,并可以實現(xiàn)多種亮滅功能。根據(jù)仿真結(jié)果可知電路原理及程序無誤,可以進行PCB設(shè)計[7]。如圖8所示。</p><p><b>  圖8 電路仿真圖</b></p><p>&l

130、t;b>  總 結(jié)</b></p><p>  在設(shè)計電路圖的過程中,經(jīng)過了多次分析和仿真驗證,并結(jié)合所給的器件清單最后確定了需要哪些器件來實現(xiàn)電路的功能,并且保證了所需要的元器件在給出的清單范圍內(nèi)。經(jīng)過Proteus軟件多次仿真和修改后,在仿真電路圖實現(xiàn)設(shè)計要求的前提下確定了最終的原理圖。然后在Altium Designer中畫出來所對應(yīng)的原理圖[8],再導(dǎo)入到PCB設(shè)計的環(huán)境中,進行P

131、CB設(shè)計。在經(jīng)過小組內(nèi)多次討論和聽取指導(dǎo)老師的意見后確定了PCB的最終布局,布線完成后打印輸出制成印刷電路板。將所有的元器件放到相應(yīng)的封裝位置,查無誤后進行焊接。焊接完成,接入電源后,心形流水燈實現(xiàn)了32個LED燈依次點亮、依次熄滅,對角點亮、間隔點亮燈多種功能。電路能夠正常工作,得到了老師的肯定。</p><p>  總體說來,電路布局合理,采用了模塊化的布局方式即先布局各個功能模塊,再將各個功能模塊連接在一起

132、組成最終的電路,但是電路還是存在一定的不合理之處,在布局合理美觀方面存在一些沖突,由于布線太過寬松,整體尺寸稍大。</p><p><b>  致 謝</b></p><p>  經(jīng)過為期兩周的課程設(shè)計,我收獲很多。在本次課程設(shè)計中,我們遇到了很多困難,比如電路圖畫錯、編程出現(xiàn)錯誤、軟件不會使用、元器件虛焊斷焊以及焊錯等。在這期間,我還是努力認真的去檢查和修改,

133、雖然這個過程非常艱難,但還是值得我回味的。在整個課程設(shè)計過程中,我查閱了相關(guān)書籍和文獻資料,從中學(xué)習(xí)了一些單片機的工作原理以及怎樣去設(shè)計一個電子電路,還參照了一些以前做過的課程設(shè)計。這次課程設(shè)計,加深了我對以前學(xué)過的課本知識的理解和認識,以前有些課本上的理論知識總是弄不懂,這次通過自己親自動手去實踐,很多問題就通俗易懂了。本次課程設(shè)計,真正提高了自己的各項能力,比如獨立思考解決問題的能力,與人協(xié)作的能力,親自動手實踐的能力,真正的提高了

134、自己的實踐技能,培養(yǎng)了自己的創(chuàng)新能力,為今后完成更高質(zhì)量的項目打下了基礎(chǔ)。</p><p>  這次我們能夠順利完成課程設(shè)計,是與老師們的辛勤勞動分不開的,所以在此,特別感謝課程設(shè)計輔導(dǎo)老師付瑞玲老師和單片機任課老師王玉巧老師,感謝他們在設(shè)計中的耐心指導(dǎo)和提出的寶貴建議,同時也感謝小組搭檔,和我共同度過這為期兩周的課程設(shè)計。</p><p><b>  參考文獻</b>

135、;</p><p>  [1] 林志琦.基于Proteus的單片機可視化軟硬件仿真[M] .北京:北京航空航天大學(xué)出版社,2006.</p><p>  [2] 何立民.MCS-51單片機應(yīng)用系統(tǒng)設(shè)計[M] .北京:北京航空航天大學(xué)出版社,1990.</p><p>  [3] 張毅剛.單片機原理及應(yīng)用[M] .北京:高等教育出版社,2004.</p>

136、<p>  [4] 谷樹忠,劉文洲,姜航.Altium Designer教程-原理圖、PCB設(shè)計與仿真.北京:電子工業(yè)出版社,2010.</p><p>  [5] 張陽天,韓異凡.Protel DXP電路設(shè)計[M].北京:高等教育出版社,2005.</p><p>  [6] 李全利,遲榮強編著 單片機原理及接口技術(shù)[M].北京:高等教育出版社,2004.1.</p&g

溫馨提示

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

評論

0/150

提交評論