单片机课程设计LED点阵电子显示屏的设计.doc

上传人:文库蛋蛋多 文档编号:4147550 上传时间:2023-04-07 格式:DOC 页数:16 大小:570KB
返回 下载 相关 举报
单片机课程设计LED点阵电子显示屏的设计.doc_第1页
第1页 / 共16页
单片机课程设计LED点阵电子显示屏的设计.doc_第2页
第2页 / 共16页
单片机课程设计LED点阵电子显示屏的设计.doc_第3页
第3页 / 共16页
单片机课程设计LED点阵电子显示屏的设计.doc_第4页
第4页 / 共16页
单片机课程设计LED点阵电子显示屏的设计.doc_第5页
第5页 / 共16页
点击查看更多>>
资源描述

《单片机课程设计LED点阵电子显示屏的设计.doc》由会员分享,可在线阅读,更多相关《单片机课程设计LED点阵电子显示屏的设计.doc(16页珍藏版)》请在三一办公上搜索。

1、LED点阵电子显示屏的设计简述:LED点阵显示系统,由AT89S52单片机、串口通信模块、LED屏幕显示模块等组成,实现了对星期、年月日、时分秒的显示。关键词:LED点阵电子显示屏单片机键盘控制一、选用器材AT89C52单片机1个,74LS138型号3线8线译码器1个,74LS373三态输出的八D 透明锁存器型号,+5V电源1个,Led8*8点阵屏绿色5个, tPd PD5个,带公共端的8电阻排(排阻)1个,电容30pF3个,电阻10K欧1个,按钮6个 ,石英晶振1MHz1个二、设计方案1、实验功能本实验要实现的功能就是,显示时分秒,年月日,且可修改。实现实时时间的显示,显示屏数字显示,时:分

2、:秒;星期的显示;年月日的显示。显示屏通过按键切换显示星期,年月日,时间。2、总体方案(1)工作原理用单片机AT89S52控制,写入程序,将数据传输到显示模块,即点阵LED电子显示屏显示器,实现日历的显示。(2)总体设计电路图LED和52单片机配合实现时间显示功能。显示模块为点阵LED电子显示屏显示器,把单片机中的数据显示出来。该电路是通过按键来切换各种显示要求。3、方案论证(1)显示部分:显示部分是本次设计最核心的部分,对于LED8*8点阵显示有以下两种方案:静态显示,即将每个二极管的状态分别用1和0表示,0则无电流,为暗,1则有电流,为亮。若给每个二极管一个驱动电路,一个图像输入后,所有L

3、ED的状态保持到下一个图像。对于静态显示方式,所需的译码驱动装置很多,引线多而负责,成本高,可靠性也低。动态显示,即对每一个LED屏进行分割,对组成图像的各个部分分别显示,这样利用人眼的暂留效应和发光二极管发光时间的长短,也同样可以实现显示功能,这样就可以避免静态显示出现的问题。但是,设计上如果处理不当,容易造成图像闪烁的问题,因此合理的涉及要保证驱动电路容易实现而且保证图像稳定补闪烁。(2)数字时钟本实验采用软件实现数字时钟。原理为:在单片机内部存储器分别存放时钟的年、月、日、时、分、秒、星期的信息。利用定时器与软件结合实现1秒定时中断,每产生一次中断,存储器内相应的秒值加1;若秒值达到60

4、,则清零且相应的分值加1;若分值达到60,则清零且相应的时值加1;若相应的时值达到24,则清零且相应的日值加1;若相应的日值分别达到29,30,31时,根据判断来增加月值;若相应的月值达到12时,清零且年值加1。(3)显示接口芯片的选择采用串口输入,使用少量I/O口,但传输速度稍微慢了一些,但是不影响显示质量。于是我们采用TI公司的DMOS器件TPIC6B595,其最大特点是驱动功率大,可直接做LED的驱动。4、元件介绍(1) AT89S52 是一种低功耗、高性能CMOS8位微控制器,具有 8K 在系统可编程 Flash 存储器。使用Atmel 公司高密度非易失性存储器技术制造,与工业80C5

