led阵列数字显示设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.要求:
①系统电路的设计:正确设计单片机控制电路及外围驱动电路,在一块8×8共阴极LED 阵列上显示数字。
②显示方式:LED阵列显示屏能正常显示数字并能进行0~9数字的循环显示。
2.总体方案
图1 LED阵列的数字显示屏设计原理框图
3. 8×8点阵原理图
图3 8×8点阵LED等效电路
4. 8×8点阵扫描方式
LED一般采用扫描式显示,实际运用分为三种方式
LED点阵一般采用扫描式显示,实际运用分为三种方式:
(1)点扫描
(2)行扫描
(3)列扫描
若使用第一种方式,其扫描频率必须大于16×64=1024Hz,周期小于1ms即可。
若使用第二和第三种方式,则频率必须大于16×8=128Hz,周期小于7.8ms即可符合视觉暂留要求。此外一次驱动一列或一行(8颗LED)时需外加驱动电路提高电流,否则LED 亮度会不足。
5. 8×8点阵工作原理:
点阵内部结构及外形如下,8X8点阵共由64个发光二极管组成,且每个发光二极管是放置在行线和列线的交叉点上,当对应的某一行置1电平,某一列置0电平,则相应的二极管就亮;如要将第一个点点亮,则9脚接高电平13脚接低电平,则第一个点就亮了;如果要将第一行点亮,则第9脚要接高电平,而(13、3、4、10、6、11、15、16)这些引脚接低电平,那么第一行就会点亮;如要将第一列点亮,则第13脚接低电平,而(9、14、8、12、1、7、2、5)接高电平,那么第一列就会点亮。
表1 8×8点阵控制表
送显示代码到P2端口,同时置第一行线为“0”,其他行线为“1”,延时2mS左右,送第二列线代码到P2端口,同时置第二行线为“0”,其他行线为“1”,延时2mS左右,如此下去,直到送完最后一列代码,又从头开始送。
如图(8)所示,假设显示数字“0”
1 2 3 4 5 6 7 8
图4 8×8点阵LED数字显示“0”
其显示代码为: C7H, BBH, BBH, BBH, BBH, BBH, BBH, C7H,只需将这些代码分别送到相应的列线上面,即实现“0”的数字显示。
如图(9)所示,假设显示数字“1”
1 2 3 4 5 6 7 8
图5 8×8点阵LED数字显示“1”
5. 程序
#include
unsigned char num=0;
void DelayMs(unsigned int Ms) //毫秒延时程序
{
unsigned int i, j;
for(i=Ms;i>0;i--)
{
for(j=110;j>0;j--);
}
}
//定时器0初始化
void InitTimer0(void) //定时器0初始化子程序
{
TMOD=0X01; //采用定时器0方式一
TL0=0XB0; //赋初值,定时时间50ms
TH0=0X3C;
EA=1; //开总中断
ET0=1; //允许定时器0中断
TR0=1; //开启定时器0
}
void main(void)
{
unsigned char i;
unsigned char table[10][8]={{0xc7,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xc7},//0
{0xef,0xe7,0xef,0xef,0xef,0xef,0xef,0xef},//1
{0xe3,0xdd,0xdd,0xdf,0xef,0xf7,0xfb,0x81},//2
{0xe3,0xdf,0xdf,0xdf,0xc3,0xdf,0xdf,0xe3},//3
{0xef,0xe7,0xeb,0xed,0x81,0xef,0xef,0xef},//4
{0x83,0xfb,0xfb,0xc3,0xbf,0xbf,0xbb,0xc7},//5
{0xc7,0xfb,0xfb,0xc3,0xbb,0xbb,0xbb,0xc7},//6
{0xc1,0xbf,0xbf,0xef,0xf7,0xf7,0xf7,0xf7},//7
{0xc3,0xbd,0xbd,0x81,0xbd,0xbd,0xbd,0xc3},//8
{0xc3,0xbd,0xbd,0xbd,0x83,0xbf,0xbd,0xc3}};//9 unsigned char tab[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//行扫描数据
InitTimer0(); //初始化定时器0
while(1)
{
for(i=0;i<8;i++) //循环扫描8行
{
P3=tab[i]; //P3口送行扫描数据
P2=table[num/20][i]; //P2口送对应的数字的8个数据
DelayMs(1); //延时1ms
}
}
}
void Timer0_isr(void) interrupt 1 using 1
{
TL0=0XB0; //重装初值
TH0=0X3C;
num++; //50ms计数一次
if(num==200) //到达十秒重新计数
{
num=0;
}
}
6.电路仿真图
图2 LED阵列的数字显示屏电路实例运行图