本文章为原创内容未经允许不得转载

项目说明

用普中51单片机和keil uVision5实现8*8双色点阵显示动画。

软件准备

对于 8*8 的点阵来说,我们可以显示一些简单的图形,而字符等,大部分汉字通常来说要用到 16*16 个点阵,而我们要用点阵显示出花样的时候,这时候往往要先做出来一些小图形,这些小图形的数据要转换到我们的程序当中去,这个时候就需要取模软件了。

取模软件介绍

取模软件是一款对字符进行处理的软件,支持对所有NOTEPAD中可见的字符取模,支持使用指定字体、指定取点模式及字节排列模式,支持使用系统中任意字体对字符进行取模,字形清晰;支持字体加粗、斜体、删除线、下划线等设置等。

取模软件的使用

这里不做样细介绍,具体方法可下载PDF查看(软件一般某度上可以轻易的下载到)

硬件设计

8*8双色点阵介绍

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

硬件实物连接

74hc595的8个脚连接点阵8个脚行控,p0口的8个脚连接点阵8个脚列控就行了​。(注意:连线时不要连错了,当然怎么连接取决于你的软件编码,这只是本篇文章的连接 仅供参考

ss'tss'ts'tu上图仅供参考

软件设计

在keil uVision5里面实现编代码了。

#include "reg51.h"
#include<intrins.h>
typedef unsigned int u16;
typedef unsigned char u8;
sbit SRCLK=P3^6;
sbit RCLK=P3^5;
sbit SER=P3^4;
#define lde P0
#define lv P1
u8 code lie[]={0xff,0x99,0x00,0x00,0x00,0x81,0xc3,0xe7};//心下型
u8 code hang[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//行动态扫描
u8 code liea[]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};//全1列(高电平,全灭)
u8 code lieb[]={0xff,0x81,0xe7,0xe7,0xe7,0xe7,0xe7,0x81};//I
u8 code liec[]={0xff,0x99,0x99,0x99,0x99,0x99,0xc3,0xe7};//U
u8 code liee[]={0xFF,0xFF,0xDB,0x81,0x81,0xC3,0xE7,0xFF};//小心
u8 code lief[]={0xCD,0xB4,0xB5,0xB5,0xB5,0xB5,0xB5,0xC8};//10
u8 code lieg[]={0xff,0xe7,0xDB,0xDB,0xC7,0xDF,0xDB,0xE7};//9
u8 code lieh[]={0xFF,0xE7,0xDB,0xDB,0xE7,0xDB,0xDB,0xE7}//8
u8 code liei[]={0xFF,0xC3,0xDB,0xDF,0xEF,0xF7,0xF7,0xF7};//7
u8 code liej[]={0xFF,0xE7,0xDB,0xFB,0xE3,0xDB,0xDB,0xE7};//6
u8 code liek[]={0xFF,0xC3,0xFB,0xFB,0xE7,0xDF,0xDB,0xE7};//5
u8 code liel[]={0xFF,0xEF,0xE7,0xEB,0xED,0xC3,0xEF,0xEF};//4
u8 code liem[]={0xFF,0xE7,0xDB,0xDF,0xEF,0xDF,0xDB,0xE7};//3
u8 code lien[]={0xFF,0xE7,0xDB,0xDF,0xEF,0xF7,0xFB,0xC3};//2
u8 code lieo[]={0xFF,0xEF,0xE3,0xEF,0xEF,0xEF,0xEF,0xC3};//1
u8 code liep[]={0xFF,0xE7,0xDB,0xDB,0xDB,0xDB,0xDB,0xE7};//0
u8 code lieQ[]={0xFF,0xE7,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF};
u8 code lieR[]={0xDB,0xE7,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF};
u8 code lieS[]={0x99,0xE7,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF};
u8 code lieT[]={0x99,0x66,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF};
u8 code lieU[]={0x99,0x66,0x7E,0xFF,0xFF,0xFF,0xFF,0xFF};
u8 code lieV[]={0x99,0x66,0x7E,0x7E,0xFF,0xFF,0xFF,0xFF};
u8 code lieW[]={0x99,0x66,0x7E,0x7E,0xBD,0xFF,0xFF,0xFF};
u8 code lieX[]={0x99,0x66,0x7E,0x7E,0xBD,0xDB,0xFF,0xFF};
u8 code lieY[]={0x99,0x66,0x7E,0x7E,0xBD,0xDB,0xE7,0xFF};//环心 上
u8 code lieac[]={0xFF,0x99,0x66,0x7E,0x7E,0xBD,0xDB,0xE7};
u8 code liez[]={0xFF,0x99,0x81,0x81,0xC3,0xE7,0xFF,0xFF};//小心上
u8 code lieab[]={0xFF,0xFF,0x99,0x81,0x81,0xC3,0xE7,0xFF};//小心下
void HC595shuru(u8 dat)
{
    u8  i;
    RCLK=0;
    SRCLK=0;
    for(i=0;i<8;i++)
         {
             SER=dat>>7 ;
             dat<<=1;
             SRCLK=1;
             _nop_();
             _nop_();
             SRCLK=0;
         }
    RCLK=1;
    _nop_();
    _nop_();
    RCLK=0;
}

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

 void  liexuan()
 {
     u8 a;
        for(a=0;a<8;a++)
          {
            HC595shuru(hang[a]);
            lde=lie[a];
            lv=liea[a];
            delay(100);
            P0=0xff;
          }
 }
 void liexuana()
 {
      u8  i;
         for(i=0;i<8;i++)
         {
            HC595shuru(hang[i]);
            lde=liea[i];
            lv=liea[i];
            delay(100);
                P0=0xff;
        }
}
 void liexuanb()
 {
      u8  j;
         for(j=0;j<8;j++)
         {
            HC595shuru(hang[j]);
            lde=lieb[j];
            lv=liea[j];
            delay(100);
                P0=0xff;
        }
}
 void liexuanc()
 {
      u8  k;
         for(k=0;k<8;k++)
         {
            HC595shuru(hang[k]);
            lde=liec[k];
            lv=liea[k];
            delay(100);
                P0=0xff;
        }
}

void liexuane()
 {
      u8  g;
         for(g=0;g<8;g++)
         {
            HC595shuru(hang[g]);
            lde=liee[g];
            lv=liea[g];
            delay(100);
                P0=0xff;
        }
}
void liexuanf()
 {
      u8  i;
         for(i=0;i<8;i++)
         {
            HC595shuru(hang[i]);
            lde=lief[i];
            lv=liea[i];
            delay(100);
                P0=0xff;
        }
}
void liexuang()
 {
      u8  i;
         for(i=0;i<8;i++)
         {
            HC595shuru(hang[i]);
            lde=lieg[i];
            lv=liea[i];
            delay(100);
                P0=0xff;
        }
}
void liexuanh()
 {
      u8  i;
         for(i=0;i<8;i++)
         {
            HC595shuru(hang[i]);
            lde=lieh[i];
            lv=liea[i];
            delay(100);
                P0=0xff;
        }
}
void liexuani()
 {
      u8  i;
         for(i=0;i<8;i++)
         {
            HC595shuru(hang[i]);
            lde=liei[i];
            lv=liea[i];
            delay(100);
                P0=0xff;
        }
}
void liexuanj()
 {
      u8  i;
         for(i=0;i<8;i++)
         {
            HC595shuru(hang[i]);
            lde=liej[i];
            lv=liea[i];
            delay(100);
                P0=0xff;
        }
}
void liexuank()
 {
      u8  i;
         for(i=0;i<8;i++)
         {
            HC595shuru(hang[i]);
            lde=liek[i];
            lv=liea[i];
            delay(100);
                P0=0xff;
        }
}
void liexuanl()
 {
      u8  i;
         for(i=0;i<8;i++)
         {
            HC595shuru(hang[i]);
            lde=liel[i];
            lv=liea[i];
            delay(100);
                P0=0xff;
        }
}
void liexuanm()
 {
      u8  i;
         for(i=0;i<8;i++)
         {
            HC595shuru(hang[i]);
            lde=liem[i];
            lv=liea[i];
            delay(100);
                P0=0xff;
        }
}
void liexuann()
 {
      u8  i;
         for(i=0;i<8;i++)
         {
            HC595shuru(hang[i]);
            lde=lien[i];
            lv=liea[i];
            delay(100);
                P0=0xff;
        }
}
void liexuano()
 {
      u8  i;
         for(i=0;i<8;i++)
         {
            HC595shuru(hang[i]);
            lde=lieo[i];
            lv=liea[i];
            delay(100);
                P0=0xff;
        }
}
void liexuanp()
 {
      u8  i;
         for(i=0;i<8;i++)
         {
            HC595shuru(hang[i]);
            lde=liep[i];
            lv=liea[i];
            delay(100);
            P0=0xff;
        }
}
void liexuanQ()
 {
      u8  i;
         for(i=0;i<8;i++)
         {
            HC595shuru(hang[i]);
            lv=lieQ[i];
            delay(100);
            P1=0xff;
        }
}
void liexuanR()
 {
      u8  i;
         for(i=0;i<8;i++)
         {
            HC595shuru(hang[i]);
            lv=lieR[i];
            delay(100);
            P1=0xff;
        }
}
void liexuanS()
 {
      u8  i;
         for(i=0;i<8;i++)
         {
            HC595shuru(hang[i]);
            lv=lieS[i];
            delay(100);
            P1=0xff;
        }
}
void liexuanT()
 {
      u8  i;
         for(i=0;i<8;i++)
         {
            HC595shuru(hang[i]);
            lv=lieT[i];
            delay(100);
            P1=0xff;
        }
}
void liexuanU()
 {
      u8  i;
         for(i=0;i<8;i++)
         {
            HC595shuru(hang[i]);
            lv=lieU[i];
            delay(100);
            P1=0xff;
        }
}
void liexuanV()
 {
      u8  i;
         for(i=0;i<8;i++)
         {
            HC595shuru(hang[i]);
            lv=lieV[i];
            delay(100);
            P1=0xff;
        }
}
void liexuanW()
 {
      u8  i;
         for(i=0;i<8;i++)
         {
            HC595shuru(hang[i]);
            lv=lieW[i];
            delay(100);
            P1=0xff;
        }
}
void liexuanX()
 {
      u8  i;
         for(i=0;i<8;i++)
         {
            HC595shuru(hang[i]);
            lv=lieX[i];
            delay(100);
            P1=0xff;
        }
}
void liexuanY()
 {
      u8  i;
         for(i=0;i<8;i++)
         {
            HC595shuru(hang[i]);
            lv=lieY[i];
            delay(100);
            P1=0xff;
        }
}
void liexuanz()
 {
      u8  i;
         for(i=0;i<8;i++)
         {
            HC595shuru(hang[i]);
            lv=lieY[i];
            lde=liez[i];
            delay(100);
            P0=0xff;
            P1=0xff;
        }
}
void liexuanab()
 {
      u8  i;
         for(i=0;i<8;i++)
         {
            HC595shuru(hang[i]);
            lv=lieac[i];
            lde=lieab[i];
            delay(100);
            P0=0xff;
            P1=0xff;
        }
}
void liexuanar()
 {
      u8  i;
         for(i=0;i<8;i++)
         {
            HC595shuru(hang[i]);
            lv=lie[i];
            lde=liea[i];
            delay(100);
            P0=0xff;
            P1=0xff;
        }
}
void main()
{
   while(1)
   {
    u8 b;
     for(b=0;b<30;b++)
        {
        liexuanf();
        }
     for(b=0;b<30;b++)
        {
        liexuana();
        }
     for(b=0;b<30;b++)
        {
        liexuang();
        }
    for(b=0;b<30;b++)
        {
        liexuana();
        }
     for(b=0;b<30;b++)
        {
        liexuanh();
        }
    for(b=0;b<30;b++)
        {
        liexuana();
        }
    for(b=0;b<30;b++)
        {
        liexuani();
        }
    for(b=0;b<30;b++)
        {
        liexuana();
        }
    for(b=0;b<30;b++)
        {
        liexuanj();
        }
    for(b=0;b<30;b++)
        {
        liexuana();
        }
    for(b=0;b<30;b++)
        {
        liexuank();
        }
    for(b=0;b<30;b++)
        {
        liexuana();
        }
    for(b=0;b<30;b++)
        {
        liexuanl();
        }
    for(b=0;b<30;b++)
        {
        liexuana();
        }
    for(b=0;b<30;b++)
        {
        liexuanm();
        }
    for(b=0;b<30;b++)
        {
        liexuana();
        }
    for(b=0;b<30;b++)
        {
        liexuann();
        }
    for(b=0;b<30;b++)
        {
        liexuana();
        }
    for(b=0;b<30;b++)
        {
        liexuano();
        }
    for(b=0;b<30;b++)
        {
        liexuana();
        }
    for(b=0;b<30;b++)
        {
        liexuanp();
        }
    for(b=0;b<30;b++)
        {
        liexuana();
        }
     for(b=0;b<30;b++)
        {
        liexuan();
        }
     for(b=0;b<30;b++)
        {
        liexuane();
        }
     for(b=0;b<30;b++)
        {
        liexuan();
        }
     for(b=0;b<30;b++)
        {
        liexuane();
        }
     for(b=0;b<30;b++)
        {
        liexuan();
        }
     for(b=0;b<30;b++)
        {
        liexuane();
        }
     for(b=0;b<30;b++)
        {
        liexuan();
        }
     for(b=0;b<30;b++)
        {
        liexuane();
        }
     for(b=0;b<30;b++)
        {
        liexuan();
        }
      for(b=0;b<30;b++)
        {
        liexuanar();
        }
      for(b=0;b<30;b++)
        {
        liexuan();
        }
      for(b=0;b<30;b++)
        {
        liexuanar();
        }
      for(b=0;b<30;b++)
        {
        liexuan();
        }
      for(b=0;b<30;b++)
        {
        liexuanar();
        }
      for(b=0;b<30;b++)
        {
        liexuan();
        }
      for(b=0;b<30;b++)
        {
        liexuanar();
        }
      for(b=0;b<100;b++)
        {
        liexuanb();
        }
      for(b=0;b<30;b++)
        {
        liexuana();
        }
      for(b=0;b<100;b++)
        {
        liexuan();
        }
      for(b=0;b<30;b++)
        {
        liexuana();
        }
      for(b=0;b<100;b++)
        {
        liexuanc();
        }
      for(b=0;b<30;b++)
        {
        liexuana();
        }
//#########################################     流水
      for(b=0;b<20;b++)
        {
        liexuanQ();
        }
        for(b=0;b<20;b++)
        {
        liexuanR();
        }
        for(b=0;b<20;b++)
        {
        liexuanS();
        }
        for(b=0;b<20;b++)
        {
        liexuanT();
        }
        for(b=0;b<20;b++)
        {
        liexuanU();
        }
        for(b=0;b<20;b++)
        {
        liexuanV();
        }
        for(b=0;b<20;b++)
        {
        liexuanW();
        }
        for(b=0;b<20;b++)
        {
        liexuanX();
        }
        for(b=0;b<20;b++)
        {
        liexuanY();
        }
//######################################### 上下
      for(b=0;b<60;b++)
        {
        liexuanz();
        }
      for(b=0;b<30;b++)
        {
        liexuanab();
        }
      for(b=0;b<30;b++)
        {
        liexuanz();
        }
      for(b=0;b<30;b++)
        {
        liexuanab();
        }
      for(b=0;b<30;b++)
        {
        liexuanz();
        }
      for(b=0;b<30;b++)
        {
        liexuanab();
        }
        for(b=0;b<150;b++)
        {
        liexuanz();
        }
    }
}

效果展示

由于条件限制只展示一部分

参考资料

单片机8×8点阵显示简单汉字的程序_51单片机8*8点阵显示

单片机8×8点阵显示简单汉字的程序_单片机LED点阵的图形显示