资源描述
LED点阵设计方案
设计作品名称: LED电子点阵
参与人员: 电气系电子信息1332班 同学
作品设想: 以AT89S51单片机控制发光二极管,能够依次在点阵上显示“0-9”个字
符。
所需元器件:8×8LED点阵(共阳)一块
AT89S51晶振频率(f=12M Hz)单片机(附有底座)一个
74HC573芯片 两个
瓷片电容30pf 两个
电阻1000欧姆 470欧姆各八个 10,000欧姆2个
电源插座一个
显示原理概括:8×8LED点阵 以发光二极管为像素,分为行控制跟列控制,通过单片机的两个管口的引脚输出高电平与低电平来控制二极管的发光来显示文字,注意控制延时来获得较好的视觉效果。
AT89S51单片机介绍:
-- 新增加很多功能,性能有了较大提升,价格基本不变,甚至比89C51更低!
-- ISP在线编程功能,这个功能的优势在于改写单片机存储器内的程序不需要把芯片从工作环境中剥离。是一个强大易用的功能。
-- 最高工作频率为33MHz,大家都知道89C51的极限工作频率是24M,就是说S51具有更高工作频率,从而具有了更快的计算速度。
-- 具有双工UART串行通道。
-- 内部集成看门狗计时器,不再需要像89C51那样外接看门狗计时器单元电路。
-- 双数据指示器。
-- 电源关闭标识。
-- 全新的加密算法,这使得对于89S51的**变为不可能,程序的保密性大大加强,这样就可以有效的保护知识产权不被侵犯。
-- 兼容性方面:向下完全兼容51全部字系列产品。
74HC573芯片介绍:
74HC573 八进制 3 态非反转透明锁存器
74HC573 高性能硅门 CMOS 器件 SL74HC573 跟 LS/AL573 的管脚一样。器件的锁存器。输入是和标准 CMOS 输出兼容的;加上拉电阻,他们能和 LS/ALSTTL 输出兼容。当锁存使能端LE为高时,这些器件的锁存对于数据是透明的(也就是说输出同步)。当锁存使能变低时,符合建立时间和保持时间的数据会被锁存。×\u36755X出能直接接到 CMOS,NMOS 和 TTL 接口上 ×\u25805X作电压范围:2.0V~6.0V ×\u20302X输入电流:1.0uA ×CMOS 器件的高噪声抵抗特性
OE ̄ 1 20 Vcc
1D— 2 19 —1Q
2D— 3 18 —2Q
3D— 4 17 —3Q
4D— 5 16 —4Q
5D— 6 15 —5Q
6D— 7 14 —6Q
7D— 8 13 —7Q
8D— 9 12 —8Q
GND 10 11 LE
OE LE D Q
L H H H
L H L L
L L X Q0
H X X Z
1脚三态允许控制端低电平有效
1D~8D为数据输入端
1Q~8Q为数据输出端
74HC573引脚图
LE为锁存控制端
部分电路分析及其总体的电路设计 :
1.点阵的布局图:
8×8点阵LED外观及引脚图,其等效电路如图所示,只要其对应的X、Y轴顺向偏压,即可使LED发亮。例如如果想使左上角LED点亮,则Y0=1,X0=0即可。应用时限流电阻可以放在X轴或Y轴
2.复位电路设计图:
本电路选取的是按键复位,复位电路的原理是单片机RST引脚接收到2US以上的电平信号,只要保证电容的充放电时间大于2US,即可实现复位,所以电路中的电容值是可以改变的。按键按下系统复位,是电容处于一个短路电路中,释放了所有的电能,电阻两端的电压增加引起的。
3.整体电路设计:
1. 把“单片机系统”区域中的P2.0~P2.7端口分别通过八个100欧电阻连接到“点阵模块”区域中的“L1-L8”端口上;
2. 把“单片机系统”区域中的P3.0~32.7端口通过74HC573和10K电阻连接到“点阵模块”区域中的“S1-S8”端口上。
4.焊接要求:
焊接完应是锡点光亮,圆滑而无毛刺,锡量适中。锡和被焊物融合牢固。不应有虚焊和假焊。
虚焊是焊点处只有少量锡焊住,造成接触不良,时通时断。假焊是指表面上好像焊住了,但实际上并没有焊上,有时用手一拔,引线就可以从焊点中拔出。
这两种情况将给电子制作的调试和检修带来极大的困难。只有经过大量的、认真的焊接实践,才能避免这两种情况。
焊接电路板时,一定要控制好时间。太长,电路板将被烧焦,或造成铜箔脱落。从电路板上拆卸元件时,可将电烙铁头贴在焊点上,待焊点上的锡熔化后,将元件拔出,可以看看。
程序设计思路:
软件流图: 开始
↓
定时器1初始化
↓
主循环← ← ↑← ←↑
↓ 无↑ ↑
定时中断函数 → → 有无中断→ → ↑ ↑
↓有 ↑
↓ ↑
调用显示子函数 ↑
↓→ → → → → →
完整程序:
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uint i,a,b=0,t;
uchar code dxuan0[]={0x00,0x18,0x24,0x24,0x24,0x24,0x24,0x18,}; //"0"
uchar code dxuan1[]={0x00,0x18,0x18,0x18,0x18,0x18,0x18,0x00,}; //"1"
uchar code dxuan2[]={0x00,0x3C,0x24,0x0C,0x18,0x30,0x3C,0x00,}; //"2"
uchar code dxuan3[]={0x00,0x3C,0x24,0x18,0x0C,0x24,0x38,0x00,}; //"3"
uchar code dxuan4[]={0x00,0x08,0x18,0x38,0x28,0x3C,0x08,0x00,}; //"4"
uchar code dxuan5[]={0x00,0x3C,0x20,0x3C,0x04,0x24,0x38,0x00,}; //"5"
uchar code dxuan6[]={0x00,0x18,0x24,0x20,0x38,0x24,0x24,0x18,}; //"6"
uchar code dxuan7[]={0x00,0x3C,0x04,0x08,0x08,0x10,0x10,0x10,}; //"7"
uchar code dxuan8[]={0x38,0x44,0x44,0x38,0x44,0x44,0x44,0x38,}; //"8"
uchar code dxuan9[]={0x18,0x24,0x24,0x24,0x1C,0x04,0x24,0x18,}; //"9"
uchar code wxuan[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff,};//位选
void delay(uint z) //延时函数
{
uint x,y;
for(x=z;x>0;x--)
for(y=256;y>0;y--);
}
//***********************显示函数**************************//
void display0(){for(a=50;a>0;a--) for(i=0;i<9;i++) {P1=wxuan[i];P0=dxuan0[i];delay(1);} }
void display1(){for(a=50;a>0;a--) for(i=0;i<9;i++) {P1=wxuan[i];P0=dxuan1[i];delay(1);} }
void display2(){for(a=50;a>0;a--) for(i=0;i<9;i++) {P1=wxuan[i];P0=dxuan2[i];delay(1);} }
void display3(){for(a=50;a>0;a--) for(i=0;i<9;i++) {P1=wxuan[i];P0=dxuan3[i];delay(1);} }
void display4(){for(a=50;a>0;a--) for(i=0;i<9;i++) {P1=wxuan[i];P0=dxuan4[i];delay(1);} }
void display5(){for(a=50;a>0;a--) for(i=0;i<9;i++) {P1=wxuan[i];P0=dxuan5[i];delay(1);} }
void display6(){for(a=50;a>0;a--) for(i=0;i<9;i++) {P1=wxuan[i];P0=dxuan6[i];delay(1);} }
void display7(){for(a=50;a>0;a--) for(i=0;i<9;i++) {P1=wxuan[i];P0=dxuan7[i];delay(1);} }
void display8(){for(a=50;a>0;a--) for(i=0;i<9;i++) {P1=wxuan[i];P0=dxuan8[i];delay(1);} }
void display9(){for(a=50;a>0;a--) for(i=0;i<9;i++) {P1=wxuan[i];P0=dxuan9[i];delay(1);} }
void main(void)
{
TMOD=0X10; //设置定时器为工作方式1
TH1=(65536-50000)/256;
TL1=(65536-50000)%256; //定时50000us
EA=1; //开总中断
ET1=1; //开定时器中断
TR1=1; //启动定时器
while(1)
{
if(t==40)
{
t=0;
switch(b)
{
case 0: display0();break;
case 1: display1();break;
case 2: display2();break;
case 3: display3();break;
case 4: display4();break;
case 5: display5();break;
case 6: display6();break;
case 7: display7();break;
case 8: display8();break;
case 9: display9();break;
}
b++;if(b==10)b=0;
}
}
}
//*****************定时中断函数****************//
void ext1() interrupt 3
{
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
t++;
}
设计心得总结:单片机是很重要的一门课程,老师和一些工作的朋友都曾说过,如果学好一门单片机,就凭这个技术这门手艺找一个好工作也不成问题。尽管我们在课堂学到的内容很有限,但在以后的学习中单片机还需要好好的深入研究和学习,学好了单片机也就多了一项生存的本钱。最后感谢大三大二学长对我们的精心指导和帮助,感谢同学们对我们的帮助。
展开阅读全文