16X16点阵控制接口设计

合集下载

单片机课程设计16×16led点阵显示

单片机课程设计16×16led点阵显示

16×16LED点阵显示摘要单片微型计算机(single chip microcomputer)简称单片机,它是为各类专用控制器而设计的通用或专用微型计算机系统,高密度集成了普通计算机微处理器,一定容量的RAM和ROM以及输入/输出接口,定时器等电路于一块芯片上构成的。

单片机自20世纪70年代问世以来,以极其高的性价比受到人们的重视和关注,所以应用很广,发展很快。

单片机的优点是体积小、重量轻、抗干扰能力强,对环境要求不高,价格低廉,可靠性高,灵活性好,开发较为容易。

在现代工业控制和一些智能化仪器仪表中,越来越多的场所需要用点阵图形显示器显示汉字,汉字显示屏也广泛应用到汽车报站器,广告屏等。

所以研究LED显示有实用的意义。

LED点阵显示屏作为一种新兴的显示器件,是由多个独立的LED发光二极管封装而成. LED点阵显示屏可以显示数字或符号, 通常用来显示时间、速度、系统状态等。

本设计是4个16×16点阵LED电子显示屏的设计。

整机以美国ATMEL公司生产的40脚单片机AT89C51为核心,介绍了以它为控制系统的LED点阵电子显示屏的动态设计和开发过程。

通过该芯片控制一个行驱动器74LS154和八个列驱动器74HC595来驱动显示屏显示。

该电子显示屏可以显示各种文字或单色图像,全屏能显示4个汉字,采用16块8 x 8点阵LED显示模块来组成4个16x16点阵显示模式。

显示采用动态显示,使得图形或文字能够实现静止、移入移出等多种显示方式。

文中详细介绍了LED点阵显示的硬件设计思路、硬件电路各个部分的功能及原理、相应软件的程序设计,以及使用说明等。

关键词:AT89C51单片机 LED 16*16点阵显示动态显示目录第一章绪论 (1)1.1 设计课题背景知识 (1)1.2 问题提出 (3)1.3 LED显示屏的发展 (4)第二章功能要求及方案论证 (6)2.1 功能要求 (6)2.1 功能要求 (6)第三章系统电路的设计 (9)3.1 设计框图及介绍 (9)3.2 51系列单片机简介 (9)3.3 单片机最小应用系统电路设计 (13)3.4 LED点阵介绍 (14)3.5 LED显示方式 (14)3.6 点阵的移动 (17)3.7 点阵的颜色 (21)3.8 LED阵列驱动电路 (21)3.9 单片机延时子程序 (22)第四章系统程序的设计 (24)4.1 显示驱动程序 (24)4.2 系统主程序 (25)第五章调试及性能分析 (32)5.1 开发环境介绍 (32)5.2 理论性能分析 (32)5.3 系统调试 (33)第六章总结 (34)致谢 (35)附录 (36)一. 程序代码 (36)系统主程序 (37)二.主要芯片介绍 (42)三.点阵左移显示的流程图 (46)四.元件清单 (47)五.参考文献 (47)六.仿真电路图 (48)第一章绪论1.1 设计课题背景知识单片微型计算机(single chip microcomputer)简称单片机,它是为各类专用控制器而设计的通用或专用微型计算机系统,高密度集成了普通计算机微处理器,一定容量的RAM和ROM以及输入/输出接口,定时器等电路于一块芯片上构成的。

51单片机对16×16点阵显示屏的控制设计

51单片机对16×16点阵显示屏的控制设计

51单片机对16×16点阵显示屏的控制设计1.功能16×16点阵显示屏学习板如下图所示,LED显示屏各点亮度均匀、充足,可显示图形和文字,通过文字图像取模软件获得数据码,可以显示各类图形或文字。

稳定、清晰、无串扰,图形或文字显示有静止、移入移出等显示方式。

2.基本原理16×16点阵是用4个8×8点阵屏拼合而成,8X8点阵LED工作原理说明:8×8点阵共需要64个发光二极管组成,且每个发光二极管是放置在行线和列线的交叉点上,当对应的某一列置1电平,某一行置O电平,则相应的二极管就亮;因此要实现一根柱形的亮法。

对应的一列为一根竖柱,或者对应的一行为一根横柱,因此实现柱的亮的方法如下所述:一根竖柱:对应的列置1,而行则采用扫描的方法来实现;一根横柱:对应的行置O,而列则采用扫描的方法来实现。

对于点阵移动显示的方法有很多,最简单的方法就是你先对你的点阵的每个点标上序号然后画出变化后的点阵图找到对应的点然后总结规律这样你可以写出任意的屏幕变换。

举个例子:16×16点阵左移,取字模自左到右自上到下,那么移动就是将后一列移到前一列。

行驱动采用7411C154(4—16线译码器)及PNP三极管。

列驱动采用74HCC595移位寄存器将控制位级连接入单片机,每个74H1C595数据输入端单独接单片机。

16×16点阵模块由4块小的8×8点阵模块通过级连而拼成,共16行,16列。

板上资源有STC89C51单片机芯片。

支持串口ISP在线下载,4个8×8点阵显示模块(组成一个16×16点阵)、全板总共可扩展成16个8×8点阵显示模块(组成四个16×16点阵,最多同时显示4个汉字),4位按键输入、一个手动复位按键、蜂鸣器。

16X16点阵显示综合实验new

16X16点阵显示综合实验new

EDA 综合课程设计(四)——16X16点阵显示综合实验16X16点阵控制接口一、 实验要求设计一个共阴16X16点阵控制接口,要求:在时钟信号的控制下,使点阵动态点亮,点亮方式自行设计,其中列选信号为16-4编码器编码输出。

控制器的引脚功能图如上图所示,其中:DIN[3..0]为显示花样模式选择,高电平有效;CLK 为时钟输入端;DOTOUT[15..0]为行驱动信号输出;SELOUT[3..0]为列选信号输出,为16-4编码信号。

图案1实现16X16点阵的16列同时从上往下依次点亮,全亮后16列又同时从下往上依次熄灭。

列选信号:采用与7段数码管的位选信号一样的处理方法,即列扫描信号频率大于24HZ 。

行驱动信号:可以采用移位的方法,可先定义一个16位的信号,若最高位置为‘1’,我们采用右移的方法,使每一位都置‘1’,这就实现依次点亮;当第0位也置‘1’后,给第0位置‘0’,二、实验内容16X16点阵控制接口引脚功能再采用左移的方法将每一位又重新置‘0’,这样就实现了反相依次熄灭,等第15位为‘0’时,又重新开始,以此循环。

对于其他的显示花样,请自行设计。

三、实验连线将CP端接时钟输出,并使输入频率约为1MHZ,DIN[3..0]分别接4位拨码开关,DOTOUT[15..0]分别接显示模块的L15~L0,SELOUT[3..0]分别接显示模块的SEL3~SEL0。

16X16点阵字符发生器一、实验目的:1、了解点阵字符的产生和显示原理。

2、了解E2PROM和16×16点阵LED的工作机理。

3、加强对于总线产生,地址定位的CPLD实现的理解。

二、硬件要求:1.主芯片EPF10K10LC84-4。

2.可变时钟源。

3.带有事先编程好字库/字符的E2PROM 2864。

4.16×16扫描LED点阵。

三、实验原理:16×16扫描LED点阵的工作原理同8位扫描数码管类似。

它有16个共阴极输出端口,每个共阴极对应有16个LED显示灯。

16×16点阵LED电子显示屏的设计.

16×16点阵LED电子显示屏的设计.

邮电与信息工程学院课程设计说明书课题名称:16×16点阵LED电子显示屏的设计学生学号:1002030205专业班级:计科02班学生姓名:龚建新学生成绩:指导教师:王会清课题工作时间:2013年5月6日至5月20日课程设计评审标准(指导教师用)附代码:***************************************; * *; * 单个16x16的点阵电子屏字符显示器 *; * ATA89C52 12MHz晶振 *; * 2013.5.19 *; ***************************************;显示字用查表法,不占用内存,字符用16x16共阳LED点阵,;效果:向上滚动显示5个字,再重复循环。

;R1:查表偏址寄存器,B:查表首址,R2:扫描地址(从00~0FH)。

;R3:滚动显示时控制移动速度,单字显示可控制静止显示的时间。

;*************;;中断入口程序;;*************;;ORG 0000HLJMP STARTORG 0003HRETIORG 000BHLJMP INTTOORG 0013HERTIORG 001BHERTIORG 0023HRETIORG 002BHRETI;;***********;;初始化程序;;***********;;;;***********;;主程序;;***********;;START: MOV 20H,#00H ;清零标志,00H为第16行开始扫描标志,01为1帧;扫描结束标志MOV A,#0FFH ;端口初始化MOV P1,AMOV P1,AMOV P3,AMOV P0,ACLR P1.6 ;串行寄存器输入打入输出控制位MOV TMOD,#01H ;使用T0做16位定时器,行扫描用。

