74ls595在proteus中的使用和浅谈
//此程序主要是练习proteus中74ls595的使用方法(在程序的最后我再次说明一下)
//不过这个程序的仿真结果是对的,可是很郁闷,感觉不可思议,和自己想的不一样,总感觉是错的
//有谁也感觉到这个程序有错误,这是我的qq:117838621,我们可以探讨一下
CLK_0 EQUP3.2;伪指令
CLK_1EQUP3.3
ORG 0000H
LJMP MAIN
ORG0030H
MAIN: LCALLINIT;调用INIT
MAIN_1:MOVR0,#30H
MOVR1,#7FH ;设置位选
MOVR2,#8;8位led需要8次循环
MAIN_2:MOVA,R1
LCALLLED;调用位控制子程序
NOP ;就是这个地方我感觉到不对
MOVA,@R0
LCALLDAT;调用数字显示程序
NOP
NOP
LCALL DELAY
INCR0;自加一,为下一位的显示做准备
MOVA,R1
RRA;段选右移,控制下一位的显示
MOVR1,A
DJNZR2,MAIN_2
SJMPMAIN_1
DAT: CLRCLK_0
MOVSBUF,A
JNBTI,$
CLRTI
SETBCLK_0
RET
LED: CLRCLK_1;清零时钟端
MOVSBUF,A;发送位选控制信号
JNBTI,$;等待,如果TI为1
CLRTI
SETBCLK_1;置时钟信号
RET
INIT: MOVR0,#0
MOVR1,#30H
MOVR2,#8
MOVDPTR,#TAB;取表首地址
INIT_1:MOVA,R0
MOVCA,@A+DPTR;从表格中取数
MOV@R1,A;保存所取的数
INCR0;自加,为下次取书做准备
INCR1
DJNZR2,INIT_1;循环8次,将所有要在8个数码管上显示的数显示出来
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的资料可以看出,有个tc_cp引脚,而只有在这个引脚的上升沿才能进去一位数据(并且里
//面的数据进行移位),但并不能输出,只有在sh_cp这个引脚的上升沿时,数据才能并行输出,
//而这个仿真图上(书上写的)竟然把单片机的RXD端接在ds端,TXD接在sh_cp上,这样并不符合资料所说
74ls595proteu 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)