16x16点阵显示预习报告Word格式.docx
《16x16点阵显示预习报告Word格式.docx》由会员分享,可在线阅读,更多相关《16x16点阵显示预习报告Word格式.docx(14页珍藏版)》请在冰豆网上搜索。
通常将它接Vcc。
•SCK(11脚):
上升沿时将串行数据移入移位寄存器。
•RCK(12脚):
上升沿时移位寄存器的数据锁存入数据寄存器。
•-G(13脚):
高电平时禁止输出(高阻态)。
•
实验内容:
在16×
16LED点阵上分别用静态方式和滚屏方式显示自己的姓(行扫描)。
两个实验部分的电原理图是相同的,如下所示:
静态方式:
流程图:
程序代码:
L_DAT_HBITP1.0
L_DAT_LBITP1.1
L_STRBITP1.2
L_CLKBITP1.3
L_OEBITP1.4
ROWHEQU40H;
字模信号(顺向取模,高位在前),即列信号
ROWLEQU41H
SELHEQU42H;
行扫描信号
SELLEQU43H
ORG0000H
LJMPMAIN
ORG0100H
MAIN:
MOVR1,#01H;
配合字模信号
MOVR2,#01H;
高字节在后,故从01开始
MOVR3,#10H;
循环16次
LOAD:
MOVDPTR,#SEL_DATA;
存储行扫描信号
MOVA,R1
MOVCA,@A+DPTR
MOVSELH,A;
存储高字节SELH=00H
DECR1;
R1-1,指向低字节
MOVSELL,A;
存储低字节SELL=80H
INCR1
INCR1
INCR1;
指向下一个高字节
MOVDPTR,#ROW_DATA;
存储字模数据,过程同上
MOVA,R2
MOVROWH,A;
ROWH=0FFH
DECR2
MOVCA,@A+DPTR
MOVROWL,A;
ROWL=0FEH
INCR2
LCALLLATCH;
运行锁存自程序
LCALLDELAY;
延时
DJNZR3,LOAD;
重复执行16次,显示所有行
LJMPMAIN;
静态显示
LATCH:
CLRL_OE;
允许输出
CLRL_STR;
为上升沿将移位寄存器数据锁存入数据寄存器做准备
MOVR4,SELH
MOVR5,ROWH;
高位行扫描型号和字模信号
MOVR6,#08H;
高低位分开读,每次读8位,先右移高八位
LATCH1:
CLRL_CLK;
为上升沿读入移位寄存器做准备
MOVA,R4
RRCA;
移出最高位
MOVR4,A;
保存剩余的还没有移出的位
MOVL_DAT_H,C;
由P1.0输出准备进入移位寄存器行信号
MOVA,R5
RRCA
MOVR5,A
MOVL_DAT_L,C;
由P1.1输出准备进入移位寄存器
SETBL_CLK;
CLK上升沿,P1.0和P1.1数据进入移位寄存器列信号
DJNZR6,LATCH1
MOVR4,SELL
MOVR5,ROWL
MOVR6,#08H
LATCH2:
;
同上
CLRL_CLK
MOVR4,A
MOVL_DAT_H,C
MOVL_DAT_L,C
SETBL_CLK
DJNZR6,LATCH2
;
SETBL_STR;
STR上升沿移位寄存器数据所存入数据寄存器
;
显示
RET
DELAY:
延迟程序
MOVR6,#02H
LOOP1:
MOVR7,#0F8H;
估算:
1us*2*(1+2*248+2)=998us≈1ms
LOOP2:
DJNZR7,LOOP2
DJNZR6,LOOP1
SEL_DATA:
;
16行选择信号,每次仅使一行为高电平(有效)
DB80H,00H
DB40H,00H
DB20H,00H
DB10H,00H
DB08H,00H
DB04H,00H
DB02H,00H
DB01H,00H
DB00H,80H
DB00H,40H
DB00H,20H
DB00H,10H
DB00H,08H
DB00H,04H
DB00H,02H
DB00H,01H
ROW_DATA:
;
16列字模输入信号
DB0FEH,0FFH,06H,0F7H,0F6H,0F7H,0F6H,0EFH,0F6H,0DFH,86H,0BFH,0BEH,0FFH,0B8H,01H
DB0BEH,0BFH,86H,0DFH,0F6H,0DFH,0F6H,0EFH,0F6H,0F7H,0F6H,0BBH,0AEH,7DH,0DEH,0FFH;
"
张"
0
;
end
字模效果:
滚屏方式:
程序代码:
L_DAT_HBITP1.0
L_DAT_LBITP1.1
L_STRBITP1.2
L_CLKBITP1.3
L_OEBITP1.4
ROWHEQU40H
ROWLEQU41H
SELHEQU42H
SELLEQU43H
WAITEQU44H;
负责控制滚动速度
ORG0000H
LJMPMAIN
ORG0100H
MOVR0,#01H;
每次重新滚动时初始化
NEXT:
MOVWAIT,#0AH;
滚动速度设置,数字越大滚动越慢
ROLL:
MOVA,R0;
变换显示的第一行以完成滚动
MOVR1,#01H;
行扫描信号不变
MOVR2,A
MOVR3,#10H
MOVDPTR,#SEL_DATA;
MOVA,R1
MOVCA,@A+DPTR
MOVSELH,A;
LOADHIGHBYTE
DECR1;
OFSELECTSIGNAL
MOVSELL,A;
LOADLOWBYTE
INCR1;
INCR1
MOVDPTR,#ROW_DATA
MOVA,R2
MOVROWH,A
DECR2
MOVROWL,A
INCR2
LCALLLATCH
LCALLDELAY
DJNZR3,LOAD
以上与第一部分相同
DJNZWAIT,ROLL;
循环以延时
INCR0
INCR0;
R0指向下一行,以实现滚动
CJNER0,#61H,NEXT;
所有字符显示完毕后开始新的一轮
以下与第一部分相同
CLRL_OE
CLRL_STR
MOVR4,SELH
MOVR5,ROWH
CLRL_CLK
RRCA
SETBL_CLK
SETBL_STR
MOVR7,#0F8H
SELECTROW
DB80H,00H
DB40H,00H
DB20H,00H
DB10H,00H
DB08H,00H
DB04H,00H
DB02H,00H
DB01H,00H
DB00H,80H
DB00H,40H
DB00H,20H
DB00H,10H
DB00H,08H
DB00H,04H
DB00H,02H
DB00H,01H
DB0FEH,0FFH,06H,0F7H,0F6H,0F7H,0F6H,0EFH,0F6H,0DFH,86H,0BFH,0BEH,0FFH,0B8H,01H;
DB0FFH,0BFH,0FFH,0DFH,87H,0EFH,0B6H,1FH,0B7H,0DDH,0B7H,0CBH,0B4H,47H,0B7H,4FH;
DB0B7H,57H,0B7H,57H,86H,0D7H,0B6H,0DBH,0FDH,0DBH,0FBH,0DDH,0FFH,5FH,0FFH,0BFH;
咏"
END
: