利用按键开关控制点阵进行字母显示说明书
- 格式:doc
- 大小:3.55 MB
- 文档页数:29
中北大学课程设计说明书2013/2014 学年第二学期学院:专业:学生姓名:学号:课程设计题目:利用按键开关控制点阵进行字母显示起迄日期:课程设计地点:指导教师:专业负责人:下达任务书日期: 2014年6月10日目录1、课程设计目的 (1)2、课程设计内容和要求 (1)2.1、设计内容 (1)2.2、设计要求 (1)3、设计方案及实现情况 (1)3.1、设计思路 (1)3.2、工作原理及框图 (1)3.3、各模块功能描述 (3)3.4、仿真结果 (4)3.5、实物结果图 (6)4、课程设计总结 (6)5、参考文献 (7)6、附录程序清单 (8)1、课程设计目的(1)学习操作数字电路设计实验开发系统,掌握点阵显示模块的工作原理及应用。
(2)掌握组合逻辑电路、时序逻辑电路的设计方法。
(3)学习掌握可编程器件设计的全过程。
2、课程设计内容和要求2.1、设计内容利用按键开关控制点阵进行字母显示2.2、设计要求(1)学习掌握按键开关控制模块、点阵显示模块的工作原理及应用;(2)熟练掌握VHDL编程语言,编写按键开关控制模块的控制逻辑;(3)仿真所编写的程序,模拟验证所编写的模块功能;(4)下载程序到芯片中,硬件验证所设置的功能,能够实现字母显示;(5)整理设计内容,编写设计说明书。
3、设计方案及实现情况3.1、设计思路根据题目设计要求,本系统拟采用自顶向下设计方法,顶层采用原理图设计方法,将整个系统分为分频(FENPIN)、消抖(XIAODOU)、按键开关控制(BUTTON)、16×16点阵显示(LENDISP)四个模块,通过对各模块编写程序实现模块功能,最终将模块进行综合实现整个系统的功能,通过按键开关控制点阵进行二十六个字母的显示。
3.2、工作原理及框图(1)工作原理系统的输入信号有:系统时钟信号CLK,按键信号(ADD、SUB)。
系统的输出信号有:点阵行驱动输出信号(LEDOUT[0..15]),点阵列选和按键开关扫描公用信号(SEL[3..0])。
多功能点阵式大屏幕设置软件用户说明书(软件版本:一、软件安装打开及卸载软件适用操作系统:Windows 2000,Windows XP,Windows Vista,Windows 7。
软件使用需求:串口,.Net Framework 2.0。
1. 软件安装双击安装光盘中【DPMSetup.exe】文件,打开多功能点阵式大屏幕设置软件安装程序。
若电脑未安装过.Net Framework 2.0,软件会跳出.Net Framework 2.0 安装界面。
请按照默认设置完成安装。
软件安装过程中,请选择【我同意此协议】,并选择软件安装目录和开始菜单生成目录,其余可按默认设置完成软件安装。
2. 软件打开软件安装完毕后,会在桌面和开始菜单生成快捷方式【多功能点阵式大屏幕设置软件】。
默认开始菜单位置为【开始】-【程序】-【多功能点阵式大屏幕设置软件】-【多功能点阵式大屏幕设置软件】。
启动该快捷方式即可运行软件。
3. 软件卸载点击开始菜单快捷方式【卸载多功能点阵式大屏幕设置软件】即可启动卸载程序。
默认开始菜单位置为【开始】-【程序】-【多功能点阵式大屏幕设置软件】-【卸载多功能点阵式大屏幕设置软件】。
卸载程序会跳出提示框,询问用户是否确认卸载软件。
点击【是】后完成软件卸载,否则可按【否】取消卸载。
二、软件登录界面软件启动后,首先出现软件登录界面,如图1 所示。
图1 软件登录界面1. 首次登录首次使用软件或未修改用户密码时,不需要输入密码,即密码输入框留空,直接点击【登录】按键登录软件主界面。
建议登录软件后立即进行用户密码修改,防止非相关人员操作本软件。
2. 修改用户密码后登录修改用户密码后登录时,需要在【密码】文本框中输入上次设置的用户密码,并点击【登录】按键登录软件主界面。
三、软件主界面软件登录成功后,出现软件主界面,如图2 所示。
图2 软件主界面软件主界面分为七大部分,分别为:①:大屏幕连接设置②:大屏幕全部参数设置③:大屏幕广告设置④:大屏幕参数设置⑤:大屏幕时间同步设置⑥:菜单栏⑦:用户自定义状态栏1. 修改密码强烈建议首次使用本软件后立即修改用户密码。
中北大学课程设计说明书学生姓名:刘锦峰学号:08060441X40学院: 信息商务学院专业: 电子科学与技术题目: 利用键盘控制点阵进行汉字显示指导教师:王红亮段俊萍职称: 讲师2011 年 6 月 24 日目录1.课程设计目的 (2)2.课程设计内容及要求 (2)2.1设计内容 (2)2.2设计要求 (2)3.设计方案及实现情况 (2)3.1设计思路 (2)3.2工作原理及框图 (2)3.3各模块功能描述 (4)3.4仿真结果 (12)3.5试验箱验证情况 (14)4.课程设计总结 (16)5.参考文献 (16)1、课程设计目的1.学习操作数字电路设计实验开发系统,掌握点阵显示模块的工作原理及应用。
2.掌握组合逻辑电路、时序逻辑电路的设计方法。
3.学习掌握可编程器件设计的全过程。
2、课程设计内容和要求2.1、设计内容用VHDL语言编写程序,使键盘控制点阵显示模块显示汉字。
2.2、设计要求1.学习掌握键盘控制模块、点阵显示模块的工作原理及应用;2. 熟练掌握VHDL编程语言,编写键盘控制模块的控制逻辑;3. 仿真所编写的程序,模拟验证所编写的模块功能;4. 下载程序到芯片中,硬件验证所设置的功能,能够实现汉字显示;5. 整理设计内容,编写设计说明书。
3、设计方案及实现情况3.1、设计思路通过键盘扫描程序的行输出与列输入就可以确认按键的状态,再通过键盘处理程序便可识别键值。
将产生的键值信号送到4-16译码器,经过译码器译码将键值通过LED点阵显示出来。
3.2、工作原理及框图3.2.1、矩阵式键盘的工作原理矩阵式键盘又叫行列式键盘,是用I/O口线组成的行、列矩阵结构,在每根行线与列线的交叉处,二线不直接相通而是通过一个按键跨接接通。
采用这种矩阵结构只需M根行输出线和N根列输入线,就可连接M×N个按键。
通过键盘扫描程序的行输出与列输入就可确认按键的状态,再通过键盘处理程序便可识别键值。
如图1图1 4×8矩阵键盘电路原理图键盘译码电路,主要是根据当按键时键盘会输出四个KIN值(KIN3—KIN0)和三个SEL 值(SEL2—SEL0)。
目录1、课程设计目的 (2)2、课程设计内容和要求 (2)2.1、设计内容 (2)2.2、设计要求 (2)3、设计方案及实现情况 (2)3.1、设计思路 (2)3.2、工作原理及框图 (3)3.3、各模块功能描述 (4)3.4、仿真结果 (15)3.5、实验箱验证情况 (15)4、课程设计总结 (17)5、参考文献 (18)1、课程设计目的(1)学习操作数字电路设计实验开发系统,掌握点阵显示模块的工作原理及应用。
(2)掌握组合逻辑电路、时序逻辑电路的设计方法。
(3)学习掌握可编程器件设计的全过程。
2、课程设计内容和要求2.1、设计内容用VHDL语言编写程序,使按键开关控制点阵显示十进制数字。
2.2、设计要求(1)学习掌握按键开关控制模块、点阵显示模块的工作原理及应用;(2)熟练掌握VHDL编程语言,编写按键开关控制模块的控制逻辑;(3)仿真所编写的程序,模拟验证所编写的模块功能;(4)下载程序到芯片中,硬件验证所设置的功能,能够实现十进制数字的显示;(5)整理设计内容,编写设计说明书。
3、设计方案及实现情况3.1、设计思路此电路共由三个模块组成:按键消抖模块、行选通信号产生模块与列扫描控制模块。
8×8的LED点阵显示器是由64个LED组成, 内部电路如图1所示。
图1 8×8LED点阵电路原理图共阳极的8 × 8的LED点阵显示器的典型连接方式是:每一行的8个阳极连在一起,由行扫描码锁存器和驱动器的一位控制,总共8行阳极连线由8位分别控制;每一列的8个阴极连在一起,由列扫描码锁存器和驱动器的一位控制,总共8列阴极连线由8位分别控制。
本实验采用四块8 × 8的LED点阵拼成的一个16× 16点阵(16列16行)作为1位字符显示的点阵码图。
点阵式LED显示器采用逐行扫描式工作。
要使点阵显示出一个字符的编程方法是:首先选通第一行;接着,向行码锁存器写入该行的字型码(即列数据)。
点阵模块使用说明书1. 简介点阵模块是一种常见的显示设备,它由许多小LED灯组成的阵列构成。
每个LED灯可以独立控制,从而实现文字、图案、数字等的显示。
该使用说明书旨在帮助用户了解如何正确使用点阵模块,并提供一些基本操作指南。
2. 规格和参数在使用点阵模块之前,了解其规格和参数是很重要的。
以下是一些常见的规格和参数:- 尺寸:点阵模块的尺寸通常以像素为单位表示,例如8x8,16x16等。
- 电压:点阵模块的工作电压通常在3.3V到5V之间。
- 接口:点阵模块通常使用数字接口(如SPI、I2C)进行控制。
- 显示颜色:有些点阵模块只能显示单色(如红色或绿色),而其他模块可以显示多种颜色。
- 亮度和调节:有些点阵模块允许用户调节亮度和对比度。
3. 连接和控制使用点阵模块之前,首先需要将其连接到您的主控制器(如Arduino、树莓派)或开发板上。
通常,点阵模块会有一组引脚,您需要将其正确连接到相应的引脚上。
连接完成后,您可以使用适当的库或代码来控制点阵模块。
这些库和代码通常可以从开发平台的官方网站或第三方资源库中获取。
在编写代码时,您需要了解点阵模块的接口和操作命令,以正确地控制其显示。
4. 显示文本和图形一旦您成功地连接并控制了点阵模块,您就可以开始显示文本和图形了。
点阵模块通常允许您以像素为单位控制每个LED灯的状态。
通过控制特定的LED灯,您可以在点阵模块上显示所需的文本、图案或数字。
对于文本显示,您需要从字库中选择适当的字符,并使用适当的函数将其显示在点阵模块上。
您可以通过更改LED灯的状态来控制每个像素的亮度和颜色,从而实现更多复杂的显示效果。
5. 实时更新和动画效果除了静态文本和图形之外,点阵模块还允许您实时更新显示内容,并创建动画效果。
通过不断更新点阵模块的状态,您可以实现滚动文本、闪烁效果和动态图像等。
实时更新和动画效果的实现取决于您的控制代码和刷新速率。
您可以使用循环和延迟函数来控制点阵模块的刷新速度,从而实现所需的动画效果。
目录1、课程设计的目的 (2)2、课程设计内容和要求 (2)2.1 设计内容 (2)2.2 设计要求 (2)3、设计方案及实现情况 (2)3.1 设计思路 (2)3.2 工作原理及框图 (2)3.3 各功能模块描述 (6)3.4 仿真结果 (13)3. 5 实验箱验证情况 (14)4、课程设计总结 (17)4.1 自上而下的设计思想 (17)4.2 课程设计实验心得 (17)5、参考文献 (18)1、课程设计目的(1)学习操作数字电路设计实验开发系统,掌握点阵显示模块的工作原理及应用。
(2)掌握组合逻辑电路、时序逻辑电路的设计方法。
(3)学习掌握可编程器件设计的全过程。
2、课程设计内容和要求:2.1、设计内容(1)键盘扫描模块实现对键盘的扫描控制。
(2)编写控制点阵的程序,实现对点阵时序的控制,使点阵能够正常工作。
(3)添加其他功能模块,协调两个主模块更好地进行工作。
2.2、设计要求(1)学习掌握键盘控制模块、点阵显示模块的工作原理及应用;(2)熟练掌握VHDL编程语言,编写键盘控制模块的控制逻辑;(3)仿真所编写的程序,模拟验证所编写的模块功能;(4)下载程序到芯片中,硬件验证所设置的功能,能够实现字符显示;(5)整理设计内容,编写设计说明书。
3、设计方案及实现情况3.1、设计思路通过对键盘的控制来显示字符的输出,采用模块化的设计思想,对于不同的功能用不同的程序模块来实现。
基于这种设计思想,对本次课程设计题目分为以下几个模块:时序产生电路模块、键盘与点阵扫描电路模块、键盘译码模块、显示模块(此模块对应产生列字符扫描信号). 工作概况如下:当按下键盘后,键盘扫描到对应的输出信号,然后进行第一次译码,接着把译码结果传递给xiansi 模块,xianshi模块根据译码结果产生对应的列字符扫描信号,从而进行输出。
3.2、工作原理及框图1、键盘译码电路键盘中的按键可分为数字键和功能键。
数字键主要用来输入数字,但从上述内容发现,键盘所产生的输出KIN3~KIN0无法拿来直接使用;另外不同的数字按键也担负不同的功能,因此必须由键盘译码电路来规划某个按键的输出形式,以便执行相应的动作。
第4章键盘和显示器的应用在单片机应用系统中,键盘和显示器是非常重要的人机接口。
人机接口是指人与计算机系统进行信息交互的接口,包括信息的输入和输出。
常用输入设备主要是键盘,常用输出设备包括发光二极管、数码管和液晶显示器等。
4.1 键盘输入键盘用于实现单片机应用系统中的数据信息和控制命令的输入,按结构可分为编码键盘和非编码键盘。
编码键盘上闭合键的识别由专用的硬件编码器实现,并产生相应的键码值,如计算机键盘。
非编码键盘是通过软件的方法产生键码,不需要专用的硬件电路。
为了减少电路的复杂程度,节省单片机的I/O口,在单片机应用系统中广泛使用非编码键盘,主要对象是各种按键或开关。
这些按键或开关可以独立使用(称之为独立键盘),也可以组合使用(称之为矩阵式键盘)。
4.1.1 按键电路与按键抖动处理按键电路连接方法非常简单,如图4.1所示。
此电路用于通过外力使按键瞬时接通开关的场合,如单片机的RESET电路中,通过按键产生一个瞬时的低电压,CPU感知这个低电压后重启。
图4.1 按键复位电路由于按键的闭合与断开都是利用其机械弹性实现的,当机械触点断开、闭合时,会产生抖动,这种抖动操作用户感觉不到,但对CPU来说,其输出波形则明显发生变化,如图4.2所示。
图4.2 按键开、闭时的电压抖动波形按键按下和释放时的抖动时间一般为10~20ms ,按键的稳定闭合期由操作用户的按键动作决定,一般为几百毫秒到几秒,而单片机CPU的处理速度在微秒极,因此,按键的一次闭合,有可能导致CPU的多次响应。
为了避免这种错误操作,必须对按键电路进行去抖动处理。
常用的去抖动方法有硬件方式和软件方式两种。
使用硬件去抖动的方式,需要在按键连接的硬件设计上增加硬件去抖电路,比如将按键输出信号经过R-S 触发器或 RC 积分电路后再送入单片机,就可以保证按一次键只发出一个脉冲。
软件方式去抖动的基本原理是在软件中采用时间延迟,对按键进行两次测试确认,即在第一次检测到按键按下后,间隔 10ms 左右,再次检测该按键是否按下,只有在两次都测到按键按下时才最终确认有键按下,这样就可以避开抖动时间段,消除抖动影响。
51单⽚机—按键控制点阵显⽰名称:按键控制 8X8LED 点阵屏显⽰图形说明:每次按下 K1 时,会使 8X8LED 点阵屏循环显⽰不同图形。
本例同时使⽤外部中断和定时中断#include"reg52.h"#include"intrins.h"#define led P0 //宏定义typedef unsigned int u16;typedef unsigned char u8;sbit src=P3^6;//移位寄存器时钟输⼊sbit rc=P3^5;//存储寄存器时钟输⼊sbit ser=P3^4;//串⾏数据输⼊sbit key=P3^2;//按键u8 duan[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};u8 count=0;u8 i;u8 flag=0;//标志位void delay(u16 x)//延时函数1us{while(x--);}void tim_init()//定时器初始化{EA=1;//中断总允许位ET0=1;//定时计数器中断允许位TMOD=0X01;//定时器0的⽅式1 0000 0001TH0=0XD8;//⾼⼋位TL0=0XF0;//低⼋位TR0=1;//开启定时}void int0_init()//中断初始化{EX0=1;//外部中断允许位IT0=1;//下降沿触发}void c595(u8 date)//c595芯⽚初始化{u8 a;src=0;//移位寄存器时钟输⼊rc=0;//存储寄存器时钟输⼊for(a=0;a<8;a++){ser=date>>7;//选择最⾼位date<<=1;//向左移⼀位src=1;_nop_();//⼀个机器周期时间(在intrins头⽂件中)_nop_();src=0;}rc=1;_nop_();_nop_();rc=0;}void main(){led=0xcc;c595(0x00);tim_init();int0_init();while(1);}void int0() interrupt 0//中断服务函数{if(key==0){delay(4);//消抖if(key==0){while(key==0);//判断是否松⼿flag=1;}}}void tim0() interrupt 1{TH0=0XD8;TL0=0XF0;count++;if(count==50){if(flag==1){i++;c595(duan[i]);led=~led;delay(100);if(i==7){i=0;flag=0;}}count=0;}}。
点阵显示字母课程设计一、课程目标知识目标:1. 学生能理解点阵显示原理,掌握点阵与字母之间的对应关系。
2. 学生能运用点阵显示方法,正确拼写出所学的英文字母。
3. 学生了解点阵显示在信息技术领域的应用及其重要性。
技能目标:1. 学生能运用编程软件,设计并实现点阵显示字母的程序。
2. 学生通过实际操作,培养动手能力和问题解决能力。
3. 学生学会使用点阵显示技术,进行创意字母设计。
情感态度价值观目标:1. 学生培养对信息技术的兴趣和热情,增强学习自信心。
2. 学生在团队协作中,学会互相帮助,培养集体荣誉感。
3. 学生认识到科技发展对生活的影响,激发对科技创新的热情。
课程性质:本课程属于信息技术学科,以实践操作为主,结合理论知识。
学生特点:六年级学生具备一定的计算机操作能力,对新鲜事物充满好奇心,善于团队协作。
教学要求:教师需关注学生个体差异,提供针对性的指导,鼓励学生创新思考,注重实践操作能力的培养。
通过本课程的学习,使学生在掌握知识技能的同时,培养情感态度价值观。
将课程目标分解为具体学习成果,以便于教学设计和评估。
二、教学内容本课程依据课程目标,结合教材内容,组织以下教学安排:1. 理论知识:- 点阵显示原理介绍- 点阵与英文字母的对应关系- 编程软件的基本操作方法2. 实践操作:- 点阵显示字母程序设计- 创意字母设计及展示- 团队协作完成项目任务教学大纲:第一课时:- 点阵显示原理学习- 点阵与英文字母对应关系探讨第二课时:- 编程软件操作方法教学- 点阵显示字母程序设计指导第三课时:- 创意字母设计及展示- 团队协作完成项目任务教学内容进度安排:- 理论知识与实践操作相结合,逐步推进教学进度。
- 第一、二课时重点讲解点阵显示原理及编程操作。
- 第三课时以实践操作为主,巩固所学知识,培养创新能力。
教材章节关联:- 本课程教学内容与教材中关于点阵显示技术章节紧密相关。
- 学生需掌握教材中相关概念、原理和操作方法,为本课程学习打下基础。
中北大学课程设计说明书学生姓名:田晓春学号:0606024114学院: 电子与计算机科学技术学院专业: 微电子学题目: 利用键盘控制点阵进行十六进制加法计数显示指导教师:沈三民职称: 讲师2009年 7 月 11 日目录目录 (2)1、课程设计目的 (3)2、课程设计内容和要求 (3)2.1、设计内容 (3)2.2、设计要求 (3)3、设计方案及实现情况 (3)3.1、设计思路 (3)3.2、工作原理及框图 (4)3.3、各模块功能描述 (4)3.4、仿真结果 (8)3.5、实验箱验证情况 (22)4、课程设计总结 (23)5、参考文献 (23)1、课程设计目的1.学习操作数字电路设计实验开发系统,掌握矩阵键盘输入模块和点阵显示模块的工作原理及应用。
2.掌握组合逻辑电路、时序逻辑电路的设计方法。
3.学习掌握可编程器件设计的全过程。
2、课程设计内容和要求:2.1、设计内容利用键盘控制点阵实现十六进制加法计数,主要包括键盘控制模块、自动计数模块、功能控制模块和点阵显示模块。
2.2、设计要求1.学习掌握键盘控制模块、点阵显示模块的工作原理及应用;2. 熟练掌握VHDL编程语言,编写键盘控制模块的控制逻辑;3. 仿真所编写的程序,模拟验证所编写的模块功能;4. 下载程序到芯片中,硬件验证所设置的功能,能够实现十六进制数字的显示;5. 整理设计内容,编写设计说明书。
3、设计方案及实现情况3.1、设计思路根据题目设计要求,本系统拟采用自顶向下设计方法,顶层采用原理图设计方法,将整个系统分为键盘控制(KEYBOARD)、自动计数(AUTO)、功能控制(CONTROL)、16×16点阵显示(LEDDISP)四个模块,通过对各模块编写程序实现模块功能,最后将四个模块进行综合实现整个系统的功能,通过键盘控制点阵进行十六进制加法计数显示。
3.2、工作原理及框图图1 系统整体设计原理图系统的输入信号有:开关(允许输入及显示)信号RST,系统时钟信号CLK,按键信号(KININ[3..0])。
目录第1章设计任务及功能要求................. 错误!未定义书签。
1.1设计课程任务................................. 错误!未定义书签。
1.2 功能要求说明................................ 错误!未定义书签。
第2章实验方案及原理..................... 错误!未定义书签。
2.1 实验目的..................................... 错误!未定义书签。
2.2 实验设备..................................... 错误!未定义书签。
2.3 实验要求..................................... 错误!未定义书签。
2.4 实验原理..................................... 错误!未定义书签。
2.5 硬件连接图................................... 错误!未定义书签。
第3章程序流程图 ........................ 错误!未定义书签。
3.1 主程序流程图................................. 错误!未定义书签。
3.2 键值的程序流程图............................. 错误!未定义书签。
第4章实验心得与体会..................... 错误!未定义书签。
参考文献................................. 错误!未定义书签。
附录..................................... 错误!未定义书签。
第1章设计任务及功能要求1.1设计课程任务4×4 键盘在 8×8LED点阵上的应用1.2 功能要求说明给4×4键盘的每个键定义一个功能,其中把定义为0~9的键盘称为数字键,把定义成DEL的键称为删除键,把定义成ENT的键成为确认键,其他键称为保留键。
LED点阵屏上文字显示实验李宇 pb09013011实验要求:在试验板的8×8的LED点阵屏上分别显示“PLD电子技术”。
编程思想:1.首先定义控制LED点阵屏的端口组a,b,及时钟和复位端口Port ( a : inout STD_LOGIC_VECTOR (7 downto 0);b : inout STD_LOGIC_VECTOR (7 downto 0);clk : in STD_LOGIC;reset : in STD_LOGIC);2.字的跳变显示是通过改变整型变量m的值来选择扫描的程序段3.对LED点阵屏的工作方式清楚,XUP板子上采用的是共阴极8x8点阵LED。
8X8点阵LED结构如下图所示从图中可以看出,8X8点阵共需要64个发光二极管组成,且每个发光二极管是放置在行线和列线的交叉点上,当对应的某一列置0电平,某一行置0电平,则相应的二极管就亮;本程序中是通过对行扫描,并对当前行中需要亮灯的列置0来实现显示过程。
示例程序段如下:if(count=N/8) thena<="11111111";b<="01111111";count<=count+1;elsif(count=N/4) thena<="11101111";b<="10111111";count<=count+1;elsif(count=3*N/8) thena<="11101111";b<="11011111";count<=count+1;elsif(count=N/2)thena<="11101111";b<="11101111";count<=count+1;elsif(count=N*5/8) thena<="11101111";b<="11110111";count<=count+1;elsif(count=N*3/4) thena<="11101111";b<="11111011";count<=count+1;elsif(count=7*N/8) thena<="11101111";b<="11111101";count<=count+1;elsif(count=N)thena<="11100011";b<="11111110";count<=0;VHDL代码:------------------------------------------------------------------------------------ Company:-- Engineer:---- Create Date: 10:09:58 05/24/2012-- Design Name:-- Module Name: expp8 - Behavioral-- Project Name:-- Target Devices:-- Tool versions:-- Description:-- Dependencies:-- Revision:-- Revision 0.01 - File Created-- Additional Comments:------------------------------------------------------------------------------------library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;---- Uncomment the following library declaration if instantiating---- any Xilinx primitives in this code.--library UNISIM;--use UNISIM.VComponents.all;entity expp8 isgeneric(N: integer :=16000);Port ( a : inout STD_LOGIC_VECTOR (7 downto 0);b : inout STD_LOGIC_VECTOR (7 downto 0);clk : in STD_LOGIC;reset : in STD_LOGIC);end expp8;architecture Behavioral of expp8 issignal count:INTEGER RANGE 0 to N:=0;--count用来对LED扫描分频用 --count1用来产生1HZ的分频信号signal count1:INTEGER RANGE 0 to 49999999:=0;signal m:integer:=0;--用m的数值来选择该扫描显示那个字beginprocess(reset,clk)begin--复位时的表现为屏上的灯全部点亮if(reset='0') thena<="00000000";b<="00000000";count<=0;m<=0;count1<=0;elseif(rising_edge(clk)) thenif count1=49999999 then --一赫兹的分频信号产生m<=m+1;count1<=0;else count1<=count1+1;end if;--m=0时采用扫描的方式显示第一个字母“P”if m=0 then--所选行中点亮的灯的时间为N/8个周期 if(count=N/8) thena<="11111111";b<="01111111";count<=count+1;elsif(count=N/4) thena<="11100111";b<="10111111";count<=count+1;elsif(count=3*N/8) thena<="11101011";b<="11011111";count<=count+1;elsif(count=N/2)thena<="11101011";b<="11101111";count<=count+1;elsif(count=N*5/8) thena<="11100111";b<="11110111";count<=count+1;elsif(count=N*3/4) thena<="11101111";b<="11111011";count<=count+1;elsif(count=7*N/8) thena<="11101111";b<="11111101";count<=count+1;elsif(count=N)thena<="11101111";b<="11111110";count<=0;elsecount<=count+1;end if;--m=1时显示“L”,时长同样为1秒elsif m=1 thenif(count=N/8) thena<="11111111";b<="01111111";count<=count+1;elsif(count=N/4) thena<="11101111";count<=count+1;elsif(count=3*N/8) thena<="11101111";b<="11011111";count<=count+1;elsif(count=N/2)thena<="11101111";b<="11101111";count<=count+1;elsif(count=N*5/8) thena<="11101111";b<="11110111";count<=count+1;elsif(count=N*3/4) thena<="11101111";b<="11111011";count<=count+1;elsif(count=7*N/8) thena<="11101111";b<="11111101";count<=count+1;elsif(count=N)thena<="11100011";b<="11111110";count<=0;elsecount<=count+1;end if;--m=2显示“D”,时长为一秒 elsif m=2 thenif(count=N/8) thena<="11111111";b<="01111111";count<=count+1;elsif(count=N/4) thena<="11100111";b<="10111111";count<=count+1;elsif(count=3*N/8) thena<="11101011";b<="11011111";count<=count+1;elsif(count=N/2)thenb<="11101111";count<=count+1;elsif(count=N*5/8) thena<="11101101";b<="11110111";count<=count+1;elsif(count=N*3/4) thena<="11101101";b<="11111011";count<=count+1;elsif(count=7*N/8) thena<="11101011";b<="11111101";count<=count+1;elsif(count=N)thena<="11100111";b<="11111110";count<=0;elsecount<=count+1;end if;--m=3显示“电”,时长为一秒elsif m=3 thenif(count=N/8) thena<="11111111";b<="01111111";count<=count+1;elsif(count=N/4) thena<="11101111";b<="10111111";count<=count+1;elsif(count=3*N/8) thena<="10000011";b<="11011111";count<=count+1;elsif(count=N/2)thena<="10000011";b<="11101111";count<=count+1;elsif(count=N*5/8) thena<="10000011";b<="11110111";count<=count+1;elsif(count=N*3/4) thena<="11101111";b<="11111011";count<=count+1;elsif(count=7*N/8) thena<="11101011";b<="11111101";count<=count+1;elsif(count=N)thena<="11100011";b<="11111110";count<=0;elsecount<=count+1;end if;--m=4显示“子”,时长为一秒 elsif m=4 thenif(count=N/8) thena<="11111111";b<="01111111";count<=count+1;elsif(count=N/4) thena<="11100011";b<="10111111";count<=count+1;elsif(count=3*N/8) thena<="11111011";b<="11011111";count<=count+1;elsif(count=N/2)thena<="11000001";b<="11101111";count<=count+1;elsif(count=N*5/8) thena<="11110111";b<="11110111";count<=count+1;elsif(count=N*3/4) thena<="11110111";b<="11111011";count<=count+1;elsif(count=7*N/8) thena<="11100111";b<="11111101";count<=count+1;elsif(count=N)thena<="11110111";b<="11111110";count<=0;elsecount<=count+1;end if;--m=5显示“技”,时长为一秒elsif m=5 thenif(count=N/8) thena<="11111111";b<="01111111";count<=count+1;elsif(count=N/4) thena<="11011011";b<="10111111";count<=count+1;elsif(count=3*N/8) thena<="10000001";b<="11011111";count<=count+1;elsif(count=N/2)thena<="11000001";b<="11101111";count<=count+1;elsif(count=N*5/8) thena<="11010101";b<="11110111";count<=count+1;elsif(count=N*3/4) thena<="10011111";b<="11111011";count<=count+1;elsif(count=7*N/8) thena<="10011011";b<="11111101";count<=count+1;elsif(count=N)thena<="11010101";b<="11111110";count<=0;elsecount<=count+1;end if;--m=6显示“术”,时长为一秒elsif m=6 thenif(count=N/8) thena<="11111111";b<="01111111";count<=count+1;elsif(count=N/4) thena<="11110011";b<="10111111";count<=count+1;elsif(count=3*N/8) thena<="11000001";b<="11011111";count<=count+1;elsif(count=N/2)thena<="11110111";b<="11101111";count<=count+1;elsif(count=N*5/8) thena<="11100011";b<="11110111";count<=count+1;elsif(count=N*3/4) thena<="11110111";b<="11111011";count<=count+1;elsif(count=7*N/8) thena<="11010101";b<="11111101";count<=count+1;elsif(count=N)thena<="10110110";b<="11111110";count<=0;m<=0;--一次循环完成,循环计数变量m归零 elsecount<=count+1;end if;end if;end if;end if;end process;end Behavioral;设计思路:本实验的目的是要在LED点阵屏上显示字符,基本思想是用扫描的方式使整个屏上需要的灯点亮,并通过计数整型变量m使LED屏上的字每秒钟变换一次,其中扫描频率和m的变化频率都是通过分频实现的。
摘要本文研究了基于AT89S51单片机LED8×8点阵显示屏的设计并运用PROTEUS软件进行原理图绘制,运用KEIL软件进行仿真和调试。
主要介绍了LED8×8点显示屏的硬件电路设计、汇编程序设计与调试、PROTEUS软件绘制原理图和实物制作等方面的内容,本显示屏的设计具有体积小、硬件少、电路结构简单及容易实现等优点。
能帮助广大电子爱好者了解点阵显示原理,认识单片机的基本结构、工作原理及应用方法,并提高单片机知识技术的运用能力。
利用单片机来设计的系统,既能实现系统所需的功能,也可以满足计数的准确、迅速性,并且电路简单,操作简单,通用性强。
目录1.绪论 (2)1.1前言 (2)1.2国内外的研究概况 (2)2. 系统概述 (3)3.课程设计目的 (3)4.课程设计题目和任务 (3)5.设计内容 (4)5.1系统功能的描述 (4)5.2 系统硬件设计 (4)5.2.1 AT89S51芯片的介绍 (4)5.2.2 单片机系统设计 (7)5.2.3 单片机的发展趋势 (8)5.2.4 时钟电路的设计 (9)5.2.5 复位电路的设计 (9)5.2.6驱动电路的设计 (10)5.2.7 8×8LED点阵 (10)5.3 计数器初值计算 (11)5.4 字母A到F点阵显示代码的形成 (11)5.5 程序流程图 (12)5.6 源程序 (12)6. 调试及性能分析 (13)6.1系统调试 (13)6.1.1软件调试 (13)6.1.2硬件调试 (14)6.2设计分析 (14)7.设计总结 (14)附件调试结果 (15)参考书目 (16)1.绪论1.1 前言LED点阵显示屏是集微电子技术、计算机技术、信息处理技术于一体的大型显示屏系统。
它以其色彩鲜艳,动态范围广,亮度高,寿命长,工作稳定可靠等优点而成为众多显示媒体以及户外作业显示的理想选择。
同时也可广泛应用到军事、车站、宾馆、体育、新闻、金融、证券、广告以及交通运输等许多行业。
中北大学课程设计说明书学生姓名:于微学号:0906044204 学院: 电子与计算机科学技术学院专业: 电子科学与技术题目: 利用按键开关控制点阵进行字母显示指导教师:王红亮职称: 讲师2012 年 6 月 22 日目录1、课程设计目的 (1)2、课程设计内容和要求 (1)2.1、设计内容 (1)2.2、设计要求 (1)3、设计方案及实现情况 (1)3.1、设计思路 (1)3.2、工作原理及框图 (1)3.3、各模块功能描述 (2)3.4、仿真结果 (4)4、课程设计总结 (26)5、参考文献 (27)1、课程设计目的1.学习操作数字电路设计实验开发系统,掌握点阵显示模块的工作原理及应用。
2.掌握组合逻辑电路、时序逻辑电路的设计方法。
3.学习掌握可编程器件设计的全过程。
2、课程设计内容和要求2.1、设计内容利用按键开关控制点阵进行字母显示2.2、设计要求1.学习掌握按键开关控制模块、点阵显示模块的工作原理及应用;2. 熟练掌握VHDL编程语言,编写按键开关控制模块的控制逻辑;3. 仿真所编写的程序,模拟验证所编写的模块功能;4. 下载程序到芯片中,硬件验证所设置的功能,能够实现字母显示;5. 整理设计内容,编写设计说明书。
3、设计方案及实现情况3.1、设计思路根据题目设计要求,本系统拟采用自顶向下设计方法,顶层采用原理图设计方法,将整个系统分为按键开关控制(BUTTON)、16×16点阵显示(LENDISP)两个模块,通过对各模块编写程序实现模块功能,最后将两个模块进行综合实现整个系统的功能,通过按键开关控制点阵进行二十六个字母的显示。
3.2、工作原理及框图图1 系统整体设计原理图系统的输入信号有:系统时钟信号CLK,按键信号(ADD、SUB)。
系统的输出信号有:点阵行驱动输出信号(LEDOUT[0..15]),点阵列选和按键开关扫描公用信号(SEL[3..0])。
系统工作过程为:按键开关按下一次,扫描信号扫描到按键按下时,在点阵上显示对应的字母。
如按键开关按下一次时,点阵显示字母“A”;按下两次时,点阵显示字母“B”……如此,按键开关按下26次就分别对应了26个字母。
3.3、各模块功能描述(1)按键控制模块(BUTTON)按键控制模块的功能是:通过按键的按下与释放产生计数,进行二十六进制计数,以控制二十六个字母的生成。
该模块中,clk为系统时钟,add为加法计数,sub为减法计数,reset为复位。
selout[4..0]为按键扫描后的对应的译码输出。
图2 按键控制模块引脚功能图(2)16×16点阵显示模块(LENDISP)16×16点阵显示模块引脚功能如下图。
其中clk为系统时钟,selin为键盘扫描后的对应的译码输出,和图3中的selout[4..0]对接。
selout[3..0]为点阵列选择信号,ledout[15..0]为点阵行显示。
图3 点阵显示模块引脚功能图3.4、仿真结果1、VHDL语言源程序(1)按键控制模块(BUTTON.VHD)library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity anjia isport(add,sub:in std_logic;clk,reset:in std_logic;selout:out std_logic_vector(4 downto 0));end entity anjia;architecture rt1 of anjia issignal seloutn: std_logic_vector(4 downto 0);signal addn:std_logic;signal subn:std_logic;signal resetn:std_logic;beginprocess(clk)beginif(clk'event and clk='1')then --将按键和进(借)位的值在CLK上升沿来时赋给一个新的信号中。
addn<=add;subn<=sub;resetn<=reset;end if;end process;process(clk,add,addn,sub,subn) --个位计数beginif(reset='1' and resetn='0')thenelsif(clk'event and clk='1')thenif (add='1' and addn='0') then --按键上升沿跳变,下同if (seloutn ="11001") thenseloutn <="00000";elseseloutn <= seloutn +1;end if;elsif (sub='1' and subn='0')thenif (seloutn ="00000") thenseloutn <="11001";elseseloutn <= seloutn -1;end if;end if;end if;end process;selout <= seloutn;end architecture rt1;(2) 点阵显示模块(LENDISP.VHD)library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity lendisp isport(clk:in std_logic;--clkin:in std_logic_vector(3 downto 0);selin:in std_logic_vector(4 downto 0);selout:out std_logic_vector(3 downto 0);ledout:out std_logic_vector(15 downto 0));architecture ctl of lendisp issignal temp:std_logic_vector(15 downto 0);signal clkin:std_logic_vector(3 downto 0); beginprocess(clk,clkin,selin)beginif (clk'event and clk='1') thenif clkin="1111" thenclkin<="0000";elseclkin<=clkin+1;end if;end if;selout<=clkin;case selin iswhen "00000"=>case clkin iswhen "0000"=>temp<="0000000000000100";when "0001"=>temp<="0000000000000100";when "0010"=>temp<="0000000000001100";when "0011"=>temp<="0000000001111100";when "0100"=>temp<="0000000111111100";when "0101"=>temp<="0000011111100100";when "0110"=>temp<="0001111111000000";when "0111"=>temp<="0001110001000000";when "1000"=>temp<="0001100001000000";when "1001"=>temp<="0000111001000000";when "1010"=>temp<="0000001111000100";when "1101"=>temp<="0000000000001100";when "1110"=>temp<="0000000000000100";when "1111"=>temp<="0000000000000100";when others=>temp<="0000000000000000";end case;when "00001"=>case clkin iswhen "0000"=>temp<="0000000000000000";when "0001"=>temp<="0000010001111000";when "0010"=>temp<="0000111011111000";when "0011"=>temp<="0001111111111100";when "0100"=>temp<="0001111110001100";when "0101"=>temp<="0001000110000100";when "0110"=>temp<="0001000110000100";when "0111"=>temp<="0001000110000100";when "1000"=>temp<="0001000110000100";when "1001"=>temp<="0001000110000100";when "1010"=>temp<="0001000110000100";when "1011"=>temp<="0001000110000100";when "1100"=>temp<="0001111111111100";when "1101"=>temp<="0001111111111100";when "1110"=>temp<="0001000000000100";when "1111"=>temp<="0001000000000100";when others=>temp<="0000000000000100";end case;when "00010"=>case clkin iswhen "0000"=>temp<="0000000000000000";when "0011"=>temp<="0001000000001100";when "0100"=>temp<="0001000000000100";when "0101"=>temp<="0001000000000100";when "0110"=>temp<="0001000000000100";when "0111"=>temp<="0001000000000100";when "1000"=>temp<="0001000000000100";when "1001"=>temp<="0001000000000100";when "1010"=>temp<="0001100000001100";when "1011"=>temp<="0000110000011000";when "1100"=>temp<="0000111111111000";when "1101"=>temp<="0000011111110000";when "1110"=>temp<="0000001111100000";when "1111"=>temp<="0000000000000000";when others=>temp<="0000000000000000";end case;when "00011"=>case clkin iswhen "0000"=>temp<="0000000010000000";when "0001"=>temp<="0000011111100000";when "0010"=>temp<="0000111111110000";when "0011"=>temp<="0000111111111000";when "0100"=>temp<="0001100000001000";when "0101"=>temp<="0001100000001100";when "0110"=>temp<="0001000000000100";when "0111"=>temp<="0001000000000100";when "1000"=>temp<="0001000000000100";when "1001"=>temp<="0001000000000100";when "1010"=>temp<="0001000000000100";when "1100"=>temp<="0001111111111100";when "1101"=>temp<="0001000000000100";when "1110"=>temp<="0001000000000100";when "1111"=>temp<="0000000000000000";when others=>temp<="0000000000000000";end case;when "00100"=>case clkin iswhen "0000"=>temp<="0000000000000000";when "0001"=>temp<="0000110000011000";when "0010"=>temp<="0001100000001100";when "0011"=>temp<="0001100000000100";when "0100"=>temp<="0001001111000100";when "0101"=>temp<="0001000110000100";when "0110"=>temp<="0001000110000100";when "0111"=>temp<="0001000110000100";when "1000"=>temp<="0001000110000100";when "1001"=>temp<="0001000110000100";when "1010"=>temp<="0001111111111100";when "1011"=>temp<="0001111111111100";when "1100"=>temp<="0001111111111100";when "1101"=>temp<="0001000000000100";when "1110"=>temp<="0001000000000100";when "1111"=>temp<="0000000000000000";when others=>temp<="0000000000000000";end case;when "00101"=>case clkin iswhen "0000"=>temp<="0000000000000000";when "0010"=>temp<="0001100000000000";when "0011"=>temp<="0001001111000000";when "0100"=>temp<="0001001111000000";when "0101"=>temp<="0001000110000000";when "0110"=>temp<="0001000010000000";when "0111"=>temp<="0001000010000000";when "1000"=>temp<="0001000010000100";when "1001"=>temp<="0001000010000100";when "1010"=>temp<="0001111111111100";when "1011"=>temp<="0001111111111100";when "1100"=>temp<="0001111111111100";when "1101"=>temp<="0001000000000100";when "1110"=>temp<="0001000000000100";when "1111"=>temp<="0000000000000000";when others=>temp<="0000000000000000";end case;when "00110"=>case clkin iswhen "0000"=>temp<="0000000001000000";when "0001"=>temp<="0000000001000000";when "0010"=>temp<="0000110001111100";when "0011"=>temp<="0001110001111100";when "0100"=>temp<="0001100001111100";when "0101"=>temp<="0001000001000100";when "0110"=>temp<="0001000000000100";when "0111"=>temp<="0001000000000100";when "1000"=>temp<="0001000000000100";when "1001"=>temp<="0001000000000100";when "1010"=>temp<="0001100000001100";when "1100"=>temp<="0000111111111000";when "1101"=>temp<="0000011111110000";when "1110"=>temp<="0000001111100000";when "1111"=>temp<="0000000000000000";when others=>temp<="0000000000000000";end case;when "00111"=>case clkin iswhen "0000"=>temp<="0001000000000100";when "0001"=>temp<="0001000000000100";when "0010"=>temp<="0001111111111100";when "0011"=>temp<="0001111111111100";when "0100"=>temp<="0001111111111100";when "0101"=>temp<="0001000010000100";when "0110"=>temp<="0000000010000000";when "0111"=>temp<="0000000010000000";when "1000"=>temp<="0000000010000000";when "1001"=>temp<="0000000010000100";when "1010"=>temp<="0001000010000100";when "1011"=>temp<="0001111111111100";when "1100"=>temp<="0001111111111100";when "1101"=>temp<="0001111111111100";when "1110"=>temp<="0001000000000100";when "1111"=>temp<="0000000000000100";when others=>temp<="0000000000000000";end case;when "01000"=>case clkin iswhen "0000"=>temp<="0000000000000000";when "0011"=>temp<="0001000000000100";when "0100"=>temp<="0001000000000100";when "0101"=>temp<="0001000000000100";when "0110"=>temp<="0001111111111100";when "0111"=>temp<="0001111111111100";when "1000"=>temp<="0001111111111100";when "1001"=>temp<="0001000000000100";when "1010"=>temp<="0001000000000100";when "1011"=>temp<="0001000000000100";when "1100"=>temp<="0001000000000100";when "1101"=>temp<="0000000000000000";when "1110"=>temp<="0000000000000000";when "1111"=>temp<="0000000000000000";when others=>temp<="0000000000000000";end case;when "01001"=>case clkin iswhen "0000"=>temp<="0000000000000000";when "0001"=>temp<="0000000000000000";when "0010"=>temp<="0000000000000000";when "0011"=>temp<="0001000000000000";when "0100"=>temp<="0001111111111100";when "0101"=>temp<="0001111111111110";when "0110"=>temp<="0001111111111110";when "0111"=>temp<="0001000000000011";when "1000"=>temp<="0001000000000001";when "1001"=>temp<="0001000000000001";when "1010"=>temp<="0001000000000001";when "1101"=>temp<="0000000000000111";when "1110"=>temp<="0000000000000010";when "1111"=>temp<="0000000000000000";when others=>temp<="0000000000000000";end case;when "01010"=>case clkin iswhen "0000"=>temp<="0000000000000000";when "0001"=>temp<="0000000000000000";when "0010"=>temp<="0001000000001100";when "0011"=>temp<="0001000000011100";when "0100"=>temp<="0001100000111100";when "0101"=>temp<="0001110001110100";when "0110"=>temp<="0000011011100000";when "0111"=>temp<="0000001111000000";when "1000"=>temp<="0000001110000000";when "1001"=>temp<="0001000110000100";when "1010"=>temp<="0001000010000100";when "1011"=>temp<="0001111111111100";when "1100"=>temp<="0001111111111100";when "1101"=>temp<="0001000000000100";when "1110"=>temp<="0001000000000100";when "1111"=>temp<="0000000000000000";when others=>temp<="0000000000000000";end case;when "01011"=>case clkin iswhen "0000"=>temp<="0000000000010000";when "0011"=>temp<="0000000000000100";when "0100"=>temp<="0000000000000100";when "0101"=>temp<="0000000000000100";when "0110"=>temp<="0000000000000100";when "0111"=>temp<="0000000000000100";when "1000"=>temp<="0000000000000100";when "1001"=>temp<="0001000000000100";when "1010"=>temp<="0001111111111100";when "1011"=>temp<="0001111111111100";when "1100"=>temp<="0001111111111100";when "1101"=>temp<="0001000000000100";when "1110"=>temp<="0001000000000100";when "1111"=>temp<="0000000000000000";when others=>temp<="0000000000000000";end case;when "01100"=>case clkin iswhen "0000"=>temp<="0001000000000100";when "0001"=>temp<="0001111111111100";when "0010"=>temp<="0001111111111100";when "0011"=>temp<="0001111111111100";when "0100"=>temp<="0001111000000100";when "0101"=>temp<="0000011110000100";when "0110"=>temp<="0000000111100000";when "0111"=>temp<="0000000001111000";when "1000"=>temp<="0000000000111100";when "1001"=>temp<="0000000011111100";when "1010"=>temp<="0000011111100000";when "1101"=>temp<="0001111111111100";when "1110"=>temp<="0001000000000100";when "1111"=>temp<="0000000000000100";when others=>temp<="0000000000000000";end case;when "01101"=>case clkin iswhen "0000"=>temp<="0001000000000000";when "0001"=>temp<="0001000000000000";when "0010"=>temp<="0001111111111100";when "0011"=>temp<="0001000000011000";when "0100"=>temp<="0001000000110000";when "0101"=>temp<="0000000001100000";when "0110"=>temp<="0000000011000000";when "0111"=>temp<="0000000110000000";when "1000"=>temp<="0000001100000000";when "1001"=>temp<="0000011000000000";when "1010"=>temp<="0000110000000100";when "1011"=>temp<="0001110000000100";when "1100"=>temp<="0001111111111100";when "1101"=>temp<="0001111111111100";when "1110"=>temp<="0001000000000100";when "1111"=>temp<="0000000000000100";when others=>temp<="0000000000000000";end case;when "01110"=>case clkin iswhen "0000"=>temp<="0000000111000000";when "0011"=>temp<="0000111000111000";when "0100"=>temp<="0001100000001100";when "0101"=>temp<="0001000000000100";when "0110"=>temp<="0001000000000100";when "0111"=>temp<="0001000000000100";when "1000"=>temp<="0001000000000100";when "1001"=>temp<="0001000000000100";when "1010"=>temp<="0001100000001100";when "1011"=>temp<="0001110000011000";when "1100"=>temp<="0000111111111000";when "1101"=>temp<="0000011111110000";when "1110"=>temp<="0000001111000000";when "1111"=>temp<="0000000000000000";when others=>temp<="0000000000000000";end case;when "01111"=>case clkin iswhen "0000"=>temp<="0000000000000000";when "0001"=>temp<="0000111000000000";when "0010"=>temp<="0000111100000000";when "0011"=>temp<="0001111110000000";when "0100"=>temp<="0001000110000000";when "0101"=>temp<="0001000010000000";when "0110"=>temp<="0001000010000000";when "0111"=>temp<="0001000010000000";when "1000"=>temp<="0001000010000100";when "1001"=>temp<="0001000010000100";when "1010"=>temp<="0001111111111100";when "1101"=>temp<="0001000000000100";when "1110"=>temp<="0001000000000100";when "1111"=>temp<="0000000000000000";when others=>temp<="0000000000000000";end case;when "10000"=>case clkin iswhen "0000"=>temp<="0000000111000000";when "0001"=>temp<="0000011111110110";when "0010"=>temp<="0000111111111010";when "0011"=>temp<="0000111001111111";when "0100"=>temp<="0001100000001110";when "0101"=>temp<="0001000000001110";when "0110"=>temp<="0001000000011100";when "0111"=>temp<="0001000000110100";when "1000"=>temp<="0001000000110100";when "1001"=>temp<="0001000000110100";when "1010"=>temp<="0001100000011100";when "1011"=>temp<="0001110000011000";when "1100"=>temp<="0000111111111000";when "1101"=>temp<="0000011111110000";when "1110"=>temp<="0000001111100000";when "1111"=>temp<="0000000000000000";when others=>temp<="0000000000000000";end case;when "10001"=>case clkin iswhen "0000"=>temp<="0000000000000100";when "0011"=>temp<="0001111100011100";when "0100"=>temp<="0001100100111000";when "0101"=>temp<="0001000111110000";when "0110"=>temp<="0001000111100000";when "0111"=>temp<="0001000011000000";when "1000"=>temp<="0001000010000000";when "1001"=>temp<="0001000010000100";when "1010"=>temp<="0001111111111100";when "1011"=>temp<="0001111111111100";when "1100"=>temp<="0001111111111100";when "1101"=>temp<="0001000000000100";when "1110"=>temp<="0000000000000100";when "1111"=>temp<="0000000000000000";when others=>temp<="0000000000000000";end case;when "10010"=>case clkin iswhen "0000"=>temp<="0000000000000000";when "0001"=>temp<="0000000000110000";when "0010"=>temp<="0001110001111000";when "0011"=>temp<="0001100001111100";when "0100"=>temp<="0001100011000100";when "0101"=>temp<="0001000011000100";when "0110"=>temp<="0001000010000100";when "0111"=>temp<="0001000110000100";when "1000"=>temp<="0001000110000100";when "1001"=>temp<="0001000110000100";when "1010"=>temp<="0001000100000100";when "1101"=>temp<="0000111000111100";when "1110"=>temp<="0000000000000000";when "1111"=>temp<="0000000000000000";when others=>temp<="0000000000000000";end case;when "10011"=>case clkin iswhen "0000"=>temp<="0000000000000000";when "0001"=>temp<="0001110000000000";when "0010"=>temp<="0001100000000000";when "0011"=>temp<="0001000000000000";when "0100"=>temp<="0001000000000100";when "0101"=>temp<="0001000000000100";when "0110"=>temp<="0001111111111100";when "0111"=>temp<="0001111111111100";when "1000"=>temp<="0001111111111100";when "1001"=>temp<="0001000000000100";when "1010"=>temp<="0001000000000100";when "1011"=>temp<="0001000000000100";when "1100"=>temp<="0001000000000000";when "1101"=>temp<="0001100000000000";when "1110"=>temp<="0000110000000000";when "1111"=>temp<="0000000000000000";when others=>temp<="0000000000000000";end case;when "10100"=>case clkin iswhen "0000"=>temp<="0000000000000000";when "0011"=>temp<="0001000000001000";when "0100"=>temp<="0001000000001100";when "0101"=>temp<="0000000000000100";when "0110"=>temp<="0000000000000100";when "0111"=>temp<="0000000000000100";when "1000"=>temp<="0000000000000100";when "1001"=>temp<="0000000000000100";when "1010"=>temp<="0001000000001100";when "1011"=>temp<="0001111111111100";when "1100"=>temp<="0001111111111000";when "1101"=>temp<="0001111111110000";when "1110"=>temp<="0001000000000000";when "1111"=>temp<="0000000000000000";when others=>temp<="0000000000000000";end case;when "10101"=>case clkin iswhen "0000"=>temp<="0000000000000000";when "0001"=>temp<="0001000000000000";when "0010"=>temp<="0001100000000000";when "0011"=>temp<="0001110000000000";when "0100"=>temp<="0001011100000000";when "0101"=>temp<="0000000111000000";when "0110"=>temp<="0000000001110000";when "0111"=>temp<="0000000000011100";when "1000"=>temp<="0000000001111100";when "1001"=>temp<="0000000111111000";when "1010"=>temp<="0001011111100000";when "1101"=>temp<="0001000000000000";when "1110"=>temp<="0001000000000000";when "1111"=>temp<="0000000000000000";when others=>temp<="0000000000000000";end case;when "10110"=>case clkin iswhen "0000"=>temp<="0001000000000000";when "0001"=>temp<="0001100000000000";when "0010"=>temp<="0001111100000000";when "0011"=>temp<="0001001111100000";when "0100"=>temp<="0000000011111000";when "0101"=>temp<="0000000111111100";when "0110"=>temp<="0001111111110000";when "0111"=>temp<="0001111110000000";when "1000"=>temp<="0001111111000000";when "1001"=>temp<="0001000111110000";when "1010"=>temp<="0000000001111100";when "1011"=>temp<="0010011111111100";when "1100"=>temp<="0011111111000000";when "1101"=>temp<="0011111000000000";when "1110"=>temp<="0010000000000000";when "1111"=>temp<="0000000000000000";when others=>temp<="0000000000000000";end case;when "10111"=>case clkin iswhen "0000"=>temp<="0000000000000100";。