zoukankan      html  css  js  c++  java
  • 单片机与控制实验(2)——LED点阵显示屏

    本文为大大维原创,最早于博客园发表,转载请注明出处!!!

    一、实验目的和要求

      了解LED点阵显示的基本原理和实现方法。掌握点阵汉字库的编码和从标准字库中提取汉字编码的方法。

    二、实验设备

      单片机测控实验系统
      LED点阵显示器实验模块
      Keil开发环境
      STC-ISP程序下载工具

    三、实验内容

      了解16*16点阵电路的原理。编写汇编语言程序,编写一行汉字字符(至少三个字)的显示程序,并且能够从左到右(或从右到左)循环显示。

    四、实验步骤

      1. 掌握点阵式LED显示屏的控制方法;
      2. 使用MCS-51汇编语言,使用LED点阵显示器显示出正确的汉字字符及动态效果;
      3. 将编译后的程序下载到51单片机,观察LED显示屏的显示结果。

    五、实验原理

      高亮度LED发光管构成点阵,通过编程控制可以显示中英文字符、图形及视频动态图形。所显示字符的点阵数据可以自行编写(即直接点阵画图),也可从标准字库(如ASC16、HZ16)中提取。后者需要正确掌握字库的编码方法和字符定位的计算。

     

    实验用的LED点阵显示屏为16*16点阵。
    行和列分别使用两个移位寄存器作为输出。
    当移位寄存器输出的第i行为0,第j列为1时点亮点(i,j)。
    为了能够显示出一个点阵字型,需要进行循环扫描,也就是每一次只点亮一行,然后在列上输出该列对应的16个点阵值。
    输出一行后暂停一段时间,输出下一行。为了达到较好的显示效果,整屏总的扫描时间不高于40ms。
    上述过程中行列可以互换。
    实验中使用的移位寄存器是74HC595,它是一个同时具有串行移位和输出锁存驱动功能的器件。
    74HC595是具有8位移位寄存器和一个存储器,三态输出功能。 移位寄存器和存储器是分别的时钟。
    数据在SRCK(移位寄存器时钟输入)的上升沿输入到移位寄存器中,在RCK(存储器时钟输入)的上升沿输入到存储寄存器中去。
    移位寄存器有一个串行移位输入(行Dx(P00)、列Dy(P03)),和一个串行输出(QH),和一个异步的低电平复位,存储寄存器有一个并行8位的,具备三态的总线输出,当使能 (P02和P07为低电平)时,存储寄存器的数据输出到总线。
    在控制74HC595时,首先将数据放到串行输入的SI端,然后在串行时钟SRCK上产生一个脉冲,即可输出一个bit,重复以上步骤16次,输出所有列值。
    然后给存储器时钟RCK一个脉冲,将串行数据锁存起来。将使能端 输出低电平,驱动到LED点阵上。
    行的输出每次只移位一次,并重新锁存即可。
    其他信息见给定的参考资料。

    六、实验代码  

    ORG 0000H
    AJMP START
    ORG 0030H
    START:
    D_X EQU P0.0 
    CK_X EQU P0.1
    CK_XL EQU P0.2
    D_Y EQU P0.3
    EN_Y EQU P0.4
    CK_Y EQU P0.5 
    CK_YL EQU P0.6 
    EN_X EQU P0.7
    COUNT EQU R0
    COUNT_X EQU R3
    COUNT_Y EQU R4

    MOV R0,#0 ;完成第R0/2屏扫描
    MOV R1,#8
    MOV R2,#16
    MOV COUNT_X,#0
    MOV COUNT_Y,#0
    MOV R5,#32 ;一屏16列,总共扫描48列,需要扫48-16=32屏
    CLR EN_X
    CLR EN_Y

    ;初始化
    MAIN:
    CLR A
    MOV COUNT_Y,A ;COUNT_Y=0
    CLR A
    MOV A,COUNT
    MOV COUNT_X,A ;COUNT_X=COUNT

    LOOP:
    ACALL DISPLAY_Y
    ACALL DISPLAY_X
    ACALL DELAY 
    DJNZ R2,LOOP

    ;长延迟
    MOV R1,#0FFH
    MOV R7,#2FH
    L_DELAY:
    ACALL DELAY
    DJNZ R1,L_DELAY
    DJNZ R7,L_DELAY

    MOV R1,#8
    INC COUNT
    INC COUNT ;扫一屏,COUNT加2

    DJNZ R5,MAIN
    MOV R5,#0FFH
    AJMP START

     

    DISPLAY_Y:
    MOV DPTR,#TAB_Y
    CLR A
    MOV A,COUNT_Y
    MOVC A,@A+DPTR
    MOV R1,#8

    LP_Y1:
    RLC A 
    CLR CK_Y 
    MOV D_Y,C 
    SETB CK_Y
    DJNZ R1,LP_Y1

    MOV R1,#8
    INC COUNT_Y

    CLR A
    MOV A,COUNT_Y
    MOVC A,@A+DPTR

    LP_Y2:
    RLC A 
    CLR CK_Y 
    MOV D_Y,C 
    SETB CK_Y
    DJNZ R1,LP_Y2

    MOV R1,#8
    INC COUNT_Y

    CLR CK_YL 
    NOP
    SETB CK_YL

    CLR EN_Y
    CLR CK_YL
    RET


    DISPLAY_X:
    MOV DPTR,#TAB_X
    CLR A
    MOV A,COUNT_X
    MOVC A,@A+DPTR
    MOV R1,#8

    LP_X1:
    RLC A 
    CLR CK_X 
    MOV D_X,C 
    SETB CK_X
    DJNZ R1,LP_X1

    MOV R1,#8
    INC COUNT_X
    CLR A
    MOV A,COUNT_X
    MOVC A,@A+DPTR

    LP_X2:
    RLC A 
    CLR CK_X 
    MOV D_X,C 
    SETB CK_X
    DJNZ R1,LP_X2

    MOV R1,#8
    INC COUNT_X

    CLR CK_XL 
    NOP
    SETB CK_XL

    CLR EN_X
    CLR CK_XL
    RET

    ;延迟函数
    DELAY:
    MOV R6,#0FH
    DJNZ R6,$
    RET

    TAB_X:
    ;===========================================================================
    ;我(0) 爱(1) 你(2)

    DB 04H,00H,24H,10H,24H,12H,24H,21H,7FH,0FEH,0C4H,40H,44H,82H,04H,02H;
    DB 04H,04H,0FFH,0C8H,04H,30H,44H,28H,34H,44H,05H,82H,04H,1FH,00H,00H ;"我",0

    DB 01H,00H,26H,82H,34H,84H,2CH,89H,24H,91H,24H,0E1H,37H,0B2H,4CH,0AAH;
    DB 44H,0A4H,44H,0A4H,4CH,0AAH,74H,0B2H,0C4H,81H,45H,01H,06H,01H,00H,00H ;"爱",1

    DB 00H,80H,01H,00H,06H,00H,1FH,0FFH,0E0H,00H,02H,08H,04H,30H,18H,0C0H;
    DB F0H,02H,10H,01H,13H,0FEH,10H,00H,10H,80H,14H,60H,18H,18H,00H,00H ;"你",2
    ;===========================================================================
    TAB_Y:
    ;===========================================================================
    DB ~80H,0FFH,~40H,0FFH,~20H,0FFH,~10H,0FFH,~08H,0FFH,~04H,0FFH,~02H,0FFH,~01H,0FFH
    DB 0FFH,~80H,0FFH,~40H,0FFH,~20H,0FFH,~10H,0FFH,~08H,0FFH,~04H,0FFH,~02H,0FFH,~01H
    ;===========================================================================
    END

    七、附录

     

    实验电路原理图:点击查看

  • 相关阅读:
    operator[],识别读操作和写操作
    COW写时复制
    嵌套类,PIMPL
    类型转换
    String类运算符重载,自己实现
    socket的几个配置函数
    TCP三次握手,四次挥手,状态变迁图
    运算符重载
    友元
    P4016 负载平衡问题(最小费用最大流)
  • 原文地址:https://www.cnblogs.com/liujw2114/p/5966005.html
Copyright © 2011-2022 走看看