5、1 产品指令和引脚完 全兼容。片上Flash允许程序存储器在系统可编程,亦适于 常规编程器。在单芯片上,拥有灵巧的8 位CPU 和在系统 可编程Flash,使得AT89S52为众多嵌入式控制应用系统提 供高灵活、超有效的解决方案。 AT89S52具有以下标准功能: 8k字节Flash,256字节RAM, 32 位I/O 口线,看门狗定时器,2 个数据指针,三个16 位 定时器/计数器,一个6向量2级中断结构,全双工串行口, 片内晶振及时钟电路。另外,AT89S52 可降至0Hz 静态逻 辑操作,支持2种软件可选择节电模式。空闲模式下,CPU 停止工作,允许RAM、定时器/计数器、串口、中断继续

6、工 作。掉电保护方式下,RAM内容被保存,振荡器被冻结, 单片机一切工作停止,直到下一个中断或硬件复位为止。AT89S52单片机引脚图(2)74LS37374LS373为三态输出的八D透明锁存器。它的输出端O0O7可直接与总线相连。当三态允许控制端OE为低电平时,O0O7为正常逻辑状态,可用来驱动负载或总线。当OE为高电平时,O0O7呈高阻态,即不驱动总线,也不为总线的负载,但锁存器内部的逻辑操作不受影响。当锁存允许端LE为高电平时,O随数据D而变。当LE为低电平时,O 被锁存在已建立的数据电平。74LS373引脚图(3)74LS13871LS138有三个附加的控制端、和。当、时,输出为高电平

7、(S1),译码器处于工作状态。否则,译码器被禁止,所有的输出端被封锁在高电平,如表3.3.5所示。这三个控制端也叫做“片选”输入端,利用片选的作用可以将多篇连接起来以扩展译码器的功能。带控制输入端的译码器又是一个完整的数据分配器。在图3.3.8电路中如果把作为“数据”输入端(在同一个时间),而将作为“地址”输入端,那么从送来的数据只能通过所指定的一根输出线送出去。这就不难理解为什么把叫做地址输入了。例如当101时,门的输入端除了接至输出端的一个以外全是高电平,因此的数据以反码的形式从输出,而不会被送到其他任何一个输出端上。74LS138引脚图 (4)LED8*8点阵屏双基色8*8 点阵严格有共

8、阴型和共阳型之分的,一个双基色LED(一个发亮点)阴极接在一起就是共阴、否则反之为共阳。我们使用的就是共阳型的LED双基色8*8点阵屏。三、结论与总结本电路的设计原理比较复杂,而焊接电路的难度更加之高,由于线路的复杂性,使得焊接时很容易出现错误,以致于一步失误全盘皆输。通过实验对单片机有了进一步的了解,也加强了动手焊接的能力。所以,通过此实验认识了很多新问题,以及培养了解决问题的能力。四、参考文献1 李朝青. 单片机原理及接口技术 M. 北京航空航天大学出版社,2005.附:a电路设计实物图 正面 反面b 实验程序#include reg51.h#define uchar unsigned c

9、har#define uint unsigned int#define true 1#define faluse 1sbit set_key = P30;sbit up_key = P31;sbit down_key = P32;sbit sign = P33;sbit select_key= P34;sbit set_ring_key = P35;uint sec;uint min=23;uint hour=12;uint day=10;uint month=10;uint yearl=7;uint yearh=20;uint tcnt;uint cnt=0;uint cursor=0;ui

10、nt sjsz=0;uchar a=0xff;uchar code Seg=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;void delay(uint t) uint i; while(t-) for (i=0;i0;i-) for(j=248;j0;j-);void display(uchar L1,uchar L2,uchar L3,uchar L4,uchar L5,uchar L6,uchar L7,uchar L8,uchar L9,uchar L10,uchar L11,uchar L12,uchar L13,uchar L1

11、4)if(cnt=1) if(cursor=6)P2=0x7F|a;P0=L1;delay(1);elseP2=0x7F;P0=L1;delay(1); /yearh if(cursor=6)P2=0xBF|a;P0=L2;delay(1);elseP2=0xBF;P0=L2;delay(1); /yearh if(cursor=6)P2=0xDF|a;P0=L3;delay(1);elseP2=0xDF;P0=L3;delay(1); /yearl if(cursor=6)P2=0xEF|a;P0=L4;delay(1);elseP2=0xEF;P0=L4;delay(1); /yearl

