用51单片机驱动8*8点阵 的代码

如题所述

8X8点阵LED工作原理说明 :8X8点阵共需要64个发光二极管组成,且每个发光二极管是放置在行线和列线的交叉点上,当对应的某一列置1电平,某一行置0电平,则相应的二极管就亮。
不知道你要实现什么样的显示,不过基本方法是一样的。我这有一个现成的8*8的程序,你可以根据这个去修改:
在8X8点阵LED上显示柱形,让其先从左到右平滑移动三次,其次从右到左平滑移动三次,再次从上到下平滑移动三次,最后从下到上平滑移动三次,如此循环下去。(要实现一根柱形的亮法:一根竖柱,对应的列置1,而行则采用扫描的方法来实现。 一根横柱,对应的行置0,而列则采用扫描的方法来实现。)

汇编源程序:
ORG 00H
START: NOP
MOV R3,#3
LOP2: MOV R4,#8
MOV R2,#0
LOP1: MOV P1,#0FFH
MOV DPTR,#TABA
MOV A,R2
MOVC A,@A+DPTR
MOV P3,AINC R2
LCALL DELAY
DJNZ R4,LOP1
DJNZ R3,LOP2
MOV R3,#3
LOP4: MOV R4,#8
MOV R2,#7
LOP3: MOV P1,#0FFH
MOV DPTR,#TABA
MOV A,R2
MOVC A,@A+DPTR
MOV P3,A
DEC R2
LCALL DELAY
DJNZ R4,LOP3
DJNZ R3,LOP4
MOV R3,#3
LOP6: MOV R4,#8
MOV R2,#0
LOP5: MOV P3,#00H
MOV DPTR,#TABB
MOV A,R2
MOVC A,@A+DPTR
MOV P1,A
INC R2
LCALL DELAY
DJNZ R4,LOP5
DJNZ R3,LOP6
MOV R3,#3
LOP8: MOV R4,#8
MOV R2,#7
LOP7: MOV P3,#00H
MOV DPTR,#TABB
MOV A,R2
MOVC A,@A+DPTR
MOV P1,A
DEC R2
LCALL DELAY
DJNZ R4,LOP7
DJNZ R3,LOP8
LJMP START
DELAY: MOV R5,#10
D2: MOV R6,#20
D1: MOV R7,#248
DJNZ R7,$
DJNZ R6,D1
DJNZ R5,D2
RET
TABA: DB 0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,07FH
TABB: DB 01H,02H,04H,08H,10H,20H,40H,80H
END

C51语言源程序
#include <AT89X52.H>
unsigned CHAR code taba[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
unsigned CHAR code tabb[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
void DELAY(void) { unsigned CHAR i,j; for(i=10;i>0;i--) for(j=248;j>0;j--); }
void DELAY1(void) { unsigned CHAR i,j,k; for(k=10;k>0;k--) for(i=20;i>0;i--) for(j=248;j>0;j--); }
void main(void)
{ unsigned CHAR i,j;
while(1)
{ for(j=0;j<3;j++) //FROM left to right 3 time
{ for(i=0;i<8;i++){ P3=taba[i]; P1=0xff; DELAY1();} }
for(j=0;j<3;j++) //FROM right to left 3 time
{ for(i=0;i<8;i++) { P3=taba[7-i]; P1=0xff; DELAY1();}}
for(j=0;j<3;j++) //FROM top to bottom 3 time
{ for(i=0;i<8;i++) { P3=0x00; P1=tabb[7-i]; DELAY1();}}
for(j=0;j<3;j++) //FROM bottom to top 3 time
{ for(i=0;i<8;i++) { P3=0x00; P1=tabb[i]; DELAY1();}}
}
}
温馨提示:内容为网友见解,仅供参考
无其他回答

用51单片机驱动8*8点阵 的代码
{ for(i=0;i<8;i++) { P3=0x00; P1=tabb[7-i]; DELAY1();}} for(j=0;j<3;j++) \/\/FROM bottom to top 3 time

求个高手写个单片机控制8*8点阵的代码
define uchar unsigned char uchar b[8]= {0x10,0xFE,0x92,0x92,0xFE,0x92,0x10,0x10}; \/\/字模 \/***延时***\/ void Delayms(unsigned int n){ unsigned int i,j;for(j=n;j>0;j--)for(i=112;i>0;i--);} \/***\/ void main (void){ while(1) \/\/无限循环以下程序...

用51单片机以及8*8点阵显示英文字母或者数字(最好是全部数字和字母都说...
unsigned char code b[]={0x00,0x7F,0x40,0x40,0x40,0x00,0x00,0x00};\/*"L",0*\/ void main(void){ unsigned char i;while (1) \/\/如果没有while循环,将出现闪烁现象 { for(i=0;i<8;i++){ Ser_IN(a[i]);\/\/8X8点阵列扫描 Ser_IN(b[i]);\/\/8X8点阵行扫描 Par_OUT();\/...

求51单片机 4*4矩阵键盘 控制8*8点阵 显示 的语音 程序。
{ for(i=0;i<8;i++){ P0=0;P2=tabP2[i];P0=tabP0[i];Delay_1ms(2);} } }

51单片机 8*8点阵26个英文字母怎么样显示 ?要从上到下的编码
include<reg51.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned int\/\/---uchar code Table_of_Digits[40][8]={{0x1C,0x22,0x22,0x22,0x22,0x22,0x22,0x1C},\/\/0 {0x08,0x18,0x08,0x08,0x08,0x08,0x08,0x1C},\/\/1 {0x1C,0x22,0x02,0x02,0x...

51单片机 8*8点阵 LED灯全灭 没有效果
你加个延时程序在P3=0xFF下面,不然你刚全灭了,就跳到P3=tab[cnta];在一个时钟周期内,肉眼是看不到的,要延时几秒吧

51单片机 8*8点阵26个英文字母怎么样显示
unsigned char code Dispay[40][8]={{0x1C,0x22,0x22,0x22,0x22,0x22,0x22,0x1C},\/\/0 {0x08,0x18,0x08,0x08,0x08,0x08,0x08,0x1C},\/\/1 {0x1C,0x22,0x02,0x02,0x1C,0x20,0x20,0x3E},\/\/2 {0x1C,0x22,0x02,0x1C,0x02,0x02,0x22,0x1C},\/\/3 {0x08,0x18,...

基于AT89C51电梯滚动8*8点阵显示设计,从1楼至5楼应该是从下往上滚动...
写数据 pc=zi[i+1+b];if(i<16) \/\/逐行送数据 { pa=temp;temp=_crol_(temp,1);delay(1);} else { P1=temp;temp=_crol_(temp,1);delay(1);} } } } 这是一个事件驱动的编程语言,通过集成开发环境打包。它从 BASIC 继承了很多特性。它的图形化开发特性使初学者学习起来非常容易。

51单片机中,点阵8X8点阵取字模软件有 阴码、阳码、逐列式、逐行式、逆 ...
8X8点阵 分为行和列,当以低电平进行行扫描,那么列所送的就是阳码,相反就是阴码。。。如:阳码::第一个20Us内给第一行送低电平0,给列八位送待显示的高电平,第二个20Us内给第二行送低电平0,给列八位送待显示的高电平,如此进行八次,,刚好扫完一个屏幕,用时不到1Ms人眼是无法分辨...

89c52单片机,点阵8*8 这样驱动妥不妥,哪还不很妥,求大神
P1口供电不行啊,要加上驱动电路的,朋友!否则电流不够,亮度会很低的。

相似回答