51单片机 之 8*8 LED点阵(解决程序烧录没反应、显示拖影问题、取字模软件) 您所在的位置:网站首页 led显示屏一直闪动 51单片机 之 8*8 LED点阵(解决程序烧录没反应、显示拖影问题、取字模软件)

51单片机 之 8*8 LED点阵(解决程序烧录没反应、显示拖影问题、取字模软件)

2023-08-14 07:02| 来源: 网络整理| 查看: 265

目录 一、前言二、先点一个灯看看三、显示复杂的数字四、使用取字模软件

一、前言

我手里用的是普中科技的A2开发板,它的 8*8 的LED单射点阵是采用的是下图左边的构造。 在这里插入图片描述

它采取的动态扫描是列扫描

使用到的芯片有74HC595,74HC595主要用来扩展 io 口,它可以把串行的输入变成并行的输出,它具有三态。

注意74HC595的功能,把串行的输入变成并行的输出,这很重要,这会在代码中体现出来。

在这里插入图片描述 先不要管右边的接线,我们看下74HC595的端口

OE非:使能端,给低电平的时候才工作 在这里插入图片描述 所以如果你烧录了没反应,你需要见检查在上图位置是否给使能端一个低电平让它正常工作。

SRCLK,当上升沿信号时,把输入的串行数据移位并且保存到寄存器里

RCLK, 当上升沿信号时,把寄存器里保存的数据 output

二、先点一个灯看看 //点亮第一行第一列的点 #include #include typedef unsigned char u8; typedef unsigned int u16; sbit SRCLK = P3^6; //SRCLK 在上升沿时,串行输入的数据移位并且保存到寄存器中 sbit RCLK = P3^5; //RCLK 在上升沿时,寄存器中的数据输出 sbit SER = P3^4; void hc595sendbyte(u8 a) { SRCLK = 0; RCLK = 0; //(1) for (int i = 0; i hc595sendbyte(0x80); // 1000 0000 D7~D0 第一行到第八行 P0 = 0x7f ; //列这边接的是阴极,所以 0111 1111 P7~P0 第一列到第八列。 while (1) ; //把单片机困在这里,避免它到处跑(乱跑,确信!) }

注释:

(1)需要循环8次才能把八行都给一个状态。但是 因为列是直接P0的8位给状态,所以只需要一次就给了八列一列一个状态。

(2)输入的a是一个八位二进制数,但是它向右移了7位,即被截取了低七位 ,这个最高位赋给了SER (SER只有一位),所以一次循环寄存器保存一位。

(3)把a的最高位截掉,最低位添加一个零 ,下次循环保存的是次高位。

(4)把寄存器中保存的data给出去。

在这里插入图片描述

三、显示复杂的数字 //显示一个零 #include #include typedef unsigned char u8; typedef unsigned int u16; sbit SRCLK = P3^6; sbit RCLK = P3^5; sbit SER = P3^4; u16 led_x[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe}; u8 led_y[]={0x00,0x00,0x3e,0x41,0x41,0x41,0x3e,0x00}; void delay(u16 i) { while(i--); } void hc595sendbyte(u8 a) { u16 i ; SRCLK = 0; RCLK = 0; for (i = 0; i u16 i; while(1){ for (i = 0; i


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有