1、 实训报告物理与电子科学 学院电子信息科学与技术专业 信号0802班 学生姓名: 韦腾学 号: 200856110326实习名称:专业实践综合训练(一)课题名称: LED点阵屏显示控制系统 起止时间:2010.6.27-2010.7.6指导教师:贺慧勇 文勇军 周晓萍小组成员:龙建辉 张高信 田林 周磊韦腾孔文杰实习成绩评定表学生姓名: 韦腾 学号: 200856110326 专业班级: 信号0802班 课题名称: LED点阵屏显示控制系统 评分项目要求分值得分学习态度学习态度认真,遵守纪律。10方案调研充分,方案设计合理。20工作量完成了规定的工作量。实际设计、调试效果好。40实习报告完全符
2、合撰写规范要求,结构严谨,逻辑性强,层次清晰,表述准确,文字流畅。20答辩准备充分,概念清楚,能准确流利地回答各种问题。10总分备注:成绩: 指导教师: 年 月 日- 1 - LED点阵屏显示控制系统目 录1 引言.1 1.1 设计背景.11.2 设计要求.11.3 实现功能.12 硬件设计22.1 MCS-51单片机简述. 2 2.2 芯片介绍. 3 2.3 电路设计. 43 软件设计5 3.1 Visual Basic的使用.5 3.2 SQL数据库的使用.7 3.3 编写程序实现功能.74 调试过程及问题分析.115 心得体会.13参考文献. 13附件. 14- 0 - LED点阵屏显示
3、控制系统一、引言1.1设计背景: 在车站、机场、商场、证券交易所及其他一些公众场所,经常需要发布多变的实时信息或进行广告宣传,传统的黑板和纸张等媒介手段已不能满足其多变性和实时性,而LED(发光二极管)电子屏以其修改方便、实时显示、美丽整洁等特点应运而生。LED电子显示屏随计算机及相关的微电子、光电子技术的迅猛发展而形成的一种新型信息显示媒体。它利用发光二极管构成的点阵模块或像素单元组成可变面积的显示屏幕,以可靠性高、使用寿命长、性能价格比高、低电压扫描驱动、耗电少、成本低、发光效率高、故障少、可视距离远、组态灵活、安全、响应时间短、绿色环保、控制灵活、色彩丰富以及对室内外环境适应能力强等特点
4、,在短短十来年中,迅速成长为平板显示的主流产品,已经广泛应用到银行、邮电、税务、机场、车站、证券市场及其它交易市场、医院、电力、海关、体育场等需要进行多种公告、宣传的场合。它可以显示字符、数字、汉字和简单的图形,可以根据需要使用不同字号、字型,显示亮度较高,并且对环境条件要求比较低。LED显示又可以分为单色显示和双色显示,可以按照需要的大小、形状和颜色进行组合,并用单片机控制实现各种文字或图形的变化。1.2设计要求 LED点阵屏显示控制系统 基于先修的课程设计(红外控制LED点阵屏显示)结果,涉及单片机,数据库,可视化编程等。 基本要求:设计并实现一个LED点阵屏显示控制与管理系统,能在主控计
5、算机设定和查看LED点阵屏显示内容。13实现功能:u VB界面与LED显示屏能够通过快捷设定进行相互传送数据,即单片机内部的字模。u VB界面与LED显示屏的文本数据传送能保存在数据库内,并能在SQL的查询分析器进行查询。u 能通过VB界面上的8*8复选框实现点亮对应LED显示屏上的点。如下图所示:VB界面(文本、点阵)单片机LED灯显示SQL数据库VB与LED文本内数据发送的记录1、 从文本内给数据2、 自由设定点阵回发数据给VB端点阵显示二、硬件设计2.1 MCS-51单片机简述2.1.1单片机STC89C52简介 STC89C52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可
6、编程Flash存储器。使用STC公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程。在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使其为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。2.1.2 主要特性 与MCS-51单片机产品兼容 8k字节在系统可编程Flash存储器 1000擦写周期 三级加密程序存储器 32个可编程I/O口线 三个16位定时器/计数器 八个中断源 低功耗空闲和掉电模式2.1.3 管脚说明 u VCC:电源u GND:地u P0口:P0口是一个8位漏极开路的双向I/O口,作为输出口,每位能驱动
7、8个TTL逻辑电平。u P1口:P1口是一个具有内部上拉电阻的8位双向I/O口,P1输出缓冲器能驱动4个TTL逻辑电平。u P2口:P2口是一个具有内部上拉电阻的8位双向I/O口,P2输出缓冲器能驱动4个TTL逻辑电平。u P3口:P3口是一个具有内部上拉电阻的8位双向I/O口,P3输出缓冲器能驱动4个TTL逻辑电平。u RST:复位输入。u ALE/(/PROG):地址锁存控制信号(ALE)是访问外部程序存储器时,锁存低8位地址的输出脉冲。在flash编程中,此引脚(/PROG)也是作编程输入脉冲。u /PSEN:外部程序存储器选通信号是外部程序存储器选通信号。u /EA/VPP:访问外部程
8、序存储哭控制信号。为能从0000H到FFFFH的外部程序存储器读取指令,/EA必须接GND.为了执行内部程序指令,/EA应该接VCC。在flash编程期间,/EA也接收12V的VPP电压。u XTAL1:振荡器反相放大器和内部时钟发生电路的输入端。u XTAL2:振荡器反相放大器的输出端。2.1.4 中断中断寄存器:各中断允许位在IE寄存器中,六个中断源的两个优先级也可以在IE中设置。两个外部中断(INTO 和INT1),三个定时中断(定时器0、1、2)和一个串行中断。2.1.5 空闲节电模式在空闲工作模式下,CPU处于睡眠状态,而所有片上外部设备保持激活状态。这种状态可以通过软件产生。在这种
9、状态下,片上RAM和特殊功能寄存器的内容保持不变。空闲模式可以被任一中断或者硬件的复位而终止。2.1.6 掉电模式 在掉电模式下,晶振停止工作,激活掉电模式的指令是最后一条执行指令。片上RAM和特殊功能寄存器保持原值,直到掉电模式终止。掉电模式可以通过硬件复位和外部中断退出。2.2 芯片介绍3线8线译码器74HC138引出端符号:A、B、C 译码地址输入端G1 选通端/(G2A)、/(G2B) 选通端(低电平有效)Y0Y7 译码输出端(低电平有效)功能表:88 LED点阵显示屏简介本次设计中采用88 LED点阵显示屏,简称LED点阵板或LED矩阵板。它是由64个发光二极管按行与列的顺序排列起来
10、的LED点阵模块组成显示屏体。点阵屏有单色和双色之分,且接法也有共阳极接法和共阴极接法两种,此次设计中我们使用的是单色的共阳极点阵显示屏。共阳极接法的原理图如图所示。每一行发光二极管的阳极接在一起,有一个引出端R,每一列发光二极管的阴极接在一起,有一个引出端C。当给发光二极管阳极引出端R1接低电平,阴极引出端C1接高电平,左下角发光二极管导通发光。因此对于行和列的电平扫描控制时,可以达到显示不同的数字和符号的目的。显示原理: LED显示屏中可以利用视觉惰性,采用的扫描驱动方式点亮发光二极管。2.3 电路设计锁存及LED点阵显示电路3线8线译码电路:三、软件设计3.1 Visual Basic的
11、使用Visual Basic是windows环境下最亲切的程序设计语言,不仅继承了BASIC语言简单易学、操作方便的特点,又引入了面向事件驱动编程机制和可视化的程序设计方法,大提高了Windows应用程序的开发效率。在此次课程设计中,我们使用的是Visual Basic 6.0 标准版。主要利用VB实现可视化LED显示和管理系统,即在VB窗口中设置LED灯显示的内容和在VB窗口中显示LED当前所显示的内容。并且利用VB与SQL数据库相连,将VB与LED屏的每次数据传送进行保存。主要使用的控件有:3.1.1窗体form窗体是设计图形用户界面的基本平台,所有控件都放置在窗体上,是运行是用户与应用程
12、序交互的实际窗口,窗体有自己的属性、事件。一般向工程添加了新窗体后,第一步是设置或修改窗体的属性。我们主要使用了form1_load()事件。由系统操作触发,在启动应用程序时对属性和变量进行初始化。3.1.2命令按键CommandButton命令按键是VB应用程序中最常用的控件,用户可以通过单击命令按键执行一些操作,用于启动或中断一个处理过程。一般使用command_click(),从而运行其它的动作。3.1.3标签 label 与 文本框textbox标签主要用于显示一小段文本,通常用来标注本身不具有caption属性的控件。主要在form_load()或command_click()事件中
13、对label.caption进行改变。文本框主要为用户提供了一个既能显示又能够编辑文本的区域。在此次课程设计中,主要是用是用来显示数据用的。3.1.4单选按钮OptionButton 与 复选框CheckBox单选按钮和复选框常用来表示“选中”或“不选”两种状态,用户可以通过改变综合症的状态而执行不同的操作。在此次课程设计中,主要用单选按钮来选择单片机以何种方式向LED传送数据。而复选框只要是用来在VB界面显示8*8的点阵,每点中一个复选框,把check的值给1,则熄灭led某点阵。3.1.5 MSComm串口通信按键其属性和事件如下:CommPort:设置或返回通信端口号。Settings:
14、以字符串的形式设置或返回波特率、奇偶校验、数据位和停止位。默认为9600,n,8,1、PortOpen:设置或返回通信端口的状态。也可以打开和关闭端口。True表示打开串口,false表示关闭。Input:返回和删除接收缓冲区中的字符。Output:将字符串写入发送缓冲区。InputLen 属性:设置并返回 Input 属性从接收缓冲区读取的字符数。MSComm1.OutBufferCount = 0 :清空发送缓冲区MSComm1.InBufferCount = 0 :清空接收缓冲区3.1.6 Adodc控件与DataGridAdodc控件是让应用程序接口用以访问关系或非关系数据库中的数据。
15、它不是VB的标准控件,在使用前必须先添加到工具箱中。在此次课程设计中ADODB.Command定义对数据源报告的指定命令。New ADODB.Connection 代表打开与数据源的连接,ADODB.Recordset代表来自基本表或命令报告结果的记录的全集。通过语句insert into temp (sheding) values( & temp & )将设定的值插入表内指定的列。通过语句cn.ConnectionString = Driver=SQL Server;Server=.;UID=sa; PWD=sa;Database=led使VB与数据库连接。 DataGrid是一个多二维的数
16、据风格,用来以表格形式显示数据源数据和以列为单位,设定各列的操作类型。网格中的每一行表示数据源中的一个记录,每一列表示数据源中的一个字段。在此次课程设计中,主要是用DataGrid 显示单片机与LED数据传送的记录。控制DataGrid 控件的语法是DataGrid1.DataSource=Adodc1,每运行一次Adodc1.Refresh语句,则可以刷新一次数据进入DataGrid。3.2 SQL数据库的使用SQL(Structured Query Language)语言是关系数据库的标准语言,它是一种介于关系代数与关系觉得之间的结构化查询语言,其功能不仅仅是查询,它是一个能用的、功能强大
17、的关系数据库语言。在本次课程设计中,主要使用到的功能是在查询分析器中通过使用语句对数据库进行建表、删除表等,对表内内容进行查询、删除等。在企业管理器中可进行新建数据库及查询分析器中的语句能实现的功能等。通过VB界面按键与SQL相连,对相连的表内进行刷新数据。在此次课程设计中通过企业管理器新建一个数据库led,在led中新建表temp,右击temp,设计表,对表添加列名: sn:主键,表序号,自动以1递增。 Sheding:记录VB界面对led屏所设定的内容。 Xianshi:记录VB界面接收led屏所显示的内容。 Sdate:自动在每条记录里面显示时间。3.3 编写程序实现功能在本次的综合训练
18、中,我主要负责的是单片机初始化/*单片机的初始化*/void initial(void)uchar j;SCON=0x50; /串口工作方式1,允许接收PCON=0x80; /波特率翻倍TCON=0; /定时/计数器控制 TMOD=0x21; /T1用于串口波特率控制TH0 = 255; TL0 = 0; TR0 = 1; ET0 = 1; TL1=0xfa; /初始化T1,波特率为9600(晶振11.0592M) TH1=0xfa; TR1=1; /开定时器 EA=1; /开总中断 ES=1; /开串口中断 copyOK = 1; /缓冲区准备好标志清零 receive = 0; /接收标志
19、清零 receiveOK = 0; /接受完成标志清零 sendNum = 0; /接受计数器清零 for(j=0; j8; j+) /串口缓冲区清空 bufferj = 0; for(j=0; j8; j+) /点阵显示缓冲区清空 cashj = icons0j;四、调试过程及问题分析第一次做单片机初始化,说实话不知从何下手。后来经过网上查阅资料以及老师和同学的指导,终于有点眉目。但是在编写程序的过程中仍然出现了不少错误,比如将程序的一些符号给写错,顺序弄反,虽然都是些细节的东西,但还是花了我不少时间。case 0 : for (i=0; i8; i+)cashi = icons0i; co
20、pyOK = 1; show(cash);break;case 1 : for (i=0; i8; i+)cashi = icons1i; copyOK = 1; show(cash);break;case 2 : for (i=0; i8; i+)cashi = icons2i; copyOK = 1; show(cash);break;case 3 : for (i=0; i8; i+)cashi = icons3i; copyOK = 1; show(cash);break;case 4 : for (i=0; i8; i+)cashi = icons4i; copyOK = 1; sh
21、ow(cash);break;case 5 : for (i=0; i8; i+)cashi = icons5i; copyOK = 1; show(cash);break;case 6 : send();break;case 7 : judge(sbuffer);break;default : transfer(sbuffer);break;于是结果事与愿违,在与对应的一组做交流的时候,才发现了这个问题,及时将问题解决了;五、心得体会经过两周的信号检测和处理综合训练,使我对于单片机基础知识以及应用有了更深的认识,以前课堂没注意的东西都在实践中体现出来,看来理论跟实践的差距还是很大的,我必须时
22、刻保持学习的热情,这样才能不断进步。这次实习我不仅对之前所学的一些专业知识进行了一次复习,更重要的是让我对如何运用这些知识有了一个大致的方向,从而懂得学与用的重要性。同时在做人方面我也收获很大,小组形式让我意识到团队合作的重要性,并且要学会与人交流和沟通,如果遇到分歧,就虚心听取别人意见,尽量求同存异,取长补短,共同进步!一个人的力量总是有限的,只有集众人的智慧和优点才能又快又好的完成任务。在此我很感谢我们组的组长和各位成员,没有他们的帮助,我也不会学到那么多东西。参考文献1 杨恢先、黄辉先. 单片机原理及应用M. 北京:人民邮电出版社,20062 李朝青. 单片机原理及接口技术(第3版).
23、北京:北京航空航天大学出版社,2005.3 张毅刚. MCS-51 单片机实用子程序设计. 哈尔滨:哈尔滨大学出版社, 2003.4 陈堂敏、刘焕平. 单片机原理与应用. 北京:北京理工大学出版社,2007.附件以下为单片机程序中除已提到过的代码外的其他部分:#include #define uchar unsigned char#define uint unsigned intsbit LED = P10;/串口通信指示sbit SWI = P13;/单片机上切换显示按键sbit addr1=P14; /系统片选地址线0sbit addr2=P15; /系统片选地址线1sbit addr3=
24、P16; /系统片选地址线2sbit en1=P17; /片选使能信号/*表情库数组*/uchar code icons8 = /8x8图标,高电平激活对应的点 /心 0x66,0x99,0x81,0x81,0x81,0x42,0x24,0x18 , /囧 0xff,0x81,0xa5,0xc3,0xbd,0xa5,0xa5,0xff , /禁止 0x3d,0x42,0x85,0x89,0x91,0xa1,0x42,0xbc , /钥匙 0x1c,0x10,0x1c,0x10,0x10,0x7e,0x81,0x7e , /O 0x3c,0x7e,0xe7,0xc3,0xc3,0xe7,0x7e
25、,0x3c , /K 0xc0,0xc6,0xcc,0xf8,0xf0,0xd8,0xcc,0xc6 ;uchar code scan8=0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f;uchar code tabb8=0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe;bit receive;/接收标志bit receiveOK;/接收一串字符完成标志unsigned char iconsNumber = 6;/图标个数unsigned char iconCounter;unsigned char lineCounter;uchar
26、 i,sbuffer;/串口缓冲区uchar cash8;/LED点阵显示缓冲区uchar buffer8,Num;/接收字符数据及个数uchar sendOK ;/发送完成标志uchar copyOK , sendNum ;/发送缓冲区填充完成标志/*8LED点阵显示函数1*/void show(uchar * Ptr)P0 = 0xff;en1 = 0;if (lineCounter!=8)addr1=0; addr2=0; addr3=0; P0=0xff; en1=1; en1=0;addr1=1; P0 = *(Ptr + lineCounter); en1=1; en1=0;add
27、r1=0; P0 = tabblineCounter; en1=1; en1=0; elseP0 = 0xfe;en1 = 0;lineCounter+;if (lineCounter = 9) lineCounter = 0;/*定时中断发生处理函数*/void t0(void)interrupt 1 using 0 TH0 = 255;TL0 = 0;show(cash);/*判断自定义显示命令*/void judge(uchar sbuffer)if (receive = 0)receive = 1;Num = 0;receiveOK = 0;elseif (Num 7) bufferN
28、um+ = sbuffer ;else if (Num = 7)bufferNum = sbuffer ;receive = 0;receiveOK = 1;for (i=0; i8; i+)cashi = bufferi;copyOK = 1;show(cash);/*接收到得数据转移到显示缓存里*/void transfer(sbuffer)if (Num 7) bufferNum+ = sbuffer ;else if (Num = 7)bufferNum = sbuffer ;receive = 0;receiveOK = 1;for (i=0; i8; i+)cashi = buff
29、eri;copyOK = 1;show(cash);/*串口发送函数*/void send(void) if(copyOK) /串口准备好且缓冲区准备好 i = 0; REN = 0; /发送过程中禁止接收数据 copyOK = 0; /清缓冲区准备好标志 SBUF = cashi+; /发送字符串首字符 sendNum = 7; /置发送计数器 else return; /没准备好则返回/*串口中断响应处理函数*/void serial(void) interrupt 4if(RI)/为接收中断 RI=0; /清接收中断标志LED = LED; /闪串口指示LEDsbuffer = SBUF
30、; /读取串口缓冲区数据switch (sbuffer)case 0 : if (receive = 0)/是指令 for (i=0; i8; i+)cashi = icons0i; copyOK = 1; show(cash); else/是数据 transfer(sbuffer); break;case 1 : if (receive = 0)/是指令 for (i=0; i8; i+)cashi = icons1i; copyOK = 1; show(cash); else/是数据 transfer(sbuffer); break;case 2 : if (receive = 0)/是指
31、令 for (i=0; i8; i+)cashi = icons2i; copyOK = 1; show(cash); else/是数据 transfer(sbuffer); break;case 3 : if (receive = 0)/是指令 for (i=0; i8; i+)cashi = icons3i; copyOK = 1; show(cash); else/是数据 transfer(sbuffer); break;case 4 : if (receive = 0)/是指令 for (i=0; i8; i+)cashi = icons4i; copyOK = 1; show(cas
32、h); else/是数据 transfer(sbuffer); break;case 5 : if (receive = 0)/是指令 for (i=0; i8; i+)cashi = icons5i; copyOK = 1; show(cash); else/是数据 transfer(sbuffer); break;case 6 : if (receive = 0)/是指令 send(); else/是数据 transfer(sbuffer); break;case 7 : judge(sbuffer);break;default : transfer(sbuffer);break;else/发送中断TI=0; /为单个字符发送完中断if (!sendNum) /字符串发送完REN = 1; /允许接收sendOK = 1; else /字符串未发送完SBUF = cashi+; /发送下一个字符sendNum-; /欲发送字符数减一/*主函数*/void main(void)unsigned int j;initial();while (1);/*结束*/- 15 -