MOV TH0,#0FCH ;1ms初值(12MHz)MOV TL0,#18HMOV SCON,#00H ;串口0方式传送显示字节MOV IE,#82H ;T0中断允许,总中断允许MOV SP,#70HMAIN: LCALL DISI ;显示准备,黑屏,1.5sMOV DPTR,#TABLCALL MOVDISP ;向上滚动显示一页(8个字)INC DPHLCALL MOVDISP ;向上滚动显示一页(8个字)INC DPHLACLL MOVDISP ;向上滚动显示一页(8个字)AJMP MAIN;;;***********************;;多字滚动显示程序;;***********************;;每次8个字,入口时定义好DPTR值;MOVDISP: MOV B,#00H ;向上移动显示,查表偏值暂存(从00开始)DISLOOP: MOV R3,#07H ;移动速度DISMOV: MOV R2,00H ;第0行开始MOV R1,BSETB TR0 ;开扫描(每次一帧)WAITMOV: JBC 01H,DISMOV1 ;标志为1扫描一帧结束(16ms为1帧,每行1ms) AJMP WAITMOVDISMOV1: DJNZ R3,DISMOV ;1帧重复显示(控制移动速度)INC B ;显示字的下一行(每行2字节)INC BMOV A,R1 ;R1为0,8个字显示完JZ MOVOUTAJMP DISLOOPMOVOUT: RET ;移动先是结束;;;****************;;单字显示程序;;****************;;显示表中某个字;;****************;DIS1: MOV R3,#5AH ;静止显示时间控制(16ms*#=1.6s)DIS11: MOV R2,#00H ;一帧扫描初始值(行地址从00~0FH)MOV DPTR,#TAB ;取表首址MOV R1,#00H ;查表偏址(显示第一个字)SETB TR0 ;开扫描(每次一帧)WAIT11: JBC 01H,DIS111 ;为1,扫描一帧结束AJMP WAIT11DIS111: DJNZ R3,DIS11RET;;;************;;扫描程序;;************;;1ms刷新一次,每行显示1sINTT0: PUSH ACCMOV TH0,#0FCH ;1ms初值重装MOV TL0,#18HJBC 00H,GOEND ;16行扫描标志为1,结束INC R1 ;取行右边字节偏址MOV A,R1MOVC A,@A+DPTR ;查表MOV SBUF,A ;串口0方式发送WAIT: JBC TI,GO ;等待发送完毕AJMP WAIT1GO: DEC R1 ;取行左边字节偏址MOV A,R1MOVC A,@A+DPTRMOV SBUF,AWAIT1: JBC T1,GO1AJMP WAIT1GO1: SETB P1.7 ;关行显示,准备刷新NOP ;串口寄存器数据稳定SETB P1.6 ;产生上升沿,行数据打入输出端NOPNOPCLR P1.6 ;恢复低电平MOV A,R2 ;修改显示行地址ORL A,#0F0H ;修改显示行地址MOV R2,A ;修改显示行地址MOV A,P1 ;修改显示行地址ORL A,#0FH ;修改显示行地址ANL A,R2 ;修改显示行地址MOV P1,A ;修改完成CLR P1.7 ;开行显示INC R2 ;下一行扫描地址值INC R1INC R1 ;下一行数据地址MOV A,R2ANL A,#0FHJNZ GO2SETB 00H ;R2为01H,现为末行扫描,置标志GO2: POP ACCRETIGOEND: CLR TR0 ;一帧扫描完毕,关扫描SETB 01H ;一帧扫描完毕,置结束标志POP ACCRETI ;退出;;;***************;;扫描文字表;;***************;;TAB:DB0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,00FFH,0FFH,0FFH ;黑屏DB0F9H,0BFH,0C7H,0AFH,0F7H,0B7H,0F7H,0B7H,0F7H,0BFH,000H,001H,0F7H,0BFH,0F7H, 0B7H ;我DB0F1H,0D7H,0C7H,0CFH,037H,0DFH,0F7H,0AFH,0F6H,06DH,0F7H,0F5H,0D7H,0F9H,0EFH, 0FDH ;DB0FFH,007H,0C0H,06FH,0EDH,0EFH,0F6H,0DFH,0C0H,001H,0DDH,0FDH,0BDH,0FFH,0C0H, 003H ;爱DB0FBH,0FFH,0F8H,00FH,0F3H,0DFH,0F4H,0BFH,0EFH,03FH,09CH,0CFH,073H,0F1H,0CFH, 0FBH ;DB0F7H,0DFH,0F9H,0CFH,0FBH,0BFH,0C0H,007H,0DEH,0F7H,0C0H,007H,0DEH,0F7H,0DEH, 0F7H ;单DB0C0H,007H,0DEH,0F7H,0FEH,0FFH,000H,001H,0FEH,0FFH,0FEH,0FFH,0FEH,0FFH,0FEH, 0FFHDB0FFH,0BFH,0EFH,0BFH,0EFH,0BFH,0EFH,0BBH,0E0H,001H,0EFH,0FFH,0EFH,0FFH,0EFH, 0FFH ;片DB0E0H,00FH,0EFH,0EFH,0EFH,0EFH,0EFH,0EFH,0DFH,0EFH,0DFH,0EFH,0BFH,0EFH,07FH, 0FFHDB0EFH,0FFH,0EFH,007H,0EFH,077H,001H,077H,0EFH,077H,0EFH,077H,0C7H,077H,0CBH, 077H ;机DB0ABH,077H,0AFH,077H,06EH,0F7H,0EEH,0F5H,0EDH,0F5H,0EDH,0F5H,0EBH,0F9H,0EFH, 0FFH ;DB0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH, 0FFH ;黑屏DB0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH, 0FFH ;END。

(完整版)16×16点阵LED电子显示屏的设计_毕业论文

(完整版)16×16点阵LED电子显示屏的设计_毕业论文

16×16点阵LED电子显示屏的设计摘要LED点阵显示屏作为一种新兴的显示器件,是由多个独立的LED发光二极管封装而成. LED点阵显示屏可以显示数字或符号, 通常用来显示时间、速度、系统状态等。

本设计是1616××16点阵LED电子显示屏的设计。

整机以美国ATMEL公司生产的40脚单片机AT89C51为核心,介绍了以它为控制系统的LED点阵电子显示屏的动态设计和开发过程。

通过该芯片控制一个行驱动器74LS154和两个列驱动器74L373来驱动显示屏显示。

该电子显示屏可以显示各种文字或单色图像,采用4块8 x 8点阵LED显示模块来组成一个16x16点阵显示模式。

显示采用动态显示,使得图形或文字能够实现静止、移入移出等多种显示方式。

文中详细介绍了LED点阵显示的硬件设计思路、硬件电路各个部分的功能及原理、相应软件的程序设计,以及使用说明等。

关键词:AT89C51单片机 LED 点阵显示动态显示AbstractAs a popular display device component, LED dot-matrix display board consists of several independent LED (Light Emitting Diode).The LED dot-matrix display board can display the number or sign,and it is usually used to show time, speed, the state of system etc.This design is 1 16 ×16 lattice LED electron display monitor design.The whole equipment is with the 40-pin AT89C51 MCU (Micro Controller Unit) produced by the American ATMEL company at thecore, introduced take it as the control system LED lattice electron display monitor dynamic design and the development process. Controls good driver 74LS154 an two row driver 74L373 through thischip actuates the display monitor demonstration. The electronic screen can show all kinds of written or monochrome images, one full screen display Chinese characters, four pieces of 8 x 8 dot-matrix LEDdisplay modules to form the 16x16 dot matrix display mode. Show dynamic show that makes static graphic or text can be achieved, shifted out of various formats. This paper describes the of the LEDdot matrix display, and the principle function of the various parts ofthe circuit, the corresponding software program design and the use of some such. Key words: AT89C51 Micro Controller U nitUnit; LED; LatticeDisplay;Dynamic Display目录第1章绪论1.1 选题背景LED显示屏是八十年代后期在全球迅速发展起来的新型信息显示媒体,显示屏由几万……几十万个半导体发光二极管像素点均匀排列组成。

16乘16点阵的毕业设计(利用单片机原理)

16乘16点阵的毕业设计(利用单片机原理)

16*16点阵设计摘要单片机是为各类专用控制器而设计的通用或专用的微型计算机系统,高密度集成了普通计算机微处理系统,一定容量的RAM和ROM以及输入/输出接口,定时器等电路于一块芯片上构成的。

它的优点是体积小、重量轻、抗干扰能力强,对环境要求不高,价格低廉,可靠性高,灵活性好,开发较为容易。

在现代工业控制和一些智能化仪器仪表中,越来越多的场所需要用点阵图形来显示汉字,汉字显示屏也广泛应用到汽车报站器,广告屏等。

LED显示屏分为图文显示屏和视频显示屏,均由LED矩阵块组成。

用点阵方式构成图形或文字,是非常灵活的,可以根据需要任意组成和变化,只要设计好合适的数据文件,就可以得到满意的显示效果,因而采用点阵式图文显示屏显示经常需要变化的信息是非常有效的。

本次课程设计实现LED点阵屏核心功能即汉字的多样化显示。

