51单片机-8*8点阵屏(清翔版)

51单片机-8*8点阵屏

.根据LED灯的正负极来看,在LED共阳极电路图中,行为低电位,列为高电位。也就是行给0,列给1,在这个交叉点上的led灯才会亮起。在原理图中行的最上面为高位,最下面为低位。
2.点阵屏的显示也是用的静态扫描就是人眼的视觉暂留,比如说要显示(1,1)和(2,3)这两个坐标下的led灯需要先显示第一个,在显示第二个,然后快速循环显示,这样就出现视觉暂留。
在这里插入图片描述
在这里插入图片描述

(2).74HC595芯片

1.如果使用纯端口控制,8*8点阵屏幕就需要16个端口来控制造成端口浪费,这时候需要使用74HC595来并联接口控制。
2.74HC595芯片是串行输入数据并行输出数据,例如将8位二进制通过串行一位一位输入芯片,当满了8位以后并行输出所有数据。这样就可以用两个芯片来控制16位引脚。
在这里插入图片描述
3.芯片引脚功能解释:
● 14脚:DS(SER),串行数据输入引脚
● 13脚:OE,输出使能控制脚,它是低电才使能输出,所以接GND
● 12脚:RCK(STCP:输出开关),存储寄存器时钟输入引脚。上升沿时,数据从移位寄存器转存到存储寄存器。RCK引脚给一个上升沿(由0到1),8位数据就会从芯片中并行同时输出。
● 11脚:SCK(SHCP:输入开关),移位寄存器时钟引脚,上升沿时,移位寄存器中的bit 数据整体后移,并接受新的bit(从SER输入)。当为上升沿时,数据一位接着一位叠罗汉似的存储在芯片中。
● 10脚:MR,低电平时,清空移位寄存器中已有的bit数据
● 9 脚 (级联引脚):串行数据出口引脚。当移位寄存器中的数据多于8bit时,会把已有的bit“挤出去”,就是从这里出去的。用于595的级联。
● 解释级联:当两个芯片进行级联的时候,只需要一个引脚进行输入数据,,比如输入16位数据,当一个芯片的8位数据满的时候,就会通过Q7S引脚将芯片中低位(最下面的数据)放到下一个芯片中,双层叠罗汉。
在这里插入图片描述
在这里插入图片描述
芯片级联原理图解释:下面芯片为1号,上面的为2号芯片,1号通过级联口Q7与2号的数据输入口14引脚相连,当1号芯片存储数据满时将数据传输到2号芯片中。在外部控制器中DI是数据输入端口,而CLK与LE控制着两个芯片的数据输入与数据输出。1号芯片输出的是数据中的后8高位,2号芯片输出的是前8低位。

3.代码解释

1.矩阵屏幕显示的形式是一行一行显示的,首先显示第一行中所有列元素的数据,然后再显示第二行中所有列元素的数据,依次动态扫描。
2.通过led的正负极,可以知道行是为高,列为低电平才能显示,8次for循环的含义就是得出某行的列坐标。
比如 x行的列坐标是 0100 1100,八次循环就是得出列坐标为( 0100 1100),然后通过另一个函数得出要将这些数据显示在哪一行。
3.(dat & 0x01):是用来将16进制数据转行成二进制数据,与(dat >>= 1)进行配合使用。二进制数据会通过DI进入并行通道。

//这个函数的作用就是将16进制装为2进制送给芯片2进制数据进行显示
viod displayBit( uchar dat ){
    IN = 0;
    OUT  = 0;
    for (int j = 0; j < 8; ++j) {
       if(dat & 0x01){
           DI = 1;
       } else{
           DI = 0;
       }
       IN = 1;
       dat >>= 1;
        IN = 0;
    }
}

4.行坐标的确定方式为一行一行显示,从行坐标高位显示到低位。

 uchar row = 0x80;//(1000 0000)默认显示第一行
   while(1){
            for(int j = 0; j < 8; ++j){//循环8次送出8行
                displayBit(font[j]);
                displayBit(row);//这个函数的作用就是将16进制转行成2进制,送给芯片
                OUT  = 1; //产生高低电平变化送出某一行的数据
                OUT  = 0;
                row = _cror_(row,1);//右移动一位,显示下一行
            }
   }

5、完整代码

#include <reg52.h>
#include "intrins.h"

#define  uchar unsigned char
#define uint unsigned int

sbit DI = P3^4; // 定义矩阵屏的并行数据输入接口
sbit IN = P3^5; // 定义数据输入开关
sbit OUT= P3^6; // 定义数据输出开关

uint font[8] ={0x00,0x3C,0x24,0xFF,0x24,0x3C,0x00,0x00};
//0x00,0x3C,0x24,0xFF,0x24,0x3C,0x00,0x00  字摸中
//0xFF 0x81 0xD5 0xFD 0xD5 0xF5 0x81 0xFF  字摸国

viod displayBit( uchar dat ){
    IN = 0;
    OUT  = 0;
    // 循环8次
    for (int j = 0; j < 8; ++j) {
       if(dat & 0x01){
           DI = 1;
       } else{
           DI = 0;
       }
       IN = 1;
       dat >>= 1;
        IN = 0;
    }
}


void main{
    uchar row = 0x80;
   while(1){
            for(int j = 0; j < 8; ++j){
                displayBit(font[j]);
                displayBit(row);
                OUT  = 1;
                OUT  = 0;
                row = _cror_(row,1);
            }
   }
};

6.循环显示两位汉字的代码

#include <reg52.h>
#include "intrins.h"

#define uchar unsigned char
#define uint unsigned int

sbit DI = P3^4; // 
sbit IN = P3^5; // 
sbit OUT= P3^6; // 

uchar font[2][8] = {
        0xE0,0xEE,0x01,0x6D,0x01,0x6D,0x01,0xEF,//电
        0xEF,0xEF,0x83,0xAB,0xAB,0xAB,0x83,0xEF//中
};


void displayBit( uchar dat ){
    int j;
    IN = 0;
    OUT  = 0;
    for (j = 0; j < 8; ++j) {
        if(dat & 0x01){
            DI = 1;
        } else{
            DI = 0;
        }
        IN = 1;
        dat >>= 1;
        IN = 0;
    }
}


void main(){
    uchar row;
    uint j,i,z;
    while(1){
        for (i = 0; i < 2 ; ++i) {
            for ( z = 0; z < 1000; ++z) {//延时固定显示次数
                row = 0x80;
                for(j = 0; j < 8; ++j){
                    displayBit(font[i][j]);
                    displayBit(row);
                    OUT  = 1;
                    OUT  = 0;
                    row = _cror_(row,1);
                }
            }

        }
    }
}
  • 18
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值