久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 16873|回復: 0
打印 上一主題 下一主題
收起左側

51單片機跑馬燈實驗報告 分析與小結,思考題源碼下載

[復制鏈接]
跳轉到指定樓層
樓主
ID:437202 發表于 2018-12-1 16:22 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
一、實驗目的與要求
1.熟悉 Keil C51 集成環境軟件的使用方法。
2.熟悉 MCS51 匯編指令,能自己編寫簡單的程序,控制硬件。
3.熟悉暢學開發平臺,掌握單片機最小系統及 IO 口的簡單控制及不同組 IO 口的特點。

二、實驗內容
1、熟悉Keil C51集成環境軟件的安裝和使用方法。
2、照接線圖編寫程序,完善給出程序,實現以下功能。
要求LED燈實現從上到下依次點亮,再從下到上依次點亮。完成后實現從兩側向中間循環點亮,再從中間往外循環點亮。功能完成后循環上述過程。
3、觀察實驗結果,驗證程序是否正確。

2.1  實驗完成內容

1、延時實現LED流水燈效果,p1端口的八個燈作跑馬燈。在本實驗中,p1作為輸出口,接8只發光二極管,編寫程序,使發光二極管循環點亮。

本例實驗主要用到了延時子程序,CLR、AJMP、RRC、RLC、CALL等指令,通過輪流點亮p0.0,….p0.7實現效果。

2、照接線圖編寫程序,完善給出程序,實現功能:LED燈實現從上往下依次點亮,在從下往上依次點亮。完成后實現從兩側到中間循環點亮,在從中間向外循環點亮。功能完成后循環上述過程。


2.2  芯片選型

STC12C5A60S2

2.3  電路原理圖
2.4  關鍵資源說明(所應用單片機內部資源及外圍接口芯片的核心說明)
暢學系列開發平臺一套;
PC 機一臺;
內部:累加器A,寄存器R4和進位標志位C以及外部外部I/O接口與P1口。

2.5  設計分析
為了實現跑馬燈的效果,即:LED依次點亮(循環),就是要求從P1口: P1.0至P1.7依次輸出低電平,當某引腳為低電平時,其余引腳都輸出高電平。
從輸出的數據分析:
第一個LED點亮時,對應的是P1.0的位為0,其余位為1,組合為一個二進制位從高到低為:1111 1110,即十六 進制數0xFE;同理,第二個LED點亮對應的數為:1111 1101,化為十六進制數為0xFD。 依次類推,逐次點亮LED所對應的數據為:1111 1110、1111 1101、1111 1011、1111 0111、 1110 1111、1101 1111、1011 1111、0111 1111。
規律:數據中的二進制數0的位置依次往左移動了一位。

2.6程序流程圖


四、實驗運行效果及說明
LED燈實現從上往下依次點亮,再從下往上依次點亮。完成后實現從兩側到中間循環點亮,在從中間向外循環點亮。


五、思考題1、循環間隔時間通過延時怎么控制?
答:通過延時程序可以控制循環間隔的時間,無論是C語言還是匯編,延時起到的作用都是不可或缺的。
Delay:
        MOV R0,#10        ;(1)
Delay1:
        MOV R1,#100      ;(1*10)
        DJNZ R1,$        ;(2*100*10)
        DJNZ R0,Delay1    ;(2*10)
        ret               ;(2)
total=1+1*10+2*100*10+2*10+2=2033
time=total*1/(focse/12)

void Delay(unsigned int uiCount)
{
              unsigned char j = 244;
              for(;uiCount > 0;uiCount--) while(--j);            
}


2、跑馬燈模式如何實現間隔亮、多位同時亮等其他效果?
答:間隔亮可以利用子函數DELAY三重循環控制,多位同時亮可以給多位賦初值來體現。
ORG 0000H
              LJMP MAIN
ORG 0020H
MAIN:
              MOV R6,#07H
        MOV R7,#FEH ;1111 1110
LOOP1:
              MOV P1,R7     
              LCALL DELAY     
              MOV A,R7     
              RLC A      
              MOV R7,A     
              DJNZ R6,LOP1   
              MOV R6,#07H   
              MOV R7,#7FH ;0111 1111
LOOP2:
              MOV P1,R7   
              LCALL DELAY   
              MOV A,R7   
              RRC A     
              MOV R7,A   
              DJNZ R6,LOP2     
              LJMP MAIN
DELAY:
              MOV R3,#0FFH
LOOP3:
              MOV R4,#0FFH
LOOP4:
              NOP     
              DJNZ R4,LOP4     
              DJNZ R3,LOP3     
              RET     
END