加深对单片机课程的全面认识和掌握,对单片机课程的应用进一步的了解。

将单片机软硬件结合起来对程序进行编辑,校验,锻炼实践能力和理论联系实际的能力。

关键词:单片机,LED显示屏,点阵目录1 课题描述 (1)2 芯片介绍 (1)2.151系列单片机简介 (2)2.274LS154芯片介绍 (6)2.374LS373芯片介绍 (7)3 硬件设计 (8)4 软件设计 (10)4.1单片机延时子程序 (10)4.2程序流程图 (12)4.3程序代码 (12)5 调试或性能分析 (15)总结.......................................................................................... 错误!未定义书签。

致谢.......................................................................................... 错误!未定义书签。

参考文献...................................................................................... 错误!未定义书签。

16x16点阵课程设计--16×16点阵LED电子显示屏的设计

16x16点阵课程设计--16×16点阵LED电子显示屏的设计

天津理工大学中环信息学院电子系单片机课程设计报告题目:16×16点阵LED电子显示屏的设计班级 10信科一指导教师田野设计成员陈诗静林樟侯成飞电子系2013年07月 05日三、课程设计进度计划及检查情况记录表四、成绩评定与评语目录一.课程设计意义 (2)二.课程设计任务书 (3)三、课程设计进度计划及检查情况记录表 (4)四、成绩评定与评语 (4)一、总体设计方案 (6)1.1 总体设计 (6)1.2 硬件设计 (7)1.3 软件设计 (14)二、设计内容 (16)2.1 系统硬件原理图与仿真 (16)2.2 程序清单 (18)三.结论、建议及课程设计体会 (22)四.参考文献 (22)一、总体设计方案1.1 总体设计1.1.1 工作原根据功能要求,应采用动态显示的设计方法,同时为简化设计,减少硬件数量,显示数据的传输采用串行传输方式。

(1)熟悉AT89S51单片机系统的使用方法。

(2)掌握动态显示原理及实现方法。

(3)初步掌握AT89S51单片机编程方法。

(4)掌握串行数据传输方式的应用。

(5)实现利用AT89S51单片机控制的LED图文屏正常工作。

1.1.2 硬件部分总体设计根据功能要求,采用AT89C51单片机,动态显示的设计方法,同时为简化设计,减少硬件数量,显示数据的传输采用串行传输方式,列扫描地址用P1口控制,总体结构框图如下:图1-1 系统总体结构框图1.2 硬件设计系统的组成,硬件的选用,芯片的特点1.2.1 8051系列的单片机AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。

图片见下图:图 1-2 89C51管脚图(1).管脚说明VCC:供电电压。

GND:接地。

P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。

当P1口的管脚第一次写1时,被定义为高阻输入。

P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。

在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。

16乘16点阵设计

16乘16点阵设计

16X16点阵设计摘要本设计使用简单单片机AT89C51作为主控制模块,利用简单的外围电路来驱动16×16的点阵LED显示屏。

在本设计中主要用两个74HC595来驱动16×16点阵显示屏的列,用AT89C51来驱动16×16点阵显示屏的行,可以最终实现——“十六乘十六点阵可调速显示屏设计” 十五个汉字的自动左移,而且它们的“进”和“出”是以滚动形式设计的。

也就是说,硬件电路大致上可以分成单片机系统及外围电路、列驱动电路和行驱动电路三部分。

从而可以实现一个室内用的16×16点阵LED图文显示屏,在目测条件下LED显示屏各点亮度均匀、充足,可显示图形和文字,显示图形或文字应稳定、清晰无串扰,图形或文字显示有静止、移入移出等显示方式。

最后,利用烧录器可以很方便的实现单片机与PC机等外围存储设备的数据传输,并能利用软件方便的进行显示内容的多样变化,它在实际生活中具有广泛的应用。

关键词:单片机,16x16点阵,滚动显示目录1 绪论 (1)1.1课题描述 (1)1.2功能要求 (1)1.3 方案论证 (1)2 系统总体方案及硬件设计 (2)2.1 显示屏总体设计方案 (2)2.2 AT89C51的原理及说明 (2)2.3 列驱动电路 (3)2.4 行驱动电路 (3)3 系统硬件电路的设计 (7)3.1AT89C51单片机 (8)3.2单片机系统及外围电路 (9)4 系统程序的设计 (9)4.1系统主程序 (10)4.2 显示驱动程序 (10)4.3单片机汇编程序 (11)总结 (21)致谢 (22)参考文献 (23)附录1.硬件原理图 (24)附录2.元器件清单表 (23)1 绪论1.1课题描述随着LED显示技术日趋成熟和普遍公共场合需求量增大,现代工业控制和一些智能化仪器仪表中,越来越多的场合所需要用点阵图形显示器显示汉字,广告屏等。

所以研究LED显示有实用意义。

1.2功能要求设计一个室内用16×16点阵LED图文显示屏,要求在目测条件下LED显示屏各点亮度均匀、充足,可显示图形和文字,显示图形或文字应稳定、清晰无串扰,图形或文字显示有静止、移入移出等显示方式。

16×16点阵设计

16×16点阵设计

16×16点阵设计课程设计2008—2009学年第二学期一、设计依据16x16点阵需要32个驱动,分别为16个列驱动及16个行驱动。

每个行与每个列可以选中一个发光管,共有256个发光管,采用动态驱动方式。

每次显示一行后再显示下一行。

本设计是利用实验仪上的16×16 LED点阵显示器,编写显示英文、汉字字符程序并进行显示,最好能移动显示。

要求在本设计过程中,通过设计合适的硬件电路及对应的软件,实现上述的控制过程,同时写出合格的课程设计说明书。

二、要求及主要内容1.硬件电路设计(1)完成89C51应用系统设计(晶振电路,上电复位电路等)(2)利用单片机I/O口或以扩展锁存器的方式控制点阵显示。

掌握单片机与16×16点阵块之间接口电路的设计方法。

2.程序设计掌握单片机与16×16点阵块之间接口电路的设计方法及编程要求完成主程序的设计及对应的子程序设计。

3.选芯片, 元件按设计连线4.完成子程序调试5.完成总调试三、途径和方法综合运用单片机和电子电路相关知识,实现本次设计。

进行程序设计时先画流程图再进行程序设计。

子程序调试按以下步骤进行:(1)实验板与PC机联机。

(2)利用实验系统16×16点阵实验单元,以两种方式控制点阵显示。

要求编制程序实现汉字点阵循环显示。

四、时间安排1.课题讲解:2小时。

2.阅读资料:10小时。

3.撰写设计说明书:12小时。

4.修订设计说明书:6小时。

五、主要参考资料[1] 胡汉才.单片机原理与接口技术[M].北京:清华大学出版社,1995.6.[2] 楼然苗等.51系列单片机设计实例[M].北京:北京航空航天出版社,2003.3.[3] 何立民. 单片机高级教程[M].北京:北京航空航天大学出版社,2001.[4] 赵晓安. MCS-51单片机原理及应用[M]. 天津:天津大学出版社,2001.3.[5]薛均义、张彦斌. MCS-51 系列单片微型计算机及其应用.--西安:西安交通大学出版社 2005.1[6] 夏继强. 单片机实验与实践教程[M]. 北京:北京航空航天大学出版社, 2001.[7]马忠梅. 单片机外围电路设计—北京:北京航空航天大学出版社2005指导教师(签字):陈万里教研室主任(签字):批准日期:年月日摘要1. 绪论 (1)2. AT89C51单片机概述 (2)2.1 AT89C51单片机的结构 (2)2.2 管脚说明 (3)2.3 振荡器特性 (4)3. 方案设计 (4)3.1 总体设计 (4)3.2 系统硬件选择 (5)3.3 硬件电路实现 (5)3.4 软件的程序实现 (6)5. 总结 (11)参考文献 (12)1 绪论LED显示屏显示画面色彩鲜艳,立体感强,静如油画,动如电影,广泛应用于车站、码头、机场、商场、医院、宾馆、银行、证券市场、建筑市场、拍卖行、工业企业管理和其它公共场所。

16×16点阵显示设计

16×16点阵显示设计

