8*8点阵屏
8*8点阵屏是一种LED显示屏,它由8行和8列的LED灯组成。每个LED灯的开闭状态都可以独立控制,从而可以显示出数字、字母、符号、图形等信息。
8*8点阵屏的原理是通过行列扫描的方式,控制LED灯的亮灭,从而显示出所需的图案或信息。通过逐行逐列地控制LED的亮灭,就可以在屏幕上显示出任意的数字、字母和图形。
这种点阵屏通常被广泛应用于电子钟表、计时器、温度计、电子游戏等产品中,因为它可以以较小的尺寸显示出丰富的信息,而且功耗较低、制作成本相对较低。
点阵屏理论介绍
8*8点阵屏电路图
如何赋值点亮led灯:要使用动态扫描的方式点亮led灯防止出现同时点亮的情况
74HC595芯片的工作原理
8*8点阵屏原理图
74HC595芯片使用说明
eg1:点阵屏编程实战:点亮第一个点阵
#include <REGX52.H>
sbit DIO = P3^4; // 串行数据口
sbit S_CLK = P3^5; //移位寄存器时钟
sbit R_CLK = P3^6; // 输出锁存器时钟
void main(){
// ROW : 0x80 ,COL : 0xfe 通过传入和并出的方式将数据发送出去
unsigned char i,dat;
dat = 0xfe;
for(i = 0; i<8;i++){
S_CLK = 0;
R_CLK = 0;
if(dat & 0x01){
DIO = 1;
}else{
DIO = 0;
}
S_CLK = 1;
dat >>= 1;
}
dat = 0x80;
for(i = 0; i<8;i++){
S_CLK = 0;
R_CLK = 0;
if(dat & 0x01){
DIO = 1;
}else{
DIO = 0;
}
S_CLK = 1;
dat >>= 1;
}
R_CLK = 1;
while(1);
}
eg2:点阵屏实战:显示汉字-->电 字符
#include <REGX52.H>
#include <INTRINS.H>
sbit DIO = P3^4; // 串行数据口
sbit S_CLK = P3^5; //移位寄存器时钟
sbit R_CLK = P3^6; // 输出锁存器时钟
/*
取模软件生成的自形码:0xef 0x01 0x6d 0x01 0x6d 0x01 0xee 0xe0 --> 电
*/
unsigned char code table[] = {
0xe0, 0xee, 0x01, 0x6d, 0x01, 0x6d, 0x01, 0xef
};
void Send_Byte(unsigned char dat){
unsigned char i;
S_CLK = 0;
R_CLK = 0;
for(i = 0; i<8;i++){
if(dat & 0x01){
DIO = 1;
}else{
DIO = 0;
}
S_CLK = 1;
dat >>= 1;
S_CLK = 0;
}
}
void main(){
// ROW : 0x80 ,COL : 0xfe 通过传入和并出的方式将数据发送出去
unsigned char j,ROW;
while(1){
ROW = 0X80;
for(j = 0; j < 8; j++){
Send_Byte(table[j]);
Send_Byte(ROW);
R_CLK = 1;
ROW = _cror_(ROW,1); // 循环右移动
R_CLK = 0;
}
}
}
eg3:使用点阵屏显示电子两个字
#include <REGX52.H>
#include <INTRINS.H>
sbit DIO = P3^4; // 串行数据口
sbit S_CLK = P3^5; //移位寄存器时钟
sbit R_CLK = P3^6; // 输出锁存器时钟
/*
取模软件生成的自形码:0xef 0x01 0x6d 0x01 0x6d 0x01 0xee 0xe0 --> 电
*/
unsigned char code table[2][8] = {
0xe0, 0xee, 0x01, 0x6d, 0x01, 0x6d, 0x01, 0xef,
0xe7, 0xe7, 0xe7, 0xe7, 0x80, 0xf7, 0xfb, 0xc3
};
void Send_Byte(unsigned char dat){
unsigned char i;
S_CLK = 0;
R_CLK = 0;
for(i = 0; i<8;i++){
if(dat & 0x01){
DIO = 1;
}else{
DIO = 0;
}
S_CLK = 1;
dat >>= 1;
S_CLK = 0;
}
}
void main(){
// ROW : 0x80 ,COL : 0xfe 通过传入和并出的方式将数据发送出去
unsigned char j,k,ROW;
unsigned int z;
while(1){
for(k=0;k<2;k++){
for(z = 0; z <1000; z++){
ROW = 0X80;
for(j = 0; j < 8; j++){
Send_Byte(table[k][j]);
Send_Byte(ROW);
R_CLK = 1;
ROW = _cror_(ROW,1); // 循环右移动
R_CLK = 0;
}
}
}
}
}