本帖最后由 wambob 于 2017-9-5 12:53 编辑
有些51单片机开发板上带有一个或几个8x8的LED点阵。如果全部使用IO口,需要占用8个IO。使用串入并出IC如74HC595可以节约IO。例如:
通过一行一行扫描,显示8列对应的数据。利用人眼的余晖效应可以看到整个8X8显示,同时为了保证图像的不闪,同一个8x8点整数据要重复50次。即电视或监视器的场频或帧频。
32x64的点阵图比8x8相对要复杂点,两个3-8译码器负责选通驱动上、下16行之一,74HC595级联负责驱动64列。一共使用了32个8x8点阵模块。
显示基本原理同8x8点阵。
32x64点阵接口:
A、B、C、D是由2个3-8译码器组成的4-16线输入端;
EN,译码器输出使能端;
R1、R2、G1、G2双色屏的上下半屏数据输入端;
SCR,74HC595时钟信号;
STR,74HC数据输出锁存。
实物及连接图:
显示上、下板屏的第一行:
代码
#include
sbit SEG_DLE =P2^6;
sbit SEG_WLE =P2^7;
sbit IA =P0^0; //行控制线A
sbit IB =P0^1; //行控制线B
sbit IC =P0^2; //行控制线C
sbit ID =P0^3; //行控制线D
sbit STR=P0^5; //锁存
sbit SCK=P0^4; //时钟
sbit R1= P0^6; //上半屏数据
//sbit En= P0^4; EN=1;
sbit R2= P0^7; //下半屏数据
#define scan0 {IA=0;IB=0;IC=0;ID=0;}
#define scan1 {IA=1;IB=0;IC=0;ID=0;}
#define scan2 {IA=0;IB=1;IC=0;ID=0;}
#define scan3 {IA=1;IB=1;IC=0;ID=0;}
#define scan4 {IA=0;IB=0;IC=1;ID=0;}
#define scan5 {IA=1;IB=0;IC=1;ID=0;}
#define scan6 {IA=0;IB=1;IC=1;ID=0;}
#define scan7 {IA=1;IB=1;IC=1;ID=0;}
#define scan8 {IA=0;IB=0;IC=0;ID=1;}
#define scan9 {IA=1;IB=0;IC=0;ID=1;}
#define scan10 {IA=0;IB=1;IC=0;ID=1;}
#define scan11 {IA=1;IB=1;IC=0;ID=1;}
#define scan12 {IA=0;IB=0;IC=1;ID=1;}
#define scan13 {IA=1;IB=0;IC=1;ID=1;}
#define scan14 {IA=0;IB=1;IC=1;ID=1;}
#define scan15 {IA=1;IB=1;IC=1;ID=1;}
void HScan(unsigned char Value)
{switch(Value)
{case 15: scan0;break;
case 0: scan1;break;
case 1: scan2;break;
case 2: scan3;break;
case 3: scan4;break;
case 4: scan5;break;
case 5: scan6;break;
case 6: scan7;break;
case 7: scan8;break;
case 8: scan9;break;
case 9:scan10;break;
case 10:scan11;break;
case 11:scan12;break;
case 12:scan13;break;
case 13:scan14;break;
case 14:scan15;break;
default:break;
}
}
void delayms(unsigned int xms)
{
unsigned int i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void send_R1(unsigned char *d)//发送数据
{ unsigned char i,TEMP;
TEMP=*d;
for(i=0;i<8;i++)
{
if((TEMP<);
send_R2(&displayH);
}
STR=1;
HScan(15);
delayms(10) ;
}
}
本帖最后由 wambob 于 2017-9-5 12:53 编辑
有些51单片机开发板上带有一个或几个8x8的LED点阵。如果全部使用IO口,需要占用8个IO。使用串入并出IC如74HC595可以节约IO。例如:
通过一行一行扫描,显示8列对应的数据。利用人眼的余晖效应可以看到整个8X8显示,同时为了保证图像的不闪,同一个8x8点整数据要重复50次。即电视或监视器的场频或帧频。
32x64的点阵图比8x8相对要复杂点,两个3-8译码器负责选通驱动上、下16行之一,74HC595级联负责驱动64列。一共使用了32个8x8点阵模块。
显示基本原理同8x8点阵。
32x64点阵接口:
A、B、C、D是由2个3-8译码器组成的4-16线输入端;
EN,译码器输出使能端;
R1、R2、G1、G2双色屏的上下半屏数据输入端;
SCR,74HC595时钟信号;
STR,74HC数据输出锁存。
实物及连接图:
显示上、下板屏的第一行:
代码
#include
sbit SEG_DLE =P2^6;
sbit SEG_WLE =P2^7;
sbit IA =P0^0; //行控制线A
sbit IB =P0^1; //行控制线B
sbit IC =P0^2; //行控制线C
sbit ID =P0^3; //行控制线D
sbit STR=P0^5; //锁存
sbit SCK=P0^4; //时钟
sbit R1= P0^6; //上半屏数据
//sbit En= P0^4; EN=1;
sbit R2= P0^7; //下半屏数据
#define scan0 {IA=0;IB=0;IC=0;ID=0;}
#define scan1 {IA=1;IB=0;IC=0;ID=0;}
#define scan2 {IA=0;IB=1;IC=0;ID=0;}
#define scan3 {IA=1;IB=1;IC=0;ID=0;}
#define scan4 {IA=0;IB=0;IC=1;ID=0;}
#define scan5 {IA=1;IB=0;IC=1;ID=0;}
#define scan6 {IA=0;IB=1;IC=1;ID=0;}
#define scan7 {IA=1;IB=1;IC=1;ID=0;}
#define scan8 {IA=0;IB=0;IC=0;ID=1;}
#define scan9 {IA=1;IB=0;IC=0;ID=1;}
#define scan10 {IA=0;IB=1;IC=0;ID=1;}
#define scan11 {IA=1;IB=1;IC=0;ID=1;}
#define scan12 {IA=0;IB=0;IC=1;ID=1;}
#define scan13 {IA=1;IB=0;IC=1;ID=1;}
#define scan14 {IA=0;IB=1;IC=1;ID=1;}
#define scan15 {IA=1;IB=1;IC=1;ID=1;}
void HScan(unsigned char Value)
{switch(Value)
{case 15: scan0;break;
case 0: scan1;break;
case 1: scan2;break;
case 2: scan3;break;
case 3: scan4;break;
case 4: scan5;break;
case 5: scan6;break;
case 6: scan7;break;
case 7: scan8;break;
case 8: scan9;break;
case 9:scan10;break;
case 10:scan11;break;
case 11:scan12;break;
case 12:scan13;break;
case 13:scan14;break;
case 14:scan15;break;
default:break;
}
}
void delayms(unsigned int xms)
{
unsigned int i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void send_R1(unsigned char *d)//发送数据
{ unsigned char i,TEMP;
TEMP=*d;
for(i=0;i<8;i++)
{
if((TEMP<);
send_R2(&displayH);
}
STR=1;
HScan(15);
delayms(10) ;
}
}