课程设计课程名称嵌入式系统课程设计课题名称16X16的点阵显示设计专业班级学号姓名指导老师2016年12月20日电气信息学院课程设计任务书课题名称16×16的点阵显示设计姓名专业班级学号指导老师课程设计时间2016年12月18日-2016年12月30日〔17、18周〕教研室意见意见:同意审核人:X望军一、任务与要求CPLD为复杂可编程逻辑器件,通过EDA技术对其进行编程,可将一个较复杂的数字系统集成于一个芯片中,制成专用集成电路芯片,并可随时在系统修改其逻辑功能.并最终完成电路的编程调试.具体要求如下:用一个16×16的点阵使用逐列循环扫描的方式不间断的显示你##的全部大写拼音字母.二、进度安排第一周:周一:集中布置课程设计相关事宜.周二~周三:子模块程序设计,顶层电路程序设计.周四~周日:子模块,顶层电路仿真.第二周:周一~周三:编程下载,系统调试.周四~周五:设计报告撰写.周五进行答辩和设计结果检查.三、参考资料1. X 原编著,可编程逻辑器件设计与应用,机械工业.2.荀殿栋,徐志军编著,数字电路设计实用手册,电子工业.3. X洪喜,陆颖编著. VHDL电路设计实用教程清华大学.目录1.总体设计思路与功能设计11.1.基本原理11.2.总体设计框图21.3.顶层文件设计22.单元电路设计32.1列循环扫描模块3.2.2字符样式设计模块32.3循环扫描与延时模块42.4整个程序53.系统调试与仿真93.1 开发环境介绍93.2.1 创建工程93.2.2 编译前设计93.2.3 全程编译113.2.4时序仿真124.下载调试135.心得体会146.参考文献14一、总体设计思路1.1基本原理LED 就是Light Emitting Diode〔发光二极管〕的缩写.在某些半导体材料的PN结中,注入的少数载流子与多数载流子复合时会把多余的能量以光的形式释放出来,从而把电能直接转换为光能.PN结加反向电压,少数载流子难以注入,故不发光.这种利用注入式电致发光原理制作的二极管叫发光二极管,通称LED.LED显示屏是一种通过控制半导体发光二极管的显示方式,用来显示文字、图形、图像、动画、行情、视频、录像信号等各种信息的显示屏幕.16×16扫描LED点阵的工作原理同8位扫描数码管类似.它有16个共阴极输出端口,每个共阴极对应有16个LED显示灯,所以其扫描译码地址需4位信号线〔SEL0-SEL3〕,其汉字扫描码由16位段地址〔0-15〕输入. 通过时钟的每列扫描显示完整汉字.点阵LED一般采用扫描式显示,实际运用分为三种方式:〔1〕点扫描〔2〕行扫描〔3〕列扫描若使用第一种方式,其扫描频率必须大于16×64=1024Hz,周期小于1ms即可.若使用第二和第三种方式,则频率必须大于16×8=128Hz,周期小于7.8ms即可符合视觉暂留要求.此外一次驱动一列或一行〔8颗LED〕时需外加驱动电路提高电流,否则LED亮度会不足.实验箱上为我们提供了16*16的点阵显示模块.通过观察,我们可以看到,此点阵显示屏即为16行、16列的LED显示灯.那么控制这些灯的亮暗分布,就能达到字符显示的目的.首先输出预定义"吕、苏、田、口〞四个汉字,显示屏上的灯的亮暗情况具体应如何.如第一个汉字吕:00000000000000000000000000000000000000000111110000000000010001000000000001111100000000000000000000000000000000000000000000000000如果高电平‘1’时表示灯是亮的,低电平‘0’时灯是暗的,这样上面的灯呈现在我们眼前的就是吕字了.依次类推,我们就可以设计出所有要显示的汉字了.这样这些汉字就好象是被我们当作了固定模型了.但如何点亮这些灯呢,这就要求有一个脉冲循环扫描的电路,我们采用列扫描,当扫描的和我们先设计好的汉字模型的高电平相匹配时,灯就相应的点亮.由于扫描的速度很快,我们人的眼睛并不会感到灯的闪烁,所以每扫描完16列就会显示在我们眼中一个汉字了.但要所有的汉字就可以依次的显示出来并不停的循环显示,就还要再有一个时序控制电路来控制.此时序控制电路象一个计数器,有自动清零的功能,这样就可以实现循环的效果了.1.2设计框图图1.2 总体设计框图1.3顶层文件设计图1.3顶层文件设计 时序控制 扫描控制显示控制 译码输出二、单元电路设计2.1列循环扫描通过对每一列的扫描来完成对字母的现实,只要扫描的频率足够快,就能给人以连续的感觉.因此要控制扫描的频率,不能太低,否则,就会造成视觉上的不连续,输入一个时钟信号,输出为4位二进制〔用sel表示〕列选信号,用来选中列,进行扫描,扫描程序如下:Library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;Entity dz_xs isPort<enable,clk:in std_logic; --端口定义输入信号Sel:out std_logic_vector<3 downto 0>>; --端口定义输出信号End dz_xs;Architecture count of dz_xs isSignal lie:std_logic_vector<3 downto 0>;BeginProcess<clk,enable> --脉冲、使能信号beginIf clk'event and clk='1'thenIf enable='1' thenIf lie>"0000" thenLie<=lie-"0001";ElseLie<="1111";End if;End if;End if;Sel<=lie;End process;2.2字符样式设计本环节是建立一个数据库,使之能在扫描的同时读取所需要的信息,从而完成汉字的显示.本次设计"吕、苏、田、口〞汉字样式设计程序如下:Library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;Entity dz_xs isPort<enable,clk:in std_logic; --端口定义输入信号h0,h8:out std_logic_vector<7 downto 0>>; --端口定义输出信号〔h0-列数据输出,h8-代表行数据输出〕End dz_xs;Architecture count of dz_xs isSignal lie:std_logic_vector<3 downto 0>; --信号标志Signal past1:std_logic_vector<1 downto 0>;BeginProcess<enable,clk> --脉冲、使能信号BeginIf clk'event and clk='1'thenIf enable='1' thenCase lie isWhen "00"=>Case lie is --"吕〞字设计When "0011"=>h0<="00000000";h8<="01111110";When "0101"=>h0<="01000010";h8<="01000010"; When "0110"=>h0<="01000010";h8<="01000010"; When "0111"=>h0<="01000010";h8<="01000010"; When "1000"=>h0<="01000010";h8<="01000010"; When "1001"=>h0<="01000010";h8<="01000010"; When "1010"=>h0<="01000010";h8<="01000010"; When "1011"=>h0<="01000010";h8<="01000010"; When "1100"=>h0<="01111110";h8<="01000010"; When "1101"=>h0<="00000000";h8<="01111110"; When others=>h0<="00000000";h8<="00000000"; End case;When "01"=>Case lie is --"苏〞字设计When "0011"=>h0<="00100000";h8<="00000000"; When "0100"=>h0<="00100000";h8<="00000000"; When "0101"=>h0<="00100000";h8<="10001100"; When "0110"=>h0<="01110000";h8<="10000000"; When "0111"=>h0<="00101000";h8<="10000000"; When "1000"=>h0<="00100011";h8<="11111100"; When "1001"=>h0<="00100000";h8<="10000000"; When "1010"=>h0<="00101000";h8<="10001100"; When "1011"=>h0<="01110000";h8<="10000110"; When "1100"=>h0<="00100000";h8<="11111110"; When "1101"=>h0<="00100000";h8<="00001100";End case;When "10"=>Case lie is --"田〞字设计When"0100"=>h0<="00011111";h8<="11110000"; When"0101"=>h0<="00010001";h8<="00010000"; When"0110"=>h0<="00010001";h8<="00010000"; When"0111"=>h0<="00010001";h8<="00010000"; When"1000"=>h0<="00011111";h8<="11110000"; When"1001"=>h0<="00010001";h8<="00010000"; When"1010"=>h0<="00010001";h8<="00010000"; When"1011"=>h0<="00010001";h8<="00010000"; When"1100"=>h0<="00011111";h8<="11110000"; When others=>h0<="00000000";h8<="00000000"; End case;When "11"=>Case lie is --"口〞字设计When"0101"=>h0<="00011111";h8<="11100000"; When"0110"=>h0<="00010000";h8<="00100000"; When"0111"=>h0<="00010000";h8<="00100000"; When"1000"=>h0<="00010000";h8<="00100000"; When"1001"=>h0<="00010000";h8<="00100000"; When"1010"=>h0<="00010000";h8<="00100000"; When"1011"=>h0<="00011111";h8<="11100000"; When others=>h0<="00000000";h8<="00000000";End case;End if;End if;End process;2.3循环扫描与期间的延时环节为使汉字不断地循环显示,并且使每个汉字之间有停顿,就需要在中间加一定的延时和循环环节.在这一环节中,可以通过修改其数值来控制每个字母的显示时间,其程序如下:process<clk>variable int: integer range 0 to 10000;beginif clk’event and clk=’1’thenif int<10000 thenint:=int+1;elseint:=0;if next1=〞11〞thennext1<=〞00〞;elsenext1<= next1+’1’;end if;end if;end if;end process;2.4总程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity yz_ok isport<enable,clk:in std_logic;sel:out std_logic_vector<3 downto 0>; h0,h8:out std_logic_vector<7 downto 0>>;end yz_ok;architecture count of yz_ok issignal lie:std_logic_vector<3 downto 0>;signal next1: std_logic_vector<1 downto 0>;begina1:process<clk,enable>beginIf clk'event and clk='1'thenIf enable='1' thenIf lie>"0000" thenLie<=lie-"0001";ElseLie<="1111";End if;End if;End if;Sel<=lie;End process;a2:process<enable,clk>beginIf clk'event and clk='1'thenIf enable='1' thenCase next1 isWhen "00"=>Case lie isWhen "0011"=>h0<="00000000";h8<="01111110"; When "0100"=>h0<="01111110";h8<="01000010"; When "0101"=>h0<="01000010";h8<="01000010"; When "0110"=>h0<="01000010";h8<="01000010"; When "0111"=>h0<="01000010";h8<="01000010"; When "1000"=>h0<="01000010";h8<="01000010"; When "1001"=>h0<="01000010";h8<="01000010"; When "1010"=>h0<="01000010";h8<="01000010"; When "1011"=>h0<="01000010";h8<="01000010"; When "1100"=>h0<="01111110";h8<="01000010"; When "1101"=>h0<="00000000";h8<="01111110"; When others=>h0<="00000000";h8<="00000000"; End case;When "01"=>Case lie isWhen "0011"=>h0<="00100000";h8<="00000000"; When "0100"=>h0<="00100000";h8<="00000000"; When "0101"=>h0<="00100000";h8<="10001100";When "0111"=>h0<="00101000";h8<="10000000"; When "1000"=>h0<="00100011";h8<="11111100"; When "1001"=>h0<="00100000";h8<="10000000"; When "1010"=>h0<="00101000";h8<="10001100"; When "1011"=>h0<="01110000";h8<="10000110"; When "1100"=>h0<="00100000";h8<="11111110"; When "1101"=>h0<="00100000";h8<="00001100"; When others=>h0<="00000000";h8<="00000000"; End case;When "10"=>Case lie isWhen"0100"=>h0<="00011111";h8<="11110000"; When"0101"=>h0<="00010001";h8<="00010000"; When"0110"=>h0<="00010001";h8<="00010000"; When"0111"=>h0<="00010001";h8<="00010000"; When"1000"=>h0<="00011111";h8<="11110000"; When"1001"=>h0<="00010001";h8<="00010000"; When"1010"=>h0<="00010001";h8<="00010000"; When"1011"=>h0<="00010001";h8<="00010000"; When"1100"=>h0<="00011111";h8<="11110000"; When others=>h0<="00000000";h8<="00000000";End case;When "11"=>Case lie isWhen"0110"=>h0<="00010000";h8<="00100000"; When"0111"=>h0<="00010000";h8<="00100000"; When"1000"=>h0<="00010000";h8<="00100000"; When"1001"=>h0<="00010000";h8<="00100000"; When"1010"=>h0<="00010000";h8<="00100000"; When"1011"=>h0<="00011111";h8<="11100000"; When others=>h0<="00000000";h8<="00000000";End case;When others=>h0<="00000000";h8<="00000000";End case;End if;End if;End process;a3:process<clk>variable int: integer range 0 to 10000;beginif clk'event and clk='1'thenif int<10000 thenint:=int+1;elseint:=0;if next1="11"thennext1<="00";elsenext1<= next1+'1';end if;end if;end if;end process;end count;第三章系统调试与仿真3.1开发环境介绍Quartus II 是Altera公司的综合性PLD开发软件,支持原理图、VHDL、Veril-ogHDL 以与AHDL〔Altera Hardware Description Language〕等多种设计输入形式,内嵌自有的综合器以与仿真器,可以完成从设计输入到硬件配置的完整PLD设计流程.Quartus II支持Altera的IP核,包含了LPM/MegaFunction宏功能模块库,使用户可以充分利用成熟的模块,简化了设计的复杂性、加快了设计速度.对第三方EDA工具的良好支持也使用户可以在设计流程的各个阶段使用熟悉的第三方EDA 工具.此外,Quartus II 通过和DSP Builder工具与Matlab/Simulink相结合,可以方便地实现各种DSP应用系统;支持Altera的片上可编程系统〔SOPC〕开发,集系统级设计、嵌入式软件开发、可编程逻辑设计于一体,是一种综合性的开发平台.3.2调试与仿真3.2.1 创建工程在Quartus II 中新建一个VHDL File文件,将VHDL代码输入这个文件,并保存到工作目录,名为yz_ok.vhd.利用new preject wizard 工具创建一个工程,工程名为yz_ok,顶层文件实体名为yz_ok,并将上面创建的yz_ok.vhd文件加入到工程中.3.2.2 编译前设置〔1〕选择目标芯片.用assignmemts- settings命令,弹出settings对话框,选择目标芯片为EP1C3T144C8.图3-1 选择目标器件〔2〕选择工作方式,编程方式,与闲置引脚状态单击上图中的device&pin options按钮,弹出device&pin options窗口. 在General项中选中auto-restart configuration after error,使对FPGA的配置失败后能自动重新配置,并加入JTAG用户编码.图3-2 选择配置器件工作方式在configuration项中,其下方的Generate compressed bitstreams处打勾,这样就能产生用于EPCS的POF压缩配置文件.在Configuration 选项页,选择配置器件为EPCS1,其配置模式选择为active serial.图3-3选择编程方式在Unused pins项,将目标器件闲置引脚状态设置高阻态,即选择As input,tri-stated.图3-4 设置闲置引脚状态3.2.3 全程编译设置好前面的内容之后,就可以进行编译了.选择Processing菜单中start compilation,在窗口的下方processing栏中显示编译信息.图3-5 全程编译成功完成完成后在工程管理窗口左是角显示了工程yz_ok 的层次结构和其中结构模块耗用的逻辑宏单元数.此栏的右边是编译处理流程,包括数据网表建立、逻辑综合、适配、配置文件装配和时序分析等.3.2.4时序仿真〔1〕新建一个矢量波形文件,同时打开波形编辑器.设置仿真时间为50us,保存波形文件为yz_ok.vwf.〔2〕将工程yz_ok的端口信号名选入波形编辑器中,所选的端口有clk,enable 与总线h0和h8.设置clk的时钟周期为2us,占空比为50%.图3-6 选择仿真控制仿真器参数设置.选择菜单Assignment中的Settings,在Settings窗口下选择Simulator,在右侧的simulation mode项下选择timing,即选择时序仿真,并选择仿真激励文件名yz_ok.vwf.选择simulation options栏,确认选定simulation coverage reporting; 毛刺检测Glitch detection 为1ns 宽度;选中Run simulation until all vector stimuli 全程仿真.现在所有设置进行完毕,在菜单processing项下选择start simulation,直到出现simulation was successful,仿真结束 .仿真文件simulation report 通常会自动弹出,否则选择processing simulation report .图3-7 仿真波形输出四、下载调试选择tools菜单中programmer,点击左上角的Hardware Setup,选择USB,点击start即可连接硬件,进行调试 .连接成功后,即可在实验箱中LED屏循环显示字母.如下图汉字的显示:图4-1调试结果图图4-2调试结果图五、心得体会为期两周的嵌入式课程设计完成了.整过设计过程虽然不是很顺利.不过我认真对待老师给我们的课题,中间虽然也有不少挫折,但不经历挫折怎么见风雨,在我四处查看资料,请教同学下终于完成.经过这两周的课程设计,我加深了对PLD的认识,学到了很多以前不知道的东西,也明白也PLD在现实生活中的重要应用和它的发展趋势.以前在书本上学到的东西总是不能够很好地运用到现实当中去,现在终于得到了改善,这让我感到非常的高兴.从这次实习中,我体会到,如果将我们在大学里所学的知识与更多的实践结合在一起,用实践来检验真理,使一个本科生具备较强的处理基本实务的能力与比较系统的专业知识,这才是我们学习与实习的真正目的.让我们不再是一个沉睡的孩子,让我们的无知渐渐远去,把我们所学的知识运用到实际中去,为社会出上我们的一份力.感谢老师给的这次让我们自行设计的机会,通过这次设计通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力.在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固.总的来说,这次设计的16×16点阵显示控制还是比较成功的,在设计中遇到了很多问题,最后在老师的辛勤的指导下,终于游逆而解,有点小小的成就感,终于觉得平时所学的知识有了实用的价值,达到了理论与实际相结合的目的,不仅学到了不少知识,而且锻炼了自己的能力,使自己对以后的路有了更加清楚的认识,同时,对未来有了更多的信心.最后,对给过我帮助的所有同学和指导老师再次表示忠心的感谢.六、参考文献1. X原编著,可编程逻辑器件设计与应用,机械工业.2.荀殿栋,徐志军编著,数字电路设计实用手册,电子工业.3. X洪喜,陆颖编著. VHDL电路设计实用教程,清华大学.电气信息学院课程设计评分标准。