12、if(cursor=5)P2=0xF7|a;P0=L5;delay(1);elseP2=0xF7;P0=L5;delay(1); /month if(cursor=5)P2=0xFB|a;P0=L6;delay(1);elseP2=0xFB;P0=L6;delay(1); /month if(cursor=4)P2=0xFD|a;P0=L7;delay(1);elseP2=0xFD;P0=L7;delay(1); /day if(cursor=4)P2=0xFE|a;P0=L8;delay(1);elseP2=0xFE;P0=L8;delay(1); /day P2=0xFF;else if(

13、cursor=3)P2=0x7F|a;P0=L9;delay(1);elseP2=0x7F;P0=L9;delay(1); /hour if(cursor=3)P2=0xBF|a;P0=L10;delay(1);elseP2=0xBF;P0=L10;delay(1); /hour if(cnt!=1)P2=0xDF;P0=0X40;delay(1); if(cursor=2)P2=0xEF|a;P0=L11;delay(1);elseP2=0xEF;P0=L11;delay(1); /min if(cursor=2)P2=0xF7|a;P0=L12;delay(1);elseP2=0xF7;P

14、0=L12;delay(1); /min if(cnt!=1)P2=0xFB;P0=0X40;delay(1); if(cursor=1)P2=0xFD|a;P0=L13;delay(1);elseP2=0xFD;P0=L13;delay(1); /sec if(cursor=1)P2=0xFE|a;P0=L14;delay(1);elseP2=0xFE;P0=L14;delay(1); /sec P1=0xFF;main() TMOD=0x02; /设置模式为定时器T0的模式2 断的产生中断去执行中断函数本次定时时间为64ms TH0=0x06; /设置计数器初值,靠TH0存储重装的计数值X

15、0=256-250=6 TL0=0x06; TR0=1; /启动T0 ET0=1; /开启定时器T0中断允许 EA=1; /开启中断总控制 while(1) if(set_key=0) Kdelay(); if(set_key=0) cursor+; if(cursor=7)cursor=0; /在选择到调整年时又返回秒设置,当CURSOR=7时不选中 if(up_key=0) Kdelay(); if(up_key=0) /加部分 if(cursor=1)sec+;if(sec=60)sec=0; if(cursor=2)min+;if(min=60)min=0; if(cursor=3)h

16、our+;if(hour=24)hour=0; if(cursor=4)day+;if(day=31)day=1; if(cursor=5)month+;if(month=13)month=1; if(cursor=6)yearl+;if(yearl=100)yearl=0; if(cursor=7)yearh+;if(yearh=30)yearh=20; if(down_key=0) Kdelay(); if(down_key=0) /减部分 if(cursor=1)sec-;if(sec=00)sec=59; if(cursor=2)min-;if(min=0)min=59; if(cur

17、sor=3)hour-;if(hour=0)hour=23; if(cursor=4)day-;if(day=0)day=31; if(cursor=5)month-;if(month=0)month=12; if(cursor=6)yearl-;if(yearl=0)yearl=99; if(cursor=7)yearh-;if(yearh=20)yearh=30; if(select_key=0) Kdelay();if(select_key=0)cnt+;if(cnt=2)cnt=0; display(Segyearh/10,Segyearh%10,Segyearl/10,Segyear

18、l%10,Segmonth/10,Segmonth%10,Segday/10,Segday%10,Seghour/10,Seghour%10,Segmin/10,Segmin%10,Segsec/10,Segsec%10); void t0(void)interrupt 1 using 0 /t0的中断程序 tcnt+; if(tcnt=4000)/定时器的定时计数,4000次250us为1秒,中断4000次后才执行刷新,期间照上面的语句显示 tcnt=0; sign=sign; a=a; sec+; if(sec=60) sec=0; min+; if(min=60) min=0; hour

19、+; if(hour=24) hour=0; day+; if(month=2&(yearl=0&yearh%4=0)|(yearl!=0&yearl%4=0)&day=30)day=1; else if(month=2&day=29)day=1; else if(month=4|month=6|month=9|month=11)&day=31)day=1; else if(day=32)day=1; if(day=1) month+; if(month=13) month=1; yearl+; if(yearl=100) yearl=0; yearh+; if(yearh=100) yearh=20;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号