点阵控制卡原理图
- 格式:pdf
- 大小:101.21 KB
- 文档页数:1
16×16LED点阵屏原理图及驱动程序这是我玩LED点阵屏的第一块电路板,也是学习单片机入门的第一个实验器材。
它由4片30mm×30mm的8×8红色高亮点阵模块与两片74HC595、两片74HC138、16只8550晶体管、一片74HC244集装在一块宽高65mm×210mm的双面PCB板上,它应该是一组级联安装的LED 屏的一个单元模块,拿到它时,我正在学习《无线电》杂志2007/11期刊上杜洋的一组文章,刚刚做好了ISP下载线,只做了“一个发光二极管的控制实验”,面对这个既好玩又陌生的玩意,真是无从下手,通过上网学习,解析研究,前后弄了两个多月,最后在《无线电》杂志2005/12期的配文程序的帮助下,终于踏进了点阵控制的门槛,两年过去了,我又玩了许多单片机控制器件,但这块屏却一直摆在我的桌案上,每当遇到难题时,看看它那稳定清晰的显示,我都能找到许多灵感;最近、在摆弄一块并行驱动的16×64点阵屏时(前几篇文章介绍了)时,因为用的还是这段程序,就又想起了它,虽然程序已经详解过了,但是,为了留记一段经历、一段回忆,决定还是“貂续狗尾”写在这里,留着自己欣赏吧。
一.原理图:二.汉字左右移动驱动程序/****************************************************************************** ********16×16LED点阵屏原理图及C源汉字左右移动显示驱动程序————wannenggong单片机:AT89S52引脚说明:P0.0/P0.1/P0.2/P0.3控制由两片74HC138组成的行驱动控制4-16译码器的A/B/C/D端P1.0/P1.1控制列驱动控制74HC595的OE/ST端,595的14脚(DS)经244连接RXD,595的12脚(SH)经244连接TXD。
16×16点阵显示屏成功点亮!!看到江同学的3216屏(),对于我来说,稍显复杂,所以决定做个1616的屏看看效果,原理图就是以下了,注意做1616时,要去掉一个74LS154(当然这里也能换用74HC154,虽然功耗大,但价格较低),经过两天的奋斗,终于完工了。
简单的调试后,点亮了!!编个流动显示的程序,哈哈,很炫啊。
心动不如赶快行动啊!!我是把点阵块焊到一块板子上,可方便检查有无虚焊,控制部分放到了另一张板上,做成的实物图就是下面的了,视频在这里:(注:以下原理图均来自)/********************************************************* 程序名称:LED1616点阵流动显示汉字简要说明:最大可显示16*16汉字P0口接上行线,P2口接下行线,P3口接扫描线编写:改编: springvirus*********************************************************/#include <>#define hang1 P0 //上行线#define hang2 P2 //下行线#define lie P1 //列线#define sum sizeof(hanzi)/32 //自动计算汉字字数/*****参数设置*****/#define ziti 16 //字体大小(宽度)#define light 50 //显示亮度#define move_speed 50 //移动速度unsigned char code hanzi[]={/*-- 文字: 自 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x00,0x00,0xF8,0x48,0x48,0x4C,0x4B,0x4A,0x48,0x48,0x48,0xF8,0x00,0x00,0x00 ,0x00,0x00,0x00,0xFF,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0xFF,0x00,0x00,0x00 ,/*-- 文字: 制 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x50,0x4F,0x4A,0x48,0xFF,0x48,0x48,0x48,0x00,0xFC,0x00,0x00,0xFF,0x00,0x00 ,0x00,0x00,0x3F,0x01,0x01,0xFF,0x21,0x61,0x3F,0x00,0x0F,0x40,0x80,0x7F,0x00,0x00 ,/*-- 文字: 小 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x00,0x00,0xC0,0x70,0x20,0x00,0xFF,0x00,0x10,0x20,0xC0,0x80,0x00,0x00,0x00 ,0x04,0x02,0x01,0x00,0x00,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x01,0x07,0x02,0x00 ,/*-- 文字: 型 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x10,0x12,0x92,0x7E,0x12,0x12,0xFE,0x12,0x12,0x10,0xFC,0x00,0x00,0xFF,0x00,0x00 ,0x40,0x42,0x49,0x48,0x48,0x48,0x49,0x7E,0x48,0x48,0x48,0x4A,0x4C,0x4B,0x40,0x00 ,/*-- 文字: 点 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x00,0x00,0xE0,0x20,0x20,0x20,0x3F,0x24,0x24,0x24,0xF4,0x24,0x00,0x00,0x00 ,0x00,0x40,0x30,0x07,0x12,0x62,0x02,0x0A,0x12,0x62,0x02,0x0F,0x10,0x60,0x00,0x00 ,/*-- 文字: 阵 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0xFE,0x02,0x12,0x2A,0xC6,0x88,0xC8,0xB8,0x8F,0xE8,0x88,0x88,0x88,0x88,0x00,0x00 ,0xFF,0x00,0x02,0x04,0x03,0x04,0x04,0x04,0x04,0xFF,0x04,0x04,0x04,0x04,0x04,0x00 ,/*-- 文字: 显 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x00,0x00,0x3E,0x2A,0xEA,0x2A,0x2A,0x2A,0xEA,0x2A,0x3E,0x00,0x00,0x00,0x00 ,0x20,0x21,0x22,0x2C,0x20,0x3F,0x20,0x20,0x20,0x3F,0x28,0x24,0x23,0x20,0x20,0x00 ,/*-- 文字: 示 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x20,0x20,0x22,0x22,0x22,0x22,0xE2,0x22,0x22,0x22,0x22,0x22,0x20,0x20,0x00 ,0x10,0x08,0x04,0x03,0x00,0x40,0x80,0x7F,0x00,0x00,0x01,0x02,0x0C,0x18,0x00,0x00 ,/*-- 文字: 系 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x00,0x02,0x22,0xB2,0xAA,0x66,0x62,0x22,0x11,0x4D,0x81,0x01,0x01,0x00,0x00 ,0x00,0x40,0x21,0x13,0x09,0x05,0x41,0x81,0x7F,0x01,0x05,0x09,0x13,0x62,0x00,0x00 ,/*-- 文字: 统 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x20,0x30,0x2C,0xA3,0x60,0x10,0x84,0xC4,0xA4,0x9D,0x86,0x84,0xA4,0xC4,0x84,0x00 ,0x20,0x22,0x23,0x12,0x12,0x92,0x40,0x30,0x0F,0x00,0x00,0x3F,0x40,0x41,0x70,0x00 ,/*****空白,用于区分显示内容的头和尾*****/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};uint k=0,j; //移位变量,k:移位个数uint a=0; //用于软件延时ulong s=(sum+1)*ziti; //s为全部列数uchar disbuf[16][2]; //定义显示缓冲区(16行两列的二维数组以开辟1个16*16汉字的空间)bit move_st; //移动标志/*****可变延时*****/void delay(void){uchar i;for(i=0;i<light;i++);}/*****初始化子程序*****/void init(void){TMOD=0x1;TH0=0xfc;TL0=0x18;}/*****计数器中断程序*****/void timer0(void) interrupt 1 //中断处理{TH0=0xfc;TL0=0x18;a++;}/*****汉字循环显示*****/void run_move(void){uchar k1,k2;if(a>=move_speed) //move_speed控制移动速度{if(k>s-ziti-1)k=0; //整屏移动列数k1=k/ziti;k2=k%ziti;j=ziti*2*k1+k2; //显示指针k++;move_st=1;a=0;}}/*****装载显示数据至缓冲区*****/void load_hanzi(void){uchar i;run_move();if(move_st){for(i=0;i<15;i++){disbuf[i][0]=disbuf[i+1][0];//移位处理 disbuf[i][1]=disbuf[i+1][1];//移位处理 }disbuf[15][0]=hanzi[j];disbuf[15][1]=(hanzi[ziti+j]);move_st=0;}}/*****扫描显示数据缓冲区的内容*****/void display(void){uchar i;for (i=0;i<16;i++){lie=i;hang1=disbuf[i][0]; hang2=disbuf[i][1]; delay();hang1=0;hang2=0;}}/*****主程序*****/ void main (void){ init();EA=1; //开中断TR0=1; ET0=1;while(1){ load_hanzi();display(); }}。
针对我们在用的单元板,简要做个控制说明常用的是08接口的LED显示板,这种板子原理相对简单,数据走线也很直观,所以就以此现实板来举例。
1,单元板输入08接口的接口定义:接口解释:ABCD是4个行选信号,实际上是用4个二进制位计数来实现的。
A为最低位,D为最高位,从0记录到15,板子上的2个138组成一个4-16译码器,会自动选通第0行和第15行。
R0、R1、G0、G1分别是红色和绿色595的数据,SCK和LT分别是595的时钟和锁存,OE是整个单元板的显示时能,OE为0时单元板暗亮,为1时高亮。
OE是为了适应不同厂家的单元板信号的。
08接口单元板工作原理简介:一个单元板的宽和高的点数是64*32点,分上下两个半屏,两个半屏共用时钟、锁存和OE,R0、G0是上半屏数据,R1、G1是下半屏数据。
从单元板的显示面看,数据是从右侧向左输入,一行是64个点,也就是通过8个595控制,因为是双色,每个半屏是两行595,整个屏是4行595。
以一个单元板为例介绍控制卡工作顺序:把显示缓冲里的第一行红色数据送往R0、第一行绿色数据送往G0;显缓的第8行红色数据送往R1、第8行绿色数据送往G1,每行是8个数据——>关闭OE使能——>行选选中第0行、LT锁存——>开启OE使能,数据显示。
间隔一定时间3-5ms,重复以上循环,行选第1行,送第1行和第9行数据...间隔一定时间3-5ms,重复以上循环,行选第2行,送第2行和第10行数据...以此类推附加资料:仅作了解之用。
8×8 点阵LED的工作原理8×8 点阵LED的工作原理。
图(1)为8×8点阵LED外观及引脚图,其等效电路如图(2)所示,只要其对应的X、Y轴顺向偏压,即可使LED发亮。
例如如果想使左上角LED点亮,则Y0=1,X0=0即可。
图(1)8×8点阵LED外观及引脚图图(2)8×8点阵LED等效电路图(3)8×8点阵LED电路原理点阵LED扫描法介绍点阵LED一般采用扫描式显示,实际运用分为三种方式:(1) 行扫描;(2) 列扫描。
LED 16*16点阵板使用说明 V1.01.板子的组成 4 个大小为32mm*32mm 的8*8 共阳点阵组成16*16 点阵,点阵屏可拆装,采用圆孔铜排针,连接性能非常好。
驱动部份使用两个移位带存储器的74HC595 和两个移位寄存器74HC164 组成,74HC595 负责列扫描数据,74HC164 负责行扫描数据。
列扫描采用三极管放大电流,加大扫描强度,提高点阵屏亮度。
数据接口采用可并接方式,有输入和输出,方便并接多个单板,组成32*16、48*16、64*16等点阵。
2.关于点阵屏。
颜色有单色屏、双色屏和三基色屏,三基色屏是组成彩色屏的最小元素。
LED 点阵有4*4、4*8、5*7、5*8、8*8、16*16、24*24、40*40 等多种,很多大屏幕都是由8*8 来组成的,比如256*128 像素的一块大屏幕,由每行32 个共16 行即512 个8*8 点阵组成。
本板也使用 4 个8*8 来组成16*16 点阵屏,多块合并可组成32*16、48*16,64*16 等。
点阵屏分为共阳和共阴两种,本板使用共阳型,如下图:3. 电路板上主要ICA)74HC595:硅结构的CMOS 集成电路,兼容低电压TTL 电路。
如图:74HC595 是具有8 位移位寄存器和一个存储器,三态输出功能。
移位寄存器和存储器是分别的时钟。
数据在SCHcp 的上升沿输入,在STcp 的上升沿进入存储寄存器。
如果两个时钟连在一起,则移位寄存器总是比存储寄存器早一个脉冲,电路中,将两个时钟分开控制,目的是先移好位,再存储数据,这样在移位的过程中,可保持输出的数据。
移位寄存器有一个串行移位输入(Ds),和一个串行输出(Q7’),电路将其接入下一个IC 的输入(Ds)组成16 位移位存储。
一个异步的低电平复位/MR,电路中不使用复位信号,将此脚直接接入电源VCC)。
存储寄存器有一个并行8 位的,具备三态的总线输出,当使能OE 时(为低电平),存储寄存器的数据输出到总线,电路中直接将此脚接GND,做直接输出。
8X8点阵原理及驱动8X8点阵的实际外观图如下:一共64个发光点构成,上下两排引脚,每排8个,一共16个点阵侧面有文字的那面对准自己,8X8点阵的显示原理:8X8点阵共由64个发光二极管组成,且每个发光二极管是放置在行线和列线的交叉点上,当对应的某一行置1电平,某一列置0电平,则相应的二极管就亮;如要将第一个点点亮,则1脚接高电平a脚接低电平,则第一个点就亮了;如果要将第一行点亮,则第1脚要接高电平,而(a、b、c、d、e、f、g、h)这些引脚接低电平,那么第一行就会点亮;如要将第一列点亮,则第a脚接低电平,而(1、2、3、4、5、6、7、8)接高电平,那么第一列就会点亮.8*8点阵实际的引脚(图一)的不是一排阳极,一排阴极,(就像键盘一样不是abcd按顺序排的)所以焊接有点麻烦,8×8LED点阵引脚图如下:1,2,3,4,5,6,7,8是行(阳极)a,b,c,d,e,f,g,h是列(阴极)//此处说的都是行阳型8*8点阵,行阴的略外面的1~16就是实际的管脚,见图一移位锁存器74H C595原理74H C595是一个串入并出的芯片,通过一个f o r(i=0;i<8;i++)来存储数据。
具体来说就是第一个时钟信号来到时低位的数据向高位挪动一位,在这个程序中是S H_C P信号,当S H_C P是一个上跳沿时,传入的形参D a t a与0x80相与,得到的数为1,则通过D S引脚向595输入1,否输入0,并存储在74H C595的相应位置(最低位即Q0那)上,D S内部也自动左移一位数据然后d a t向左移一位,使次高位变为最高位与0x80相与,并存储。
通过8次后,就可以得到数据,并存储在Q0~Q7中了,这时S T_C P一个上跳沿,数据即送出去了.与8*8L E D连接如下:显示0~59C语言代码:#i n c l u d e<A T89X52.h>#d e f i n e u c h a r u n s i g n e d c h a r#d e f i n e u i n t u n s i g n e d i n tv o i d S e r_I N(u c h a r D a t a){u c h a r i;f o r(i=0;i<8;i++){S H_C P=0;//先置为低D S=D a t a&0x80;//取数据的最高位D a t a<<=1;//讲数据的次高位移到最高位,为下一次取数据做准备S H_C P=1;//再置为高,产生移位时钟上升沿,储存器里的数据移位,数据输入}}v o i d P a r_O U T(v o i d){S T_C P=0;//先置为低S T_C P=1;//再置为高,产生时钟上升沿,上升沿时,数据并行输出}uchar codetab[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //列uchar code tabdigit[60][8]={ //字模取模方向阴码逆向逐列式{0x00,0x3E,0x41,0x41,0x3E,0x00,0x00,0x00}, {0x00,0x42,0x7F,0x40,0x00,0x00,0x00,0x00}, {0x00,0x62,0x51,0x49,0x46,0x00,0x00,0x00}, {0x00,0x22,0x49,0x49,0x36,0x00,0x00,0x00}, {0x00,0x38,0x26,0x7F,0x20,0x00,0x00,0x00}, {0x00,0x4F,0x49,0x49,0x31,0x00,0x00,0x00}, {0x00,0x3E,0x49,0x49,0x32,0x00,0x00,0x00}, {0x00,0x03,0x71,0x09,0x07,0x00,0x00,0x00}, {0x00,0x36,0x49,0x49,0x36,0x00,0x00,0x00}, {0x00,0x26,0x49,0x49,0x3E,0x00,0x00,0x00}, {0x02,0xFF,0x00,0x00,0xFF,0x81,0xFF,0x00}, {0x02,0xFF,0x00,0x02,0xFF,0x00,0x00,0x00}, {0x02,0xFF,0x00,0xF3,0x91,0x99,0xCF,0x00}, {0x02,0xFF,0x00,0x42,0x89,0x89,0x89,0x76}, {0x02,0xFF,0x00,0x1C,0x13,0x10,0xFF,0x10}, {0x02,0xFF,0x00,0x4F,0x89,0x89,0x89,0x71}, {0x02,0xFF,0x00,0x7C,0x92,0x91,0x91,0x60}, {0x02,0xFF,0x00,0x01,0xF9,0x05,0x03,0x00}, {0x02,0xFF,0x00,0x76,0x89,0x89,0x89,0x76}, {0x02,0xFF,0x00,0x4E,0x91,0x91,0x91,0x7E}, {0xE2,0x91,0x89,0x86,0x00,0xFF,0x81,0xFF}, {0xE2,0x91,0x89,0x86,0x00,0x02,0xFF,0x00},{0x79,0x49,0x4F,0x00,0x7A,0x4A,0x4E,0x00}, {0x79,0x49,0x4F,0x00,0x49,0x49,0x49,0x36}, {0x79,0x49,0x4F,0x00,0x1E,0x10,0xFF,0x10}, {0x79,0x49,0x4F,0x00,0x4E,0x4A,0x7A,0x00}, {0x79,0x49,0x4F,0x00,0xFE,0x92,0x92,0x60}, {0x79,0x49,0x4F,0x00,0x79,0x05,0x03,0x00}, {0x79,0x49,0x4F,0x00,0x76,0x89,0x89,0x76}, {0x79,0x49,0x4F,0x00,0x4E,0x91,0x91,0x7E}, {0x42,0x89,0x89,0x76,0x00,0xFE,0x82,0xFE}, {0x42,0x89,0x89,0x76,0x00,0x02,0xFF,0x00}, {0x42,0x89,0x89,0x76,0x00,0xF9,0x89,0x8F}, {0x42,0x89,0x89,0x76,0x00,0x89,0x89,0xFF}, {0x42,0x89,0x89,0x76,0x00,0x0F,0x08,0xFF}, {0x42,0x89,0x89,0x76,0x00,0x9E,0x92,0xF2}, {0x42,0x89,0x89,0x76,0x00,0xFF,0x89,0xF9}, {0x42,0x89,0x89,0x76,0x01,0x01,0xFD,0x03}, {0x42,0x89,0x89,0x76,0x00,0xFF,0x89,0xFF}, {0x42,0x89,0x89,0x76,0x00,0xCF,0x89,0xFF}, {0x1F,0x10,0xFF,0x00,0x7E,0x81,0x81,0x7E}, {0x1F,0x10,0xFF,0x00,0x02,0xFF,0x00,0x00}, {0x1F,0x10,0xFF,0x00,0xE2,0x91,0x89,0xC6}, {0x1F,0x10,0xFF,0x00,0x42,0x89,0x89,0x76},{0x1F,0x10,0xFF,0x00,0x1E,0x10,0xFF,0x10}, {0x1F,0x10,0xFF,0x00,0x8F,0x89,0x89,0xF9}, {0x1F,0x10,0xFF,0x00,0xFF,0x89,0x89,0xF9}, {0x1F,0x10,0xFF,0x00,0x03,0xF9,0x05,0x03}, {0x0F,0x08,0xFF,0x00,0x76,0x89,0x89,0x76}, {0x1F,0x10,0xFF,0x00,0x4E,0x91,0x91,0x7E}, {0x4F,0x49,0x79,0x00,0x3E,0x41,0x41,0x3E}, {0x4F,0x49,0x79,0x00,0x00,0x02,0x7F,0x00}, {0x4F,0x49,0x79,0x00,0x62,0x51,0x49,0x46}, {0x4F,0x49,0x79,0x00,0x42,0x89,0x89,0x76}, {0x4F,0x49,0x79,0x00,0x1E,0x10,0x7E,0x10}, {0x4F,0x49,0x79,0x00,0x4F,0x49,0x79,0x00}, {0x4F,0x49,0x79,0x00,0x7F,0x49,0x79,0x00}, {0x4F,0x49,0x79,0x00,0x01,0x7D,0x03,0x01}, {0x4F,0x49,0x79,0x00,0x76,0x89,0x89,0x76}, {0x4F,0x49,0x79,0x00,0x0E,0x91,0x91,0x7E}, };uint timecount;uchar a;uchar b;void main(void){TR0=0;TMOD=0x01;TH0=(65536-1000)/256;TL0=(65536-1000)%256;EA=1;ET0=1;TR0=1;while(1);}void t0(void) interrupt 1{TH0=(65536-1000)/256;TL0=(65536-1000)%256;Ser_IN(tab[a]); //8X8点阵列扫描 Ser_IN(tabdigit[b][a]);//送行扫描数据 Par_OUT(); //显示a++;if(a==8){a=0;}timecount++;if(timecount==1000) {timecount=0;b++;if(b==60){b=0;}}}。
1.程序设计内容8X8点阵LED工作原理说明:8X8点阵共需要64个发光二极管组成,且每个发光二极管是放置在行线和列线的交叉点上,当对应的某一列置1电平,某一行置0电平,则相应的二极管就亮;因此要实现一根柱形的亮法,如图49所示,对应的一列为一根竖柱,或者对应的一行为一根横柱,因此实现柱的亮的方法如下所述:一根竖柱:对应的列置1,而行则采用扫描的方法来实现。
一根横柱:对应的行置0,而列则采用扫描的方法来实现。
2.硬件电路3.汇编源程序ORG 00HSTART: NOPMOV R3,#3LOP2: MOV R4,#8MOV R2,#0LOP1: MOV P1,#0FFH MOV DPTR,#TABA MOV A,R2MOVC A,@A+DPTR MOV P3,AINC R2LCALL DELAY DJNZ R4,LOP1 DJNZ R3,LOP2MOV R3,#3LOP4: MOV R4,#8 MOV R2,#7LOP3: MOV P1,#0FFH MOV DPTR,#TABA MOV A,R2MOVC A,@A+DPTR MOV P3,ADEC R2LCALL DELAY DJNZ R4,LOP3 DJNZ R3,LOP4MOV R3,#3LOP6: MOV R4,#8 MOV R2,#0LOP5: MOV P3,#00H MOV DPTR,#TABB MOV A,R2MOVC A,@A+DPTR MOV P1,AINC R2LCALL DELAY DJNZ R4,LOP5 DJNZ R3,LOP6MOV R3,#3LOP8: MOV R4,#8 MOV R2,#7LOP7: MOV P3,#00H MOV DPTR,#TABB MOV A,R2MOVC A,@A+DPTR MOV P1,ADEC R2LCALL DELAYDJNZ R4,LOP7DJNZ R3,LOP8LJMP STARTDELAY: MOV R5,#10D2: MOV R6,#20D1: MOV R7,#248DJNZ R7,$DJNZ R6,D1DJNZ R5,D2RETTABA: DB 0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,07FH TABB: DB 01H,02H,04H,08H,10H,20H,40H,80HEND4.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();}}}}来源:[]机电之家·机电行业电子商务平台!。