微机原理与接口技术:16x16点阵显示

微机原理与接口技术:16x16点阵显示
0x04,0x38,0xF8,0x13,0x08,0x0A,0x08,0xFA,0xF8,0x03,0x00,0x10,0xF C,0x17,0x08,0x20 };
13
void delay(uchar t) {
uchar i,j; for(i= t; i>0; i--){
for(j=0; j<10; j++) ; } } void main() { uchar i,j; uchar count; uint bitmask; OUT(ColLow , 0xff); OUT(ColHigh, 0xff); OUT(RowLow , 0x00); OUT(RowHigh, 0x00);
知识点6.3.3
16×16 LED点阵显示接口
1
16×16点阵显示器由256个发光二极管组成,共16行每行16个发光二极 管。同一行发光二极管的阳极连在一起,同一列发光二极管的阴极连在 一起。LED点阵的显示方式采用动态扫描法,即一行一行地显示,每一 行的显示时间大约为1ms。由于人类的视觉暂留现象,将感觉到16行 LED是在同时显示的。若显示的时间太短,则亮度不够,若显示的时间 太长,将会感觉到闪烁。
#define uchar unsigned char #define uint unsigned int #define RowLow 0xb002 #define RowHigh 0xb003 #define ColLow 0xb000 #define ColHigh 0xb001 const uchar Font[32] = {0x04,0x14,0xFC,0x17,0x44,0x14,0x44,0x14,0xFC,0x17,0x44,0x14,0x 44,0x94,0xFE,0x57,

16X16点阵显示设计

16X16点阵显示设计

实验报告课程名称EDA技术使用教程实验名称16*16点阵显示综合实验实验类型验证(验证、综合、设计、创新)学院名称专业年级班级开出学期实验四、16*16点阵显示综合实验一、实验要求设计一个共阴16X16点阵控制接口,要求:在时钟信号的控制下,使点阵动态点亮,点亮方式为使点阵显示器显示自己的名字,其中列选信号为16-4编码器编码输出。

二、实验目的1、了解点阵字符的产生和显示原理。

2、了解E2PROM和16×16点阵LED的工作机理。

3、加强对于总线产生,地址定位的CPLD实现的理解。

三、硬件要求1.主芯片。

2.可变时钟源。

3.带有事先编程好字库/字符的E2PROM 2864。

4.16×16扫描LED点阵。

四、实验原理16×16扫描LED点阵的工作原理同8位扫描数码管类似。

它有16个共阴极输出端口,每个共阴极对应有16个LED显示灯。

所以其扫描译码地址需4位信号线。

要使16点阵上某个点亮,如第10行第4列的LED点亮,只要让列选信号为“0100”,从而选中第4列,再给第10行一个高电平,即可点亮该LED。

本实验通过FPGA芯片写入字形,产生扫描信号。

为了显示整个汉字,首先分布好汉字的排列,以行给汉字信息;然后以大于24HZ的频率扫描列,即每行逐一加高电平,根据人眼的视觉残留特性,使之形成整个汉字的显示。

五、VHDL语言程序代码library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity dots_test isport ( clk:in std_logic;dotout:out std_logic_vector(15 downto 0);selout:out std_logic_vector(3 downto 0);M :out std_logic_vector(3 downto 0));end dots_test;architecture a of dots_test issignal sel_tmp:std_logic_vector(3 downto 0);signal dot_tmp:std_logic_vector(15 downto 0);type dot_type is array (0 to 15) of std_logic_vector(15 downto 0);--定义16个长度为16位的数组,用来存放每一行的显示值signal dotout_tmp:dot_type;constant dotout_tmp1:dot_type:= --陶(x"0100",x"7904",x"49FE",x"5204",x"5524",x"61F4",x"5524",x"4854",x"4FFC",x"4844",x"6954",x"5154",x"41F4",x"4004",x"4014",x"4008");constant dotout_tmp2:dot_type:= --军(x"0000",x"7FFE",x"4202",x"8214",x"3FF8",x"0400",x"0900",x"1110",x"3FF8",x"0100",x"0104",x"FFFE",x"0100",x"0100",x"0100",x"0100");constant dotout_tmp3:dot_type:= --喜(x"0108",x"7FFC",x"0100",x"3FF8",x"0000",x"1FF0",x"1010",x"1FF0",x"0444",x"FFFE",x"0010",x"1FF8",x"1010",x"1010",x"1FF0",x"1010");signal scan_sel:std_logic_vector(3 downto 0);signal clk_value:std_logic_vector(2 downto 0):=(others => '1');constant clk_value_store:std_logic_vector(2 downto 0):=(others => '1');signal key_tmp:std_logic_vector(3 downto 0);beginM <= "0110"; --功能选择位选择16x16点阵功能connection:blockbegindotout <= dotout_tmp(conv_integer(scan_sel));selout <= scan_sel;end block connection;scan_display:block --扫描显示及时钟分频beginclock_divisor:process(clk)beginif rising_edge(clk) thenif (clk_value = clk_value_store) thenscan_sel <= scan_sel + 1;end if;clk_value <= clk_value + 1;end if;end process clock_divisor;end block scan_display;Free_Counter : Block -- 计数器-- 产生扫描信号Signal Q : STD_LOGIC_VECTOR(40 DOWNTO 0);Signal S : STD_LOGIC_VECTOR(2 DOWNTO 0); Begint1: PROCESS (clk) -- 计数器计数BeginIF clk'Event AND clk='1' thenQ <= Q+1;END IF;S <= Q(28 DOWNTO 26);if ( s=0) thenfor i in 0 to 15 loopdotout_tmp(i) <= dotout_tmp1(i);end loop;elsif ( s=1) thenfor i in 0 to 15 loopdotout_tmp(i) <= dotout_tmp2(i);end loop;elsif ( s=2) thenfor i in 0 to 15 loopdotout_tmp(i) <= dotout_tmp3(i);end loop;end if;END PROCESS t1;End Block Free_Counter;end a;六、实验结果七、结论和总结通过这次对16*16点阵字符发生器的设计与实践,让我加深了对VHDL语言的了解。

计算机接口程序设计-16X16点阵LED显示

计算机接口程序设计-16X16点阵LED显示

信息工程学院接口技术课程设计论文(2008~2009学年第 2 学期)论文题目:_点阵LED显示系统设计_姓名:学号:专业:计算机科学与技术年级班级:06 级 3 班指导教师:蒲攀完成日期:2009年7月10日成绩:摘要本论文主要介绍的是16×16点阵LED显示系统。

硬件部分主要使用星研ES598PCI 实验箱中的可编程并行接口芯片8155,可编程并行接口芯片8255,16×16点阵LED,8位开关等连接组成点阵LED显示控制系统的基本电路。

软件部分采用了汇编语言编写程序代码,通过判断、跳转、循环等基本技术实现LED显示点阵汉字,汉字的滚动显示;并用8位开关结合8155,实现汉字滚动显示速度和方向的控制等。

该系统显示直观,工作稳定,操作简单,与商用LED显示具有类似的显示和滚动原理,具备较强的实用价值。

关键词:点阵LED显示,16×16 LED,星研ES598PCI,8155,8255SummaryThis thesis mainly describe the LED system with 16×16. The hardwares rely on programmable parallel interface chip 8155 and 8255, LED system with 16×16, 8-bit switches of STAR ES598PCI to compose the basic electrocircuit of LED control system. The software is written in assemble language. The Chinese character rolling display is realized through determination, jumping and looping. The speed and direction of rolling is controlled with 8155 along with the 8-bit switch. This system is intuitionistic, works steadily, and is easy to manipulate. It shares the same theory of displaying and rolling with the commercial LED system, which means it have a strong use value.Keyword:LED display system, 16×16 LED, STAR ES598PCI, 8155, 8255目录1. 引言.............................................................................................................. - 5 -2. 设计环境....................................................................................................... - 5 -3. 设计要求....................................................................................................... - 6 -4. 总体设计....................................................................................................... - 6 -5. 硬件设计....................................................................................................... - 6 -5.1. 16×16点阵LED ...................................................................................... - 7 -5.2.可编程并行接口芯片8255........................................................................... - 8 -5.3.可编程并行接口芯片8155........................................................................... - 9 -5.4.总体电路构架......................................................................................... - 10 -6. 软件设计......................................................................................................- 11 -6.1.主程序流程.............................................................................................- 11 -6.2.显示子程序流程...................................................................................... - 12 -6.3.重复显示流程......................................................................................... - 12 -6.4.横/纵向显示流程 .................................................................................... - 13 -6.5.按键测试流程......................................................................................... - 15 -6.6.延时流程 ............................................................................................... - 15 -7. 系统测试..................................................................................................... - 16 -8. 总结............................................................................................................ - 17 -引言1. 引言LED(Light Emitting Diode),发光二极管,简称LED,,是一种能够将电能转化为可见光的固态的半导体器件,它可以直接把电转化为光。

16x16点阵屏控制设计

16x16点阵屏控制设计

目录引言 (5)1 硬件设计 (6)1.1 硬件总体电路设计思路 (6)1.2硬件电路总体设计实现 (6)1.3 硬件电路制作过程 (6)1.4 硬件控制模块设计实现 (8)1.5 点阵屏模块设计实现 (9)2 软件设计 (10)2.1 C语言程序........................................................错误!未定义书签。

3 电路调试 (13)3.1 电路调试过程 (14)总结....................................................................错误!未定义书签。

4谢辞 (15)参考文献 (16)附录 (17)摘要本次设计使用AT89S51单片机作为主控制模块,利用74HC595来驱动16x16的LED 点阵显示屏。

LED显示屏是一种通过控制半导体发光二极管的显示方式,它是由很多的发光二极管组成,靠灯的亮来显示字符。

LED显示屏分为数码显示屏、图文显示屏和视频显示屏,均由LED矩阵块组成。

目前由于LED显示屏造价昂贵,主要应用于比较高档的场所,主要集中在城市的繁华场所,举办的2010年上海世博会、未各项大型运动赛事等新增需求,都将促使LED显示屏的大规模发展。

此外,已架设的大型LED显示屏幕每10年将历经一换机潮,随着人们生活水平的提高,户外LED显示屏将逐渐应用于各个行业。

关键词:单片机AT89S52;74HC595;16x16LED点阵;点阵字库。

AbstractThis design uses AT89S51 micro controller as the main control module,LED dot matrix displayusing74HC595 to drive 16x16. LED display is a display control semiconductor light emitting diode through, which is composed of alight emitting diode many, by the bright lights to display character. Graphic display and LED display into the video digital display,display, by the LED matrix blocks.At present, the LED display is expensive,mainly used in high-grade places, mainly concentrated in the bustling place city,Expo 2010 Shanghai, not the big sporting events and new demand, large-scale development will promote LED display screen. In addition, LED has set up large display screen every 10 years after a replacement tide, along with the people living standard enhancement, outdoor LED screen will be gradually applied to various industries.Keywords: single chip AT89S52; 74HC595; 16x16LED lattice; lattice fonts.引言LED显示屏Light Emitting Diodede:又叫电子显示屏。

16X16点阵控制接口

16X16点阵控制接口

课程设计任务书学生姓名:专业班级:指导教师:工作单位:题目:16×16点阵控制接口初始条件:QuartusⅡ,CPLD要求完成的主要任务:设计一个共阴16×16点阵控制接口,要求:在时钟信号的控制下,使点阵动态点亮,点亮方式自行设计,其中位选信号为16-4编码器编码输出。

控制器的引脚功能图如图1所示,其中:DIN[3..0]为显示花样模式选择,高电平有效;CLK为时钟输入端;DOTOUT[15..0]为行驱动信号输出;SELOUT[3..0]为列选信号输出,为16-4编码信号。

当din输入是“0000”时,我们要实现16×16点阵的16列依次从上往下依次点亮,最后一列全亮后又依次从第一列开始从下往上先全亮再依次熄灭时,对列选信号我们采用与7段数码管的位选信号一样的处理方法,即列扫描信号频率大于24H;对行驱动信号可以采用移位的方法,图 1 16×16点阵控制接口引脚功能Z可先定义一个16位的信号,若最高位置为‘1’,我们采用右移的方法,使每一位都置‘1’,这就实现依次点亮;当第0位也置‘1’后,给第0位置‘0’,再采用左右的方法将每一位又重新置‘0’,这样就实现了反相依次熄灭,等第15位为‘0’时,又重新开始,以此循环。

显示自己的姓名。

对于din 输入其他的值的显示花样,请自行设计。

时间安排:课程设计任务布置、选题、查阅资料。

6.11设计,软件编程、仿真和调试 6.12~6.14机房检查仿真结果,验证设计的可行性和正确性。

6.15熟悉实验平台和实验箱 6.16设计的硬件调试。

6.17~6.21机房检查设计成果,提交设计说明书及答辩 6.22指导教师签名:年月日系主任(或责任教师)签名:年月日目录摘要 (I)Abstract (II)绪论 (1)1 QuartusII简介 (2)1.1 QuartusII软件简介 (2)1.2 QuartusII设计工作流程 (3)2 LED点阵显示设计 (4)2.1设计原理 (4)2.1.1总体设计方案 (4)2.1.2方案的比较 (4)2.1.3系统总体结构 (5)2.2 LED的显示原理 (5)2.3 单元模块程序设计 (6)2.3.1 分频器 (6)2.3.2 列循环扫描 (6)2.3.3字母循环扫描及延时 (6)2.3.4字库设计及字符提取 (6)2.3.5 字符显示花样及控制 (7)3 程序编译及硬件调试 (8)3.1创建工程 (8)3.2全程编译 (8)3.3硬件配置与初始化 (8)3.4显示结果及分析 (8)4心得体会 (9)参考文献: (10)附录: (11)摘要本文介绍了一种采用单片FPGA芯片进行16X16 LED点阵控制接口电路设计的方法,主要阐述如何使用新兴的EDA器件取代传统的电子设计方法。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

北华航天工业学院《电子技术》课程设计报告报告题目:16X16点阵控制接口设计作者所在系部:作者所在专业:作者所在班级:作者学号:指导教师姓名:完成时间:2012年12月13日课程设计任务书内容摘要LED显示屏广泛应用于车站、码头、机场、医院、市场和其他公共场所。

LED点阵显示是由多个独立的LED发光二极管封装而成。

LED点阵显示屏可以显示数字或符号等。

设计方案包括系统的硬件设计,软件流程图设计和VHDL语言的设计。

设计采用动态扫描的显示方法。

LED列有4—16译码器控制。

关键词:LED 、 VHDL语言、 4—16译码器目录一、概述 (1)二、方案设计与论证 (2)三、总原理图 (2)四、元器件清单 (4)五、程序 (6)六、收获与体会 (6)七、参考文献 (6)一、概述在实验仪中,16X16点阵的列驱动电路已经做好,其列选信号送到4—16译码电路,译码电路的输出通过8只75451驱动点阵管的16条共阴极列线;DIN[3..0]为显示花样模式选择,高电平有效;CLK为时钟输入端。

二、方案设计与论证用LED显示屏显示信息,不论显示文字还是图形,都是控制与组成这些图形或文字的各个点所在位置相应的LED器件发光。

事先把需要显示的图案转换成点阵图形,在按照显示控制的要求以一定的格式形成显示数据。

对于只控制通断的的图形显示屏来说,每个LED发光器件占据数据中的1位。

三、总原理图四、原件清单LED发光二级管256个4—16译码器1个EPF10K10LC84-4芯片1个分频器1个拨码开关3个按键开关1个导线导线五、程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;use ieee.numeric_std;entity keshe isport(clk,clr : in std_logic;din : in std_logic_vector(3 downto 0);dout : out std_logic_vector(15 downto 0);selout : out std_logic_vector(3 downto 0));end keshe;architecture behave of keshe issignal din_temp:std_logic_vector(3 downto 0);signal sel_temp :std_logic_vector(3 downto 0);signal dout_temp:std_logic_vector(15 downto 0);signal flag:std_logic;signal count: std_logic_vector(3 downto 0);signal x: std_logic_vector(1 downto 0);beginprocess (clk ,din,clr)variable note:integer :=0;variable num:integer :=0;beginif clr='1' thensel_temp<=(others=>'0');dout_temp<=(others=>'0');flag<='1';dout_temp<="0000000000000001";elsif clk'event and clk='1' thenif din="0000" thensel_temp<=sel_temp+1;sel_temp<=sel_temp+1;if sel_temp="1111" thensel_temp<="0000";end if;selout<=sel_temp;num:=num+1;if num=160 thennum:=0;if flag='1' thenlop1: for i in 1 to 15 loopdout_temp(i)<=dout_temp(i-1);dout<=dout_temp;if dout_temp(15)='1' thendout_temp(15)<='0';flag<='0';end if;end loop lop1;elsif flag='0' thenlop2: for i in 15 downto 1 loopdout_temp(i-1)<=dout_temp(i);dout<=dout_temp;if dout_temp(0)='0' thendout_temp(0)<='1';flag<='1';end if;end loop lop2;end if;end if;elsif din="0001" thencount<=count+1;if count="1111" thencount<="0000";note:=note+1;if note=100 thennote:=0;x<=x+1;if x="11" thenx<="00";end if;end if;end if;if x="00" thencase count isWHEN "0000"=>SELOUT<="0000";dout <="0000000000000000";WHEN "0001"=>SELOUT<="0001";dout <="0000011100000000";WHEN "0010"=>SELOUT<="0010";dout <="0001000000010000";WHEN "0011"=>SELOUT<="0011";dout <="0001000000010000";WHEN "0100"=>SELOUT<="0100";dout <="0001000000010000";WHEN "0101"=>SELOUT<="0101";dout <="0001000000000000";WHEN "0110"=>SELOUT<="0110";dout <="0000111111111100";WHEN "0111"=>SELOUT<="0111";dout <="0000000000000000";WHEN "1000"=>SELOUT<="1000";dout <="0000111111111110";WHEN "1001"=>SELOUT<="1001";dout <="0000010000100000";WHEN "1010"=>SELOUT<="1010";dout <="0000010000100000";WHEN "1011"=>SELOUT<="1011";dout <="0000010000100000";WHEN "1100"=>SELOUT<="1100";dout <="0000000000000000";WHEN "1101"=>SELOUT<="1101";dout <="0000000000000000";WHEN "1110"=>SELOUT<="1110";dout <="0000000000000000";WHEN "1111"=>SELOUT<="1111";dout <="0000000000000000";WHEN OTHERS=>NULL;end case;end if;if x="01" thencase count isWHEN "0000"=>SELOUT<="0000";dout <="0000000010000000";WHEN "0001"=>SELOUT<="0001";dout <="0000000010000000";WHEN "0010"=>SELOUT<="0010";dout <="0000001010000100";WHEN "0011"=>SELOUT<="0011";dout <="0000001010001000";WHEN "0100"=>SELOUT<="0100";dout <="0000001000111111";WHEN "0101"=>SELOUT<="0101";dout <="0000001000000000";WHEN "0110"=>SELOUT<="0110";dout <="0000001111000000";WHEN "0111"=>SELOUT<="0111";dout <="1111110000000011";WHEN "1000"=>SELOUT<="1000";dout <="0000010011111100";WHEN "1001"=>SELOUT<="1001";dout <="0000010000001000";WHEN "1010"=>SELOUT<="1010";dout <="0000010000010000";WHEN "1011"=>SELOUT<="1011";dout <="0000010000100000";WHEN "1100"=>SELOUT<="1100";dout<="0000000000000000";WHEN "1101"=>SELOUT<="1101";dout <="0000000000000000";WHEN "1110"=>SELOUT<="1110";dout <="0000000000000000";WHEN "1111"=>SELOUT<="1111";dout <="0000000000000000";WHEN OTHERS=>NULL;end case;end if;if x="10" thencase count isWHEN "0000"=>SELOUT<="0000";dout <="0000000000000000";WHEN "0001"=>SELOUT<="0001";dout <="0000000000000000";WHEN "0010"=>SELOUT<="0010";dout <="0000100000000000";WHEN "0011"=>SELOUT<="0011";dout <="0001000000010000";WHEN "0100"=>SELOUT<="0100";dout <="0000100000010000";WHEN "0101"=>SELOUT<="0101";dout <="0000001111010010";WHEN "0110"=>SELOUT<="0110";dout <="0000000000001001";WHEN "0111"=>SELOUT<="0111";dout <="0000001111101000";WHEN "1000"=>SELOUT<="1000";dout <="0000010000001000";WHEN "1001"=>SELOUT<="1001";dout <="0000000000000000";WHEN "1010"=>SELOUT<="1010";dout <="0011111111111000";WHEN "1011"=>SELOUT<="1011";dout <="0001000010101111";WHEN "1100"=>SELOUT<="1100";dout <="0000000010001000";WHEN "1101"=>SELOUT<="1101";dout <="0000111111110000";WHEN "1110"=>SELOUT<="1110";dout <="0001000100000000";WHEN "1111"=>SELOUT<="1111";dout <="0010000100000000";WHEN OTHERS=>NULL;end case;end if;if x="11" thencase count isWHEN "0000"=>SELOUT<="0000";dout <="0000000000000000";WHEN "0001"=>SELOUT<="0001";dout <="0000000001000000";WHEN "0010"=>SELOUT<="0010";dout <="0100000001000100";WHEN "0011"=>SELOUT<="0011";dout <="0001100001000100";WHEN "0100"=>SELOUT<="0100";dout <="0000001101000100";WHEN "0101"=>SELOUT<="0101";dout<="0000000001111100";WHEN "0110"=>SELOUT<="0110";dout <="0000001101000100";WHEN "0111"=>SELOUT<="0111";dout <="0001100001000100";WHEN "1000"=>SELOUT<="1000";dout <="0010000001000100";WHEN "1001"=>SELOUT<="1001";dout <="0100000001000000";WHEN "1010"=>SELOUT<="1010";dout <="1000000001000000";WHEN "1011"=>SELOUT<="1011";dout <="0000000000000000";WHEN "1100"=>SELOUT<="1100";dout <="0000000000000000";WHEN "1101"=>SELOUT<="1101";dout <="0000000000000000";WHEN "1110"=>SELOUT<="1110";dout <="0000000000000000";WHEN "1111"=>SELOUT<="1111";dout <="0000000000000000";WHEN OTHERS=>NULL;end case;end if;elsif din="0010" thencount<=count+1;if count="1111" thencount<="0000";end if;case count isWHEN "0000"=>SELOUT<="0000";dout <="0000000000000000";WHEN "0001"=>SELOUT<="0001";dout <="0011111111111100";WHEN "0010"=>SELOUT<="0010";dout <="0010000000000100";WHEN "0011"=>SELOUT<="0011";dout <="0010000000000100";WHEN "0100"=>SELOUT<="0100";dout <="0010000000000100";WHEN "0101"=>SELOUT<="0101";dout <="0010000000000100";WHEN "0110"=>SELOUT<="0110";dout <="0010000000000100";WHEN "0111"=>SELOUT<="0111";dout <="0010000000000100";WHEN "1000"=>SELOUT<="1000";dout <="0010000000000100";WHEN "1001"=>SELOUT<="1001";dout <="0010000000000100";WHEN "1010"=>SELOUT<="1010";dout <="0010000000000100";WHEN "1011"=>SELOUT<="1011";dout <="0010000000000100";WHEN "1100"=>SELOUT<="1100";dout <="0010000000000100";WHEN "1101"=>SELOUT<="1101";dout <="0010000000000100";WHEN "1110"=>SELOUT<="1110";dout <="0011111111111100";<="0000000000000000";WHEN OTHERS=>NULL;end case;elsif din="0011" thencount<=count+1;if count="1111" thencount<="0000";end if;case count isWHEN "0000"=>SELOUT<="0000";dout <="0000000000000000";WHEN "0001"=>SELOUT<="0001";dout <="0000000000000000";WHEN "0010"=>SELOUT<="0010";dout <="0000000100000000";WHEN "0011"=>SELOUT<="0011";dout <="0000001010000000";WHEN "0100"=>SELOUT<="0100";dout <="0000010001000000";WHEN "0101"=>SELOUT<="0101";dout <="0000100000100000";WHEN "0110"=>SELOUT<="0110";dout <="0001000000010000";WHEN "0111"=>SELOUT<="0111";dout <="0010000000001000";WHEN "1000"=>SELOUT<="1000";dout <="0010000000001000";WHEN "1001"=>SELOUT<="1001";dout <="0010000000001000";<="0010000000001000";WHEN "1011"=>SELOUT<="1011";dout <="0010000000001000";WHEN "1100"=>SELOUT<="1100";dout <="0010000000001000";WHEN "1101"=>SELOUT<="1101";dout <="0010000000001000";WHEN "1110"=>SELOUT<="1110";dout <="0011111111111000";WHEN "1111"=>SELOUT<="1111";dout <="0000000000000000";WHEN OTHERS=>NULL;end case;elsif din="0100" thencount<=count+1;if count="1111" thencount<="0000";end if;case count isWHEN "0000"=>SELOUT<="0000";dout <="0000000000000000";WHEN "0001"=>SELOUT<="0001";dout <="0000000000000000";WHEN "0010"=>SELOUT<="0010";dout <="0000000100000000";WHEN "0011"=>SELOUT<="0011";dout <="0000000100000000";WHEN "0100"=>SELOUT<="0100";dout <="0000000100000000";<="0000000100000000";WHEN "0110"=>SELOUT<="0110";dout <="1111111111111111";WHEN "0111"=>SELOUT<="0111";dout <="0000000100000000";WHEN "1000"=>SELOUT<="1000";dout <="0000000100000000";WHEN "1001"=>SELOUT<="1001";dout <="0000000100000000";WHEN "1010"=>SELOUT<="1010";dout <="0000000100000000";WHEN "1011"=>SELOUT<="1011";dout <="0000000100000000";WHEN "1100"=>SELOUT<="1100";dout <="0000000100000000";WHEN "1101"=>SELOUT<="1101";dout <="0000000100000000";WHEN "1110"=>SELOUT<="1110";dout <="0000000100000000";WHEN "1111"=>SELOUT<="1111";dout <="0000000100000000";WHEN OTHERS=>NULL;end case;elsif din="0101" thencount<=count+1;if count="1111" thencount<="0000";end if;case count is<="0000000000000000";WHEN "0001"=>SELOUT<="0001";dout <="0000000000000000";WHEN "0010"=>SELOUT<="0010";dout <="0000000000000000";WHEN "0011"=>SELOUT<="0011";dout <="0000001111000000";WHEN "0100"=>SELOUT<="0100";dout <="0000110000110000";WHEN "0101"=>SELOUT<="0101";dout <="0001100000011000";WHEN "0110"=>SELOUT<="0110";dout <="0011000000001100";WHEN "0111"=>SELOUT<="0111";dout <="0110000000001100";WHEN "1000"=>SELOUT<="1000";dout <="1100000000000110";WHEN "1001"=>SELOUT<="1001";dout <="0110000000001100";WHEN "1010"=>SELOUT<="1010";dout <="0011000000011000";WHEN "1011"=>SELOUT<="1011";dout <="0001100000110000";WHEN "1100"=>SELOUT<="1100";dout <="0000011111000000";WHEN "1101"=>SELOUT<="1101";dout <="0000000000000000";WHEN "1110"=>SELOUT<="1110";dout <="0000000000000000";WHEN "1111"=>SELOUT<="1111";dout <="0000000000000000";WHEN OTHERS=>NULL;end case;end if;end if;end process;end behave;六、收获与体会通过这次课设,我不仅熟悉了VHDL语言的用运,提高了动手能力,还掌握了很多关于EDA方面的知识,收获很大。

相关文档
最新文档