单片机中LED点阵问题

来源:百度知道 编辑:UC知道 时间:2024/06/28 06:05:50
哪位大虾能帮我看一下这个程序,看完后,请告知小弟我这么几个问题:
1)其中的每个字块显示5次是什么意思?主要的是这里的“字块”是什么意思?
2)这个用来实现16*16点阵数码显示的,其中用4个8*8来构成;请大虾们解释一下他的具体扫描形式是怎样的,不胜感激!
#include <AT89X52.H>
#include <intrins.h> //要用到 _nop_()
#define uint unsigned int
#define uchar unsigned char

sbit E1 =P3^4; //74HC154(18)-E1 为0开列(col)输出 显示允许控制信号端口
sbit ST_CP =P3^2; //74HC595(12)-ST_CP 上升沿--移位寄存器的数据进入数据存储寄存器 输出锁存器的时钟信号端口
sbit MR =P3^3; //74HC595(10)-MR 为0将移位寄存器的数据清0

uchar code bmp[32*6]={ //字模表

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//" "
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x08,0x00,0x08,0xF8,0x0B,0x28,0x09,0x29,0x09,0x2E,0x09,0x2A,0x09,0xF8,0xFF,
0x28,0x09,0x2C,0x09,0x2B,0x09,0x2A,0x09,0xF8,0x0B,0x00,0x08,0x00,0x08,0x00,0x00,/*"单",2*/

0x00,0x80,0x00,0x40,0x00,0x30,0xFE,0x0F,0x10,0x01,0x10

横向取字模:【中】
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 //0x00 0x00
0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 //0x01 0x00
0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 //0x01 0x00
0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 //0x01 0x00
0 0 1 1 1 1 1 1 1 1 1 1 1 1 0 0 //0x3F 0xFC
0 0 1 0 0 0 0 1 0 0 0 0 0 1 0 0 //0x21 0x04
0 0 1 0 0 0 0 1 0 0 0 0 0 1 0 0 //0x21 0x04
0 0 1 0 0 0 0 1 0 0 0 0 0 1 0 0 //0x21 0x04
0 0 1 1 1 1 1 1 1 1 1 1 1 1 0 0 //0x3F 0xFC
0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 //0x01 0x00
0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 //0x01 0x00
0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 //0x01 0x00
0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 //0x01 0x00
0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 //0x01 0x00
0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 //0x01 0x00
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 //0x01 0x00
上面就是中文汉字【中】的取模方式,这里一个中文汉字用16*16个点来显示,所以要用到4块8*8点阵组合(单一的16*16点阵比较少),要用电路来显示这个汉子的时候,可以用静态显示和动态显示两种方法,静态显示就是每一个发光二极管用一根单独的线来控制亮灭,这里有16*16=256个LED,需要256个控制口,显然不现实!所以点阵显示一般都是用的动态显示法,即利用人