1、基于单片机的一、摘要:本文介绍了一款以单片机AT89S51为控制器的LED点阵显示屏系统的设计。该系统可实现中英文字符的显示和动态特效显示。并且可以通过级连的方式来扩大显示屏幕的尺寸以达到增加显示内容的目的。系统采用PC机作为上位机,上位机向单片机发送控制命令和上位机所存储的显示代码,AT89S51单片机接收并处理PC机的控制命令以及显示代码,由显示驱动模块驱动一个1616分辨率的LED点阵显示屏的扫描显示。PC机与单片机之间的通信采用RS232C通信标准来实现。所选用的AT89S51单片机具有价格低廉程序写入方便的特点使得整个系统方便维护和检修。除此之外,该系统只占用了单片机少量的I/O口和
2、内存,为系统留下了功能扩展的空间。关键字:AT89C51;LED点阵显示;串行通信Abstract:ThispaperintroducesadesignoftheLEDlatticedisplaysystembaseonMCUAT89S51.ThesystemcandisplayinbothChineseandEnglishcharactersoftheshowandfromtoptobottomandmovearoundthemagicshow.Andcanbecascadedtoexpandthescreensizetoachieveincreasedcontentpurposes.The
3、PCsendscontrolcommandsanddisplayscodetomicrocontroller,AT89S51receivescontrolcommandsfromPCandshowsthecode,Drivermoduledrivesa1616-resolutionLEDlatticeLEDspaneldisplayscanshowed.CommunicationbetweenPCandthemicrocontrollerusingRS-232Ccommunicationsstandards.thecharacteristicsthatAT89S51microcontrolle
4、rischeapandcouldbecodedconvenientlymakesthewholesystemConvenienttoMaintenanceandRepair.Inaddition,thesystemwilltakeuponlyasmallamountoftheMCUI/Oandmemory,sothatthesystemhasfunctionalspaceforexpansion.Keywords:AT89C51,latticeLEDspaneldisplay,serialcommunication二、引言 LED显示屏可以显示变化的数字、文字、图形图像;不仅可以用于室内环境还
5、可以用于室外环境,具有投影仪、电视墙、液晶显示屏无法比拟的优点。LED之所以受到广泛重视而得到迅速发展,是与它本身所具有的优点分不开的。这些优点概括起来是:亮度高、工作电压低、功耗小、小型化、寿命长、耐冲击和性能稳定。LED的发展前景极为广阔,目前正朝着更高亮度、更高耐气候性、更高的发光密度、更高的发光均匀性,可靠性、全色化方向发展。我参考了有关书刊,设计了这款LED显示屏。三、设计任务要求本次实验要求用24块8*8点阵做成显示屏,由单片机89C51及其外围器件构成主控电路,由74HC595及外围器件构成驱动部分,控制显示文字信息显示屏动态扫描,单片机程序语言由C语言编制,显示内容及显示方式自
6、定,我做的是串行输入并行输出,显示汉字为“新年快乐”。在此次项目中,我负责软件程序编写部分。四、软件设计4.1流程图:图1 流程图4.2程序:#includeREG52.H#includeunsigned char x424=0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x07,0x0c,0xff,0xf7,0xce,0x80,0x2b,0x03,0x87,0x0c,0x60,0xc0,0xe7,0x81,0x3b, 0x00,0x06,0x00,0x08,0x81,0x00,0x00,0x00,0xe3,0x7f,0x0c,0x62,0xc1,0
7、xc7,0x80,0x2b,0x03,0xe6,0x0c,0x60,0x40,0xc8,0x01,0x11, 0x00,0x06,0x1c,0x0c,0x81,0xfb,0x02,0x00,0x02,0x07,0x0c,0x62,0x60,0x83,0x82,0x2b,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x01, 0x00,0x00,0x1c,0xfd,0x87,0x3b,0x87,0x3a,0xc3,0x1f,0xcd,0xff,0xfe,0x87,0xa3,0x3b,0x02,0x00,0xc1,0x7a,0xf2,0x00,0x00,0x01, /0x
8、e1,0x7f,0x1e,0xff,0x07,0x12,0x87,0x3a,0x02,0x07,0xed,0xff,0xfe,0xff,0xbf,0x3b,0x02,0x00,0x00,0x5a,0x92,0x00,0x00,0x01, /0xc0,0x31,0x07,0xf2,0x01,0x02,0x86,0x2a,0x42,0x27,0x0c,0x60,0x81,0x83,0x03,0x11,0x06,0x00,0xc1,0x5a,0x92,0x00,0x00,0x81, / 0x83,0x19,0xc1,0x60,0x91,0x01,0x82,0x2b,0x62,0x67,0x0c,0x
9、60,0x01,0x83,0x02,0x01,0x0c,0x00,0x40,0x5a,0x92,0x00,0x00,0xc0, / 0x03,0x0f,0xfe,0xff,0xb3,0x99,0x82,0x2b,0x23,0x57,0x0c,0x60,0x81,0x93,0x03,0x11,0xf9,0xff,0xc7,0x7a,0xf2,0x81,0xff,0x7e ,i,j,k,temp,t,s,f;sbit sj_1= P35;sbit cp_1= P34;sbit sj_2= P30;sbit cp_2= P31;sbit WE=P36;sbit OE=P37;sbit CS=P27;
10、#define nop() _nop_()#define uchar unsigned charunsigned char xdata *add;void write() uchar i,j; add=0x4000;/数据存储的起始地址 for(i=0;i8;i+)/连续存储14个数据 for(j=0;j24;j+) *add=xij; add+; char read(f)/uchar i,j; /读取数据的起始地址 /for(i=0;i8;i+)/连续读取14个数据 / / for(j=0;j24;j+)/ f=*add; add+; return f;/ / main() write();
11、 while(1) / add=0x4000; for(k=0;k8;k+) t=0; s=0; for(i=0;i24;i+) ; temp=xki; if(t%3)=0) sj_1=1; cp_1=0x10&(0X10s); sj_1=0; s+; t+; for(j=0;jj); cp_2=0; P3=(P3&0X19)|0x02; 五、体会本次的项目,我虽然没有参与硬件电路部分的设计,但是,编写程序之前已经和设计硬件电路部分的同学沟通好负责各个功能的引脚才开始编写的。编写程序主要有三大难点,一是字库部分,字库是一个相当大的部分,要编写出我们所要显示的汉字的字库;二是行驱动部分;三是列驱动部分。参考一些和C语言程序设计有关的书籍我编写出了这次的程序后交给负责整体调试的同学。六、参考书籍【1】C语言高级编程及实例剖析王为青 刘变红 编著 人民邮电出版社【2】C语言实战105例 人民邮电出版社【3】C语言高级程序设计 陈天洲 编著 人民邮电出版社【4】C语言程序设计:现代方法(第二版)(美)金(King ,K.N)编著 吕秀锋 黄倩 译 人民邮电出版社【5】C语言程序设计实用教程(美)Alice E.Fischer 编译 裘岚译等 电子工业出版社