六、實驗分析與小結
通過匯編語言和C語言程序分別實現使八個跑馬燈從上往下,在從下往上的循環亮燈,以及實現從中間到兩邊,在從兩邊到中間的循環亮燈。此次實驗中,從開始的蜂窩鳴叫測試,到后續自己編寫,燒錄跑馬燈程序,雖然過程因為開始的不懂原理有點繞路,到后來循序漸進,還是一個比較有趣的過程。將想法變為現實,與以往的設計軟件不同,此次通過程序指令使得硬件實現自己想要的功能。讓自己實打實的,眼看手做去實現,挺好的。

  1. 三、實驗程序

  2. 匯編:

  3. ORG              0000H
  4.                             LJMP              START
  5. ORG               0100H
  6. START:
  7.                                           MOV                            A , #0FFH
  8.                                           CLR               C
  9.                                           MOV                            R4 , #08H
  10. LOOP1:
  11.                                           RRC                  A
  12.                                           MOV                  P1 , A
  13.                                           LCALL              DELAY
  14.                                           DJNZ              R4 ,LOOP1
  15.                                           MOV                  A , #0FFH
  16.                                           CLR                            C
  17.                                           MOV                            R4 , #08H
  18. LOOP2:
  19.                                           RLC                  A
  20.                                           MOV              P1 , A
  21.                                           LCALL              DELAY
  22.                                           DJNZ              R4 ,LOOP2
  23.                                           JMP                  START
  24.             
  25. DELAY:
  26.                                           MOV              R1 , #20H
  27. D0:            
  28. MOV              R2 , #00H
  29. D1:            
  30. MOV                            R3 , #00H
  31.                                           DJNZ              R3 , $
  32. DJNZ              R2 , D1
  33.                                           DJNZ              R1 , D0
  34.                                           RET
  35. END
  36. 從中間往兩邊依次點亮,再從兩邊往中間依次點亮
  37. ORG                            0000H
  38. LJMP START
  39. ORG   0100H
  40. START:
  41. MOV A,#0EFH
  42. MOV P1,A
  43. MOV R2,#08H
  44. LOOP1:
  45. MOV R6,A
  46. RRC A
  47. MOV P1,A
  48. LCALL DELAY
  49. MOV A,R6
  50. RLC R6
  51. MOV P1,A
  52. LCALL DELAY
  53. DJNZ R4,LOOP1
  54. MOV R4,#08H
  55. MOV A,#0EFH
  56. MOV P1,A
  57. MOV R4,#08H
  58. LOOP2:
  59. MOV A,#FEH
  60. MOV P1,A
  61. LCALL DELAY
  62. MOV R7,A
  63. MOV A,#07H
  64. MOV P1,A
  65. LCALL DELAY
  66. MOV A,R7
  67. RLC A
  68. MOV P1,A
  69. LCALL DELAY
  70. DJNZ R4,LOOP2
  71. CLR C
  72. JMP START
  73. DELAY:
  74. MOV R1,#20H
  75. D0:
  76. MOV R2,#00H
  77. D1:
  78. MOV R3,#00H
  79. DJNZ R3,$
  80. DJNZ R2,D1
  81. DJNZ R1,D0
  82. RET
  83. END

  84. C語言:

  85. #include <reg51.H>
  86. //延時函數,uiCount-延時參數,每加1增加0.5ms
  87. void Delay(unsigned int uiCount)
  88. {
  89.               unsigned char j = 244;
  90.               for(;uiCount > 0;uiCount--) while(--j);            
  91. }
  92. unsigned char code table[]={ 0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff,
  93. };
  94. void Delay(unsigned int);              //延時函數
  95. //主函數,控制LED
  96. void main(void)
  97. {
  98.                             unsigned char i;
  99.                             while(1)
  100.                             {
  101.                                           for(i=0;i<16;i++)   //依次點亮和熄滅8個LED
  102.                                           {
  103.                                                         P1=table[i];
  104.                                                         Delay(1000);
  105.                                           }
  106.                                           P1=0x7f;           //賦初始值
  107.                                           for(i=0;i<8;i++)   //循環右移點亮LED
  108.                                           {
  109.                                                         Delay(500);
  110.                                                         P1>>=1;
  111.                                                         P1=P1|0x80;     //右移后,最左端自動賦值0,把第7位置1
  112.                                           }
  113.                             }
  114. }
復制代碼

完整的Word格式文檔51黑下載地址:
跑馬燈.docx (332.88 KB, 下載次數: 20)


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品免费一区二区三区四区 | 欧美视频一区 | 都市激情亚洲 | 一区免费看 | 精品日韩一区 | 国产精品一区二区视频 | 午夜av免费 | 欧美日韩一区二区在线 | 91视视频在线观看入口直接观看 | 国产精品av久久久久久毛片 | 日本亚洲一区 | 亚洲一区二区在线视频 | 国产大片一区 | 久久久夜| 一区中文字幕 | 免费黄色特级片 | 自拍偷拍在线视频 | 国产日韩亚洲欧美 | 91精品一区 | 国产精品久久久久aaaa樱花 | 欧美性jizz18性欧美 | 欧美三区视频 | 午夜天堂精品久久久久 | 99riav3国产精品视频 | 一区二区三区四区在线 | 国产aⅴ爽av久久久久久久 | 91亚洲视频在线 | 精品福利av导航 | 久久久123 | 免费观看一级视频 | 91免费在线看 | 国产精品视频二区三区 | 日日干夜夜操 | 国产精品99久久久久久www | 久久久久久久久国产 | 日韩在线三级 | 亚洲色在线视频 | 成人在线观看网址 | 在线观看国产 | 99久久婷婷| 国产成人精品一区二区三区在线 |