8051单片机实战分析(以STC89C52RC为例) | 09 - LED点阵显示数字

发布者:温馨阳光最新更新时间:2022-05-12 来源: eefocus关键字:单片机  STC89C52RC  LED点阵  显示数字 手机看文章 扫描二维码
随时随地手机看文章

1 LED点阵

LED 点阵是由发光二极管排列组成的显示器件,在我们日常生活的电器中随处可见,被广泛应用于汽车报站器,广告屏等。 通常应用较多的是 8* 8 点阵,然后使用多个 8 * 8 点阵可组成不同分辨率的 LED点阵显示屏,比如 16* 16 点阵可以使用 4 个 8* 8 点阵构成。因此理解了 8* 8LED点阵的工作原理,其他分辨率的 LED 点阵显示屏都是一样的。这里以 8* 8LED 点阵来做介绍。

工作原理:

8* 8 点阵共由 64 个发光二极管组成,且每个发光二极管是放置在行线和列线的交叉点上,当对应的某一行置 1 电平(行所接的是二极管的阳极,所以为高电平),某一列置 0 电平(列所接的是二极管的阴极极,所以为低电平),则相应的二极管就亮;如要将第一个二极管点亮,则A1 脚接高电平,K1脚接低电平,则第一个点就亮了;如果要将第一行点亮,则第 A1 脚要接高电平,而(K1、K2、K3、K4、K5、K6、K7、K8)这些引脚接低电平,那么第一行就会点亮;如要将第一列点亮,则第K1 脚接低电平,而(K1、K2、K3、K4、K5、K6、K7、K8)接高电平,那么第一列就会点亮。


下面我们通过给LED点阵显示一个点与显示一个数字深入理解它的使用。


2 原理图

① 8* 8 LED点阵原理图:

② 74HC595原理图(JOE排针处把OE接到GND):

③ MCU原理图:

3 程序

① 点亮左上角第一个点:


#include "reg51.h" //此文件中定义了单片机的一些特殊功能寄存器

#include


typedef unsigned int u16;   //对数据类型进行声明定义

typedef unsigned char u8;


sbit SRCLK=P3^6; //存储寄存器时钟引脚(数据输入时钟线)

sbit RCLK=P3^5; //移位寄存器时钟引脚(输出存储器锁存时钟线)

sbit SER=P3^4; //串行数据输入引脚



/*******************************************************************************

* 函数名         : Hc595SendByte(u8 dat)

* 函数功能 : 向74HC595发送一个字节的数据

* 输入           : 无

* 输出          : 无

*******************************************************************************/

void Hc595SendByte(u8 dat)

{

u8 i;

SRCLK=0; // 初始化数据输入时钟线

RCLK=0; // 初始化输出存储器锁存时钟线

for(i=0;i<8;i++)

{

SER=dat>>7; //从最高位开始发送     例:1111 0000,最高为1右移7位,最后变为1,那么最高位就保存下来

dat<<=1; //左移移位变为次高位 ,接上一例,左移移位变为次高位,在右移7位,变为次高位


SRCLK=1; // 从0到1给,即从低电平到高电平,给移位寄存器上升沿,数据存入移位寄存器中

_nop_();

_nop_();

SRCLK=0; // 复位引脚

}


RCLK=1; // 移位寄存器时钟引脚加上升沿,数据并行输出

_nop_();

_nop_();

RCLK=0; // 复位引脚

}


/*******************************************************************************

* 函 数 名       : main

* 函数功能 : 主函数

* 输    入       : 无

* 输    出    : 无

*******************************************************************************/

void main()

{

Hc595SendByte(0x80); // 写入0b10000000,让D7引脚输出高电平

P0=0x7f; // 写入0b01111111,让P07引脚输出低电平

while(1);

}


② 在点阵上显示数字0:


#include "reg51.h" //此文件中定义了单片机的一些特殊功能寄存器

#include


typedef unsigned int u16;   //对数据类型进行声明定义

typedef unsigned char u8;


sbit SRCLK=P3^6; //存储寄存器时钟引脚(数据输入时钟线)

sbit RCLK=P3^5; //移位寄存器时钟引脚(输出存储器锁存时钟线)

sbit SER=P3^4; //串行数据输入引脚


// 定义数字0的显示位置

u8 LedSeg[]={0x00,0x00,0x3e,0x41,0x41,0x41,0x3e,0x00};

u8 LedPos[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};

