74ls595在proteus中的使用和淺談
//此程序主要是練習(xí)proteus中74ls595的使用方法(在程序的最后我再次說明一下)
//不過這個(gè)程序的仿真結(jié)果是對(duì)的,可是很郁悶,感覺不可思議,和自己想的不一樣,總感覺是錯(cuò)的
//有誰也感覺到這個(gè)程序有錯(cuò)誤,這是我的qq:117838621,我們可以探討一下
CLK_0 EQUP3.2;偽指令
CLK_1EQUP3.3
ORG 0000H
LJMP MAIN
ORG0030H
MAIN: LCALLINIT;調(diào)用INIT
MAIN_1:MOVR0,#30H
MOVR1,#7FH ;設(shè)置位選
MOVR2,#8;8位led需要8次循環(huán)
MAIN_2:MOVA,R1
LCALLLED;調(diào)用位控制子程序
NOP ;就是這個(gè)地方我感覺到不對(duì)
MOVA,@R0
LCALLDAT;調(diào)用數(shù)字顯示程序
NOP
NOP
LCALL DELAY
INCR0;自加一,為下一位的顯示做準(zhǔn)備
MOVA,R1
RRA;段選右移,控制下一位的顯示
MOVR1,A
DJNZR2,MAIN_2
SJMPMAIN_1
DAT: CLRCLK_0
MOVSBUF,A
JNBTI,$
CLRTI
SETBCLK_0
RET
LED: CLRCLK_1;清零時(shí)鐘端
MOVSBUF,A;發(fā)送位選控制信號(hào)
JNBTI,$;等待,如果TI為1
CLRTI
SETBCLK_1;置時(shí)鐘信號(hào)
RET
INIT: MOVR0,#0
MOVR1,#30H
MOVR2,#8
MOVDPTR,#TAB;取表首地址
INIT_1:MOVA,R0
MOVCA,@A+DPTR;從表格中取數(shù)
MOV@R1,A;保存所取的數(shù)
INCR0;自加,為下次取書做準(zhǔn)備
INCR1
DJNZR2,INIT_1;循環(huán)8次,將所有要在8個(gè)數(shù)碼管上顯示的數(shù)顯示出來
RET
DELAY:MOVR5,#10
L2: MOVR6,#200
L1:MOVR7,#200
DJNZR7,$
DJNZR6,L1
DJNZR5,L2
RET
TAB: DB11111100B ;0
DB01100000B ;1
DB11011010B ;2
DB11110010B ;3
DB01100110B ;4
DB10110110B ;5
DB10111110B ;6
DB11100000B ;7
END
//由74ls595的資料可以看出,有個(gè)tc_cp引腳,而只有在這個(gè)引腳的上升沿才能進(jìn)去一位數(shù)據(jù)(并且里
//面的數(shù)據(jù)進(jìn)行移位),但并不能輸出,只有在sh_cp這個(gè)引腳的上升沿時(shí),數(shù)據(jù)才能并行輸出,
//而這個(gè)仿真圖上(書上寫的)竟然把單片機(jī)的RXD端接在ds端,TXD接在sh_cp上,這樣并不符合資料所說
評(píng)論