1、单片机LED点阵课程设计课 程 设 计 任 务 书题 目 单片机原理及应用课程设计 学 院 信息科学与电气工程学院 专 业 电气工程及其自动化 班 级 电气131 学生姓名 刘海宁 学 号 130812152 6 月 29 日至 7 月 5 日 共 1 周 指导教师(签字) 院长(主任) (签字) 2015年 07 月 05 日一、课程设计内容及要求综合运用单片机(STC15F2K60S2)、模拟/数字电子技术、传感器、Protel等相关知识,自拟题目,完成本次课程设计。全部题目要求经过老师的审定,并以实物形式调试完成,参加最终的课程设计作品答辩。12人一组,鼓励单人单组。二、设计原始资料单片
2、微机原理与接口技术 丁向荣 2014年 12月单片机开发实验板、开发模块单片机综合实验台(箱)、单片机实验指导书PC三、设计完成后提交的文件和图表1计算说明书部分1)方案论证报告打印版或手写版2)程序流程图3)具体程序代码 2图纸部分绘制所设计系统的具体电路原理图3.其他资料提交所设计作品演示的视频文件以及相关作品的照片四、进程安排教学内容 学时 地点资料查阅与学习讨论 1天 现代电子技术实验室分散设计 3天 现代电子技术实验室编写报告 1天 现代电子技术实验室成果验收 1天 现代电子技术实验室五、主要参考资料电子设计自动化技术基础马建国、孟宪元编 清华大学出版 2004年4月 实用电子系统设
3、计基础 姜威 2008年1月 单片机系统的PROTEUS设计与仿真 张靖武 2007年4月指导老师成绩答辩小组成绩总成绩说明:本任务书一式二份,院(部、系)、教务处各一份。 目录一、 系统功能设计要求。1二、 设计方案。2三、 LED点阵的显示原理。3四、 单片机结构。4五、 源程序、程序设计及流程图。5一、 设计要求 设计一个16*16LED点阵位置显示屏,要求可以在显示屏上可以点亮足够的led灯,组成文字和图形,并形成跑马灯、移入移出等显示特色。要求文字显示清晰,图形显示清晰,并且稳定。二、 设计方案从理论上说,不论显示图形还是文字,只要控制组成这些图形或文字的各个点所在的位置相对应的LE
4、D器件发光,就可以得到我们想要的显示结果,这种同时控制各个发光点亮灭的方法称为静态驱动显示方式。1616的点阵共有256个发光二极管,显然单片机没有这么多的端口,如果我采用锁存器来扩展端口,按8位的锁存器来计算,1616的点阵需要256/8=32个锁存器。这个数字很庞大,因为我们仅仅是1616的点阵,在实际应用中的显示屏往往要大得多,这样在锁存器上花的成本将是一个很庞大的数字。因此在实际应用中的显示屏几乎都不采用这种设计,而采用另外一种称为动态扫描的显示方法。动态扫描的意思简单地说就是逐行轮流点亮,这样扫描驱动电路就可以实现多行(比如16行)的同名列共用一套驱动器。具体就1616的点阵来说,把
5、所有同1行的发光管的阳极连在一起,把所有同1列的发光管的阴极连在一起(共阳极的接法),先送出对应第一行发光管亮灭的数据并锁存,然后选通第1行使其燃亮一定时间,然后熄灭;再送出第二行的数据并锁存,然后选通第2行使其燃亮相同的时间,然后熄灭;以此类推,第16行之后,又重新燃亮第1行,反复轮回。当这样轮回的速度足够快(每秒24次以上),由于人眼的视觉暂留现象,就能够看到显示屏上稳定的图形了。采用扫描方式进行显示时,每一行有一个行驱动器,各行的同名列共用一个驱动器。显示数据通常存储在单片机的存储器中,按8位一个字节的形式顺序排放。显示时要把一行中各列的数据都传送到相应的列驱动器上去,这就存在一个显示数
6、据传输的问题。从控制电路到列驱动器的数据传输可以采用并列方式或串行方式。显然,采用并行方式时,从控制电路到列驱动器的线路数量大,相应的硬件数目多。当列数很多时,并列传输的方案是不可取的。采用串行传输的方法,控制电路可以只用一根信号线,将列数据一位一位传往列驱动器,在硬件方面无疑是十分经济的。但是,串行传输过程较长,数据按顺序一位一位地输出给列驱动器,只有当一行的各列数据都以传输到位之后,这一行的各列才能并行地进行显示。这样,对于一行的显示过程就可以分解成列数据准备(传输)和列数据显示两部分。对于串行传输方式来说,列数据准备时间可能相当长,在行扫描周期确定的情况下留给行显示的时间就太少了,以致影
7、响到LED的亮度。解决串行传输中列数据准备和列数据显示的时间矛盾问题,可以采用重叠处理的方法。即在显示本行各列数据的同时,传送下一列数据。为了达到重叠处理的目的,列数据的显示就需要具有锁存功能。经过上述分析,就可以归纳出列驱动器电路应具有的功能。对于列数据准备来说,它应能实现串入并出的移位功能;对于列数据显示来说,应具有并行锁存的功能。这样,本行已准备好的数据打入并行锁存器进行显示时,串并移位寄存器就可以准备下一行的列数据,而不会影响本行的显示。LED驱动显示采用动态扫描方法,动态扫描方式是逐行轮流点亮,这样扫描驱动电路就可以实现多行的同名列共用一套列驱动器。以1616点阵为例,把所有同一行的
8、发光管的阴极连在一起,把所有同一列的发光管的阳极连在一起(共阴的接法),先送出对应第1列发光管亮灭的数据并锁存,然后选通第1列使其燃亮一定的时间,然后熄灭;再送出第2列的数据并锁存,然后选通第2列使其燃亮相同的时间,然后熄灭;.第16列之后,又重新燃亮第1列,反复轮回。当这样轮回的速度足够快(每秒24次以上),由于人眼的视觉暂留现象,就能看到显示屏上稳定的图形。该方法能驱动较多的LED,控制方式较灵活,而且节省单片机的资源。显示数据可通过单片机的P0,P2口接驱动电路传输到点阵行引脚。点阵的移动以下以1616点阵为例介绍点阵的移动。要显示一个字符,该字符的点阵数据可以列向(纵向)16点组字,又
9、可以行向(横向)16点组字。无论哪一种组字方法,都既可以显示字符的水平方向的移动,又可以显示竖直方向的移动。本设计主要采用汉字的左移,所以以下只作左移显示的解释列扫描方式左移动:列向组字显示字符水平方向的移动(左滚动)延长数组法。将原来字符点阵数组的16个数据重复一遍延长,点阵数组的数据个数为32个。每扫描一帧取8个数据显示,下一帧取数要在数组中后移一个数取数。循环一遍扫16帧。可以假想有两块1616的点阵模块(共32帧)水平平行排列,用一个恰好能罩住16列点阵的中空方框去罩这个点阵,第1(第1帧)罩住最左边数起第一列开始的16列,就扫描显示这16列;第2次(第2帧)使方框右移一列,罩住做左边
10、数起第2列开始的16列,就扫描显示这16列;这样每扫描完一帧使方框右移一列,最后第16次(第16帧)时,罩住左边数起的第16列开始的16列,就扫描显示这16列。如此完成16帧画面的扫描显示,也就完成了整个一次移动循环扫描、之后反复循环,即可呈现显示字符沿水平向左移动的图像因为是列向组字(列扫描方式,点阵数据为行码,上边为低位下面为高位),希望显示移动的一个字符,第1次扫描从行码的点阵数组中取第116个数据,送行码输出口,对应于这8个数据,同时用列码输出口输出列码,分别控制第116列。扫描完前16个数据之后,第2次扫描从点阵数组中取第318个数据(第18个数据与第1个数据同),送行码输出口,对应
11、于这16个数据,同时用列码输出口输出列码,仍分别控制扫第116列。第3次扫描从点阵数组中取第520个数据(第20个数据码与第2个数据码相同)扫描;如此实现字符向左移动。以上完成一个图形移动的方法,也可以看成是移动16个不同的字形。如图2.13所示,首先扫描第一个字型,同样是16行,16次扫描,16次显示;完成一个字型的扫描以后,再扫描第二个字型;完成第二个字型的扫描之后,再扫描第三个字型依此类推,即可产生该文字的左移的感觉。三、 单片机系统结构51单片机的概述单片机也被称作“单片机微型计算机”、“微控制器”、“嵌入式微控制器”,国际上采用“MCU”(MicroControllerUnit)称呼
12、单片机。如果将8位单片机的推出作为起点(1976年),那么单片机的发展的历史大致可以分为4个阶段。第一阶段是单片机探索阶段,主要探索如何把计算机的主要部件集成在单芯上;第二阶段是单片机完善阶段,完善了8位单片机的并行总线结构、外围功能单元由CPU集中管理模式、体现控制特性的位地址空间和位操作方式、指令系统趋于丰富和完善,并且增加了许多突出控制功能的指令;第三阶段是向微控制器发展的阶段,说的是在51系列的基本结构的基础上,加强了外围电路的功能,突出了单片机的控制功能,将一些用测控对象的模数转换器、数模转换器、程序运行监视器、脉宽调制器等纳入芯片中,体现单片机的微控制器特征;第四阶段是单片机的全面
13、发展阶段,很多大半导体和电气厂商都开始加入单片机的研制和生产,单片机世界出现了百花齐放,欣欣向荣的景象。随着单片机在各个领域全面深入地发展和应用,出现了高速、大寻址范围、强运算能力的8位、16位、32位通用型单片机,以及小型谦价的专用型单片机。目前,单片机正朝着高性能和多品种方向发展,今后单片机的发展趋势将是进一步向着CMOS化、低功耗、小体积、大容量、高性能、低价格和外围电路内装等方面发展。 单片机的组成单片机通过内部总线把计算机的各主要部件连为一体,其内部总线包括地址总线、数据总线和控制总线。其中,地址总线的作用是为进行数据交换时提供地址,CPU通过将地址输出到存储器或I/O接口;数据总线
14、用于在CPU与存储器或I/O接口之间或存储器与外设之间交换数据;控制总路线包括CPU发出的控制信号线和外部送入CPU的应答线等。四、 源程序、程序设计及流程图显示驱动程序(显示屏扫描函数)流程图。以下是1616点阵LED电子显示屏的源程序,分别采用C及汇编编写,C程序在Keil uVision2 V2.30(C51.exe V7.0)环境下调试通过。/*-1616点阵LED显示屏程序MCU AT89C51 XAL 24MHzBuilde by Gavin Hu, 2003.8.15-*/#include #define BLKN 2 /列锁存器数sbit G = 0x97; /P1.7为显示允
15、许控制信号端口sbit RCLK = 0x96; /P1.6为输出锁存器时钟信号端sbit SCLR = 0x95; /P1.5为移位寄存器清端void delay(unsigned int); /延时函数unsigned char data dispram32; /显示缓存/*- 主函数 void main(void)-*/void main(void) unsigned char code Bmp32=/字模表 0xF9,0xBF,0xC7,0xAF,0xF7,0xB7,0xF7,0xB7,0xF7,0xBF,0x00,0x01,0xF7,0xBF,0xF7,0xB7, 0xF1,0xD7
16、,0xC7,0xCF,0x37,0xDF,0xF7,0xAF,0xF6,0x6D,0xF7,0xF5,0xD7,0xF9,0xEF,0xFD /*我*/, 0xFF,0x07,0xC0,0x6F,0xED,0xEF,0xF6,0xDF,0xC0,0x01,0xDD,0xFD,0xBD,0xFF,0xC0,0x03, 0xFB,0xFF,0xF8,0x0F,0xF3,0xDF,0xF4,0xBF,0xEF,0x3F,0x9C,0xCF,0x73,0xF1,0xCF,0xFB /*爱*/, 0xF7,0xDF,0xF9,0xCF,0xFB,0xBF,0xC0,0x07,0xDE,0xF7,0xC0
17、,0x07,0xDE,0xF7,0xDE,0xF7, 0xC0,0x07,0xDE,0xF7,0xFE,0xFF,0x00,0x01,0xFE,0xFF,0xFE,0xFF,0xFE,0xFF,0xFE,0xFF /*单*/, 0xFF,0xBF,0xEF,0xBF,0xEF,0xBF,0xEF,0xBB,0xE0,0x01,0xEF,0xFF,0xEF,0xFF,0xEF,0xFF, 0xE0,0x0F,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xDF,0xEF,0xDF,0xEF,0xBF,0xEF,0x7F,0xEF /*片*/, 0xEF,0xFF,0xEF,0x0
18、7,0xEF,0x77,0x01,0x77,0xEF,0x77,0xEF,0x77,0xC7,0x77,0xCB,0x77, 0xAB,0x77,0xAF,0x77,0x6E,0xF7,0xEE,0xF5,0xED,0xF5,0xED,0xF5,0xEB,0xF9,0xEF,0xFF /*机*/, 0xF8,0x3F,0xE7,0xCF,0xDF,0xF7,0xBF,0xFB,0xB3,0x9B,0x73,0x9D,0x7F,0xFD,0x7F,0xFD, 0x6F,0xED,0x67,0xCD,0xB3,0x9B,0xB8,0x3B,0xDF,0xF7,0xE7,0xCF,0xF8,0x3F
19、,0xFF,0xFF /* */;register unsigned char i,j,k,l;SCON = 0x00; /串口工作模式0:移位寄存器方式TMOD = 0x01; /定时器T0工作方式1:16位方式TR0 = 1; /启动定时器T0P1 = 0x3f; /P1端口初值:允许接收、锁存、显示IE = 0x82; /允许定时器T0中断while (1) delay(2000); /延时2秒 for (i=0;i32;i+) /显示效果:卷帘出 disprami = Bmp5i; if (i%2) delay(100); / delay(3000); for (i=0; i6; i+
20、) /显示效果:上滚屏 for (j=0; j16; j+) for (k=0; k15; k+) dispramk*BLKN = dispram(k+1)*BLKN; dispramk*BLKN+1 = dispram(k+1)*BLKN+1; dispram30 = Bmpij*BLKN; dispram31 = Bmpij*BLKN+1; delay(100); / delay(3000); for (i=0; i6; i+) /显示效果:左跑马 for (j=0; j2; j+) for (k=1; k9; k+) for (l=0; l16; l+) dispraml*BLKN =
21、dispraml*BLKN7; dispraml*BLKN+1 = dispraml*BLKN+1(8-k); delay(100); /end (k=0; k16; k+) /end for (i=0; i; i+)/ delay(3000); for (i=0;i32;i+) /显示效果:卷帘入 disprami = 0x00; if (i%2) delay(100); / /end while (1)/*延时函数*/void delay(unsigned int dt)register unsigned char bt;for (; dt; dt-) for (bt=0; bt255;
22、bt+);/*显示屏扫描(定时器T0中断)函数*/void leddisplay(void) interrupt 1 using 1register unsigned char i, j=BLKN;TH0 = 0xF8; /设定显示屏刷新率每秒62.5帧TL0 = 0x30;i = P1; /读取当前显示的行号i = +i & 0x0f; /行号加1,屏蔽高4位do j-; SBUF = disprami*BLKN + j; /送显示数据 while (!TI); TI = 0; while (j); /完成一行数据的发送G = 1; /消隐(关闭显示)P1 &= 0xf0; /行号端口清RC
23、LK = 1; /显示数据打入输出锁存器P1 |= i; /写入行号RCLK = 0; /锁存显示数据G = 0; /打开显示以下为用汇编编写的字符显示控制程序:; *; * *; * 单个16*16点阵电子屏字符显示器 *; * AT89C52 12MHZ晶振 *; * 2004.2.11 LRM *; *;显示字用查表法,不占内存,字符用16*16共阳LED点阵,;效果:向上滚动显示19个字,再重复循环。;R1:查表偏址寄存器,B:查表首址,R2:扫描地址(从00-0FH)。;R3:滚动显示时控制移动速度,单字显示可控制静止显示的时间。;*;中断入口程序;*;ORG 0000HLJMP S
24、TARTORG 0003HRETIORG 000BHLJMP INTT0ORG 0013HRETIORG 001BHRETIORG 0023HRETIORG 002BHRETI;*; 初始化程序 ;*;*; 主程序 ;*;START: MOV 20H,#00H ;清标志,00H为第16行开始扫描标志,01为1帧扫描结束标志 MOV A,#0FFH ;端口初始化 MOV P1,A MOV P2,A MOV P3,A MOV P0,A CLR P1.6 ;串行寄存器输入打入输出控制位 MOV TMOD,#01H ;使用T0作16位定时器,行扫描用。 MOV TH0,#0FCH ;1ms初值(12M
25、HZ) MOV TL0,#18H MOV SCON,#00H ;串口0方式传送显示字节 MOV IE,#82H ;T0中断允许,总中断允许 MOV SP,#70HMAIN: LCALL DIS1 ;显示准备,黑屏,1.5秒 MOV DPTR,#TAB LCALL MOVDISP ;向上滚动显示一页(8个字) INC DPH LCALL MOVDISP ;向上滚动显示一页(8个字) INC DPH LCALL MOVDISP ;向上滚动显示一页(8个字) AJMP MAIN;*; 多字滚动显示子程序 ;*;每次8个字,入口时定义好DPTR值;MOVDISP: MOV B,#00H ;向上移动显示
26、,查表偏址暂存(从00开始)DISLOOP: MOV R3,#07H ;移动速度DISMOV: MOV R2,#00H ;第0行开始 MOV R1,B ; SETB TR0 ;开扫描(每次一帧)WAITMOV: JBC 01H,DISMOV1 ;标志为1扫描一帧结束(16毫秒为1帧,每行1毫秒) AJMP WAITMOVDISMOV1: DJNZ R3,DISMOV ;1帧重复显示(控制移动速度) INC B ;显示字的下一行(每行2字节) INC B ; MOV A,R1 ;R1为0,8个字显示完 JZ MOVOUT ; AJMP DISLOOP ;MOVOUT: RET ;移动显示结束;*
27、; 单字显示子程序 ;*;显示表中某个字DIS1: MOV R3,#5AH ;静止显示时间控制(16MS*#=1.6秒)DIS11: MOV R2,#00H ;一帧扫描初始值(行地址从00-0FH) MOV DPTR,#TAB ;取表首址 MOV R1,#00H ;查表偏址(显示第一个字) SETB TR0 ;开扫描(每次一帧)WAIT11: JBC 01H,DIS111 ;为1,扫描一帧结束 AJMP WAIT11DIS111: DJNZ R3,DIS11 RET;*; 扫描程序 ;*;1MS刷新一次,每行显示1秒INTT0: PUSH ACC MOV TH0,#0FCH ;1ms初值重装
28、MOV TL0,#18H JBC 00H,GOEND ;16行扫描标志为1,结束 INC R1 ;取行右边字节偏址 MOV A,R1 MOVC A,A+DPTR ;查表 MOV SBUF,A ;串口0方式发送WAIT: JBC TI,GO ;等待发送完毕 AJMP WAIT ;GO: DEC R1 ;取行左边字节偏址 MOV A,R1 MOVC A,A+DPTR MOV SBUF,AWAIT1: JBC TI,GO1 AJMP WAIT1GO1: SETB P1.7 ;关行显示,准备刷新 NOP ;串口寄存器数据稳定 SETB P1.6 ;产生上升沿,行数据打入输出端 NOP ; NOP ; CLR P1.6 ;恢复低电平 MOV A,R2 ;修改显示行地址 ORL A,#0F0H ;修改显示行地址 MOV R2,A ;修改显
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1