LED点阵0到9显示.docx
《LED点阵0到9显示.docx》由会员分享,可在线阅读,更多相关《LED点阵0到9显示.docx(10页珍藏版)》请在冰豆网上搜索。
LED点阵0到9显示
单片机c语言
<>欢迎进入51单片机学习网论坛讨论
本站新域名开通WWW.51C51.COM中国单片机编程技术普及推广第一站!
25. 点阵式LED“0-9”数字显示技术
1.实验任务
利用8X8点阵显示数字0到9的数字。
2.电路原理图
图4.25.1
3.硬件系统连线
(1). 把“单片机系统”区域中的P1端口用8芯排芯连接到“点阵模块”区域中的“DR1-DR8”端口上;
(2). 把“单片机系统”区域中的P3端口用8芯排芯连接到“点阵模块”区域中的“DC1-DC8”端口上;
4.程序设计内容
(1). 数字0-9点阵显示代码的形成
如下图所示,假设显示数字“0”
12345678
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
00003E4141413E00
因此,形成的列代码为00H,00H,3EH,41H,41H,3EH,00H,00H;只要把这些代码分别送到相应的列线上面,即可实现“0”的数字显示。
送显示代码过程如下所示
送第一列线代码到P3端口,同时置第一行线为“0”,其它行线为“1”,延时2ms左右,送第二列线代码到P3端口,同时置第二行线为“0”,其它行线为“1”,延时2ms左右,如此下去,直到送完最后一列代码,又从头开始送。
数字“1”代码建立如下图所示12345678
●
●
●
●
●
●
●
●
●
●
其显示代码为00H,00H,00H,00H,21H,7FH,01H,00H
数字“2”代码建立如下图所示
12345678
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
00H,00H,27H,45H,45H,45H,39H,00H
数字“3”代码建立如下图所示
12345678
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
00H,00H,22H,49H,49H,49H,36H,00H
数字“4”代码建立如下图所示
12345678
●
●
●
●
●
●
●
●
●
●
●
●
●
●
00H,00H,0CH,14H,24H,7FH,04H,00H
数字“5”代码建立如下图所示
12345678
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
00H,00H,72H,51H,51H,51H,4EH,00H
数字“6”代码建立如下图所示
12345678
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
00H,00H,3EH,49H,49H,49H,26H,00H
数字“7”代码建立如下图所示
12345678
●
●
●
●
●
●
●
●
●
●
●
00H,00H,40H,40H,40H,4FH,70H,00H
数字“8”代码建立如下图所示
12345678
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
00H,00H,36H,49H,49H,49H,36H,00H
数字“9”代码建立如下图所示
12345678
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
00H,00H,32H,49H,49H,49H,3EH,00H
5.汇编源程序
TIMEQU30H
CNTAEQU31H
CNTBEQU32H
ORG00H
LJMPSTART
ORG0BH
LJMPT0X
ORG30H
START:
MOVTIM,#00H
MOVCNTA,#00H
MOVCNTB,#00H
MOVTMOD,#01H
MOVTH0,#(65536-4000)/256
MOVTL0,#(65536-4000)MOD256
SETBTR0
SETBET0
SETBEA
SJMP$
T0X:
MOVTH0,#(65536-4000)/256
MOVTL0,#(65536-4000)MOD256
MOVDPTR,#TAB
MOVA,CNTA
MOVCA,@A+DPTR
MOVP3,A
MOVDPTR,#DIGIT
MOVA,CNTB
MOVB,#8
MULAB
ADDA,CNTA
MOVCA,@A+DPTR
MOVP1,A
INCCNTA
MOVA,CNTA
CJNEA,#8,NEXT
MOVCNTA,#00H
NEXT:
INCTIM
MOVA,TIM
CJNEA,#250,NEX
MOVTIM,#00H
INCCNTB
MOVA,CNTB
CJNEA,#10,NEX
MOVCNTB,#00H
NEX:
RETI
TAB:
DB0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,07FH
DIGIT:
DB00H,00H,3EH,41H,41H,41H,3EH,00H
DB00H,00H,00H,00H,21H,7FH,01H,00H
DB00H,00H,27H,45H,45H,45H,39H,00H
DB00H,00H,22H,49H,49H,49H,36H,00H
DB00H,00H,0CH,14H,24H,7FH,04H,00H
DB00H,00H,72H,51H,51H,51H,4EH,00H
DB00H,00H,3EH,49H,49H,49H,26H,00H
DB00H,00H,40H,40H,40H,4FH,70H,00H
DB00H,00H,36H,49H,49H,49H,36H,00H
DB00H,00H,32H,49H,49H,49H,3EH,00H
END
6.C语言源程序
#include
unsignedcharcodetab[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
unsignedcharcodedigittab[10][8]={{0x00,0x00,0x3e,0x41,0x41,0x41,0x3e,0x00},//0
{0x00,0x00,0x00,0x00,0x21,0x7f,0x01,0x00},//1
{0x00,0x00,0x27,0x45,0x45,0x45,0x39,0x00},//2
{0x00,0x00,0x22,0x49,0x49,0x49,0x36,0x00},//3
{0x00,0x00,0x0c,0x14,0x24,0x7f,0x04,0x00},//4
{0x00,0x00,0x72,0x51,0x51,0x51,0x4e,0x00},//5
{0x00,0x00,0x3e,0x49,0x49,0x49,0x26,0x00},//6
{0x00,0x00,0x40,0x40,0x40,0x4f,0x70,0x00},//7
{0x00,0x00,0x36,0x49,0x49,0x49,0x36,0x00},//8
{0x00,0x00,0x32,0x49,0x49,0x49,0x3e,0x00}//9
};
unsignedinttimecount;
unsignedcharcnta;
unsignedcharcntb;
voidmain(void)
{
TMOD=0x01;
TH0=(65536-3000)/256;
TL0=(65536-3000)%256;
TR0=1;
ET0=1;
EA=1;
while
(1)
{;
}
}
voidt0(void)interrupt1using0
{
TH0=(65536-3000)/256;
TL0=(65536-3000)%256;
P3=tab[cnta];
P1=digittab[cntb][cnta];
cnta++;
if(cnta==8)
{
cnta=0;
}
timecount++;
if(timecount==333)
{
timecount=0;
cntb++;
if(cntb==10)
{
cntb=0;
}
}
}