/*******************************************************************************

* 函 数 名         : delay

* 函数功能    : 延时函数,i=1时,大约延时10us

*******************************************************************************/

void delay(u16 i)

{

while(i--);

}


/*******************************************************************************

* 函数名         : Hc595SendByte(u8 dat)

* 函数功能 : 向74HC595发送一个字节的数据

* 输入           : 无

* 输出          : 无

*******************************************************************************/

void Hc595SendByte(u8 dat)

{

u8 i;

SRCLK=0; // 初始化数据输入时钟线

RCLK=0; // 初始化输出存储器锁存时钟线

for(i=0;i<8;i++)

{

SER=dat>>7; //从最高位开始发送     例:1111 0000,最高为1右移7位,最后变为1,那么最高位就保存下来

dat<<=1; //左移移位变为次高位 ,接上一例,左移移位变为次高位,在右移7位,变为次高位


SRCLK=1; // 从0到1给,即从低电平到高电平,给移位寄存器上升沿,数据存入移位寄存器中

_nop_();

_nop_();

SRCLK=0; // 复位引脚

}


RCLK=1; // 移位寄存器时钟引脚加上升沿,数据并行输出

_nop_();

_nop_();

RCLK=0; // 复位引脚

}


/*******************************************************************************

* 函 数 名       : main

* 函数功能 : 主函数

* 输    入       : 无

* 输    出    : 无

*******************************************************************************/

void main()

{

u8 i;

while(1)

{

P0=0x7f; // 初始化P0口

for(i=0;i<8;i++) //8行8列,在扫描行的同时,位选也进行,所以共8次循环

{

P0=LedPos[i];   //发送位选数据,控制P0口

Hc595SendByte(LedSeg[i]); //发送段选数据,控制74HC595

delay(100);    //延时,肉眼无法观察的速度

Hc595SendByte(0x00);  //消隐,防止给下次扫描带来影响

}

}

}

关键字:单片机  STC89C52RC  LED点阵  显示数字 引用地址:8051单片机实战分析(以STC89C52RC为例) | 09 - LED点阵显示数字

上一篇:STC89C52RC单片机额外篇 | 01 - 认识中断、中断源以及中断优先级
下一篇:8051单片机实战分析(以STC89C52RC为例) | 08 - 矩阵按键驱动

推荐阅读最新更新时间:2024-11-02 12:51

单片机C语言程序设计:单片机之间双向通信
/* 名称:甲机串口程序 说明:甲机向乙机发送控制命令字符, 甲机同时接收乙机发送的数字,并显示在 数码管上。 */ #include reg51.h #define uchar unsigned char #define uint unsigned int sbit LED1=P1^0; sbit LED2=P1^3; sbit K1=P1^7; uchar Operation_No=0; //操作代码 //数码管代码 uchar code DSY_CODE ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //延时 void Delay
[单片机]
<font color='red'>单片机</font>C语言程序设计:<font color='red'>单片机</font>之间双向通信
单片机·LCD1602
LCD1602 (能够同时显示16x02 ,32个字符) 一、管脚功能介绍 1.GND 地线 2.VCC 电源正极 3.VL 液晶显示偏压信号(对比度清晰一点) 4.RS 数据/命令选择端 5.R/W 读/写选择端 6.EN 使能信号 7.D0~D7 P0口数据传输 8.BL+ 背光源正极 9.BL- 背光源负极 二、字符集 这是LCD1602特别值得注意的一点,我开始学习的时候,以后可以使用通用的ascii码,但是实验了很久,得不到自己想要的结果,最后才发现LCD1602有自己的字符集 (最长使用的十六进制中的A-F,可以通过 A+'7'来确定) 三
[单片机]
如何由单片机升级到DSP
  在过去的几十年里, 单片机 的广泛应用实现了简单的智能控制功能。随着信息化的进程和计算机科学与技术、信号处理理论与方法等的迅速发展,需要处理的数据量越来越大,对实时性和精度的要求越来越高,低档 单片机 已不再能满足要求。近年来,各种集成化的单片 DSP 的性能得到很大改善,软件和开发工具也越来越多,越来越好;价格却大幅度下滑,从而使得 DSP 器件及技术更容易使用,价格也能够为广大用户接受;越来越多的 单片机 用户开始选用 DSP 器件来提高产品性能,DSP器件取代高档单片机的时机已经成熟。   本文将从性能、价格等方面对单片机和DSP器件进行比较,在此基础上,以TI的TMS320C2XX系列DSP器件为例,探讨DSP器件取代
