14 8x8LED点阵

单片机STC89C52学习——14 8x8LED点阵

汇总:00 单片机STC89C52学习
参考教程:普中科技

1 工作原理

1.1 8x8LED点阵

通过动态扫描显示。若为双色LED,只是多并联一个发光二极管

本开发板使用上图左边,ROW1 ~ 8由D7 ~ D0(74HC595的输出)控制,COL1 ~ 8由P07 ~ P00控制,通常不点亮时P0输出高电平
原理图

1.2 74HC595芯片

8 位串行输入、串行或并行输出的移位寄存器,具有高阻关断状态,三态。通过74HC595节约IO口。移位时从最高位开始

74HC595原理图
对应看时名称可能不一样,这时看引脚号即可
引脚说明
功能表
其他说明

2 程序:8x8LED点阵——1 显示左上角1个点;2 显示0

2.1 显示左上角1个点

#include "reg51.h"// 52单片机头文件有RCLK,会导致下面重定义
#include "intrins.h"// 因为用到_nop_()

typedef unsigned char u8;
typedef unsigned int u16;

// 需要控制74HC595的3个口
sbit SER = P3^4;// 串行数据输入
sbit RCLK = P3^5;// 存储寄存器时钟输入
sbit SRCLK = P3^6;// 移位寄存器时钟输入

void HC595(u8 dat)// P34的输入
{
    u8 a;
    SRCLK = 0;
    RCLK = 0;
    // 先到移位寄存器
    for (a = 0; a < 8; a ++)
    {
        SER = dat >> 7;// 移位7次,传送最高位
        dat <<= 1;// 把最高位左移换掉
        SRCLK = 1;// 上升沿,芯片手册写的是“大于几十纳秒”
        _nop_();// 延时1个机器周期。其实一条指令就有1微秒,所以也可以不延时。只是保险起见
        _nop_();
        SRCLK = 0;// 拉低回去   
    }
    // 再从移位寄存器输出
    RCLK = 1;
    _nop_();
    _nop_();
    RCLK = 0;   
}

void main()
{
    HC595(0x80);// D7高电平其余低电平,P34输入0x80,1000 0000
    P0 = 0x7f;// P07低电平其余高电平,P0输入0x7f,0111 1111
    while (1);
}

效果:并未显示...

2.2 显示0

#include "reg51.h"// 52单片机头文件有RCLK,会导致下面重定义
#include "intrins.h"// 因为用到_nop_()

typedef unsigned char u8;
typedef unsigned int u16;

// 需要控制74HC595的3个口
sbit SER = P3^4;// 串行数据输入
sbit RCLK = P3^5;// 存储寄存器时钟输入
sbit SRCLK = P3^6;// 移位寄存器时钟输入

u8 ledduan[] = {0x00, 0x00, 0x3e, 0x41, 0x41, 0x41, 0x3e, 0x00};// 显示0,每列如何显示
u8 ledwei[] = {0x7f, 0xbf, 0xdf, 0xef, 0xf7, 0xfb, 0xfd, 0xfe};// 点亮每一列,0111 1111 0右移

void delay(u16 i)
{
    while(i --);
}

void HC595(u8 dat)// P34的输入
{
    u8 a;
    SRCLK = 0;
    RCLK = 0;
    // 先到移位寄存器
    for (a = 0; a < 8; a ++)
    {
        SER = dat >> 7;// 移位7次,传送最高位
        dat <<= 1;// 把最高位左移换掉
        SRCLK = 1;// 上升沿,芯片手册写的是“大于几十纳秒”
        _nop_();// 延时1个机器周期。其实一条指令就有1微秒,所以也可以不延时。只是保险起见
        _nop_();
        SRCLK = 0;// 拉低回去   
    }
    // 再从移位寄存器输出
    RCLK = 1;
    _nop_();
    _nop_();
    RCLK = 0;   
}

void main()
{
    u8 i = 0;
    while (1);
    {
        for (i = 0; i < 8; i ++)
        {
            P0 = ledwei[i];// 选择哪一列显示
            HC595(ledduan[i]);// 列如何显示
            delay(100);
            HC595(0x00);// 消隐   
        }
    }
}

效果:什么都没有...

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 之前写了一篇图像的发展,因为简书app的bug导致了全篇文章尽毁。隔了两天还是把内容写上来。个人理解能力有限,受师...
    Zszen阅读 4,785评论 0 51
  • 实物制作视频教程:http://v.youku.com/v_show/id_XMzIxNDkzNTYxMg==.h...
    穿山甲开源工作室阅读 7,725评论 0 3
  • 01 不论坐顺风车,还是开顺风车,我都喜欢搭乘男性。 这并不是说我就是个gay,而是男性一般认识路,会看着你的方向...
    文贲说阅读 3,093评论 0 2
  • 【序章】 艾斯:总有一天我们要出海,活的比任何人都要自由 艾斯:爷爷,我啊,被生下来,是好事吗? 艾斯:路飞,和以...
    职场青少年不二阅读 4,594评论 29 10
  • 在寺院的树下,听到一阵又一阵怪鸟的叫声。我问旁边售买香烛的义工,知不知道是什么鸟在叫,他说,他听着挺害怕的,有些象...
    安静_anjing阅读 2,224评论 0 0