第一篇:8x8点阵显示26个英文字母
#include
#define uchar unsigned char
#define uint unsigned int
sbit diola=P2^5;
sbit dula=P2^6;
sbit wela=P2^7;
unsigned int count,m=50,i=0;
uchar code table[26][8]={{0xff,0xe7,0xe7,0xdb,0x81,0xbd,0x7e,0xff},//A{0xff,0xc1,0xbd,0xc1,0xbd,0x7d,0x81,0xff},//B{0xff,0xc3,0xbd,0xfd,0xfd,0x79,0x83,0xff},//C{0xff,0xc1,0x9d,0xbd,0xbd,0x9d,0xc1,0xff}, //D{0xff,0x81,0xfd,0x81,0xfd,0xfd,0x81,0xff},//E{0xff,0x81,0xfd,0x81,0xfd,0xfd,0xfd,0xff},//F{0xff,0xc3,0xb9,0xfd,0x8d,0xb9,0x83,0xff},//G{0xff,0xbd,0xbd,0x81,0xbd,0xbd,0xbd,0xff},//H{0xff,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xff},//I{0xff,0xbf,0xbf,0xbf,0xbf,0xbd,0xc3,0xff},//J{0xff,0x9d,0xed,0xf5,0xe9,0xdd,0xbd,0xff},//k{0xff,0xfd,0xfd,0xfd,0xfd,0xfd,0x81,0xff},//L{0xff,0x99,0x99,0x99,0xa5,0xa5,0xa5,0xff},//M{0xff,0xb9,0xb9,0xb5,0xad,0x9d,0x9d,0xff},//N{0xff,0xc3,0x99,0xbd,0xbd,0x99,0xc3,0xff},//O{0xff,0xc1,0xbd,0xbd,0xc1,0xfd,0xfd,0xff},//P{0xff,0xc3,0x99,0xbd,0xbd,0xa9,0xc3,0xbf},//Q{0xff,0xc1,0xbd,0x81,0xbd,0xbd,0xbd,0xff},//R{0xff,0xc3,0xbd,0xc3,0x3f,0x7d,0x83,0xff},//S{0xff,0x80,0xf7,0xf7,0xf7,0xf7,0xf7,0xff},//T{0xff,0xbd,0xbd,0xbd,0xbd,0xbd,0xc3,0xff},//U{0xff,0x7e,0xbd,0xdd,0xdb,0xe3,0xf7,0xff},//V{0xff,0xff,0xff,0x66,0xa6,0x99,0x99,0xff},//W{0xff,0xdd,0xeb,0xf7,0xe3,0xd9,0xbc,0xff},//X{0xff,0xbc,0xd9,0xe3,0xf7,0xf7,0xf7,0xff},//Y{0xff,0x80,0xdf,0xe7,0xfb,0xfd,0x80,0xff}//Z};
void delay(unsigned int a)
{
while(a--);
}
void delay_1()
{
int i,j;
for(i=1000;i>0;i--)
for(j=159;j>0;j--);
}
void init()
{
TMOD=0x01;
TH0=(65535-50000)/256;
TL0=(65535-50000)%256;
EA=1;
ET0=1;
TR0=1;
}
void main()
{unsigned char i=0;
init();
wela=1;
P0=0xff;
wela=0;
delay(50);
while(1)
{
m=50;
if(count==20)
{
count=0;
while(m--)
{
diola=1;
dula=1;
P0=0x00;
diola=0;
dula=0;
delay(50);
dula=1;
P0=table[i][0];
dula=0;
delay(50);
diola=1;
P0=0x01;
diola=0;
delay(50);
diola=1;
dula=1;
P0=0x00;diola=0;
dula=0;
delay(50);dula=1;
P0=table[i][1];dula=0;
delay(50);diola=1;
P0=0x02;diola=0;
delay(50);
diola=1;
dula=1;
P0=0x00;diola=0;
dula=0;
delay(50);dula=1;
P0=table[i][2];dula=0;
delay(50);diola=1;
P0=0x04;diola=0;
delay(50);
diola=1;
dula=1;
P0=0x00;diola=0;
dula=0;
delay(50);dula=1;
P0=table[i][3];dula=0;
delay(50);diola=1;
P0=0x08;diola=0;
delay(50);
diola=1;
dula=1;
P0=0x00;diola=0;
dula=0;
delay(50);dula=1;
P0=table[i][4];dula=0;
delay(50);diola=1;
P0=0x10;diola=0;
delay(50);
diola=1;
dula=1;
P0=0x00;diola=0;
dula=0;
delay(5);
dula=1;
P0=table[i][5];dula=0;
delay(50);diola=1;
P0=0x20;diola=0;
delay(50);
diola=1;
dula=1;
P0=0x00;diola=0;
dula=0;
delay(50);dula=1;
P0=table[i][6];dula=0;
delay(50);diola=1;
P0=0x40;
diola=0;
delay(50);
diola=1;
dula=1;
P0=0x00;diola=0;
dula=0;
delay(50);dula=1;
P0=table[i][7];dula=0;
delay(50);diola=1;
P0=0x80;diola=0;
delay(50);}
i++;
i=i%26;
}
}
}
void time0()interrupt 1 {
TH0=(65535-50000)/256;TL0=(65535-50000)%256;count++;
}
第二篇:LED8x8点阵显示设计说明报告
班级:电子1649
姓名:王立学号:***44
LED8x8点阵显示设计说明报告
一、设计任务
1.设计要求
利用一块点阵数码板,按编程者要求实现任意符号的显示。2.此次设计研究的主要内容及应解决的问题
此次设计研究的主要内容是设计一个符号显示牌:通过程序控制符号显示牌,使符号显示牌,在无按键按下时,显示数字“0-9”,当第一次按下按键时,显示字母“μ”,当第二次按下按键时显示汉字“公”。应解决的问题:单片机P1口的输出电流不足以驱动二极管,需要加驱动,本次研究中以S8050作为驱动,同时在S8050NPN晶体管基极加4.7K的电阻。实验前要弄清晶体管三个引脚代表的极性,以免符号显示牌不亮导致而设计失败。
二、总体设计方案
2.1 硬件电路组成
本产品采用以89C51单片机为核心芯片的电路来实现,主要由89C51芯片、晶振电路、三极管驱动电路、按键控制电路、8×8 LED点阵5部分组成,电路框图如图1所示。其中,89C51是一种带4kB闪烁可编程可擦除只读存储器(Falsh Programmable and Erasable Read OnlyMemory,FPEROM)的低电压、高性能CMOS型8位微处理器,俗称单片机。该器件采用ATMEL高密度非易失存储器制造技术制造,工业标准的MCS一51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,能够进行1 000次写/擦循环,数据保留时间为10年。他是一种高效微控制器,为很多嵌人式控制系统提供了一种灵活性高且价廉的方案。因此,在智能化电子设计与制作过程中经常用到89C51芯片。时钟电路由89C51的18,19脚的时钟端(XTAI 1及XTAL2)以及12 MHz晶振X、电容C2、C3组成,采用片内振荡方式。复位电路采用简易的上电复位电路,主要由电阻R,R2,电容C,开关K 组成,分别接至89C51的RST复位输人端。LED点阵显示屏采用8x8共64个象素的点阵,可通过万用表检测发光二极管的方法测试判断出该点阵的引脚分布。我们把行列总线接在单片机的I/O口,然后把上面分析到的扫描代码送入总线,就可以得到显示的字符了。我们在实际应用中是将LED点阵的8条列线通过驱动电路接在P1口,8条行线通过限流电阻接在P0口。单片机89C51按照设定的程序在P1和P0接口输出与内部字符对应的代码电平送至LED点阵的行列线(高电平驱动),从而选中相应的象素LED发光,并利用人眼的视觉暂留特性合成整个字符的显示。再改变取表地址实现字符的滚动显示。硬件电路组成框图如图2-1所示。
图2-1 硬件电路组成框图
2.2 系统各单元电路设计 2.2.1 89C51单片机最小系统
最小系统包括晶体振荡电路、复位开关和电源部分。图2-2为89C51单片机的最小系统。图2-2 单片机最小系统
2.2.2 按键控制电路
单片机开始工作时,P2.0是高电平。当按键按下时,检测到一个低电平信号,改变P0口输出信号,控制8×8 LED点阵显示屏显示不同字符。
图2-3 按键控制电路
2.2.3 三极管驱动电路
扫描驱动电路的功能主要是有P1口输出高电平使三极管发射结导通,发射结输出足够大的电流使二极管导通。
图2-4 三极管驱动电路 2.2.4 8×8 LED点阵介绍 图(4)为8×8点阵LED外观及引脚图,只要其对应的X、Y轴顺向偏压,即可使LED发亮。例如如果想使左上角LED点亮,则电子模块中的0口为1,A口为0即可。应用时限流电阻可以放在横轴或列轴。
图2-5 8×8点阵LED外观及引脚
(1)把“单片机系统”区域中的P0端口用8芯排芯连接到“点阵模块”区域中的“A~H”端口上;
(2)把“单片机系统”区域中的P1端口用8芯排芯连接到“点阵模块”区域中的“0~7”端口上;
为了方便于单片机连接,我们在焊接的过程中特意将0~7接口排列出来作为列,将A~H接口作为行,这样我们就可以直接将AT89C51单片机的P0口与0~7接口一次连接,将AT89C51单片机的P1口与A~H接口一次连接。要使LED发亮即使给予数字端高电平,字母端给予低电平,就能使二极管发亮。
2.3 字符的点阵显示原理及字库代码获取方法
我们以UCDOS中文宋体字库为例,每一个字由8行8列的点阵组成显示。我们可以把每一个点理解为一个象素,而把每一个字的字形理解为一幅图像。事实上这个汉字屏不仅可以显示汉字,也可以显示在64象素范围内的任何图形。如查用8位的AT89C51单片机控制,如图所示
图2-6 8×8点阵等效电路
为了弄清楚汉字的点阵组成规律,首先通过列扫描方法获取汉字的代码。首先将8行分成4位的上、下两部分,把发光的象素位编为0不发光的象素位为1的十六进制代码。这样就把要显示的“公”字编为如下代码:
0x7f,0xbf,0xc1,0xdf,0xdf,0xdf,0xc1,0xdf
由这个原理可以看出,无论显示何种字体或图像,都可以用这个方法来分析出他的扫描代码从而显示在屏幕上。上述方法虽然能够让我们弄清楚字符点阵代码的获取过程。字符点阵显示一般有点扫描、行扫描和列扫描3种。为了符合视觉暂留要求,点扫描方法的扫描频率必须大于16×64—1024 Hz,周期小于1 ms即可。行扫描和列扫描方法的扫描频率必须大于16×8—128 Hz,周期小于7.8 ms即可。
三、程序设计
3.1程序流程图
开始初始化依次显示0~9是否按键NoYes依次显示0~9显示字符μ是否按键NoYes显示字符μ显示汉字公是否按键NoYes显示汉字公
图3-1 主程序流程图
3.2程序设计
根据上述所说的程序流程图,设计程序如附录1。
四、调试及性能分析
4.1系统调试 4.1.1软件调试
首先根据各单元电路模块,利用Proteus软件将总的硬件原理图绘制好,设计好各模块要使用的I/O口,如:8×8点阵LED显示屏时候插反,先检测下,无硬件错误后,再进行程序编程。
利用C语言的编程方式,将系统要求的基本功能,以及创新功能根据程序流程图编写出来,用Keil软件调试无误后,生成Hex文件。
双击Proteus中的AT89C51芯片,将Keil生成的Hex加载到芯片内,进行仿真,经调试后所编写的程序能够完美实现系统所需的各种功能。
4.1.2硬件调试
硬件调试主要是检测硬件电路是否有短路、断路、虚焊等。具体步骤及测试结果如下:(1)检查电源与地线是否全部连接上,用万用表对照电路原理图测试各导线是否完全连接,对未连接的进行修复。
(2)参照原理图,检查各个器件之间的连接是否连接正确,是否存在虚焊,经测试,各连接不存在问题。
(3)以上两项检查并修复完后,给该硬件电路上电,电源指示灯点亮。
(4)将烧录好程序的最小单片机系统接入各模块后,各模块能过正常工作,如:数码管正常发光。
4.2设计分析
将烧录好程序的最小单片机系统与各模块连接好后,8×8点阵LED显示屏显示初始值。按键一次之后,显示屏显示滚动字符μ,再按键一次,显示屏显示汉字“公”。
经软件调试和硬件调试后,所设计的系统完美实现了所需的控制要求和创新要求。
附录1:程序清单
#include
for(y=110;y>0;y--);} void main(){ key=1;num=0;while(1){
if(num==0)
{
for(j=0;j<10;j++)
{
if(key==0)
{
delay(10);
if(key==0)
{
num=1;
公 // //1 //2 //3 //4 //5 //6 //7 //8
while(!key);
}
}
if(num!=0)
break;
for(k=0;k<30;k++)
{
scan=0x01;
for(i=0;i<8;i++)
{
P0=table[j][i];
P1=scan;
delay(2);
scan<<=1;
}
} } } if(num==1){
for(j=0;j<8;j++)
//8组数据
{
if(key==0)
{
delay(10);
if(key==0)
{
num=2;
while(!key);
}
}
if(num!=1)
break;
for(k=0;k<10;k++)
{
scan=0x01;
//初始扫描信号
for(i=8;i>0;i--)
//扫描周期
{
if(i>j)P0=table1[8+(j-i)];
else P0=table1[j-i];
P1=scan;
delay(2);
scan<<=1;
}
}
}
}
if(num==2)
{
if(key==0)
{
delay(10);
if(key==0)
{
num=0;
while(!key);
}
}
scan=0x01;
for(i=0;i<8;i++)
{
P0=table2[count++];
if(count==8)count=0;
P1=scan;
delay(2);
scan<<=1;
}
}
} }
附录2:点阵的放置与接线方法:
附录3:硬件原理图
第三篇:单片机16点阵汉字显示课程设计
一、前言
1.1设计制作产品的背景、目的及设计要求
本项目为16x16点阵汉字显示“新年快乐”的设计,首先将本次实训的电路图在仿真软件上绘制完成,将点阵文件存入ROM,形成汉字编码,再进行相关转换,以新编码提取相应的点阵汉字显示。将相应编码代入运行程序,进行调试和准备。
1.2分工情况、工作计划及本人所承担工作
1.周一 1~4 进行分组,选题 和软件的安装 2.周二 1~4 进行电路的设计及程序编写 3.周三 1~4 进行电路的设计及程序编写 4.周四 1~4 进行说明书的填写 5.周五 1~4 答辩
本人在本次课程设计中承担电路图的绘制及相关程序的编写与调试。
1.3本课题的设计重点及难点
本次课程设计重点在于单片机控制系统程序采用单片机汇编语言进行编辑,通过编程控制各显示点对应LED阳极和阴极端的电平,就可以有效的控制各显示点的亮灭。而其中的难点就在于运行程序的编写及相关汉字的点阵数据,这种显示字符的点阵数据可以自行编写,也可以标准字库中提取。
在进行课题设计时需要熟练掌握相关电路软件及编程软件的使用,编写程序时需掌握一定的C语言逻辑关系的运用。在电路图的绘制时需要清楚的了解各个电路设备的功能及用途。
二、实训内容
2.1实训原理
本设计应用的扫描方法为水平方向(X方向)扫描。
每一个字由16行16列的点阵形成显示,即每个字均由256个点阵来表示,我们可以把每一个点理解为一个像素。一般我们使用的16×16的点阵宋体字库,即所谓的16×16,是每一个汉字在纵横各16点的区域内显示的。汉字库从该位置起的32字节信息记录了该字的字模信息。事实上这个汉字屏不仅可以显示汉字,也可以显示在256像素范围内的任何图形。
上半部分第一列完成之后,继续扫描下半部分的第一列,为了接线的方便,我们仍设计成由上往下的扫描方式,即从A8向A15方向扫描,按照这个方法,继续进行下面的扫描,一共扫描32个8位,可以得出汉字。
2.2硬件设计 2.3软件设计
#include for(j=q;j<32+q;j++) { P1=sm[t]; P0=seg[j]; j++; P2=seg[j]; delay(50);t--; if(t==0) t=16;} q=q+32; if(q==128) q=0;} } 三.结论 3.1 实训过程中遇到的问题及解决措施 在本次实验中,我组在制作的16x16点阵显示汉字“新年快乐”的课程设计中,首先在使用单片机仿真软件找寻相关设备时没有找到16x16的点阵设备,继而用四个8x8的点阵排列组合予以替代。 依据相关教材及指导教师的参考和建议,我组对于本次设计的电路图采用了通用模板设计。 此次课程设计的运行程序是我组在设计中的最大难点,后经多方查资料及参考询问,我组找到了相应汉字在点阵中的排序规律,顺利编写出代码。 3.2 今后的学习展望 经过这次的单片机课程设计,从产生设计想法到实际操作,到最终的设计完成,中间遇到的困难及困难的解决,让我更进一步了解了单片机,让我不再仅仅局限于书本上。 本次的设计经验对于我们日后的学习工作有非常重要的作用,在遇到困难时可以不仅仅从书本上找解决方案,还可以自己亲自动手实践来验证相关问题及找到解决方法。 这次难得的课程设计过程中我锻炼了自己的思考能力和动手能力。通过题目选择和设计电路的过程中,加强了我思考问题的完整性和实际生活联系的可行性。在方案设计选择和芯片的选择上,培养了我们综合应用单片机的能力,对单片机的各个管脚的功能也有了进一步的认识。还锻炼我们个人的查阅技术资料的能力,动手能力,发现问题,解决问题的能力。并且我们熟练掌握了有关器件的性能及测试方法。 四、心得体会 本次的设计经验对于我们日后的学习工作有非常重要的作用,在遇到困难时可以不仅仅从书本上找解决方案,还可以自己亲自动手实践来验证相关问题及找到解决方法。 单片机这门课是一科非常重视动手实践的科目,不能总是看书,但是也不能完全不看书。单片机并不象传统的数字电路或模拟电路那样比较直观,原因是除了“硬件”之外还存在一个“软件”的因素。正是这个“软件”的原因使得许多初学者怎么也弄不懂单片机的工作过程,怎么也不明白为什么将几个数送来送去就能让数码管显示一串字符或控制一个电机的变速。对初学单片机的人来说,需要从书中大概了解一下单片机的各个功能寄存器,如果看的多了反而容易搞乱,现在市场上大多数讲单片机的书一开始就讲解较复杂的内存、地址、存储器什么的,更让初学者感到不知所云、难以入门。如果按教科书式的学法,上来就是一大堆指令、名词,学了半天还搞不清这些指令起什么作用,能够产生什么实际效果,那么也许用不了几天就会觉得枯燥乏味而半途而废。简单的说,使用单片机实际上就是用我们自己编写的软件去控制单片机的各个功能寄存器。再简单些,就是控制单片机哪些引脚的电平什么时候输出高电平,什么时候输出低电平。由这些高低变化的电平来控制外围电路,实现我们需要的各个功能。 经过这次的单片机课程设计,从产生设计想法到实际操作,到最终的设计完成,中间遇到的困难及困难的解决,让我更进一步了解了单片机,让我不再仅仅局限于书本上。 16X16点阵显示广告牌 电路说明: J1 为5V电源输入 S2 电源开关 D1 电源指示灯 R1 指示灯限流电阻 U3 单片机AT89S52 U1 U2 驱动列扫描74HC595 串入并出。C1 R10 单片机上电复位,S1 手动复位。 Y1 C2 C3 为单片机提供时钟 R2……R9 R27…….R34 为点阵的限流电阻(为了更亮些 本设计使用2K电阻)。 R11…..R26 三极管基极电阻 Q1------Q16 S8550点阵驱动三极管 A1…..A4 8*8点阵 组成16*16点阵屏。 注:PROTEUS仿真图为了仿真方便没加驱动三极管及电阻(不影响仿真效果) 芯片资料: AT89S52脚位: AT89C51脚位: 74HC595脚位: 8*8点阵脚位: USB母头: 答辩常见问题: 单片机正常工作的三个条件: 1.5V供电 2.复位电路 3.时钟脉冲(即晶振) 单片机的29 30脚为何空着: 29脚PSEN是连接 外部ROM时选通信号。 30脚 当访问外部存储器时,ALE作为锁存扩展地址的低8位字节的控制信号。当访问外部数据存储器时,ALE以十二分之一振荡频率输出正脉冲,同时这个引脚也是EPROM编程时的编程脉冲输入端。故此用不上。 单片机31脚为何要接高电平: 31脚为内部程序存储器和外部程序存储器选择端。当31脚(EA /Vpp)为高电平时,访问内部程序存储器,当 31脚(EA/Vpp)为低电平时,则访问外部程序存储器。 此点阵为何要用两片74HC595,一片可以吗: 不可以,74HC595是串入8并出,一片只能驱动八列。 可以用其它的芯片代换74HC595吗: 可以的,74HC138可以,它是三----八译码器。74HC154也可以,它是四-----十六译码器。 如何使点阵更亮些: 1.修改限流电阻(阻值越小点阵越亮)。2.在每列加三极管驱动。 此点阵为什么有拖影: 是的,一般拖影有三种可能,一是:CPU处理速度太慢,即时钟频率低。二是:字移动的速度太快(人眼的视觉暂留引起)。三是:与点阵屏有关(本点阵屏采用的是可见发光芯,由于是可见发光芯,当他熄灭瞬间我们可以见到发光芯慢慢熄灭,此种屏的好处就是比不可见发光芯的点阵屏要亮些)。 此点阵在不修改硬件的情况下可往上或下移动吗: 不可以,要其向上或向下移动,需要加其他锁存信号的芯片。 此电路具有断电记忆吗? 没有,需要加24CXX存储器。24CXX是一种EEPROM,即一种存储器,(24C01、24C02、24C04、24C08、24C16等)这种存储器的特性是掉电保存,并且可以重复擦写。 此16*16点阵可扩展更大的点阵吗: 可以的,可扩展16*24 16*32等等,列驱动可用74HC595来完成,因为此芯片占用单片机的I/O更少些。也可扩展24*24 24*32等等。行 列同样可以用74HC595来驱动实现。 单片机AT89C51与 AT89C52区别: 他们是互相兼容的,引脚排列一样可以相互替换,存储空间不一样AT89C51是4KB的,AT89C52是8KB的 程序可以大点 还有就是52多个定时器T 2 单片机AT89S52与 AT89C52兼容吗? 完全兼容,AT89S52多了在线下载功能,更方便(最大的区别就是C52需要把芯片从线路板上抠下来放到编程器上烧写程序,之后再放回去,极不方便。S52就不用,可以在线路板上下载程序即支持ISP下载,非常方便。AT89C52已经停产了,市面上不多见了。) 单片机AT89S52与 AT89C52对比: AT89C52有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,3个16位可编程定时计数器,2个全双工串行通信口,2个读写口线,AT89C52可以按照常规方法进行编程,也可以在线编程。其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的 Flash存储器可有效地降低开发成本。 AT89S52是一个低功耗,高性能CMOS 8位单片机,片内含8k Bytes ISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准 MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,功能强大的微型计算机的AT89S52可为许多嵌入式控制应用系统提供高性价比的解决方案。 AT89S52具有如下特点:40个引脚,8k Bytes Flash片内程序存储器,256 bytes的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器。 亲,答辩之前首先要对电路熟悉。以上是帮助亲,熟悉电路。亲,还可以多找些相关资料,以便顺利通过答辩。 如 亲,还有疑问,请咨询我们。QQ:905653785 24. 8X8 LED点阵显示技术 1. 实验任务 在8X8 LED点阵上显示柱形,让其先从左到右平滑移动三次,其次从右到左平滑移动三次,再次从上到下平滑移动三次,最后从下到上平滑移动三次,如此循环下去。2. 电路原理图 图4.24.1 3. 硬件电路连线 (1). 把“单片机系统”区域中的P1端口用8芯排芯连接到“点阵模块”区域中的“DR1-DR8”端口上;(2). 把“单片机系统”区域中的P3端口用8芯排芯连接到“点阵模块”区域中的“DC1-DC8”端口上; 4. 程序设计内容(1). 8X8 点阵LED工作原理说明 8X8点阵LED结构如下图所示 图4.24.2 从图4.24.2中可以看出,8X8点阵共需要64个发光二极管组成,且每个发光二极管是放置在行线和列线的交叉点上,当对应的某一列置1电平,某一行置0电平,则相应的二极管就亮;因此要实现一根柱形的亮法,如图49所示,对应的一列为一根竖柱,或者对应的一行为一根横柱,因此实现柱的亮的方法如下所述: 一根竖柱:对应的列置1,而行则采用扫描的方法来实现。一根横柱:对应的行置0,而列则采用扫描的方法来实现。 6. C语言源程序 #include 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++){ for(i=0;i<8;i++){ P3=0x00;P1=tabb[i];delay1();} } } } //from bottom to top 3 time第四篇:16X16点阵显示广告牌设计 说明
第五篇:24. 8X8 LED点阵显示技术(精选)