vhdl实验报告_16乘16点阵_列选_显示
16x16点阵显示实验报告
16*16点阵显示实验报告一、实验目的(1)学习点阵显示字符的基本原理。
(2)掌握用数控分频控制速度,实现点阵扫描的基本方式。
(3)会使用Quartus II软件中的Verilog HDL语言实现点真的行列循环显示。
二、实验设备与器件Quartus II 软件、EP2C8Q208C8实验箱三、实验方案设计1.实验可实现的功能可通过编写Verilog HDL语言,实现点阵的行列交替扫描。
先是行扫描,扫描间隔为1s,16行都扫描完之后开始列扫描,扫描间隔仍然为1s,16列扫描完之后,行继续扫描,依次循环。
2.点阵基本知识16*16扫描LED点阵只要其对应的X、Y轴顺向偏压,即可使LED发亮。
例如如果想使左上角LED点亮,则Y0=1,X0=0即可。
应用时限流电阻可以放在X轴或Y轴。
它有16个共阴极输出端口,每个共阴极对应有16个LED显示灯。
LED点阵每个点都有一个红色的发光二极管。
点阵内的二极管间的连接都是行共阳,列共阴。
本实验采用共阴,当二极管的共阳极为高电平,共阴极为低电平时,所接点发光;反之处于截止状态,不放光。
3.系统工作原理本系统用了两个模块,其中dianzhen.v是顶层文件,而hangsaomiao.v和liesaomiao.v是两个子模块,总体的系统功能框图如图3.3.1所示。
图3.3.1 系统功能图示通过流程图可以看到,体统是先将试验箱的50MHz时钟信号分频为1s,因为要实现16*16的点阵扫描,所以用一个16s的计时器计时,每经过16s行扫描与列扫描的状态转换一次,通过点阵显示出来。
4.模块化程序设计(1)点阵显示顶层程序设计module dianzhen (clk50mhz,row,sel0,sel1,sel2,sel3,line);input clk50mhz; //实验箱提供50MHz时钟信号output sel0,sel1,sel2,sel3; //设置引脚选通点阵output reg [15:0] row; //行output reg [3:0] line; //列wire [15:0] row1,row2;wire [3:0] line1,line2;reg [24:0] cnt=0; //1Hz计数子reg [4:0] cnt1=0; //16s计数子assign sel0=1'b0;assign sel1=1'b1;assign sel2=1'b0;assign sel3=1'b0;always@(posedge clk50mhz)beginif(cnt>=25'd5*******)begincnt<=25'b0; //1Hz计时器cnt1<=cnt1+1; //16s计时器endelsecnt<=cnt+1;endhangsaomiao u1(.clk50mhz(clk50mhz),.row(row1),.line(line1)); liesaomiao u2(.clk50mhz(clk50mhz),.row(row2),.line(line2));always@(*)if(cnt1<=5'd15)beginrow<=row1; //行扫描line<=line1;endelsebeginrow<=row2; //列扫描line<=line2;endendmodule(2)行扫描模块hangsaomiao.v程序设计module hangsaomiao(clk50mhz,line,row);input clk50mhz; //实验箱输入50MHz时钟信号output reg [15:0] row; //列output reg [3:0] line; //行reg [24:0] cnt1,cnt2; //计数子reg clkrow,clkline; //行脉冲、列脉冲always@(posedge clk50mhz)beginif(cnt1>=25'd5*******)begincnt1<=25'b0;clkrow=~clkrow; //1s列脉冲endelsecnt1<=cnt1+1;endalways@(posedge clk50mhz)beginif(cnt2>=25'd500)begincnt2<=25'b0;clkline=~clkline; //50KHz行脉冲endelsecnt2<=cnt2+1;endalways@(posedge clkline)begincase(line)4'd0:line<=4'd1; //高速行扫描4'd1:line<=4'd2;4'd2:line<=4'd3;4'd3:line<=4'd4;4'd4:line<=4'd5;4'd5:line<=4'd6;4'd6:line<=4'd7;4'd7:line<=4'd8;4'd8:line<=4'd9;4'd9:line<=4'd10;4'd10:line<=4'd11;4'd11:line<=4'd12;4'd12:line<=4'd13;4'd13:line<=4'd14;4'd14:line<=4'd15;4'd15:line<=4'd0;default:line<=4'd0;endcaseendalways@(posedge clkrow) //时间间隔为1s的列扫描begincase(row)16'b0000000000000001: row<=16'b0000000000000010;16'b0000000000000010: row<=16'b0000000000000100;16'b0000000000000100: row<=16'b0000000000001000;16'b0000000000001000: row<=16'b0000000000010000;16'b0000000000010000: row<=16'b0000000000100000;16'b0000000000100000: row<=16'b0000000001000000;16'b0000000001000000: row<=16'b0000000010000000;16'b0000000010000000: row<=16'b0000000100000000;16'b0000000100000000: row<=16'b0000001000000000;16'b0000001000000000: row<=16'b0000010000000000;16'b0000010000000000: row<=16'b0000100000000000;16'b0000100000000000: row<=16'b0001000000000000;16'b0001000000000000: row<=16'b0010000000000000;16'b0010000000000000: row<=16'b0100000000000000;16'b0100000000000000: row<=16'b1000000000000000;16'b1000000000000000: row<=16'b0000000000000001;default : row<=16'b0000000000000001;endcaseendendmodule(3)列扫描模块liesaomiao.v程序设计module liesaomiao(clk50mhz,row,line);input clk50mhz; //实验箱输入50MHz 时钟信号output reg [15:0] row; //行output reg [3:0] line; //列reg [24:0] cnt; //计数子reg clk;always@(posedge clk50mhz)beginif(cnt>=25'd5*******)begincnt<=25'b0;clk=~clk; //1sendelsecnt<=cnt+1;endalways @ (posedge clk) //列扫描begincase(line)4'h0:begin row=16'b1111111111111111;line<=4'h1; end4'h1:begin row=16'b1111111111111111;line<=4'h2; end4'h2:begin row=16'b1111111111111111;line<=4'h3; end4'h3:begin row=16'b1111111111111111;line<=4'h4; end4'h4:begin row=16'b1111111111111111;line<=4'h5; end4'h5:begin row=16'b1111111111111111;line<=4'h6; end4'h6:begin row=16'b1111111111111111;line<=4'h7; end4'h7:begin row=16'b1111111111111111;line<=4'h8; end4'h8:begin row=16'b1111111111111111;line<=4'h9; end4'h9:begin row=16'b1111111111111111;line<=4'ha; end4'ha:begin row=16'b1111111111111111;line<=4'hb; end4'hb:begin row=16'b1111111111111111;line<=4'hc; end4'hc:begin row=16'b1111111111111111;line<=4'hd; end4'hd:begin row=16'b1111111111111111;line<=4'he; end4'he:begin row=16'b1111111111111111;line<=4'hf; end4'hf:begin row=16'b1111111111111111;line<=4'h0; enddefault:line<=4'h0;endcaseendendmodule5.下载电路及引脚分配设计设计中用实验箱自带的50MHz时钟信号作为输入端,用sel0、sel1、sel2、sel3四个使能端选通点阵,EP2C8Q208C8就会工作在给点阵下命令的状态,并用line和row分别作为点阵的行、列选通端,最终使得点阵正常工作,如图3.5.1所示。
16×16点阵显示实验 实验报告
1.实验现象
当设计文件加载到目标器件后,将数字信号源模块的时钟选择为1KHZ,按下矩阵键盘的某一个键,则在数码管上显示对应的这个键标识的键值,当再按下第二个键的时候前一个键的键值在数码管上左移一位。按下“*”键则在数码管是显示“E”键值。按下“#”键在数码管上显示“F”键值。
2.实验图片记录
2)新建VHDL File(程序)
3)编译仿真
4)管脚分配
5)下载调试
2)加强对总线产生地址定位的CPLD实现方法的理解
3)掌握在FPGA中调用ROM的方法
成绩: 教师:
实验报告
一、实验内容及步骤
1.实验内容
1)通过编程实现对16×16点阵的控制
2)在点阵循环中显示“欢迎使用嵌入式SDC开发系统”这几个汉字和字符
3)运用软件对程序进行编译和仿真
2.实验步骤:
1)新建工程
成绩: 教师: 批改日期:
பைடு நூலகம்湖南科技大学
物理与电子科学学院专业实验报告
实验课程:FPGA实验原理
实验项目:16×16点阵显示实验
专 业:物理与电子科学学院
班 级:电子信息科学与技术3班
***********
学 号:**********
实验日期: 年 月 日
实验预习报告
一、实验目的及要求
1)加强点阵字符产生的显示原理和系统的16×16点阵的工作原理
点阵实验设计报告
院系:物理与电子工程学院专业:电子信息工程班级: 2008级3班指导老师:谢小维姓名:刘进学号: 200807014321 实验时间: 2010年12月12日基于VHDL的汉字点阵动态显示系统的设计一、实验目的(1)在MAX+plus II软件平台上,熟练运用VHDL语言,完成16*16点阵的显示设计的软件编辑、编译、综合、仿真。
(2)使用EDA实验箱,实现16*16点阵显示的硬件功能。
(3)学习设计仿真工具的使用方法。
(4)学习层次化设计方法。
二、实验仪器16*16点阵(如图一)、EDA实验箱、MAX+plus II,导线若干图一、16*16点阵三、实验原理3.1 主要原理用动态时钟扫描技术使LED点阵模块显示出我们需要的汉字的列扫描的代码数据。
在有笔划下落处的小方格里填上“1”,无笔划处填上“0”,这样就形成了与这个汉字所对应的二进制数据在该矩形框上的分布。
最后用一个时钟扫描来控制让其输出。
3 .2汉字的显示第二步工作的步骤是:先在扫描模块的控制下,由地址线确定每次由ROM 送出某一列的16个LED所要显示的汉字的控制字节数据,同时由扫描模块输出的5位扫描码经两个4-16译码器解码后决定相应的某一列可以被点亮,而另外31列都不能被点亮。
该状态持续约0.4毫秒后,就接着进行下一行的扫描。
当完成了一次32行的扫描后,也就完成了一帧画面的显示。
重复上述过程不断修改ROM的地址区间的起始地址,转向下一幅画面的数据传送和显示。
如此进行,就可以在LED点阵模块上滚动显示ROM中存储的汉字。
四、VHDL语言程序设计4.1扫描频率控制的部分关键程序process(clk) --显示时序控制beginif clk'event and clk='1' then --上升沿dount<=dount+1;--计数累加if dount=255 thenif S=15 thenS<="0000";--S控制单个汉字扫描周期 elseS<=S+1;end if;S<=S+1;elseS<=S;end if;if cdount<15 then --控制列扫描频率cdount<=cdount+1;elsecdount<="0000";end if;end if;end process;4.2单个汉字扫描的部分关键程序process(cdount,s)begincase cdount iswhen "0000" => lie<="0000";when "0001" => lie<="0001";when "0010" => lie<="0010";when "0011" => lie<="0011";when "0100" => lie<="0100";when "0101" => lie<="0101";when "0110" => lie<="0110";when "0111" => lie<="0111";when "1000" => lie<="1000";when "1001" => lie<="1001";when "1010" => lie<="1010";when "1011" => lie<="1011";when "1100" => lie<="1100";when "1101" => lie<="1101";when "1110" => lie<="1110";when "1111" => lie<="1111";when others=>null;end case;if s="0000" thencase cdount isw h e n"0000"=>h a n g<="0100000000001000"; w h e n"0001"=>h a n g<="0010000000101000"; w h e n"0010"=>h a n g<="0001000001001001"; w h e n"0011"=>h a n g<="0000100110001010"; w h e n"0100"=>h a n g<="0000011010001110"; w h e n"0101"=>h a n g<="0000100001001000"; w h e n"0110"=>h a n g<="0011000000111000"; w h e n"0111"=>h a n g<="0110000000001100"; w h e n"1000"=>h a n g<="0000000000001000";w h e n"1001"=>h a n g<="0000000000000000"; w h e n"1010"=>h a n g<="0000111111111100"; w h e n"1011"=>h a n g<="0100000000000000"; w h e n"1100"=>h a n g<="1000000000000000"; w h e n"1101"=>h a n g<="0111111111111111"; w h e n"1110"=>h a n g<="0000000000000000"; w h e n"1111"=>h a n g<="0000000000000000"; when others =>null;end case;end if;if s="0001" thencase cdount isw h e n"0000"=>h a n g<="0000000000000000"; w h e n"0001"=>h a n g<="0100000001000000"; w h e n"0010"=>h a n g<="0010000001000010"; w h e n"0011"=>h a n g<="0001111111001100"; w h e n"0100"=>h a n g<="0010000000000000"; w h e n"0101"=>h a n g<="0100000100001000"; w h e n"0110"=>h a n g<="0100111111111111"; w h e n"0111"=>h a n g<="0100000100001000"; w h e n"1000"=>h a n g<="0100000100001000"; w h e n"1001"=>h a n g<="0100000100001000"; w h e n"1010"=>h a n g<="0111111111111111"; w h e n"1011"=>h a n g<="0100000100001000"; w h e n"1100"=>h a n g<="0100000110001100"; w h e n"1101"=>h a n g<="0110000100001000"; w h e n"1110"=>h a n g<="0010000000000000"; w h e n"1111"=>h a n g<="0000000000000000";when others => null;end case;end if;end process;--结束进程,各个进程之间是并发执行的4.3 整个程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity lcd1 isport (clk:in std_logic;hang:out std_logic_vector(15 downto 0);lie:out std_logic_vector(3 downto 0));end entity;architecture one of lcd1 issignal dount:std_logic_vector(7 downto 0);signal s,cdount:std_logic_vector(3 downto 0); beginprocess(clk)beginif clk'event and clk='1' thendount<=dount+1;if dount=255 thenif s=1 thens<="0000";elses<=s+1;end if;--s<=s+1;elses<=s;end if;if cdount<15 thencdount<=cdount+1;elsecdount<="0000";end if;end if;end process;process(cdount,s)begincase cdount iswhen "0000" => lie<="0000";when "0001" => lie<="0001";when "0010" => lie<="0010";when "0011" => lie<="0011";when "0100" => lie<="0100";when "0101" => lie<="0101";when "0110" => lie<="0110";when "0111" => lie<="0111";when "1000" => lie<="1000";when "1001" => lie<="1001";when "1010" => lie<="1010";when "1011" => lie<="1011";when "1100" => lie<="1100";when "1101" => lie<="1101";when "1110" => lie<="1110";when "1111" => lie<="1111";when others=>null;end case;if s="0000" thencase cdount isw h e n"0000"=>h a n g<="0100000000001000"; w h e n"0001"=>h a n g<="0010000000101000"; w h e n"0010"=>h a n g<="0001000001001001"; w h e n"0011"=>h a n g<="0000100110001010"; w h e n"0100"=>h a n g<="0000011010001110"; w h e n"0101"=>h a n g<="0000100001001000"; w h e n"0110"=>h a n g<="0011000000111000"; w h e n"0111"=>h a n g<="0110000000001100"; w h e n"1000"=>h a n g<="0000000000001000"; w h e n"1001"=>h a n g<="0000000000000000"; w h e n"1010"=>h a n g<="0000111111111100"; w h e n"1011"=>h a n g<="0100000000000000"; w h e n"1100"=>h a n g<="1000000000000000"; w h e n"1101"=>h a n g<="0111111111111111"; w h e n"1110"=>h a n g<="0000000000000000"; w h e n"1111"=>h a n g<="0000000000000000"; when others =>null;end case;end if;if s="0001" thencase cdount isw h e n"0000"=>h a n g<="0000000000000000"; w h e n"0001"=>h a n g<="0100000001000000"; w h e n"0010"=>h a n g<="0010000001000010"; w h e n"0011"=>h a n g<="0001111111001100"; w h e n"0100"=>h a n g<="0010000000000000"; w h e n"0101"=>h a n g<="0100000100001000"; w h e n"0110"=>h a n g<="0100111111111111"; w h e n"0111"=>h a n g<="0100000100001000"; w h e n"1000"=>h a n g<="0100000100001000"; w h e n"1001"=>h a n g<="0100000100001000"; w h e n"1010"=>h a n g<="0111111111111111"; w h e n"1011"=>h a n g<="0100000100001000"; w h e n"1100"=>h a n g<="0100000110001100"; w h e n"1101"=>h a n g<="0110000100001000"; w h e n"1110"=>h a n g<="0010000000000000"; w h e n"1111"=>h a n g<="0000000000000000";when others => null;end case;end if;end process;end architecture;五、系统调试与仿真5.1、输入完文本之后,对该文本进行功能仿真,然后在没有出现错误的情况下,对文本进行时序仿真,观察其波形如下:5.2、在对该文本进行编辑下载,在这之前,先要设置其器件,选择目标芯片。
vhdl实验报告_16乘16点阵_列选_显示
综合实践总结报告综合实践名称: EDA技术与实践综合实践地点、时间一.题目功能分析和设计实验的要求有如下三点:1.用16*16点阵的发光二极管显示字符;2.可显示字符为0~9的数字字符与A~F英文字母的大写;3.输入为四位二进制矢量;按照要求可知,LED点阵模块,共由16×16=256个LED发光二极管组成,如何在该点阵模块上显示数字和字母是本实验的关键。
先将要显示的每一幅图像画在一个16×16共256个小方格的矩形框中,再在有笔划下落处的小方格里填上“1”,无笔划处填上“0”,这样就形成了与这个汉字所对应的二进制数据在该矩形框上的分布以数字8为例,点阵分布为:0000000000000000000000000000000000011111111110000001111111111000000110000001100000011000000110000001100000011000000111111111100000011111111110000001100000011000000110000001100000011000000110000001111111111000000111111111100000000000000000000000000000000000考虑到实际物理实验平台上点阵发光二极管的原理,以下为16×16点阵LED外观图,只要其对应的X、Y轴顺向偏压,即可使LED 发亮。
例如如果想使左上角LED点亮,则Y0=1,X0=0即可。
所以我采用行列扫描的方法,用四位二进制数做列选信号(总共16列),如选中第一列,则扫描第一列之中哪些行是高电平(1),哪些行是低电平(0);为高电平的则点亮,为低电平的不亮。
(列信号都接地)。
如此,列选信号由“0000”变到“1111”时,16列扫描完毕,一个字也就出来了,列选信号重新由“0000”开始扫描。
注意扫描频率必须要足够快,才能保证显示一个数字或字母时所有灯在肉眼看来是同时在闪烁的。
微机接口实验-16x16点阵显示
实验04·LED显示器王梦硕0930*******实验目的:在理解LED点阵工作原理的基础上,实践使用点阵显示字符。
实验原理:1·点阵式显示器:发光二级管排列成矩阵,由亮与暗来产生字符或图形。
每一样的阳极连在一起,每一列的阴极连在一起,如右图所示。
点阵显示器每一列的阴极连在一起,对每一列而言相当于一个共阴显示器。
同时每一行的阳极连在一起,相当于七段显示器的比划。
可采用动态显示电路,以笔画锁存器控制行信号,以位锁存器控制列信号。
2·74HC595实验中使用两片8位输出锁存移位寄存器74HC595(三态输出、串入并出),将单片机I/O口发出的串行数据转换为并行数据LD_QA~LD_QP,作为16x16 LED点阵显示器的行线,使用另外两片8位74HC595作为16x16 LED点阵显示器的列线LD_1~LD_16。
当行输出高电平、列输出低电平时,可以点亮点阵。
74HC595的工作时序图和推荐的连接方法如下:下图中:•LD-QA~LD-QP:点阵行控制信号•LD-1~LD-16:点阵列控制信号•SER(14脚):串行数据输入端•-SCLR(10脚):低电平时将移位寄存器的数据清零。
通常将它接Vcc。
•SCK(11脚):上升沿时将串行数据移入移位寄存器。
•RCK(12脚):上升沿时移位寄存器的数据锁存入数据寄存器。
•-G(13脚): 高电平时禁止输出(高阻态)。
实验内容:在16×16LED点阵上分别用静态方式和滚屏方式显示自己的姓(行扫描)。
两个实验部分的电原理图是相同的,如下所示:1·静态方式:流程图:程序代码:L_DAT_H BIT P1.0L_DAT_L BIT P1.1L_STR BIT P1.2L_CLK BIT P1.3L_OE BIT P1.4ROWH EQU 40H ;字模信号(顺向取膜,高位在前)ROWL EQU 41HSELH EQU 42H ;行扫描信号SELL EQU 43HORG 0000HLJMP MAINORG 0100HMAIN:MOV R1, #01H ;配合字模信号MOV R2, #01H ;高字节在后,故从01开始MOV R3, #10H ;循环16次LOAD:MOV DPTR, #SEL_DATA ;存储行扫描信号MOV A, R1MOVC A, @A+DPTRMOV SELH, A ;存储高字节DEC R1 ;R1-1,指向低字节MOV A, R1MOVC A, @A+DPTRMOV SELL, A ;存储低字节INC R1INC R1INC R1 ;指向下一个高字节MOV DPTR, #ROW_DATA ;存储字模数据,过程同上MOV A, R2MOVC A, @A+DPTRMOV ROWH, ADEC R2MOV A, R2MOVC A, @A+DPTRMOV ROWL, AINC R2INC R2INC R2LCALL LATCH ;运行锁存自程序LCALL DELAY ;延时DJNZ R3, LOAD ;重复执行16次,显示所有行LJMP MAIN ;静态显示LATCH:CLR L_OE ;允许输出CLR L_STR ;为上升沿将移位寄存器数据锁存入数据寄存器MOV R4, SELH ; 做准备MOV R5, ROWH ;高位行扫描型号和字模信号MOV R6, #08H ;高低位分开读,每次读8位LATCH1:CLR L_CLK ;为上升沿读入移位寄存器做准备MOV A, R4RRC A ;移出最高位MOV R4, AMOV L_DAT_H, C ;由P1.0输出准备进入移位寄存器MOV A, R5RRC AMOV R5, AMOV L_DAT_L, C ;由P1.1输出准备进入移位寄存器SETB L_CLK ;CLK上升沿,P1.0和P1.1数据进入移位寄存器DJNZ R6, LATCH1;MOV R4, SELLMOV R5, ROWLMOV R6, #08HLATCH2: ;同上CLR L_CLKMOV A, R4RRC AMOV R4, AMOV L_DAT_H, CMOV A, R5RRC AMOV R5, AMOV L_DAT_L, CSETB L_CLKDJNZ R6, LATCH2;SETB L_STR ;STR上升沿移位寄存器数据所存入数据寄存器; 显示RETDELAY: ;延迟程序MOV R6, #02HLOOP1:MOV R7, #0F8H ;估算:1us*2*(1+2*248+2) = 998us ≈1ms LOOP2:DJNZ R7, LOOP2DJNZ R6, LOOP1;RETSEL_DA TA: ;SELECT ROWDB 80H, 00HDB 40H, 00HDB 20H, 00HDB 10H, 00HDB 08H, 00HDB 04H, 00HDB 02H, 00HDB 01H, 00HDB 00H, 80HDB 00H, 40HDB 00H, 20HDB 00H, 10HDB 00H, 08HDB 00H, 04HDB 00H, 02HDB 00H, 01HROW_DA TA:DB 0FFH, 0FFH, 80H, 03H, 0FEH, 0FFH, 0FEH, 0FFH, 0FEH, 0FFH, 0FEH, 0FFH, 0FEH, 0FFH, 0C0H, 07H;DB 0FEH, 0FFH, 0FEH, 0FFH, 0FEH, 0FFH, 0FEH, 0FFH, 0FEH, 0FFH, 0FEH, 0FFH, 00H, 01H, 0FFH, 0FFH;"王",0;END实验效果:字模效果:LED显示效果:2·滚屏方式:流程图:程序代码:L_DAT_H BIT P1.0L_DAT_L BIT P1.1L_STR BIT P1.2L_CLK BIT P1.3L_OE BIT P1.4ROWH EQU 40HROWL EQU 41HSELH EQU 42HSELL EQU 43HWAIT EQU 44H ;负责控制滚动速度ORG 0000HLJMP MAINORG 0100HMAIN:MOV R0, #01H ;每次重新滚动时初始化NEXT:MOV WAIT, #0AH ;滚动速度设置,数字越大滚动越慢ROLL:MOV A, R0 ;变换显示的第一行以完成滚动MOV R1, #01H ;行扫描信号不变MOV R2, AMOV R3, #10HLOAD:MOV DPTR, #SEL_DATA ;MOV A, R1MOVC A, @A+DPTRMOV SELH, A ;LOAD HIGH BYTEDEC R1 ;OF SELECT SIGNALMOV A, R1MOVC A, @A+DPTRMOV SELL, A ;LOAD LOW BYTEINC R1 ;OF SELECT SIGNALINC R1INC R1MOV DPTR, #ROW_DATAMOV A, R2MOVC A, @A+DPTRMOV ROWH, ADEC R2MOV A, R2MOVC A, @A+DPTRMOV ROWL, AINC R2INC R2INC R2LCALL LATCHLCALL DELAYDJNZ R3, LOAD; 以上与第一部分相同DJNZ WAIT, ROLL ;循环以延时INC R0INC R0 ;R0指向下一行,以实现滚动CJNE R0, #61H, NEXT ;所有字符显示完毕后开始新的一轮; 以下与第一部分相同LJMP MAINLATCH:CLR L_OECLR L_STRMOV R4, SELHMOV R5, ROWHMOV R6, #08HLATCH1:CLR L_CLKMOV A, R4RRC AMOV R4, AMOV L_DAT_H, CMOV A, R5RRC AMOV R5, AMOV L_DAT_L, CSETB L_CLKDJNZ R6, LATCH1;MOV R4, SELLMOV R5, ROWLMOV R6, #08HLATCH2:CLR L_CLKMOV A, R4RRC AMOV R4, AMOV L_DAT_H, CMOV A, R5RRC AMOV R5, AMOV L_DAT_L, CSETB L_CLKDJNZ R6, LATCH2;SETB L_STR;RETDELAY:MOV R6, #02HLOOP1:MOV R7, #0F8HLOOP2:DJNZ R7, LOOP2DJNZ R6, LOOP1;RETSEL_DA TA: ;SELECT ROWDB 80H, 00HDB 40H, 00HDB 20H, 00HDB 10H, 00HDB 08H, 00HDB 04H, 00HDB 02H, 00HDB 01H, 00HDB 00H, 80HDB 00H, 40HDB 00H, 20HDB 00H, 10HDB 00H, 08HDB 00H, 04HDB 00H, 02HDB 00H, 01HROW_DA TA:DB 0FFH, 0FFH, 80H, 03H, 0FEH, 0FFH, 0FEH, 0FFH, 0FEH, 0FFH, 0FEH, 0FFH, 0FEH, 0FFH, 0C0H, 07H;DB 0FEH, 0FFH, 0FEH, 0FFH, 0FEH, 0FFH, 0FEH, 0FFH, 0FEH, 0FFH, 0FEH, 0FFH, 00H, 01H, 0FFH, 0FFH;"王",0DB 0F7H, 0DFH, 0F7H, 0DFH, 81H, 03H, 0F7H, 0DFH, 0E3H, 8FH, 0D5H, 57H, 37H, 0D9H, 0FBH, 0FFH;DB 0F8H, 0FH, 0F7H, 0EFH, 0EBH, 0DFH, 0DDH, 0BFH, 0FEH, 7FH, 0FDH, 0FFH, 0F3H, 0FFH, 8FH, 0FFH;"梦",1DB 0FFH, 0FFH, 0FCH, 01H, 03H, 0DFH, 0EFH, 0BFH, 0EEH, 03H, 0DEH, 0FBH, 0C2H, 0FBH, 9AH, 0DBH;DB 9AH, 0DBH, 5AH, 0DBH, 0DAH, 0DBH, 0DAH, 0BBH, 0C3H, 0AFH, 0DBH, 77H, 0DEH,0FBH, 0FDH, 0FBH;"硕",2DB 0FFH, 0FFH, 80H, 03H, 0FEH, 0FFH, 0FEH, 0FFH, 0FEH, 0FFH, 0FEH, 0FFH, 0FEH, 0FFH, 0C0H, 07H;DB 0FEH, 0FFH, 0FEH, 0FFH, 0FEH, 0FFH, 0FEH, 0FFH, 0FEH, 0FFH, 0FEH, 0FFH, 00H, 01H, 0FFH, 0FFH;"王",0; 为了实现无间隙滚动,最后16行与最前十六行设置相同字模数据END实验效果:字模效果:LED点阵效果:实验现象与记录:1·静态显示:正确地显示了“王”字,但是很明显地:每一行的所有点亮的等亮度相同,并且对每一行而言,亮的灯越多,则每盏灯越暗。
LED16×16点阵汉字显示设计(VHDL版)
毕业设计(论文)开题报告设计(论文)题基于FPGA的LED 16×16点阵汉字显示设计目一、选题的背景和意义:LED点阵显示屏是集微电子技术、计算机技术、信息处理技术于一体的大型显示屏系统。
它以其色彩鲜艳,动态范围广,亮度高,寿命长,工作稳定可靠等优点而成为众多显示媒体以及户外作业显示的理想选择。
受到体育场馆用LED显示屏需求快速增长的带动,近年来,中国 LED显示屏应用逐步增多。
目前,LED已经广泛应用在银行、火车站、广告、体育场馆之中。
而随着奥运会、世博会的临近,LED显示屏将广泛的应用在体育场馆以及道路交通指示中,LED显示屏在体育广场中的应用将出现快速增长。
因此,本设计是很有必要的,之所以基于FPGA设计是因为现场可编程门阵列(FPGA)设计周期小,灵活度高,适合用于小批量系统,提高系统的可靠性和集成度。
并且采用编写灵活的VHDL语言编写主程序。
本设计可以方便的应用到各类广告宣传中。
二、课题研究的主要内容:1. 实现16×16点阵的汉字显示;2. 实现有限汉字显示;4. 实现汉字的滚动显示;5. 完成方案论证。
三、主要研究(设计)方法论述:通过去图书馆查阅书籍收集资料,同时在搜索引擎上检索资料,分析借鉴已有类似产品、设计方案与成功经验,选择几种可行方案比对,最后确定最切实可行的方案展开设计。
通过Multisim或Quartus软件对系统进行模拟仿真,对电路功能进行改进与完善。
在EDA试验箱上进行调试。
四、设计(论文)进度安排:时间(迄止日期)工作内容2010.5.17-5.23理解并确认毕业设计任务书,撰写完成毕业设计开题报告(第1周)2010.5.24-5.30完成调研与资料收集、整理(第2周)2010.5.31-6.6设计方案及原理框图确定(第3周)2010.6.7-7.4电路资料收集,单元电路设计(第4、5、6、7周)2010.7.5-7.18电路仿真与改进、完善(第8、9周)2010.19-8.1资料整理(第10、11周)2010..8.2-8.8书写毕业设计报告(第12周)2010.8.9-8.16(第13周)修改毕业设计报告并整理装订五、指导教师意见:指导教师签名:年月日六、系部意见:系主任签名:年月日目录摘要ABSTRACT第一章前言 (1)1.1本设计的研究背景和研究目的 (1)1.2LED点阵显示特点 (2)1.3FPGA设计的特点 (2)第二章系统设计 (4)2.1设计任务与要求 (4)2.1.1设计任务 (4)2.1.2设计要求 (4)2.2设计原理 (4)2.2.1总体设计方案 (4)2.2.2方案的比较 (5)2.3扫描控制模块 (6)2.3.1 LED的显示原理 (6)2.3.2汉字的存储 (7)2.4汉字显示 (7)2.4.1列循环扫描 (8)2.4.2字符样式设计 (10)2.4.3字母循环扫描及期间的延时环节 (14)2.5整个完整的程序 (15)第三章系统调试与仿真 (22)3.1开发环境介绍 (22)3.2调试与仿真 (22)3.2.1 创建工程 (22)3.2.2 编译前设置 (23)3.2.3 全程编译 (25)3.2.4时序仿真 (26)第四章结束语 (29)答谢辞 (29)参考文献 (29)摘要主要研究基于VHDL的 Led点阵汉字滚动显示。
16x16 LED点阵实验
实验名称:16x16 LED点阵实验实验目的:利用单片机I/O口实现LED点阵的行扫描动态显示。
实验原理:1、LED显示器的基本结构:七段显示器:将发光二极管封装成数码显示的形式。
共阳七段显示器:共阴七段显示器:点阵式显示器:发光二极管封装成点阵形式,构成不同的字符甚至汉字、图形。
发光二极管排列成矩阵,由亮与暗来产生字符或图形。
每一行的阳极连在一起,每一列的阴极连在一起。
2、点阵显示的原理:点阵显示器每一列的阴极连在一起,对每一列而言相当于一个共阴显示器。
同时每一行的阳极连在一起,相当于七段显示器的笔划。
这样,可以把5X7的发光二极管点阵看作一个五位显示器。
可采用动态显示电路,以笔划锁存器控制行信号,以位锁存器控制列信号。
3、实验原理图使用两片8位输出锁存移位寄存器74HC595(三态输出、串入并出),将单片机I/O口发出的串行数据转换为并行数据LD_QA~LD_QP,作为16×16 LED点阵显示器的行线,使用另外两片8位74HC595作为 16×16 LED点阵显示器的列线LD_1~LD_16。
当行输出高电平、列输出低电平时,可以点亮点阵。
74HC595:LD-QA~LD-QP:点阵行控制信号LD-1~LD-16:点阵列控制信号SER(14脚):串行数据输入端-SCLR(10脚):低电平时将移位寄存器的数据清零。
通常将它接Vcc。
SCK(11脚):上升沿时将串行数据移入移位寄存器。
RCK(12脚):上升沿时移位寄存器的数据锁存入数据寄存器。
-G(13脚): 高电平时禁止输出(高阻态)时序图:实验内容:在16×16LED点阵上分别用静态方式和滚屏方式显示自己的姓(行扫描)。
实验步骤:使用导线将A2区的P10~P14与C3区的L_DAT_H 、L_DAT_L、L_CLK、L_OE 、 L_STR实验设计:电路图:(修改后加上了74HC595输出端口与LED点阵相连的端口名称)1、静态方式:流程图:代码及注释:HL EQU 70H ;行信号低位内存地址LL EQU 72H ;列信号低位内存地址HD EQU P1.0 ;p1.0口连行信号输入端LD EQU P1.1 ;P1.1口连列信号输入端SCK EQU P1.2 ;P1.2口连移位寄存器OE EQU P1.3 ;P1.3口连使能端RCK EQU P1.4 ;P1.4口连锁存器ORG 8000H ;硬件仿真程序LJMP MAINORG 8100H ;硬件仿真程序MAIN:MOV DPTR,#DISPLAY ;字模表地址MOV R1,#00H ;字模表起始地址偏移量MOV HL,#01H ;行扫描信号的初值0001HMOV HL+1,#00HLOOP:MOV A,R1MOVC A,@A+DPTRMOV LL,A ;找到列低位数据,存入内存地址中INC R1MOV A,R1MOVC A,@A+DPTRMOV LL+1,A ;找到列高位数据,存入内存地址中LCALL SENDD ;调用传输数据的程序LCALL DELAY ;调用延时程序CLR C ;位处理累加器清零MOV A,HLRLC A ;左移行扫描信号低8位MOV HL,AMOV A,HL+1RLC A ;左移行扫描信号高8位MOV HL+1,AINC R1CJNE R1,#20H,LOOP ;判断一轮扫描是否结束LJMP MAINSENDD:CLR OE ;使能信号低电平有效CLR RCK ;RCK信号置0MOV R2,#08HMOV R3,LL+1 ;列信号高八位地址MOV R4,HL+1 ;行信号高八位地址BACK:CLR SCK ;SCK信号置0MOV A,R3RLC AMOV R3,AMOV LD,C ;列信号逐位传输MOV A,R4RLC AMOV R4,AMOV HD,C ;行信号逐位传输SETB SCK ;SCK信号上升沿到来,将串行数据移入移位寄存器DJNZ R2,BACK ;判断高8位信号是否传输完毕MOV R2,#08HMOV R3,LL ;列信号低8位地址MOV R4,HL ;行信号低8位地址BACK1:CLR SCK ;SCK信号置0MOV A,R3RLC AMOV R3,AMOV LD,C ;列信号逐位传输MOV A,R4RLC AMOV R4,AMOV HD,C ;行信号逐位传输SETB SCK ;SCK信号上升沿到来,将串行数据移入移位寄存器DJNZ R2,BACK1 ;判断低8位信号是否传输完毕SETB RCK ;RCK信号上升沿到来,移位寄存器的数据锁存入数据寄存器RETDELAY: ;延时子程序MOV R7,#50DELAY1:MOV R6,#10DELAY2:DJNZ R6,$DJNZ R7,DELAY1RETDISPLAY:DB 0xFF,0xFE,0xE0,0xEE,0xEF,0xCE,0xEF,0xF6,0xE1,0xFA,0xFD,0xFC,0xFD,0xFE,0x3D,0x80;DB 0xE0,0xFA,0xED,0xFA,0xEF,0xF6,0xEF,0xF6,0xEF,0xEE,0xEF,0x9A,0x6B,0xDC,0xF7,0xFE;"张" END2、滚屏方式流程图:代码及注释:HL EQU 70H ;行信号低位内存地址LL EQU 72H ;列信号低位内存地址HD EQU P1.0 ;p1.0口连行信号输入端LD EQU P1.1 ;P1.1口连列信号输入端SCK EQU P1.2 ;P1.2口连移位寄存器OE EQU P1.3 ;P1.3口连使能端RCK EQU P1.4 ;P1.4口连锁存器ORG 8000H ;硬件仿真程序LJMP MAINORG 8100H ;硬件仿真程序MAIN:MOV DPTR,#DISPLAY ;字模表地址MOV R1,#00HMOV R7,#00H ;R7用来表示字模表起始位置偏移量LOOP:MOV R5,#20 ;R5用来表示延时,改变R5的值可改变滚屏速度LOOP1:MOV R6,#10H ;R6用来判断是否扫描完一轮MOV A,R7 ;将R7的值赋值给R1MOV R1,AMOV HL,#01H ;行扫描信号的初值0001HMOV HL+1,#00HLOOP2:MOV A,R1MOVC A,@A+DPTRMOV LL,A ;找到列低位数据,存入内存地址中INC R1MOV A,R1MOVC A,@A+DPTRMOV LL+1,A ;找到列高位数据,存入内存地址中LCALL SENDD ;调用传输数据的程序LCALL DELAY ;调用延时程序CLR C ;位处理累加器清零MOV A,HLRLC A ;左移行扫描信号低八位MOV HL,AMOV A,HL+1RLC A ;左移行扫描信号高八位MOV HL+1,AINC R1DEC R6CJNE R6,#00H,LOOP2 ;通过R6判断是否扫描完一轮,R6减为0,一轮扫描结束DJNZ R5,LOOP1 ;通过R5判断一帧的延时是否达到INC R7 ;改变字模表的偏移量INC R7 ;R7连续加2,相当于换行CJNE R7,#40H,LOOP ;判断字模表是否结束LJMP MAINSENDD:CLR OE ;使能信号低电平有效CLR RCK ;RCK信号置0MOV R2,#08HMOV R3,LL+1 ;列信号高8位地址MOV R4,HL+1 ;行信号高8位地址BACK:CLR SCK ;SCK信号置0MOV A,R3RLC AMOV R3,AMOV LD,C ;列信号逐位传输MOV A,R4RLC AMOV R4,AMOV HD,C ;行信号逐位传输SETB SCK ;SCK信号上升沿到来,将串行数据移入移位寄存器DJNZ R2,BACK ;判断高八位信号是否传输完毕MOV R2,#08HMOV R3,LL ;列信号低八位地址MOV R4,HL ;行信号低八位地址BACK1:CLR SCK ;SCK信号置0MOV A,R3RLC AMOV R3,AMOV LD,C ;列信号逐位传输MOV A,R4RLC AMOV R4,AMOV HD,C ;行信号逐位传输SETB SCK ;SCK信号上升沿到来,将串行数据移入移位寄存器DJNZ R2,BACK1 ;判断低八位信号是否传输完毕SETB RCK ;RCK信号上升沿到来,移位寄存器的数据锁存入数据寄存器RETDELAY: ;延时子程序MOV R2,#50DELAY1:MOV R3,#10DELAY2:DJNZ R3,$DJNZ R2,DELAY1RETDISPLAY:DB 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFFDB 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF;预留空白DB 0xFF,0xFE,0xE0,0xEE,0xEF,0xCE,0xEF,0xF6,0xE1,0xFA,0xFD,0xFC,0xFD,0xFE,0x3D,0x80;DB 0xE0,0xFA,0xED,0xFA,0xEF,0xF6,0xEF,0xF6,0xEF,0xEE,0xEF,0x9A,0x6B,0xDC,0xF7,0xFE;"张" END实验结果与分析:1、程序正确运行后,可看到16x16 LED点阵显示屏上显示“张”,LED灯的亮暗程度有些不均匀。
实验四 16X16点阵LED实验
实验四 16X16点阵LED实验一.实验目的1.了解点阵显示的原理及控制方法;2.学会使用16X16点阵LED,通过编程显示不同的字符。
二.实验原理及相关电路16X16点阵了的由16X16列共256个发光二极管紧密排在一起构成,程序控制每个像素点(发光二极管)的亮灭,就能用来显示汉字或者图形。
LED的每一行的16列发光二极管都由一个4位的16进制数来控制,从左往右由低位到高位。
将每一个字的显示都用16个16位进制数表示,称为字模。
本实验,分别控制LED灯行的动态扫描,高电平为灭低电平为点亮;用16进制数控制LED灯每一列的亮灭,高电平为亮,低电平为灭。
为了实现显示屏上字的滚动显示,则需要将所显示的字向右移,并取下一个字的最右边一位补充到显示屏的最左边,形成动态滚动的效果。
三.实验内容及程序1.用单片机的端口控制16*16点阵的行与列,在点阵LED显示屏上显示“单”。
#include <p24FJ64GA006.h>void Delayms(unsigned int del){unsigned int j;while(del--)for(j=0;j<1000;j++); } //定义Delaym函数void IOInit() //初始化端口{AD1PCFG= 0xFFFF; //全部设置为数字TRISD=TRISB= 0x0000; //D和B端口全部设为输出TRISE=TRISF= 0x0000; //E和F端口全部设为输出}int main(void){unsigned int state_E,state_F,temp_E,temp_F; IOInit();state_F = 0xFFFE; //初始化F端口状态unsigned int i=0;unsigned int dan[]={0x0410,0x0C60,0x0220,0x1FFC,0x1084,0x1FFC,0x1084,0x1084,0x1FFC,0x1084,0x0080,0x7FFF,0x0080,0x0080,0x0080,0x0080}; //单while(1){PORTD = dan[i];PORTB = dan[i]; //将字模同时赋给B和D端口PORTF = state_F; //将行状态的低8位赋给F端口低8位state_E=temp_E=temp_F=state_F;state_E <<= 8;state_E = (state_F&0xFF00)|((temp_E>>8)&0x00FF); //行状态左移8位PORTE = state_E; //将行状态高8位赋给E端口低8位Delayms( 1 );state_F <<= 1;state_F = (state_F&0xFFFE)|((temp_F>>15)&0x0001);//将行状态左移一位,动态扫描i++;if(i==16)i=0;}}显示结果:注:中间空出一行是因为PORTF的第8位为空,不影响显示效果2.在点阵LED显示屏上滚动显示“单片机实验室欢迎您”。
点阵显示实验
点阵显示实验16*16点阵显示实验引言当今,数字系统的设计可以直接面向用户的需求,根据系统功能的要求,从上到下逐层完成相应的描述、综合、优化、仿真与验证,直到生成器件。
而FPGA(Field Programmable Gate Array,现场可编程门镇列)以设计灵活及速度快的特点,在数字专用集成电路的设计中得到了广泛应用。
本文介绍的汉字显示系统,将16*16点阵与FPGA巧妙结合,采用VHDL(VHSIC Hardware Description Language,硬件描述语言)进行功能描述一、点阵显示原理1点阵模块说明此设计采用4块8*8的点阵块组成16*16的点阵显示模块1.18*8点阵块工作原理如图1所示。
8*8点阵块工作方式:Q端加正电压,COM端接地时发光二管点亮。
例如,当COM8接地且Q1~Q8分别接高电平时,第一行亮。
同理,当COM7接地,Q1~Q8分别接高电平时,第二行亮。
依此类推。
当Q5端加高电平时,分别让COM1~COM8接地,第一12列亮。
其它列依此类推。
1.2 16*16点阵模块用4块8*8的点阵块组成16*16的点阵模块显示汉字,连接关系如图2所示。
Q0~Q15成为点阵块的行线,COM0~COM15形成点阵块的列线。
1.3 行列驱动由循环计数器输出经放大后的驱动点阵,形成动态扫描,分别控制一列中的每个灯,当列线发出信号后,行线同时发出数据,这样就将一个汉字由左到右分成16列。
在完成各列的同时,行线发出行数据,一个循环就可以将一个汉字完整的重现在16*16的点阵模块上。
本实验主要完成汉字字符在LED 上的显示,16*16扫描LED 点阵的工作原理与8位扫描数码管类似,只是显示的方式与结果不一样而已。
下面就本实验系统的16*16点阵的工件原理做一些简单的说明。
16*16点阵由此256个LED通过排列组合而形成16行*16列的一个矩阵式的LED 阵列,俗称16*16点阵。
16×16点阵LED电子显示屏的设计报告
单片机原理及应用课程设计报告书题目:16×16点阵LED电子显示屏的设计姓名:学号:*********专业:电子信息科学与技术指导老师:设计时间:2011年 4 月目录1. 引言(字体4号,黑体,居中) (1)1.1. 设计意义(字体小4号,黑体) (1)1.2. 系统功能要求(字体小4号,黑体) (1)2. 方案设计(字体4号,黑体,居中) (1)3. 硬件设计(字体4号,黑体,居中) (2)4. 软件设计(字体4号,黑体,居中) (5)5. 系统调试(字体4号,黑体,居中) (8)6. 设计总结(字体4号,黑体,居中) (8)7. 附录A;源程序(字体4号,黑体,居中) (10)8. 附录B;作品实物图片(字体4号,黑体,居中) (17)9. 参考文献(字体4号,黑体,居中) (17)16×16点阵LED电子显示屏的设计1.引言1.1. 设计意义LED点阵显示屏在我们的日常生活中随处可见,广泛应用于车站、码头、机场、商场、医院、宾馆、银行、证券市场、建筑市场、拍卖行、工业企业管理和其它公共场所。
它的优点是:亮度高、工作电压低、功耗小、微型化、易与集成电路匹配、驱动简单、寿命长、耐冲击、性能稳定。
我们已经学习了单片机及相关的课程,可以利用单片机来控制LED,以达到我们所需要的显示效果。
通过16x16点阵显示屏的课程设计,我们能更好的掌握单片机工作原理,把理论知识与实践结合起来,达到学以致用的目的。
课程设计能够提高我们的动手能力与解决实际问题的能力。
对于单片机我们已经学习了很多与之相关的理论知识,但是我们还没有机会来实际操作它,课程设计给我们提供了一个很好的机会,让我们更深入的去学习它,掌握它。
通过课程设计我们能基本掌握单片机硬件与软件相关的知识,掌握16X16LED点阵的工作原理。
1.2. 系统功能要求设计一个室内用16x16的点阵LED图文显示屏,要求在目测条件下LED 显示屏各点亮度均匀、充足,可显示图形和文字,显示图形和文字应稳定、清晰无串扰。
数字系统与逻辑设计(16x16点阵显示)
课程设计报告课程名称数字系统与逻辑设计课题名称16*16点阵显示专业通信工程班级1081学号姓名指导教师2012年7月2日湖南工程学院课程设计任务书课程名称数字系统与逻辑设计课题16*16点阵显示专业班级通信工程1081学生姓名学号指导老师审批任务书下达日期2012 年6月23日任务完成日期2012 年7月2日《数字系统与逻辑设计》课程设计任务书一、设计目的全面熟悉、掌握VHDL语言基本知识,掌握利用VHDL语言对常用的的组合逻辑电路和时序逻辑电路编程,把编程和实际结合起来,熟悉编制和调试程序的技巧,掌握分析结果的若干有效方法,进一步提高上机动手能力,培养使用设计综合电路的能力,养成提供文档资料的习惯和规范编程的思想。
二、设计要求1、设计正确,方案合理。
2、程序精炼,结构清晰。
3、设计报告5000字以上,含程序设计说明,用户使用说明,源程序清单及程序框图。
4、上机演示。
5、有详细的文档。
文档中包括设计思路、设计仿真程序、仿真结果及相应的分析与结论。
三、进度安排第二十周星期一:课题讲解,查阅资料星期二:总体设计,详细设计星期三:编程,上机调试、修改程序星期四:上机调试、完善程序星期五:答辩星期六-星期天:撰写课程设计报告附:课程设计报告装订顺序:封面、任务书、目录、正文、评分、附件(A4大小的图纸及程序清单)。
正文的格式:一级标题用3号黑体,二级标题用四号宋体加粗,正文用小四号宋体;行距为22。
正文的内容:一、课题的主要功能;二、课题的功能模块的划分(要求画出模块图);三、主要功能的实现;四、系统调试与仿真;五、总结与体会;六、附件(所有程序的原代码,要求对程序写出必要的注释);七、评分表。
目录一、16*16点阵显示系统的总体设计 (4)1.1、16*16点阵显示设计 (4)1.2、基本设计思想 (4)二、16*16点阵显示系统的功能实现 (5)2.1、系统的总体框图 (5)2.2、程序流程图 (6)2.3、系统各功能模块的实现 (7)2.3.1时序控制模块 (7)2.3.2扫描控制 (7)2.3.3显示控制模块 (8)三、16*16点阵显示系统的调试与仿真 (11)四、总结与体会 (14)五、附录(源程序) (14)六、评分表 (20)一、16*16点阵显示系统的总体设计1.1、16*16点阵显示设计设计一个16*16的LED点阵显示器,完成汉字字符在LED 上的显示,并且依次显示的是“湖南工程学院”,要求每隔一秒换下一个字显示。
16×16点阵显示
目录第一章系统设计总述 (1)1.1 设计要求 (1)1.2 要求分析 (1)第二章系统设计原理 (2)第三章系统子程序设计 (3)3.1 32进制计数器设计 (3)3.2 16进制计数器设计 (4)3.3 列驱动设计 (5)3.4 行驱动设计 (6)第四章原理图仿真波形 (25)第五章设计小结 (26)参考文献 (27)SOPC/EDA综合课程设计报告―16×16点阵显示控制第一章系统设计总述1.1 设计要求使用FPGA设计一个16×16的点阵显示的控制器,使点阵显示器以两种花样显示“江西理工大学应用科学学院欢迎您!”1.2 要求分析根据设计要求可以分析出:点阵显示的花样有静态显示一个汉字,一屏一屏的显示汉字还有滚动显示汉字,还可以用亮着的灯显示汉字或者用暗着的灯显示汉字。
根据以上的分析,本实验采用如下两种花样显示:第一种花样是用亮着的灯组合所要显示的字,第二种方案是用暗着的灯组成所需要的字。
两种花样都是用一屏一屏的显示方法。
图1-1 方案一示例图1-2 方案二示例第二章系统设计原理16×16扫描LED点阵只要其对应的X、Y轴顺向偏压,即可使LED发亮。
例如如果想使左上角LED点亮,则Y0=1,X0=0即可。
应用时限流电阻可以放在X轴或Y轴。
它有16个共阴极输出端口,每个共阴极对应有16个LED显示灯。
本实验就是要通过CPLD 芯片产生读时序,将字形从寄存器中读出,然后产生写时序,写入16×16的点阵,使其扫描显示输出。
为了显示整个汉字,首先分布好汉字的排列,以行给汉字信息;然后以128HZ 的时序逐个点亮每一行,即每行逐一加高电平,根据人眼的视觉残留特性,使之形成整个汉字的显示。
LED点阵每个点都有一个红色的发光二极管。
点阵内的二极管间的连接都是行共阳,列共阴。
本实验采用共阴,当二极管的共阳极为高电平,共阴极为低电平时,所接点发光;反之处于截止状态,不放光。
16X16点阵显示实验
实验报告实验名称: [16X16点阵显示实验]姓名:学号:指导教师:实验时间: [2013年6月15日]信息与通信工程学院16X16点阵显示实验1、实验要求:理解并掌握点阵显示符号的原理,理解原有程序,会使用动态扫描的方式使点阵显示汉字,明白点阵滚动显示的原理。
根据原有程序,掌握LPM_ROM的应用,会应用LPM_ROM存储需要显示的内容。
参照液晶显示程序,编写16*16点阵显示程序。
任务一:实现点阵列扫描。
点亮点阵的一列,并让其不断的向右移动。
任务二:在点阵上循环滚动显示“嵌入式系统设计”。
2、实验原理:2.1点阵基本原理本实验对点阵的扫描使用列扫描的方式。
就是将要显示的数据分成16列,在某一时刻只选中一列,并向点阵传送该列需要显示的数据,那么如果从左往右依次循环选中所有列,并且循环的速度足够快,因为视觉停留效应,我们就能看到完整的显示了。
如果要显示大于16列的信息,比如要显示多个汉字,由于只能同时显示16列,那么就需要在一个比较慢的时钟的指挥下,不断更新要显示的连续的16列数据,使用这样的方法就能实现滚动显示。
2.2任务原理8*8LED点阵共由64个发光二极管组成,每个发光二极管放置在行线和列线的交叉点上,当对应的某一行高电平(置1),且某一列低电平(置0),则相应的发光二极管就亮;因此要用8*8LED点阵来显示一个字符或汉字,只需要根据字符或汉字图形中的线条或笔画,通过点亮多个发光二极管来勾勒出字符或汉字的线条或笔画就行了。
当要比较完美的显示一般的汉字,单个8*8LED点阵模块很难做到,因为LED的点数(也称为像素点)不够多,因此要显示汉字的话,需要多个8*8LED点阵拼合成一个显示屏。
假如用4个8*8LED点阵模块拼成16*16的点阵,即能满足一般汉字的显示。
16×16扫描LED点阵的工作原理同8位扫描数码管类似。
它有16个共阴极输出端口,每个共阴极对应有16个LED显示灯,所以其扫描译码地址需4位信号线(SEL0-SEL3),其汉字扫描码由16位段地址(0-15)输入。
16x16 LED点阵实验
实验名称:16x16 LED点阵实验实验目的:利用单片机I/O口实现LED点阵的行扫描动态显示。
实验原理:1、LED显示器的基本结构:七段显示器:将发光二极管封装成数码显示的形式。
共阳七段显示器:共阴七段显示器:点阵式显示器:发光二极管封装成点阵形式,构成不同的字符甚至汉字、图形。
发光二极管排列成矩阵,由亮与暗来产生字符或图形。
每一行的阳极连在一起,每一列的阴极连在一起。
2、点阵显示的原理:点阵显示器每一列的阴极连在一起,对每一列而言相当于一个共阴显示器。
同时每一行的阳极连在一起,相当于七段显示器的笔划。
这样,可以把5X7的发光二极管点阵看作一个五位显示器。
可采用动态显示电路,以笔划锁存器控制行信号,以位锁存器控制列信号。
3、实验原理图使用两片8位输出锁存移位寄存器74HC595(三态输出、串入并出),将单片机I/O口发出的串行数据转换为并行数据LD_QA~LD_QP,作为16×16 LED点阵显示器的行线,使用另外两片8位74HC595作为 16×16 LED点阵显示器的列线LD_1~LD_16。
当行输出高电平、列输出低电平时,可以点亮点阵。
74HC595:LD-QA~LD-QP:点阵行控制信号LD-1~LD-16:点阵列控制信号SER(14脚):串行数据输入端-SCLR(10脚):低电平时将移位寄存器的数据清零。
通常将它接Vcc。
SCK(11脚):上升沿时将串行数据移入移位寄存器。
RCK(12脚):上升沿时移位寄存器的数据锁存入数据寄存器。
-G(13脚): 高电平时禁止输出(高阻态)时序图:实验内容:在16×16LED点阵上分别用静态方式和滚屏方式显示自己的姓(行扫描)。
实验步骤:使用导线将A2区的P10~P14与C3区的L_DAT_H 、L_DAT_L、L_CLK、L_OE 、 L_STR实验设计:电路图:(修改后加上了74HC595输出端口与LED点阵相连的端口名称)1、静态方式:流程图:代码及注释:HL EQU 70H ;行信号低位内存地址LL EQU 72H ;列信号低位内存地址HD EQU P1.0 ;p1.0口连行信号输入端LD EQU P1.1 ;P1.1口连列信号输入端SCK EQU P1.2 ;P1.2口连移位寄存器OE EQU P1.3 ;P1.3口连使能端RCK EQU P1.4 ;P1.4口连锁存器ORG 8000H ;硬件仿真程序LJMP MAINORG 8100H ;硬件仿真程序MAIN:MOV DPTR,#DISPLAY ;字模表地址MOV R1,#00H ;字模表起始地址偏移量MOV HL,#01H ;行扫描信号的初值0001HMOV HL+1,#00HLOOP:MOV A,R1MOVC A,@A+DPTRMOV LL,A ;找到列低位数据,存入内存地址中INC R1MOV A,R1MOVC A,@A+DPTRMOV LL+1,A ;找到列高位数据,存入内存地址中LCALL SENDD ;调用传输数据的程序LCALL DELAY ;调用延时程序CLR C ;位处理累加器清零MOV A,HLRLC A ;左移行扫描信号低8位MOV HL,AMOV A,HL+1RLC A ;左移行扫描信号高8位MOV HL+1,AINC R1CJNE R1,#20H,LOOP ;判断一轮扫描是否结束LJMP MAINSENDD:CLR OE ;使能信号低电平有效CLR RCK ;RCK信号置0MOV R2,#08HMOV R3,LL+1 ;列信号高八位地址MOV R4,HL+1 ;行信号高八位地址BACK:CLR SCK ;SCK信号置0MOV A,R3RLC AMOV R3,AMOV LD,C ;列信号逐位传输MOV A,R4RLC AMOV R4,AMOV HD,C ;行信号逐位传输SETB SCK ;SCK信号上升沿到来,将串行数据移入移位寄存器DJNZ R2,BACK ;判断高8位信号是否传输完毕MOV R2,#08HMOV R3,LL ;列信号低8位地址MOV R4,HL ;行信号低8位地址BACK1:CLR SCK ;SCK信号置0MOV A,R3RLC AMOV R3,AMOV LD,C ;列信号逐位传输MOV A,R4RLC AMOV R4,AMOV HD,C ;行信号逐位传输SETB SCK ;SCK信号上升沿到来,将串行数据移入移位寄存器DJNZ R2,BACK1 ;判断低8位信号是否传输完毕SETB RCK ;RCK信号上升沿到来,移位寄存器的数据锁存入数据寄存器RETDELAY: ;延时子程序MOV R7,#50DELAY1:MOV R6,#10DELAY2:DJNZ R6,$DJNZ R7,DELAY1RETDISPLAY:DB 0xFF,0xFE,0xE0,0xEE,0xEF,0xCE,0xEF,0xF6,0xE1,0xFA,0xFD,0xFC,0xFD,0xFE,0x3D,0x80;DB 0xE0,0xFA,0xED,0xFA,0xEF,0xF6,0xEF,0xF6,0xEF,0xEE,0xEF,0x9A,0x6B,0xDC,0xF7,0xFE;"张" END2、滚屏方式流程图:代码及注释:HL EQU 70H ;行信号低位内存地址LL EQU 72H ;列信号低位内存地址HD EQU P1.0 ;p1.0口连行信号输入端LD EQU P1.1 ;P1.1口连列信号输入端SCK EQU P1.2 ;P1.2口连移位寄存器OE EQU P1.3 ;P1.3口连使能端RCK EQU P1.4 ;P1.4口连锁存器ORG 8000H ;硬件仿真程序LJMP MAINORG 8100H ;硬件仿真程序MAIN:MOV DPTR,#DISPLAY ;字模表地址MOV R1,#00HMOV R7,#00H ;R7用来表示字模表起始位置偏移量LOOP:MOV R5,#20 ;R5用来表示延时,改变R5的值可改变滚屏速度LOOP1:MOV R6,#10H ;R6用来判断是否扫描完一轮MOV A,R7 ;将R7的值赋值给R1MOV R1,AMOV HL,#01H ;行扫描信号的初值0001HMOV HL+1,#00HLOOP2:MOV A,R1MOVC A,@A+DPTRMOV LL,A ;找到列低位数据,存入内存地址中INC R1MOV A,R1MOVC A,@A+DPTRMOV LL+1,A ;找到列高位数据,存入内存地址中LCALL SENDD ;调用传输数据的程序LCALL DELAY ;调用延时程序CLR C ;位处理累加器清零MOV A,HLRLC A ;左移行扫描信号低八位MOV HL,AMOV A,HL+1RLC A ;左移行扫描信号高八位MOV HL+1,AINC R1DEC R6CJNE R6,#00H,LOOP2 ;通过R6判断是否扫描完一轮,R6减为0,一轮扫描结束DJNZ R5,LOOP1 ;通过R5判断一帧的延时是否达到INC R7 ;改变字模表的偏移量INC R7 ;R7连续加2,相当于换行CJNE R7,#40H,LOOP ;判断字模表是否结束LJMP MAINSENDD:CLR OE ;使能信号低电平有效CLR RCK ;RCK信号置0MOV R2,#08HMOV R3,LL+1 ;列信号高8位地址MOV R4,HL+1 ;行信号高8位地址BACK:CLR SCK ;SCK信号置0MOV A,R3RLC AMOV R3,AMOV LD,C ;列信号逐位传输MOV A,R4RLC AMOV R4,AMOV HD,C ;行信号逐位传输SETB SCK ;SCK信号上升沿到来,将串行数据移入移位寄存器DJNZ R2,BACK ;判断高八位信号是否传输完毕MOV R2,#08HMOV R3,LL ;列信号低八位地址MOV R4,HL ;行信号低八位地址BACK1:CLR SCK ;SCK信号置0MOV A,R3RLC AMOV R3,AMOV LD,C ;列信号逐位传输MOV A,R4RLC AMOV R4,AMOV HD,C ;行信号逐位传输SETB SCK ;SCK信号上升沿到来,将串行数据移入移位寄存器DJNZ R2,BACK1 ;判断低八位信号是否传输完毕SETB RCK ;RCK信号上升沿到来,移位寄存器的数据锁存入数据寄存器RETDELAY: ;延时子程序MOV R2,#50DELAY1:MOV R3,#10DELAY2:DJNZ R3,$DJNZ R2,DELAY1RETDISPLAY:DB 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFFDB 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF;预留空白DB 0xFF,0xFE,0xE0,0xEE,0xEF,0xCE,0xEF,0xF6,0xE1,0xFA,0xFD,0xFC,0xFD,0xFE,0x3D,0x80;DB 0xE0,0xFA,0xED,0xFA,0xEF,0xF6,0xEF,0xF6,0xEF,0xEE,0xEF,0x9A,0x6B,0xDC,0xF7,0xFE;"张" END实验结果与分析:1、程序正确运行后,可看到16x16 LED点阵显示屏上显示“张”,LED灯的亮暗程度有些不均匀。
16×16点阵显示综合实验
《EDA技术综合设计》课程设计报告报告题目: 16×16点阵显示综合实验作者所在系部:电子工程系作者所在专业:作者所在班级:作者姓名:指导教师:完成时间:容摘要编写16×16点阵字符发生器的程序,通过CLK信号控制它的行驱动信号和列选信号让其依次输出‘中’,‘国’,‘人’三个字,通过硬件实验观察其结果,对于其他的显示花样以及点亮方式,可以根据实际需要自行设计。
关键字:16×16点阵,CLK,显示花样目录一概述 (5)二方案设计与论证 (5)三程序清单 (5)四器件编程与下载 (9)五性能测试与分析 (10)六实验设备 (10)七心得体会 (10)八参考文献 (11)课程设计任务书一、概述在时钟信号的控制下,使16×16点阵管花样点亮,在EDA试验仪中,16×16点阵显示列的驱动已经做好,其列选信号为SELOUT[3..0],送到4线-16线译码电路,译码电路的输出通过8只75451(双2输入与门,OC门)驱动器驱动16×16点阵管的16条共阴极列线;所以在设计点阵控制接口时,其列选信号必须由SELOUT[3..0]输出去控制译码电路。
对于信号的频率,采用与七段数码管的位选信号一样的处理方法,即扫描频率大于24Hz;通过CLK信号控制行驱动与列选信号使其动态依次显示”中国人“三个字。
其中CLK为时钟输入端,DIN[3..0]为花样显示模式选择,doout[15..0]为行驱动信号输出;SELOUT[3..0]为列选信号输出,去驱动4-16译码电路产生16×16点阵管的列选信号。
二、方案设计与论证该程序由三个进程信号组成,进程K1通过CLK信号控制扫描频率s以及计数信号q,进而由q的记述周期控制cp信号。
进程k2由cp信号控制汉字的扫描周期s0,实现汉字的依次显示,进程k3由扫描信号s控制点阵的行驱动和列选信号,使其准确显示’中国人’三个字。
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语言的了解。
VHDL 16
VHDL 16*16点阵本实验主要完成汉字字符在LED 上的显示,16*16 扫描LED 点阵的工作原理与8 位扫描数码管类似,只是显示的方式与结果不一样。
本实验的示例程序依次显示的是“湖南工程学院”,要求每隔一秒换下一个字显示。
源程序(带注释)library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity dzh is --建立实体dzh port( clk:in std_logic;r,c:out std_logic_vector(15 downto 0)); --两个输出信号end;architecture two of dzh is --建立结构体two type states is(st0,st1,st2,st3,st4,st5); --定义六个状态signal cs,ns:states:=st0;signal count:integer range 0 to 999:=0;begina1:process(clk)variable s:std_logic_vector(3 downto 0):="0000";beginif clk'event and clk='1' thens:=s+1;if cs=st0 thencase s is --“湖”字的显示when "0000" =>r<=not"0000000000000001";c<=not"0111111111111111";when "0001" =>r<=not"0000000000000010";c<=not"1011111011100000";when "0010" =>r<=not"0000000000000100";c<=not"1100111011101110";when "0011" =>r<=not"0000000000001000";c<=not"1111100000101110";when "0100" =>r<=not"0000000000010000";c<=not"1111111011101110";when "0101" =>r<=not"0000000000100000";c<=not"1111111011100000";when "0110" =>r<=not"0000000001000000";c<=not"0011100000101110";when "0111" =>r<=not"0000000010000000";c<=not"1100101110101110";when "1000" =>r<=not"0000000100000000";c<=not"1111101110100000";when "1001" =>r<=not"0000001000000000";c<=not"1111101110101110";when "1010" =>r<=not"0000010000000000";c<=not"1111101110101110";when "1011" =>r<=not"0000100000000000";c<=not"1110101110101110";when "1100" =>r<=not"0001000000000000";c<=not"1101100000101110";when "1101" =>r<=not"0010000000000000";c<=not"1011111111101110";when "1110" =>r<=not"0100000000000000";c<=not"0111111111011100";when "1111" =>r<=not"1000000000000000";c<=not"1111111111111111";when others =>null;end case;elsif cs=st1 thencase s is --“南”字的显示when "0000" =>r<=not"0000000000000001";c<=not"1111111111111111";when "0001" =>r<=not"0000000000000010";c<=not"1111111110111111";when "0010" =>r<=not"0000000000000100";c<=not"1111111101111111";when "0011" =>r<=not"0000000000001000";c<=not"1100000000000111";when "0100" =>r<=not"0000000000010000";c<=not"1111111011111111";when "0101" =>r<=not"0000000000100000";c<=not"1111110111111111";when "0110" =>r<=not"0000000001000000";c<=not"1100000000000111";when "0111" =>r<=not"0000000010000000";c<=not"1101101110110111";when "1000" =>r<=not"0000000100000000";c<=not"1101110101110111";when "1001" =>r<=not"0000001000000000";c<=not"1101100000110111";when "1010" =>r<=not"0000010000000000";c<=not"1101111011110111";when "1011" =>r<=not"0000100000000000";c<=not"1101000000010111";when "1100" =>r<=not"0001000000000000";c<=not"1101111011110111";when "1101" =>r<=not"0010000000000000";c<=not"1101111011100111";when "1110" =>r<=not"0100000000000000";c<=not"1111111111111111";when "1111" =>r<=not"1000000000000000";c<=not"1111111111111111";when others =>null;end case;elsif cs=st2 thencase s is --“工”字的显示when "0000" =>r<=not"0000000000000001";c<=not"1111111111111111";when "0001" =>r<=not"0000000000000010";c<=not"1111111111111111";when "0010" =>r<=not"0000000000000100";c<=not"1111111111111111";when "0011" =>r<=not"0000000000001000";c<=not"1100000000000111";when "0100" =>r<=not"0000000000010000";c<=not"1111111011111111";when "0101" =>r<=not"0000000000100000";c<=not"1111111011111111";when "0110" =>r<=not"0000000001000000";c<=not"1111111011111111";when "0111" =>r<=not"0000000010000000";c<=not"1111111011111111";when "1000" =>r<=not"0000000100000000";c<=not"1111111011111111";when "1001" =>r<=not"0000001000000000";c<=not"1111111011111111";when "1010" =>r<=not"0000010000000000";c<=not"1111111011111111";when "1011" =>r<=not"0000100000000000";c<=not"1111111011111111";when "1100" =>r<=not"0001000000000000";c<=not"1100000000000111";when "1101" =>r<=not"0010000000000000";c<=not"1111111111111111";when "1110" =>r<=not"0100000000000000";c<=not"1111111111111111";when "1111" =>r<=not"1000000000000000";c<=not"1111111111111111";end case;elsif cs=st3 thencase s is --“程”字的显示when "0000" =>r<=not"0000000000000001";c<=not"1111111111111111";when "0001" =>r<=not"0000000000000010";c<=not"1111111111111111";when "0010" =>r<=not"0000000000000100";c<=not"1111110110000011";when "0011" =>r<=not"0000000000001000";c<=not"1100001110111011";when "0100" =>r<=not"0000000000010000";c<=not"1111011110000011";when "0101" =>r<=not"0000000000100000";c<=not"1111011111111111";when "0110" =>r<=not"0000000001000000";c<=not"1000000100000001";when "0111" =>r<=not"0000000010000000";c<=not"1110001111101111";when "1000" =>r<=not"0000000100000000";c<=not"1101010111101111";when "1001" =>r<=not"0000001000000000";c<=not"1101011010000011";when "1011" =>r<=not"0000100000000000";c<=not"1111011111101111";when "1100" =>r<=not"0001000000000000";c<=not"1111011111101111";when "1101" =>r<=not"0010000000000000";c<=not"1111011100000001";when "1110" =>r<=not"0100000000000000";c<=not"1111111111111111";when "1111" =>r<=not"1000000000000000";c<=not"1111111111111111";when others =>null;end case;elsif cs=st4 thencase s is --“学”字的显示when "0000" =>r<=not"0000000000000001";c<=not"1111111111111111";when "0001" =>r<=not"0000000000000010";c<=not"1111011011110111";when "0010" =>r<=not"0000000000000100";c<=not"1111101101101111";when "0011" =>r<=not"0000000000001000";c<=not"1111111111111111";when "0100" =>r<=not"0000000000010000";c<=not"1110000000000011";when "0101" =>r<=not"0000000000100000";c<=not"1110111111111011";when "0110" =>r<=not"0000000001000000";c<=not"1101110000010111";when "0111" =>r<=not"0000000010000000";c<=not"1111111111011111";when "1000" =>r<=not"0000000100000000";c<=not"1111111100111111";when "1001" =>r<=not"0000001000000000";c<=not"1111111101111111";when "1010" =>r<=not"0000010000000000";c<=not"1111100000001111";when "1011" =>r<=not"0000100000000000";c<=not"1111111101111111";when "1100" =>r<=not"0001000000000000";c<=not"1111111101111111";when "1101" =>r<=not"0010000000000000";c<=not"1111111001111111";when "1110" =>r<=not"0100000000000000";c<=not"1111111111111111";when "1111" =>r<=not"1000000000000000";c<=not"1111111111111111";when others =>null;end case;elsif cs=st5 thencase s is --“院”字的显示when "0000" =>r<=not"0000000000000001";c<=not"1111111110111111";when "0010" =>r<=not"0000000000000100";c<=not"1011010000000001";when "0011" =>r<=not"0000000000001000";c<=not"1011010111111101";when "0100" =>r<=not"0000000000010000";c<=not"1010101111111011";when "0101" =>r<=not"0000000000100000";c<=not"1001111100001111";when "0110" =>r<=not"0000000001000000";c<=not"1010011111111111";when "0111" =>r<=not"0000000010000000";c<=not"1011010000000011";when "1000" =>r<=not"0000000100000000";c<=not"1011011101101111";when "1001" =>r<=not"0000001000000000";c<=not"1000111101101111";when "1010" =>r<=not"0000010000000000";c<=not"1011111101101111";when "1011" =>r<=not"0000100000000000";c<=not"1011111011101101";when "1100" =>r<=not"0001000000000000";c<=not"1011110111100001";when "1101" =>r<=not"0010000000000000";c<=not"1011111111111111";when "1110" =>r<=not"0100000000000000";c<=not"1111111111111111";when "1111" =>r<=not"1000000000000000";c<=not"1111111111111111";when others =>null;end case;else null;end if;end if;end process a1;a2:process(clk) --下一状态的转换beginif clk'event and clk='1' thenif count<999 thencount<=count+1;else count<=0;case cs iswhen st0=>ns<=st1;when st1=>ns<=st2;when st2=>ns<=st3;when st3=>ns<=st4;when st4=>ns<=st5;when st5=>ns<=st0;when others=>ns<=st0;end case;end if;end if;end process a2;a3:process(clk) --当前状态的转换beginif clk'event and clk='1' thencs<=ns;end if;end process a3;end architecture;。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY XIANSHI ISPORT(res:IN STD_LOGIC;XUAN:IN STD_LOGIC_VECTOR(3 DOWNTO 0);SEL:IN STD_LOGIC_VECTOR(3 DOWNTO 0);Q:OUT STD_LOGIC_VECTOR(15 DOWNTO 0));END ENTITY XIANSHI;ARCHITECTURE XSDZ OF XIANSHI ISBEGINPROCESS(XUAN,SEL,res)BEGINCASE RES ISWHEN '1'=>CASE XUAN ISWHEN "0000"=>CASE SEL ISwhen "0000"=>Q<="1111111111111111";----显示“1”when "0001"=>Q<="0000000000000000";when "0010"=>Q<="0000000000000000";when "0011"=>Q<="0000000000000000";when "0100"=>Q<="0000000000000000";when "0101"=>Q<="0000000000000000";when "0110"=>Q<="0000000000000000";when "0111"=>Q<="0000000000000000";when "1000"=>Q<="0000000000000000";when "1001"=>Q<="0000000000000000";when "1010"=>Q<="0000000000000000";when "1011"=>Q<="0000000000000000";when "1100"=>Q<="0000000000000000";when "1101"=>Q<="0000000000000000";when "1110"=>Q<="0000000000000000";when "1111"=>Q<="0000000000000000";when others=>null;END CASE;WHEN "0001"=>CASE SEL ISwhen "0000"=>Q<="1111111111111111";---显示"2" when "0001"=>Q<="1111111111111111";when "0010"=>Q<="0000000000000000";when "0011"=>Q<="0000000000000000";when "0100"=>Q<="0000000000000000";when "0110"=>Q<="0000000000000000";when "0111"=>Q<="0000000000000000";when "1000"=>Q<="0000000000000000";when "1001"=>Q<="0000000000000000";when "1010"=>Q<="0000000000000000";when "1011"=>Q<="0000000000000000";when "1100"=>Q<="0000000000000000";when "1101"=>Q<="0000000000000000";when "1110"=>Q<="0000000000000000";when "1111"=>Q<="0000000000000000";when others=>null;END CASE;WHEN "0010"=>CASE SEL ISwhen "0000"=>Q<="1111111111111111";---显示“3”when "0001"=>Q<="1111111111111111";when "0010"=>Q<="1111111111111111";when "0011"=>Q<="0000000000000000";when "0100"=>Q<="0000000000000000";when "0101"=>Q<="0000000000000000";when "0110"=>Q<="0000000000000000";when "0111"=>Q<="0000000000000000";when "1000"=>Q<="0000000000000000";when "1001"=>Q<="0000000000000000";when "1010"=>Q<="0000000000000000";when "1011"=>Q<="0000000000000000";when "1100"=>Q<="0000000000000000";when "1101"=>Q<="0000000000000000";when "1110"=>Q<="0000000000000000";when "1111"=>Q<="0000000000000000";when others=>null;END CASE;WHEN "0011"=>CASE SEL ISwhen"0000"=>Q<="1111111111111111"; when"0001"=>Q<="1111111111111111"; when"0010"=>Q<="1111111111111111"; when"0011"=>Q<="1111111111111111"; when"0100"=>Q<="0000000000000000"; when"0101"=>Q<="0000000000000000"; when"0110"=>Q<="0000000000000000"; when"0111"=>Q<="0000000000000000"; when"1000"=>Q<="0000000000000000";when"1010"=>Q<="0000000000000000"; when"1011"=>Q<="0000000000000000"; when"1100"=>Q<="0000000000000000"; when"1101"=>Q<="0000000000000000"; when"1110"=>Q<="0000000000000000"; when"1111"=>Q<="0000000000000000";when others=>null;END CASE;WHEN "0100"=>CASE SEL ISwhen "0000"=>Q<="1111111111111111";--显示”5“when "0001"=>Q<="1111111111111111";when "0010"=>Q<="1111111111111111";when "0011"=>Q<="1111111111111111";when "0100"=>Q<="1111111111111111";when "0101"=>Q<="0000000000000000";when "0110"=>Q<="0000000000000000";when "0111"=>Q<="0000000000000000";when "1000"=>Q<="0000000000000000";when "1001"=>Q<="0000000000000000";when "1010"=>Q<="0000000000000000";when "1011"=>Q<="0000000000000000";when "1100"=>Q<="0000000000000000";when "1101"=>Q<="0000000000000000";when "1110"=>Q<="0000000000000000";when "1111"=>Q<="0000000000000000";when others=>null;END CASE;WHEN "0101"=>CASE SEL ISwhen"0000"=>Q<="1111111111111111"; when"0001"=>Q<="1111111111111111"; when"0010"=>Q<="1111111111111111"; when"0011"=>Q<="1111111111111111"; when"0100"=>Q<="1111111111111111"; when"0101"=>Q<="1111111111111111"; when"0110"=>Q<="0000000000000000"; when"0111"=>Q<="0000000000000000"; when"1000"=>Q<="0000000000000000"; when"1001"=>Q<="0000000000000000"; when"1010"=>Q<="0000000000000000"; when"1011"=>Q<="0000000000000000"; when"1100"=>Q<="0000000000000000";when"1110"=>Q<="0000000000000000"; when"1111"=>Q<="0000000000000000";when others=>null;END CASE;WHEN "0110"=>CASE SEL ISwhen "0000"=>Q<="1111111111111111";--显示”7“when "0001"=>Q<="1111111111111111";when "0010"=>Q<="1111111111111111";when "0011"=>Q<="1111111111111111";when "0100"=>Q<="1111111111111111";when "0101"=>Q<="1111111111111111";when "0110"=>Q<="1111111111111111";when "0111"=>Q<="0000000000000000";when "1000"=>Q<="0000000000000000";when "1001"=>Q<="0000000000000000";when "1010"=>Q<="0000000000000000";when "1011"=>Q<="0000000000000000";when "1100"=>Q<="0000000000000000";when "1101"=>Q<="0000000000000000";when "1110"=>Q<="0000000000000000";when "1111"=>Q<="0000000000000000";when others=>null;END CASE;WHEN "0111"=>CASE SEL ISwhen "0000"=>Q<="1111111111111111";---显示“8”when "0001"=>Q<="1111111111111111";when "0010"=>Q<="1111111111111111";when "0011"=>Q<="1111111111111111";when "0100"=>Q<="1111111111111111";when "0101"=>Q<="1111111111111111";when "0110"=>Q<="1111111111111111";when "0111"=>Q<="1111111111111111";when "1000"=>Q<="0000000000000000";when "1001"=>Q<="0000000000000000";when "1010"=>Q<="0000000000000000";when "1011"=>Q<="0000000000000000";when "1100"=>Q<="0000000000000000";when "1101"=>Q<="0000000000000000";when "1110"=>Q<="0000000000000000";when "1111"=>Q<="0000000000000000";when others=>null;END CASE;WHEN "1000"=>CASE SEL ISwhen "0000"=>Q<="1111111111111111";--显示”9" when "0001"=>Q<="1111111111111111";when "0010"=>Q<="1111111111111111";when "0011"=>Q<="1111111111111111";when "0100"=>Q<="1111111111111111";when "0101"=>Q<="1111111111111111";when "0110"=>Q<="1111111111111111";when "0111"=>Q<="1111111111111111";when "1000"=>Q<="1111111111111111";when "1001"=>Q<="0000000000000000";when "1010"=>Q<="0000000000000000";when "1011"=>Q<="0000000000000000";when "1100"=>Q<="0000000000000000";when "1101"=>Q<="0000000000000000";when "1110"=>Q<="0000000000000000";when "1111"=>Q<="0000000000000000";when others=>null;END CASE;WHEN "1001"=>CASE SEL ISwhen "0000"=>Q<="1111111111111111";--显示“10”when "0001"=>Q<="1111111111111111";when "0010"=>Q<="1111111111111111";when "0011"=>Q<="1111111111111111";when "0100"=>Q<="1111111111111111";when "0101"=>Q<="1111111111111111";when "0110"=>Q<="1111111111111111";when "0111"=>Q<="1111111111111111";when "1000"=>Q<="1111111111111111";when "1001"=>Q<="0000000000000000";when "1011"=>Q<="0000000000000000";when "1100"=>Q<="0000000000000000";when "1101"=>Q<="0000000000000000";when "1110"=>Q<="0000000000000000";when "1111"=>Q<="0000000000000000";when others=>null;END CASE;WHEN "1010"=>CASE SEL ISwhen "0000"=>Q<="1111111111111111";---显示“11”when "0001"=>Q<="1111111111111111";when "0011"=>Q<="1111111111111111";when "0100"=>Q<="1111111111111111";when "0101"=>Q<="1111111111111111";when "0110"=>Q<="1111111111111111";when "0111"=>Q<="1111111111111111";when "1000"=>Q<="1111111111111111";when "1001"=>Q<="1111111111111111";when "1010"=>Q<="1111111111111111";when "1011"=>Q<="0000000000000000";when "1100"=>Q<="0000000000000000";when "1101"=>Q<="0000000000000000";when "1110"=>Q<="0000000000000000";when "1111"=>Q<="0000000000000000";when others=>null;END CASE;WHEN "1011"=>CASE SEL ISwhen "0000"=>Q<="1111111111111111";--显示"12" when "0001"=>Q<="1111111111111111";when "0010"=>Q<="1111111111111111";when "0011"=>Q<="1111111111111111";when "0100"=>Q<="1111111111111111";when "0101"=>Q<="1111111111111111";when "0110"=>Q<="1111111111111111";when "0111"=>Q<="1111111111111111";when "1000"=>Q<="1111111111111111";when "1001"=>Q<="1111111111111111";when "1010"=>Q<="1111111111111111";when "1011"=>Q<="1111111111111111";when "1100"=>Q<="0000000000000000";when "1101"=>Q<="0000000000000000";when "1110"=>Q<="0000000000000000";when "1111"=>Q<="0000000000000000";when others=>null;END CASE;WHEN "1100"=>CASE SEL ISwhen "0000"=>Q<="1111111111111111";--显示”A" when "0001"=>Q<="1111111111111111";when "0010"=>Q<="1111111111111111";when "0011"=>Q<="1111111111111111";when "0100"=>Q<="1111111111111111";when "0101"=>Q<="1111111111111111";when "0111"=>Q<="1111111111111111";when "1000"=>Q<="1111111111111111";when "1001"=>Q<="1111111111111111";when "1010"=>Q<="1111111111111111";when "1011"=>Q<="1111111111111111";when "1100"=>Q<="1111111111111111";when "1101"=>Q<="0000000000000000";when "1110"=>Q<="0000000000000000";when "1111"=>Q<="0000000000000000";when others=>null;END CASE;WHEN "1101"=>CASE SEL ISwhen "0000"=>Q<="1111111111111111";--显示"B”when "0001"=>Q<="1111111111111111";when "0010"=>Q<="1111111111111111";when "0011"=>Q<="1111111111111111";when "0100"=>Q<="1111111111111111";when "0101"=>Q<="1111111111111111";when "0110"=>Q<="1111111111111111";when "0111"=>Q<="1111111111111111";when "1000"=>Q<="1111111111111111";when "1001"=>Q<="1111111111111111";when "1010"=>Q<="1111111111111111";when "1011"=>Q<="1111111111111111";when "1100"=>Q<="1111111111111111";when "1101"=>Q<="1111111111111111";when "1110"=>Q<="0000000000000000";when "1111"=>Q<="0000000000000000";when others=>null;END CASE;WHEN "1110"=>CASE SEL ISwhen "0000"=>Q<="1111111111111111";--显示“C”when "0001"=>Q<="1111111111111111";when "0010"=>Q<="1111111111111111";when "0011"=>Q<="1111111111111111";when "0100"=>Q<="1111111111111111";when "0101"=>Q<="1111111111111111";when "0110"=>Q<="1111111111111111";when "0111"=>Q<="1111111111111111";when "1000"=>Q<="1111111111111111";when "1001"=>Q<="1111111111111111";when "1011"=>Q<="1111111111111111";when "1100"=>Q<="1111111111111111";when "1101"=>Q<="1111111111111111";when "1110"=>Q<="1111111111111111";when "1111"=>Q<="0000000000000000";when others=>null;END CASE;WHEN "1111"=>CASE SEL ISwhen "0000"=>Q<="1111111111111111";---显示“D”when "0001"=>Q<="1111111111111111";when "0010"=>Q<="1111111111111111";when "0011"=>Q<="1111111111111111";when "0100"=>Q<="1111111111111111";when "0101"=>Q<="1111111111111111";when "0110"=>Q<="1111111111111111";when "0111"=>Q<="1111111111111111";when "1000"=>Q<="1111111111111111";when "1001"=>Q<="1111111111111111";when "1010"=>Q<="1111111111111111";when "1011"=>Q<="1111111111111111";when "1100"=>Q<="1111111111111111";when "1101"=>Q<="1111111111111111";when "1110"=>Q<="1111111111111111";when "1111"=>Q<="1111111111111111";when others=>null;END CASE;WHEN OTHERS=>NULL;END CASE;WHEN '0'=>CASE XUAN ISWHEN "0000"=>CASE SEL ISwhen "0000"=>Q<="0000000000000000";----显示“0”when "0001"=>Q<="0000000000000000";when "0010"=>Q<="0000000000000000";when "0011"=>Q<="0000000000000000";when "0100"=>Q<="0001111111111000";when "0101"=>Q<="0010000000000100";when "0110"=>Q<="0100000000000010";when "0111"=>Q<="0100000000000010";when "1000"=>Q<="0100000000000010";when "1001"=>Q<="0010000000000100";when "1011"=>Q<="0000000000000000";when "1100"=>Q<="0000000000000000";when "1101"=>Q<="0000000000000000";when "1110"=>Q<="0000000000000000";when "1111"=>Q<="0000000000000000";when others=>null;END CASE;WHEN "0001"=>CASE SEL ISwhen "0000"=>Q<="0000000000000000";---显示"1" when "0001"=>Q<="0000000000000000";when "0010"=>Q<="0000000000000000";when "0011"=>Q<="0000000000000000";when "0100"=>Q<="0000000000000000";when "0101"=>Q<="0000000000000000";when "0110"=>Q<="0110000000000000";when "0111"=>Q<="0111111111111110";when "1000"=>Q<="0111111111111110";when "1001"=>Q<="0110000000000110";when "1010"=>Q<="0000000000000000";when "1011"=>Q<="0000000000000000";when "1100"=>Q<="0000000000000000";when "1101"=>Q<="0000000000000000";when "1110"=>Q<="0000000000000000";when "1111"=>Q<="0000000000000000";when others=>null;END CASE;WHEN "0010"=>CASE SEL ISwhen "0000"=>Q<="0000000000000000";---显示“2”when "0001"=>Q<="0000000000000000";when "0010"=>Q<="0000000000000000";when "0011"=>Q<="0000000000000000";when "0100"=>Q<="0110000111111110";when "0101"=>Q<="0110000111111110";when "0110"=>Q<="0110000110000110";when "0111"=>Q<="0110000110000110";when "1000"=>Q<="0111111110000110";when "1001"=>Q<="0111111110000110";when "1010"=>Q<="0000000000000000";when "1011"=>Q<="0000000000000000";when "1100"=>Q<="0000000000000000";when "1101"=>Q<="0000000000000000";when "1111"=>Q<="0000000000000000";when others=>null;END CASE;WHEN "0011"=>CASE SEL ISwhen "0000"=>Q<="0000000000000000";--显示”3“when "0001"=>Q<="0000000000000000";when "0010"=>Q<="0000000000000000";when "0011"=>Q<="0000000000000000";when "0100"=>Q<="0000000000000000";when "0101"=>Q<="0000000000000000";when "0110"=>Q<="0111111111111110";when "0111"=>Q<="0111111111111110";when "1000"=>Q<="0110000110000110";when "1001"=>Q<="0110000110000110";when "1010"=>Q<="0110000110000110";when "1011"=>Q<="0110000110000110";when "1100"=>Q<="0000000000000000";when "1101"=>Q<="0000000000000000";when "1110"=>Q<="0000000000000000";when "1111"=>Q<="0000000000000000";when others=>null;END CASE;WHEN "0100"=>CASE SEL ISwhen "0000"=>Q<="0000000000000000";--显示”4“when "0001"=>Q<="0000000000000000";when "0010"=>Q<="0000000000000000";when "0011"=>Q<="0000001100000000";when "0100"=>Q<="0000001100000000";when "0101"=>Q<="0000001100000000";when "0110"=>Q<="0000001100000000";when "0111"=>Q<="0111111111111110";when "1000"=>Q<="0111111111111110";when "1001"=>Q<="0000001100000100";when "1010"=>Q<="0000001100111000";when "1011"=>Q<="0000001111100000";when "1100"=>Q<="0000001110000000";when "1101"=>Q<="0000000000000000";when "1110"=>Q<="0000000000000000";when "1111"=>Q<="0000000000000000";when others=>null;END CASE;WHEN "0101"=>CASE SEL ISwhen "0000"=>Q<="0000000000000000";---显示”5“when "0001"=>Q<="0000000000000000";when "0010"=>Q<="0000000000000000";when "0011"=>Q<="0111111100000110";when "0100"=>Q<="0111111100000110";when "0101"=>Q<="0110001100000110";when "0110"=>Q<="0110001100000110";when "0111"=>Q<="0110001100000110";when "1000"=>Q<="0110001100000110";when "1001"=>Q<="0110001111111110";when "1010"=>Q<="0110001111111110";when "1011"=>Q<="0000000000000000";when "1100"=>Q<="0000000000000000";when "1101"=>Q<="0000000000000000";when "1110"=>Q<="0000000000000000";when "1111"=>Q<="0000000000000000";when others=>null;END CASE;WHEN "0110"=>CASE SEL ISwhen "0000"=>Q<="0000000000000000";--显示”6" when "0001"=>Q<="0000000000000000";when "0010"=>Q<="0000000000000000";when "0011"=>Q<="0000000000000000";when "0100"=>Q<="0111111110000110";when "0101"=>Q<="0111111110000110";when "0110"=>Q<="0110000110000110";when "0111"=>Q<="0110000110000110";when "1000"=>Q<="0110000110000110";when "1001"=>Q<="0111111111111110";when "1010"=>Q<="0111111111111110";when "1011"=>Q<="0000000000000000";when "1100"=>Q<="0000000000000000";when "1101"=>Q<="0000000000000000";when "1110"=>Q<="0000000000000000";when "1111"=>Q<="0000000000000000";when others=>null;END CASE;WHEN "0111"=>CASE SEL ISwhen "0000"=>Q<="0000000000000000";--显示“7”when "0001"=>Q<="0000000000000000";when "0011"=>Q<="0000000000000000";when "0100"=>Q<="0111111111111110";when "0101"=>Q<="0111111111111110";when "0110"=>Q<="0000000000000110";when "0111"=>Q<="0000000000000110";when "1000"=>Q<="0000000000000110";when "1001"=>Q<="0000000000000110";when "1010"=>Q<="0000000000000110";when "1011"=>Q<="0000000000000110";when "1100"=>Q<="0000000000000000";when "1101"=>Q<="0000000000000000";when "1110"=>Q<="0000000000000000";when "1111"=>Q<="0000000000000000";when others=>null;END CASE;WHEN "1000"=>CASE SEL ISwhen "0000"=>Q<="0000000000000000";---显示“8”when "0001"=>Q<="0000000000000000";when "0010"=>Q<="0000000000000000";when "0011"=>Q<="0000000000000000";when "0100"=>Q<="0111111111111110";when "0101"=>Q<="0111111111111110";when "0110"=>Q<="0110000110000110";when "0111"=>Q<="0110000110000110";when "1000"=>Q<="0110000110000110";when "1001"=>Q<="0111111111111110";when "1010"=>Q<="0111111111111110";when "1011"=>Q<="0000000000000000";when "1100"=>Q<="0000000000000000";when "1101"=>Q<="0000000000000000";when "1110"=>Q<="0000000000000000";when "1111"=>Q<="0000000000000000";when others=>null;END CASE;WHEN "1001"=>CASE SEL ISwhen "0000"=>Q<="0000000000000000";--显示"9" when "0001"=>Q<="0000000000000000";when "0010"=>Q<="0000000000000000";when "0011"=>Q<="0000000000000000";when "0100"=>Q<="0111111111111110";when "0101"=>Q<="0111111111111110";。