led阵列数字显示设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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阵列的数字显示屏电路实例运行图

相关文档
最新文档