[嵌入式]
MCS-51系列单片机并行口结构及工作原理
典型的MCS-51 单片机 有四个双向8位I/O口,分别记作P0、P1、P2、P3,每一个口都由口锁存器、输入 缓冲器 /输出驱动器所组成。下图别给出了P0、P1、P2、P3口的1位的结构框图。   P0~P3的口锁存器结构都是一样的,P0~P3口的每一位口锁存器都是一个D 触发器 ,复位以后的初态为1。但输入缓冲器和输出驱动器的结构有差别。CPU通过内部总线把数据写入口锁存器。CPU对口的读操作有两种:一种是读-修改-写指令(例如ANLP1,#0FEH),读口锁存器的状态,此时口锁存器的状态由Q端通过上面的三态输入缓冲器送到内部总线。另一种是读指令(例如MOVA,P1),CPU读取口引脚上的外部输入信息,这时引脚状态通过下
[单片机]
MCS-51系列<font color='red'>单片机</font>并行口结构及工作原理
ATmega16 MCU控制寄存器MCUCR
MCU 控制寄存器包含了电源管理的控制位。 · Bits 7, 5, 4 – SM2..0: 休眠模式选择位 2、1 和0如 Table 13 所示,这些位用于选择具体的休眠模式。 · Bit 6 – SE: 休眠使能 为了使MCU 在执行SLEEP 指令后进入休眠模式, SE 必须置位。为了确保进入休眠模式是程序员的有意行为,建议仅在SLEEP 指令的前一条指令置位SE。MCU 一旦唤醒立即清除SE
[单片机]
ATmega16 <font color='red'>MCU</font>控制寄存器MCUCR
STM32单片机串口一键下载电路与操作方法详解
STM32三种启动模式对应的存储介质均是芯片内置的,它们是: 1)用户闪存 = 芯片内置的Flash。 2)SRAM = 芯片内置的RAM区,就是内存啦。 3)系统存储器 = 芯片内部一块特定的区域,芯片出厂时在这个区域预置了一段Bootloader,就是通常说的ISP程序。这个区域的内容在芯片出厂后没有人能够修改或擦除,即它是一个ROM区。 要了解STM32的几种启动模式. BOOT0接GND,BOOT1接GND.那就是正常的启动模式,从flash加载代码. 而BOOT0接V3.3,BOOT1接GND.则是ISP模式,也就是串口更新代码. 其次,你要了解STM32 ISP下载代码的过程. 首先BOOT0接V3.3,然
[单片机]
STM32<font color='red'>单片机</font>串口一键下载电路与操作方法详解
基于MCU的抽油机节能控制仪表与控制技术
  为了实现抽油机能自动根据负载需要实时进行 /Y双向切换和间歇定时控制的目标,采用嵌入式控制技术设计了如图1所示的控制电路。 ?   智能功率控制器的硬件系统以新华龙电子公司为C8051F206配套的实验板为基础,新增输出电路和键盘显示电路后形成。直接利用实验板上的C8051F206MCU、JTAG接口、晶振、复位及电源电路,大大降低了硬件设计工作量。   (1)输出电路   本系统的被控对象是电机的开关。为满足星角切换和开机/停机要求,需要对3只交流接触器(C1~C3)按一定组合关系进行控制,其电路原理和控制真值表如图2(a)和图2(b)所示。考虑到现场抗干扰的需要,在输出端口P0.1,P0.3和P0.5后采用了光电隔离
[单片机]
基于<font color='red'>MCU</font>的抽油机节能控制仪表与控制技术
使用单片机实现GPRS通信小系统的研究
0 引 言 GPRS(通用分组无线电业务)是利用包交换的概念发展的一套无线传输方式。GPRS网络是基于现有的GSM(全球移动通信系统)网络实现的。在现有的GSM网络中需要增加一些节点,如GGSN(GPRS网关支持节点)和SGSN(GPRS服务支持节点)。SGSN的主要作用是记录移动终端的当前位置信息,并且在移动终端与GGSN之间完成移动分组数据的发送和接收。GGSN主要起网关作用,可以与多种不同的数据网络连接,如ISDN(综合业务数字网)、PSPDN(包交换公用数据网)和LAN(局域网)等。GGSN可以把GSM网中的GPRS分组数据包进行协议转换,从而把这些分组数据包传送到远端的TCP/IP或X.25网络。 GPRS网不但具有
[工业控制]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved