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(移位寄存器时钟输入)的上升沿输入到移位寄存器中,在R(存储器时钟输入)的上升沿输入到存储寄存器中去。 移位寄存器有一个串行移位输入(行Dx(P00)、列Dy(P03)),和一个串行输出(QH),和一个异步的低电平复位,存储寄存器有一个并行8位的,具备三态的总线输出,当使能 (P02和P07为低电平)时,存储寄存器的数据输出到总线。

实验代码

;使用中断来同步,摘自程序中断的典型例子
ORG 0000H                   ;复位起始地址LJMP START
ORG 000BH                   ;中间地址保留给中断向量表LJMP EINT0              ;定时器0中断程序入口地址
ORG 0040H                   ;程序实际起始地址
​
START:
OE1 EQU P0.7                ;存储器x方向使能端口
OE2 EQU P0.4                ;存储器y方向使能端口
SER1 EQU P0.0               ;移位寄存器串行行输入口Dx
SER2 EQU P0.3               ;移位寄存器串行列输入口Dy
SRCK1 EQU P0.1              ;移位寄存器x方向时钟输入口
SRCK2 EQU P0.5              ;移位寄存器y方向时钟输入口
RCK1 EQU P0.2               ;存储器x方向时钟输入口
RCK2 EQU P0.6               ;存储器y方向时钟输入口
MOV DPTR,#TABLE1            ;表首地址
MOV TMOD,#01H               ;定时器控制字,选择定时器工作方式为定时
MOV IE,#82H                 ;中断允许屏蔽控制字,中断设置,定时器0允许中断
​
L0:
MOV R4,#0                   ; 偏 移 L2:
MOV R3,#01FH                ;时间控制,一个屏幕的时间<40ms
​
S0:
MOV R0,#15                  ;行控制S00:
CLR SRCK1                   ; 行 清 零
CLR SER1                    ; 行 数 据 清 零
SETB SRCK1                  ;上升沿读入数据
DJNZ R0,S00                 ;自减一,循环
​
​
S1:
MOV R0,#0
CLR SRCK1   ;从第一开始选中
SETB SER1
SETB SRCK1
​
​
S2:
MOV A,R0 ; 计 数 器ADD A,R4
MOVC A,@A+DPTR  ;寻址,将R0,R4控制的地址取出MOV R1,#8 ;前8位,循环控制
​
​
S3:
CLR SRCK2
RRC A        ; 向 右 移
MOV SER2,C  ;溢出一位给C
SETB SRCK2  ;上升沿输出数据
​
DJNZ R1,S3  ;R1!=0,则跳转S3
INC R0
;重复第二组8位
MOV A,R0
ADD A,R4
MOVC A,@A+DPTR
MOV R1,#8
​
S4:
CLR SRCK2
RRC A
MOV SER2,C
SETB SRCK2
DJNZ R1,S4
INC R0
​
S5:
CLR RCK1
SETB RCK1
CLR RCK2
SETB RCK2
CLR OE1 ;使能段有效
CLR OE2
LCALL TIME  ;长跳转SETB OE1
SETB OE2
CLR SRCK1;下一行
CLR SER1
SETB SRCK1
​
​
CJNE R0,#32,S2 ;不相等跳转,一个屏幕的32个8
DJNZ R3,S0 ;不等于零跳转窗口大小固定
​
MOV A,R4
ADD A,#2
MOV R4,A
CJNE R4,#128,L2   ;四个字,4×32,32个8位是一个字,结束之后,循环回到开始 。
LJMP L0
​
TIME:           ; 延 迟 实 现
MOV TH0,#0FFH
MOV TL0,#3CH      ;0.2ms
SETB TR0
MOV R7,#0H
​
T11:
CJNE R7,#1H,T11
RET
​
​
;定时器0中断处理程序
EINT0:
MOV R7,#1H
RETI
​
TABLE1:
DB 20H,00H,24H,00H,24H,0FCH,24H,88H,24H,88H,24H,88H,0FCH,88H;
DB 24H,88H,24H,88H,24H,88H,24H,0FCH,24H,00H,20H,00H,00H,00H;"?",0
​
​
DB 10H,40H,11H,80H,16H,00H,0FFH,0FCH,12H,00H,11H,00H,00H,20H;
DB 10H,0C0H,13H,00H,0FFH,0FCH,13H,00H,10H,0C0H,10H,20H,00H,00H;"?",1
​
​
DB 08H,04H,08H,04H,08H,08H,08H,10H,08H,60H,0BH,80H,0FCH,00H;
DB 0BH,80H,08H,60H,08H,10H,08H,08H,08H,04H,08H,04H,00H,00H;"?",2
​
​
DB 1CH,40H,10H,40H,92H,40H,52H,40H,12H,44H,92H,44H,52H,0FCH;
DB 12H,0C0H,33H,40H,52H,40H,90H,40H,10H,40H,1CH,40H,00H,00H;"?",3
END 

流程图

思考题

1. 如何使用软件调整和控制LED点阵的亮度?

对于LED显示屏,点的亮度值对应于有效的显示时间,这是由列的显示时间来实现的,时间越长,亮度越高。

2.如何尽量避免显示过程中的闪烁?

对于用户来说,显示频率越高,屏的视觉稳定性越强;显示频率越低,屏的视觉稳定性越差,即显示屏看起来会有闪烁和抖动的现象。因此为避免显示过程中的闪烁,应提高显示频率。

