;=======================================
;跳線設(shè)置:默認(rèn)
;晶振:12M
;試驗(yàn)結(jié)果8*8點(diǎn)陣上出現(xiàn)流水燈
;74hc164芯片可實(shí)現(xiàn)串-并,所以常用他來擴(kuò)展單片機(jī)io口,51hei板子上的8*8點(diǎn)陣有8行8列
;本來是需要8個(gè)io口來控制行數(shù)據(jù)的,現(xiàn)在我們用74hc164后只需要2個(gè)io口便能實(shí)現(xiàn)
;===========預(yù)定義======================
SDA BIT P2.5 ;74HC164的AB端串行輸入
SCL BIT P2.4 ;74HC164的CLK端,上升沿有效
dds EQU 48H
ORG 0000H
AJMP MAIN
ORG 0100H
;============主程序開始=======================
MAIN:
clr P2.7 ;關(guān)數(shù)碼管
mov ACC,#0FFH ;送SHIFT子程序的參數(shù)
ACALL SHIFT ;調(diào)74hc164移位輸出子程序,把FF輸出到8*8點(diǎn)陣的所有行
;因51hei開發(fā)板采用共陽點(diǎn)陣,這時(shí)只要哪一列為0,這一列便可被點(diǎn)亮
mov dds,#0feH ;二進(jìn)制為11111110,供RL指令移位用
huqin:
mov P0,dds ;輸出到8*8點(diǎn)陣的列,每一次只有一列被點(diǎn)亮
mov dds,P0 ;P0現(xiàn)在的值保存到48H里去
mov a,dds ;由于RAM中不能直接RL移位,所以先送人A
RL a ;移位
mov dds,a ;移位之后的數(shù)據(jù)保存到48H里去
ACALL DELAY_1S ;延時(shí)1.002035秒
jmp huqin ;死循環(huán)
;============74hc164移位輸出子程序==============================
; 子程序名: SHIFT
; 功能描述: 移位程序,將8位數(shù)據(jù)依次移進(jìn)74LS164芯片中
; 控制方式就是數(shù)據(jù)引腳的數(shù)據(jù)在時(shí)鐘引腳的脈沖下一位一位的移入芯片
; 程序作者: 胡琴 網(wǎng)站:www.zg4o1577.cn
;===============================================================
SHIFT: push ACC ;A進(jìn)棧暫存
MOV R2,#8 ;串輸出數(shù)據(jù)8位
CLR C ;把C清0
hei: CLR SCL ;拉低SCL,以便下次拉高便可產(chǎn)生上升沿
RLC A ;A的最高位移到C,C原值移到A最低位
MOV SDA,C ;C中的數(shù)據(jù)先送入74hc164,等待clk上升沿的到來
SETB SCL ;低電平到高電平邊沿觸發(fā)到來,并行數(shù)據(jù)輸出至164的Q0-Q7
DJNZ R2,hei ;判斷輸出完畢了沒有
pop ACC ;出棧恢復(fù)A值
RET
;============延時(shí)子程序=============
DELAY_1S: ;延時(shí)子程序,12M晶振延時(shí)1.002035秒
MOV R4,#10
L3: MOV R2 ,#200 ;1指令周期
L1: MOV R3 ,#249 ;1指令周期
L2: DJNZ R3 ,L2 ;2指令周期
DJNZ R2 ,L1 ;2指令周期
DJNZ R4 ,L3 ;2指令周期
RET ;2指令周期
;循環(huán)體延時(shí)時(shí)間: [(249*2+1+2)*200+1+2]*10*12/12000000=1.002030s
;加上ACALL指令和第一條mov指令以及最后一條RET指令算出來整個(gè)函數(shù)的時(shí)間為1.002035s
;===================================================
END ;匯編結(jié)束偽指令
c語言的版本由于分為幾個(gè)文件不方便在論壇貼出,用戶可從以下地址獲得
源代碼與hex文件下載:
匯編語言:http://www.zg4o1577.cn/ziliao/51hei-5/74HC164串-并_asm.rar
C 語言:http://www.zg4o1577.cn/ziliao/51hei-5/74HC164串-并_c.rar
[此貼子已經(jīng)被作者于2010-7-4 2:35:19編輯過]
|