51并行I/O口編程範例

admin @ 2014-03-14 , reply:0

單片機I/O的應用最典型的是通過I/O口與7段LED數碼管構成顯示電路,我們從常用的LED顯示原理開始,詳盡講解利用單片機驅動LED數碼管的電路及編程原理,目的在於通過這一編程範例,讓初學者了解I/O口的編程原理,意在起舉一反三,拋磚引玉的作用。


    LED數碼管根據LED的接法不同分為共陰和共陽兩類,了解LED的這些特性,對編程是很重要的,因為不同類型的數碼管,除了它們的硬體電路有差異外,編程方法也是不同的。右圖是共陰和共陽極數碼管的內部電路,它們的發光原理是一樣的,只是它們的電源極性不同而已。
    將多隻LED的陰極連在一起即為共陰式,而將多隻LED的陽極連在一起即為共陽式。以共陰式為例,如把陰極接地,在相應段的陽極接上正電源,該段即會發光。當然,LED的電流通常較小,一般均需在迴路中接上限流電阻。假如我們將"b"和"c"段接上正電源,其它端接地或懸空,那麼"b"和"c"段發光,此時,數碼管顯示將顯示數字“1”。而將"a"、"b"、"d"、"e"和"g"段都接上正電源,其它引腳懸空,此時數碼管將顯示“2”。其它字元的顯示原理類同,讀者自行分析即可。
 
    左圖為實驗電路圖,我們使用80C51單片機,電容C1、C2和CRY1組成時鐘振蕩電路,這部分基本無需調試,只要元件可靠即會正常起振。C3和R1為單片機的複位電路,80C51的并行口P1.0-P1.7直接與LED數碼管的"a-f"引腳相連,中間接上限流電阻R3-R10。值得一提的是,80C51并行口的輸出驅動電流並非很大,為使LED有足夠的亮度,LED數碼管應選用高亮度的器件。
    此外,圖中的80C51還可選用C51系列的其它單片機,只要它們的指令系統兼容C51即可正常運行,程序可直接移植,例如選用低價Flash型的AT89C1051或2051等,它們的ROM可反覆擦寫,非常適合作實驗用途。
    · 程序清單:
    01  START: ORG     0100H      ;程序起始地址
    02   MAIN: MOV    R0,#00H     ;從“0”開始顯示
    03         MOV    DPTR,#TABLE ;表格地址送數據指針
    04   DISP: MOV    A,R0        ;送顯示
    05         MOVC   A,@A+ADPTR  ;指向表格地址
    06         MOV    P1,A        ;數據送LED
    07         ACALL  DELAY       ;延時
    08         INC    R0          ;指向下一個字元
    09         CJNE   R0,#0AH,DISP ;未顯示完,繼續
    10         AJMP   MAIN        ;下一個循環
    11  DELAY: MOV    R1,#0FFH    ;延時子程序,延時時間賦值
    12  LOOP0: MOV    R2,#0FFH
    13  LOOP1: DJNZ   R2,LOOP1
    14         DJNZ   R1,LOOP0
    15         RET                ;子程序返回
    16  TABLE: DB     0C0H        ;字型碼錶
    17         DB     0F9H
    18         DB     0A4H
    19         DB     0B0H
    20         DB     99H
    21         DB     92H
    22         DB     82H
    23         DB     0F8H
    24         DB     80H
    25         DB     90H
    26         END                ;程序結束
 


[admin via 研發互助社區 ] 51并行I/O口編程範例已經有3230次圍觀

http://www.cocdig.com/docs/show-post-861.html