3.如何将本实验的软硬件推广到多行多列的LED显示屏(如64*1280)?

可以多增加几个控制行列的移位寄存器。

实验过程中的问题和收获

收获:在本次实验中了解到了LED点阵的原理。

利用定时器中断方式控制led灯的闪烁速度_实验四 LED点阵相关推荐

  1. easyui 控制某列显示不显示_实验八 LED数码管显示控制实验

    一.实验目的 1.熟悉PLC实验装置以及三菱编程软件gxdeveloper8.86. 2.熟悉逻辑控制与应用指令的使用. 二.实验预习要求 熟悉三菱FX2N系列PLC的基本指令. 按照控制要求完成程序 ...

  2. 从ARM裸机看驱动之按键中断方式控制LED(二)

    硬件环境:Samsung Cortex-A9 Exynos4412 BSP 软件环境:Linux3.14 =============================================== ...

  3. 从ARM裸机看驱动之按键中断方式控制LED(一)

    硬件环境:Samsung Cortex-A9 Exynos4412 BSP + JTAG ARM 仿真器 软件环境:Eclipse ================================== ...

  4. Holtek合泰单片机 《四》 从TM定时器中断到led灯1s闪烁

    跳过中断直接讲TM中断是不是有些超前了? 由于最近参加了一个项目,真是忙的不要不要的,没办法,只有抽了点放假的时间来更新下自己的博文,希望对正在学习HT单片机的同学有帮助. 重庆合泰初赛是5月15日, ...

  5. STM32 CubeMx(二)定时器中断和PWM呼吸灯

    STM32 CubeMx(一)时钟树配置与GPIO输入输出 文章目录 1.定时器 1.1 定时器概念 1.2 定时器分类 1.3 定时器功能 1.4 配置过程和编写代码 1.5 代码分享 2.PWM产 ...

  6. 控制led闪烁次数_单片机驱动LED灯的进阶之路

    对于大多数单片机的学习者或者是从事单片机行业的工程师来说,单片机驱动LED闪烁起来的时候,基本都是我们入坑的开始,同时当时的那种兴奋与喜悦都是难以忘怀的,从LED灯亮起,到闪烁,再到各种流水灯,能开心 ...

  7. ZYNQ FPGA控制LED灯不闪烁

    1.1 ZYNQ FPGA控制LED灯不闪烁 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)ZYNQ FPGA控制LED灯不闪烁: 5)结束语. 1.1.2 本节引言 ...

  8. 控制三色LED灯的闪烁——Arduino

    最近要弄下Arduino.动过手,知道问题,细节可能在哪. 知识点我不清楚,直接看程序.直接控制也相对简单. 程序 /*实战案例1:控制三色LED灯的闪烁2019/3/12 */ int redpin ...

  9. 第二节:delay()延时实现LED灯的闪烁。

    第二节:delay()延时实现LED灯的闪烁. 开场白:     上一节鸿哥列出了初学者七大误区,到底什么才是初学者关注的核心?那就是裸机奔跑的程序结构.一个好的程序结构,本身就是一个微型的多任务操作 ...

  10. STM32F103C8T6核心板控制器下,通过电路搭建实现LED灯轮流闪烁的实验操作

    通过STM32F103C8T6+面板板+3只红绿蓝LED,搭建了电路,控制LED灯实现轮流闪烁 文章目录 通过STM32F103C8T6+面板板+3只红绿蓝LED,搭建了电路,控制LED灯实现轮流闪烁 ...

最新文章

  1. 力扣(LeetCode)刷题,简单题+中等题(第20期)
  2. Log4j2又爆雷!2.16.0存在DOS攻击风险,升级到2.17.0可解决!
  3. layui移动端适配_实战:移动端适配的最佳实践
  4. 操作系统复习--OS的运行机制和体系结构
  5. echarts 大屏可视化_看似复杂炫酷的数据可视化设计,用这波神器轻松搞定!
  6. 用VC写Assembly代码(4)
  7. VueSummary_note
  8. 推荐: 一个业务流程梳理工具Sam
  9. C#.Net 扩展方法
  10. Cocos2d-x CocosBuilder使用教程(一)HelloCocosBuilder
  11. 服务器系统怎么找便签,win7系统便签在哪里?win7系统便签功能使用教程
  12. Unity | 实现粘贴、复制功能
  13. 数据库应用之关系代数(relational algebra)
  14. 颠覆传统股票证券市场的可能是ICO代币(TOKEN)
  15. Normal Map中的值, Tangent Space, 求算 Tangent 与 Binormal 与 TBN Matrix
  16. 批处理之批量修改文件扩展名
  17. Yahoo大规模时列数据异常检测技术及其高性能可伸缩架构
  18. stm8 IAR 编译错误atal Error[Pe035]: #error directive: quot;Please select first the target STM8L device
  19. AutoCAD 2010中文版从入门与精通视频教程
  20. 微信小程序云开发上传word文档到云存储器

热门文章

  1. CSS规范(OOCSS SMACSS BEM)
  2. 有锚点的链接页面刷新的问题
  3. haartraining生成.xml过程
  4. Ansible详解(二)——Ansible安装与命令
  5. L2TP 配置实例——CALL LNS
  6. lvs+keepalived实现负载均衡和高可用
  7. Debian — command not found
  8. Linux中如何针对用户及组设置磁盘配额
  9. 帮你躲坑:pip install tensorflow 报错怎么办,import tensorflow 报错怎么办?
  10. cookie 操作