一个数码管是8个 LED 组成,同理,一个8×8的点阵就是由64个 LED 小灯组成。以灯珠亮灭来显示文字、图片、动画、视频等,是各部分组件都模块化的显示器件,通常由显示模块、控制系统及电源系统组成。
实物图如下:
点阵的接法有共阴和共阳两种
(共阳指的是对每一行LED来讲是共阳)共阴则相反。
如下图所示:
显示的方法有两种:
1、逐行扫描方式。以本实验为例:P2口输出行码决定哪一行能亮(相当于位码),P3口输出列码(行数据)决定行上哪些LED亮(相当于段码),能亮的行从左向右扫描完8列(相当于位码循环移位8次)即显示出一帧完整的图像。
2、逐列扫描方式,与逐行扫描调换,即P3口输出位码,P2口输出段码,扫描完8行显示出一帧图像。
#include //定义头文件
#define uchar unsigned char ; //宏定义
#define uint unsigned int;
sbit key0=P1^0; //设置按键
uchar num=0 ,flag=0;//全局变量
uchar code tab[]={
0x00,0x7E ,0xFF,0xC3,0xC3,0xFF,0x7E,0x00, //0
0x00,0x00,0x43,0xFF,0xFF,0x03,0x00,0x00, //1
0x00,0x63,0xC7,0xCF,0xDB,0xF3,0x63,0x00, //2
0x00,0x42,0xDB,0xDB,0xDB,0xFF,0x66,0x00, //3
0x00,0x3E,0x46,0xFF,0xFF,0x06,0x06,0x00, //4
0x00,0xF6,0xF7,0xD3,0xD3,0xDF,0xDE,0x00, //5
0x00,0x7E,0xFF,0xDB,0xDB,0xDF,0x4E,0x00, //6
0x00,0xC0,0xC0,0xC7,0xFF,0xF8,0xC0,0x00, //7
0x00,0xFF,0xFF,0xDB,0xDB,0xFF,0xFF,0x00, //8
0x00,0x72,0xFB,0xDB,0xDB,0xFF,0x7E,0x00, //9
}; // 列,段选
uchar row[]={
0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//行,位选
void key() //按键子函数
{
if(flag==0&&key0==0) //设置标志位flag初值为0,
{
flag=1; //当按键按下,就令标志位为1
}
if(flag==1&&key0==1) //按键弹起
{
num++;
flag=0; //恢复标志位为0;
}
if(num==10) //使10个数字逐个显示完后,num从新开始
{
num=0;
}
}
void TEMP() //逐个显示数字
{
int i=0;
for(i=8*num;i<8*(num+1);i++) //i=0,8,16...
{
P2=~row[i-8*num];
P3=tab[i];
}
}
void main() //主函数
{
while(1)
{
TEMP();
key();
}
}