实验04·LED显示器王梦硕0930*******实验目的:在理解LED点阵工作原理的基础上,实践使用点阵显示字符。
实验原理:1·点阵式显示器:发光二级管排列成矩阵,由亮与暗来产生字符或图形。
每一样的阳极连在一起,每一列的阴极连在一起,如右图所示。
点阵显示器每一列的阴极连在一起,对每一列而言相当于一个共阴显示器。
同时每一行的阳极连在一起,相当于七段显示器的比划。
可采用动态显示电路,以笔画锁存器控制行信号,以位锁存器控制列信号。
2·74HC595实验中使用两片8位输出锁存移位寄存器74HC595(三态输出、串入并出),将单片机I/O口发出的串行数据转换为并行数据LD_QA~LD_QP,作为16x16 LED点阵显示器的行线,使用另外两片8位74HC595作为16x16 LED点阵显示器的列线LD_1~LD_16。
当行输出高电平、列输出低电平时,可以点亮点阵。
74HC595的工作时序图和推荐的连接方法如下:下图中:•LD-QA~LD-QP:点阵行控制信号•LD-1~LD-16:点阵列控制信号•SER(14脚):串行数据输入端•-SCLR(10脚):低电平时将移位寄存器的数据清零。
通常将它接Vcc。
•SCK(11脚):上升沿时将串行数据移入移位寄存器。
•RCK(12脚):上升沿时移位寄存器的数据锁存入数据寄存器。
•-G(13脚): 高电平时禁止输出(高阻态)。
实验内容:在16×16LED点阵上分别用静态方式和滚屏方式显示自己的姓(行扫描)。
两个实验部分的电原理图是相同的,如下所示:1·静态方式:流程图:程序代码:L_DAT_H BIT P1.0L_DAT_L BIT P1.1L_STR BIT P1.2L_CLK BIT P1.3L_OE BIT P1.4ROWH EQU 40H ;字模信号(顺向取膜,高位在前)ROWL EQU 41HSELH EQU 42H ;行扫描信号SELL EQU 43HORG 0000HLJMP MAINORG 0100HMAIN:MOV R1, #01H ;配合字模信号MOV R2, #01H ;高字节在后,故从01开始MOV R3, #10H ;循环16次LOAD:MOV DPTR, #SEL_DATA ;存储行扫描信号MOV A, R1MOVC A, @A+DPTRMOV SELH, A ;存储高字节DEC R1 ;R1-1,指向低字节MOV A, R1MOVC A, @A+DPTRMOV SELL, A ;存储低字节INC R1INC R1INC R1 ;指向下一个高字节MOV DPTR, #ROW_DATA ;存储字模数据,过程同上MOV A, R2MOVC A, @A+DPTRMOV ROWH, ADEC R2MOV A, R2MOVC A, @A+DPTRMOV ROWL, AINC R2INC R2INC R2LCALL LATCH ;运行锁存自程序LCALL DELAY ;延时DJNZ R3, LOAD ;重复执行16次,显示所有行LJMP MAIN ;静态显示LATCH:CLR L_OE ;允许输出CLR L_STR ;为上升沿将移位寄存器数据锁存入数据寄存器MOV R4, SELH ; 做准备MOV R5, ROWH ;高位行扫描型号和字模信号MOV R6, #08H ;高低位分开读,每次读8位LATCH1:CLR L_CLK ;为上升沿读入移位寄存器做准备MOV A, R4RRC A ;移出最高位MOV R4, AMOV L_DAT_H, C ;由P1.0输出准备进入移位寄存器MOV A, R5RRC AMOV R5, AMOV L_DAT_L, C ;由P1.1输出准备进入移位寄存器SETB L_CLK ;CLK上升沿,P1.0和P1.1数据进入移位寄存器DJNZ R6, LATCH1;MOV R4, SELLMOV R5, ROWLMOV R6, #08HLATCH2: ;同上CLR L_CLKMOV A, R4RRC AMOV R4, AMOV L_DAT_H, CMOV A, R5RRC AMOV R5, AMOV L_DAT_L, CSETB L_CLKDJNZ R6, LATCH2;SETB L_STR ;STR上升沿移位寄存器数据所存入数据寄存器; 显示RETDELAY: ;延迟程序MOV R6, #02HLOOP1:MOV R7, #0F8H ;估算:1us*2*(1+2*248+2) = 998us ≈1ms LOOP2:DJNZ R7, LOOP2DJNZ R6, LOOP1;RETSEL_DATA: ;SELECT ROWDB 80H, 00HDB 40H, 00HDB 20H, 00HDB 10H, 00HDB 08H, 00HDB 04H, 00HDB 02H, 00HDB 01H, 00HDB 00H, 80HDB 00H, 40HDB 00H, 20HDB 00H, 10HDB 00H, 08HDB 00H, 04HDB 00H, 02HDB 00H, 01HROW_DATA:DB 0FFH, 0FFH, 80H, 03H, 0FEH, 0FFH, 0FEH, 0FFH, 0FEH, 0FFH, 0FEH, 0FFH, 0FEH, 0FFH, 0C0H, 07H;DB 0FEH, 0FFH, 0FEH, 0FFH, 0FEH, 0FFH, 0FEH, 0FFH, 0FEH, 0FFH, 0FEH, 0FFH, 00H, 01H, 0FFH, 0FFH;"王",0;END实验效果:字模效果:LED显示效果:2·滚屏方式:流程图:程序代码:L_DAT_H BIT P1.0L_DAT_L BIT P1.1L_STR BIT P1.2L_CLK BIT P1.3L_OE BIT P1.4ROWH EQU 40HROWL EQU 41HSELH EQU 42HSELL EQU 43HWAIT EQU 44H ;负责控制滚动速度ORG 0000HLJMP MAINORG 0100HMAIN:MOV R0, #01H ;每次重新滚动时初始化NEXT:MOV WAIT, #0AH ;滚动速度设置,数字越大滚动越慢ROLL:MOV A, R0 ;变换显示的第一行以完成滚动MOV R1, #01H ;行扫描信号不变MOV R2, AMOV R3, #10HLOAD:MOV DPTR, #SEL_DATA ;MOV A, R1MOVC A, @A+DPTRMOV SELH, A ;LOAD HIGH BYTEDEC R1 ;OF SELECT SIGNALMOV A, R1MOVC A, @A+DPTRMOV SELL, A ;LOAD LOW BYTEINC R1 ;OF SELECT SIGNALINC R1INC R1MOV DPTR, #ROW_DATAMOV A, R2MOVC A, @A+DPTRMOV ROWH, ADEC R2MOV A, R2MOVC A, @A+DPTRMOV ROWL, AINC R2INC R2INC R2LCALL LATCHLCALL DELAYDJNZ R3, LOAD; 以上与第一部分相同DJNZ WAIT, ROLL ;循环以延时INC R0INC R0 ;R0指向下一行,以实现滚动CJNE R0, #61H, NEXT ;所有字符显示完毕后开始新的一轮; 以下与第一部分相同LJMP MAINLATCH:CLR L_OECLR L_STRMOV R4, SELHMOV R5, ROWHMOV R6, #08HLATCH1:CLR L_CLKMOV A, R4RRC AMOV R4, AMOV L_DAT_H, CMOV A, R5RRC AMOV R5, AMOV L_DAT_L, CSETB L_CLKDJNZ R6, LATCH1;MOV R4, SELLMOV R5, ROWLMOV R6, #08HLATCH2:CLR L_CLKMOV A, R4RRC AMOV R4, AMOV L_DAT_H, CMOV A, R5RRC AMOV R5, AMOV L_DAT_L, CSETB L_CLKDJNZ R6, LATCH2;SETB L_STR;RETDELAY:MOV R6, #02HLOOP1:MOV R7, #0F8HLOOP2:DJNZ R7, LOOP2DJNZ R6, LOOP1;RETSEL_DATA: ;SELECT ROWDB 80H, 00HDB 40H, 00HDB 20H, 00HDB 10H, 00HDB 08H, 00HDB 04H, 00HDB 02H, 00HDB 01H, 00HDB 00H, 80HDB 00H, 40HDB 00H, 20HDB 00H, 10HDB 00H, 08HDB 00H, 04HDB 00H, 02HDB 00H, 01HROW_DATA:DB 0FFH, 0FFH, 80H, 03H, 0FEH, 0FFH, 0FEH, 0FFH, 0FEH, 0FFH, 0FEH, 0FFH, 0FEH, 0FFH, 0C0H, 07H;DB 0FEH, 0FFH, 0FEH, 0FFH, 0FEH, 0FFH, 0FEH, 0FFH, 0FEH, 0FFH, 0FEH, 0FFH, 00H, 01H, 0FFH, 0FFH;"王",0DB 0F7H, 0DFH, 0F7H, 0DFH, 81H, 03H, 0F7H, 0DFH, 0E3H, 8FH, 0D5H, 57H, 37H, 0D9H, 0FBH, 0FFH;DB 0F8H, 0FH, 0F7H, 0EFH, 0EBH, 0DFH, 0DDH, 0BFH, 0FEH, 7FH, 0FDH, 0FFH, 0F3H, 0FFH, 8FH, 0FFH;"梦",1DB 0FFH, 0FFH, 0FCH, 01H, 03H, 0DFH, 0EFH, 0BFH, 0EEH, 03H, 0DEH, 0FBH, 0C2H, 0FBH, 9AH, 0DBH;DB 9AH, 0DBH, 5AH, 0DBH, 0DAH, 0DBH, 0DAH, 0BBH, 0C3H, 0AFH, 0DBH, 77H, 0DEH, 0FBH, 0FDH, 0FBH;"硕",2DB 0FFH, 0FFH, 80H, 03H, 0FEH, 0FFH, 0FEH, 0FFH, 0FEH, 0FFH, 0FEH, 0FFH, 0FEH, 0FFH, 0C0H, 07H;DB 0FEH, 0FFH, 0FEH, 0FFH, 0FEH, 0FFH, 0FEH, 0FFH, 0FEH, 0FFH, 0FEH, 0FFH, 00H, 01H, 0FFH, 0FFH;"王",0; 为了实现无间隙滚动,最后16行与最前十六行设置相同字模数据END实验效果:字模效果:LED点阵效果:实验现象与记录:1·静态显示:正确地显示了“王”字,但是很明显地:每一行的所有点亮的等亮度相同,并且对每一行而言,亮的灯越多,则每盏灯越暗。