双色点阵显示控制器数字电路实验报告.docx

上传人:b****5 文档编号:7894456 上传时间:2023-01-27 格式:DOCX 页数:23 大小:287.74KB
下载 相关 举报
双色点阵显示控制器数字电路实验报告.docx_第1页
第1页 / 共23页
双色点阵显示控制器数字电路实验报告.docx_第2页
第2页 / 共23页
双色点阵显示控制器数字电路实验报告.docx_第3页
第3页 / 共23页
双色点阵显示控制器数字电路实验报告.docx_第4页
第4页 / 共23页
双色点阵显示控制器数字电路实验报告.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

双色点阵显示控制器数字电路实验报告.docx

《双色点阵显示控制器数字电路实验报告.docx》由会员分享,可在线阅读,更多相关《双色点阵显示控制器数字电路实验报告.docx(23页珍藏版)》请在冰豆网上搜索。

双色点阵显示控制器数字电路实验报告.docx

双色点阵显示控制器数字电路实验报告

数字电路实验报告

双色点阵显示控制器

 

班级:

学号:

姓名:

 

2013年11月12号

 

一、设计任务要求

二、系统设计

三、仿真波形及分析

四、源程序

五、功能说明

六、元器件清单及资源利用情况

七、故障及问题分析

八、总结和结论

 

一、设计任务要求

1、基本要求:

1.固定红色显示一个汉字或图形,显示亮度4级可调,用一个btn按钮实现亮度调节,亮度变化视觉效果要尽量明显。

2.用从红到绿8级渐变色显示一个固定汉字或图形。

3.分别用单字循环显示、左右滚动显示、上下滚动显示三种显示方式单色显示四个汉字或图形,显示过程中,显示方式用一个btn按键进行切换。

4,。

显示的图形或汉字要尽量饱满美观。

2、提高要求:

1.滚动显示过程中实现四种显示颜色的自动变换,颜色变化视觉效果要尽量明显。

2.自拟其它功能。

二、系统设计

1、设计框图

1、系统结构框图

本系统主要由三个模块组成,其中控制器用于控制程序运行、储存当前状态并控制输出显示,点阵用于显示游戏界面,按钮输入用于输入控制信息。

 

2、逻辑划分方框图

3、系统流程图

 

4、MDS图

游戏运行状态的具体状态转移图

三、仿真波形及波形分析

 

逐行扫描,并点亮红灯,改变红灯的占空比可以得到不同亮度的显示。

逐行扫描,并点亮红绿灯,改变红绿灯的占空比可以得到不同颜色的显示。

上下及左右滚动显示,因为显示变化时延过长,波形过密,不方便显示。

 

按一次键,只产生一个脉冲,脉冲宽度为防抖动时钟的脉宽。

四、源程序及注释

libraryIEEE;

useIEEE.STD_LOGIC_1164.ALL;

useIEEE.STD_LOGIC_ARITH.ALL;

useIEEE.STD_LOGIC_UNSIGNED.ALL;

entitydianzhenis

port(clk:

instd_logic;

dtn1:

instd_logic;

dtn2:

instd_logic;

dtn3:

instd_logic;

row:

outstd_logic_vector(7downto0);

listr:

outstd_logic_vector(7downto0);

listg:

outstd_logic_vector(7downto0)

);

enddianzhen;

architectureaofdianzhenis

signaltemp:

integerrange0to99:

=0;

signaltemp1:

integerrange0to9:

=0;

signaltemp2:

integerrange0to9:

=0;

signaltemp3:

integerrange0to49:

=0;

signaltemp4:

integerrange0to9:

=0;

signaltemp5:

integerrange0to99:

=0;

signalclk_500K:

STD_LOGIC;

signalclk_50K:

STD_LOGIC;

signalclk_5K:

STD_LOGIC;

signalclk_1K:

STD_LOGIC;

signalclk_100:

STD_LOGIC;

signalclk_1:

STD_LOGIC;

signalnum:

std_logic_vector(2downto0):

="000";

signalnum1:

integerrange0to1119;

signalnum2:

integerrange0to31:

=0;

signalnum3:

std_logic_vector(2downto0):

="000";

signalcount:

integerrange0to499;

signalcount1:

integerrange0to49;

signalj:

integerrange0to499;

signali:

integerrange0to31:

=0;

signalkind:

std_logic_vector(1downto0):

="00";

signalcolor:

std_logic_vector(1downto0):

="00";

signalsel:

std_logic_vector(2downto0);

signalsel1:

STD_LOGIC:

='0';

signalsel2:

STD_LOGIC:

='0';

signalsel3:

STD_LOGIC:

='0';

signalresetmp1,resetmp2:

STD_LOGIC:

='0';

signalresetmp3,resetmp4:

STD_LOGIC:

='0';

signalresetmp5,resetmp6:

STD_LOGIC:

='0';

signalflag:

STD_LOGIC:

='0';

signalflag2:

STD_LOGIC:

='0';

signalflag3:

STD_LOGIC:

='0';

typevol_typeisarray(38downto0)ofstd_logic_vector(7downto0);

typesol_typeisarray(31downto0)ofstd_logic;

signalvol:

vol_type:

=(--luck字库

"01111110","01000000","01000000","01000000","01000000","01000000","00000000",

"00000000","01001100","01010000","01100000","01100000","01010000","01001100",

"00000000","00000000","00111100","01000010","01000000","01000000","01000010","00111100","00000000","00000000","00111100","01000010","01000010","01000010",

"01000010","01000010","00000000","00000000","01111110","01000000","01000000",

"01000000","01000000","01000000","00000000");

Signalsol0:

sol_type:

=('0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0');--good字库用于水平滚动显示

signalsol1:

sol_type:

=('0','1','1','1','1','1','0','0','0','0','1','1','1','1','0','0','0','0','1','1','1','1','0','0','0','0','1','1','1','0','0','0');

signalsol2:

sol_type:

=('0','1','0','0','0','0','1','0','0','1','0','0','0','0','1','0','0','1','0','0','0','0','1','0','0','1','0','0','0','1','0','0');

signalsol3:

sol_type:

=('0','1','0','0','0','0','1','0','0','1','0','0','0','0','1','0','0','1','0','0','0','0','1','0','0','1','0','0','0','0','0','0');

signalsol4:

sol_type:

=('0','1','0','0','0','0','1','0','0','1','0','0','0','0','1','0','0','1','0','0','0','0','1','0','0','1','0','0','1','1','1','0');

signalsol5:

sol_type:

=('0','1','0','0','0','0','1','0','0','1','0','0','0','0','1','0','0','1','0','0','0','0','1','0','0','1','0','0','0','1','0','0');

Signalsol6:

sol_type:

=('0','1','1','1','1','1','0','0','0','0','1','1','1','1','0','0','0','0','1','1','1','1','0','0','0','0','1','1','1','0','0','0');

Signalsol7:

sol_type:

=('0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0');

begin

process(clk)--分频器500K

begin

ifclk'eventandclk='1'then

iftemp=99then

temp<=0;

else

temp<=temp+1;

endif;

iftemp<50then

clk_500K<='1';

else

clk_500K<='0';

endif;

endif;

endprocess;

process(clk_500K)--分频器50K

begin

ifclk_500K'eventandclk_500K='1'then

iftemp1=9then

temp1<=0;

else

temp1<=temp1+1;

endif;

iftemp1<5then

clk_50K<='1';

else

clk_50K<='0';

endif;

endif;

endprocess;

process(clk_50K)--分频器5K

begin

ifclk_50K'eventandclk_50K='1'then

iftemp2=9then

temp2<=0;

else

temp2<=temp2+1;

endif;

iftemp2<5then

clk_5K<='1';

else

clk_5K<='0';

endif;

endif;

endprocess;

process(clk_50K)--分频器1K

begin

ifclk_50K'eventandclk_50K='1'then

iftemp3=49then

temp3<=0;

else

temp3<=temp3+1;

endif;

iftemp3<25then

clk_1K<='1';

else

clk_1K<='0';

endif;

endif;

endprocess;

process(clk_1K)--分频器100

begin

ifclk_1K'eventandclk_1K='1'then

iftemp4=9then

temp4<=0;

else

temp4<=temp4+1;

endif;

iftemp4<5then

clk_100<='1';

else

clk_100<='0';

endif;

endif;

endprocess;

process(clk_100)--分频器1

begin

ifclk_100'eventandclk_100='1'then

iftemp5=99then

temp5<=0;

else

temp5<=temp5+1;

endif;

iftemp5<50then

clk_1<='1';

else

clk_1<='0';

endif;

endif;

endprocess;

process(clk_500K)--显示红字

begin

ifclk_500K'eventandclk_500K='1'then

ifsel3='1'then

ifcount=499then

count<=0;

elsecount<=count+1;

endif;

ifnum="111"then

num<="000";

elsenum<=num+1;

endif;

caseselis

when"000"=>j<=20;--改变状态对应不同j的值来限定亮度

when"001"=>j<=150;

when"010"=>j<=320;

when"011"=>j<=499;

whenothers=>null;

endcase;

ifcount<=jthen

casenumis--显示米字

when"000"=>row<="01111111";listr<="10011001";listg<="00000000";

when"001"=>row<="10111111";listr<="01011010";listg<="00000000";

when"010"=>row<="11011111";listr<="00111100";listg<="00000000";

when"011"=>row<="11101111";listr<="11111111";listg<="00000000";

when"100"=>row<="11110111";listr<="11111111";listg<="00000000";

when"101"=>row<="11111011";listr<="00111100";listg<="00000000";

when"110"=>row<="11111101";listr<="01011010";listg<="00000000";

when"111"=>row<="11111110";listr<="10011001";listg<="00000000";

whenothers=>row<="11111111";listr<="00000000";listg<="00000000";

endcase;

else

row<="11111111";

endif;

endif;

ifsel1='1'then--显示彩色字

ifnum1=1119then

num1<=0;

elsenum1<=num1+1;

endif;

casenum1is

when0=>row<="01111111";listr<="10011001";listg<="00000000";

when140=>row<="10111111";listr<="01011010";listg<="01011010";

when160=>listg<="00000000";

when260=>listr<="00000000";

when280=>row<="11011111";listr<="00111100";listg<="00111100";

when320=>listg<="00000000";

when380=>listr<="00000000";

when420=>row<="11101111";listr<="11111111";listg<="11111111";

when480=>listg<="00000000";

when500=>listr<="00000000";

when560=>row<="11110111";listr<="11111111";listg<="11111111";

when620=>listr<="00000000";

when640=>listg<="00000000";

when700=>row<="11111011";listr<="00111100";listg<="00111100";

when740=>listr<="00000000";

when800=>listg<="00000000";

when840=>row<="11111101";listr<="01011010";listg<="01011010";

when860=>listr<="00000000";

when960=>listg<="00000000";

when980=>row<="11111110";listr<="00000000";listg<="10011001";

whenothers=>null;

endcase;

endif;

ifsel2='1'then--三种循环显示模式

ifcount1=49then

ifnum3="111"then

num3<="000";

elsenum3<=num3+1;

endif;

count1<=0;

else

count1<=count1+1;

endif;

ifkind="00"then--分屏显示

if(0<=num2)and(num2<=5)theni<=0;

elsif(6<=num2)and(num2<=11)theni<=8;

elsif(12<=num2)and(num2<=17)theni<=16;

elsif(18<=num2)and(num2<=23)theni<=24;

endif;

casenum3is

when"000"=>row<="01111111";listr<=vol(i);listg<="00000000";

when"001"=>row<="10111111";listr<=vol(i+1);listg<="00000000";

when"010"=>row<="11011111";listr<=vol(i+2);listg<="00000000";

when"011"=>row<="11101111";listr<=vol(i+3);listg<="00000000";

when"100"=>row<="11110111";listr<=vol(i+4);listg<="00000000";

when"101"=>row<="11111011";listr<=vol(i+5);listg<="00000000";

when"110"=>row<="11111101";listr<=vol(i+6);listg<="00000000";

when"111"=>row<="11111110";listr<=vol(i+7);listg<="00000000";

whenothers=>row<="11111111";listr<="00000000";

endcase;

endif;

ifkind="01"then--上下滚动显示

i<=num2;

casecoloris

when"00"=>casenum3is

when"000"=>row<="01111111";listr<=vol(i);listg<="00000000";

when"001"=>row<="10111111";listr<=vol(i+1);listg<="00000000";

when"010"=>row<="11011111";listr<=vol(i+2);listg<="00000000";

when"011"=>row<="11101111";listr<=vol(i+3);listg<="00000000";

when"100"=>row<="11110111";listr<=vol(i+4);listg<="00000000";

when"101"=>row<="11111011";listr<=vol(i+5);listg<="00000000";

when"110"=>row<="11111101";listr<=vol(i+6);listg<="00000000";

when"111"=>row<="11111110";listr<=vol(i+7);listg<="00000000";

whenothers=>row<="11111111";listr<="00000000";

endcase;

when"01"=>casenum3is

when"000"=>row<="01111111";listr<=vol(i);ifcount1<25thenlistg<=vol(i);elselistg<="00000000";endif;

when"001"=>row<="10111111";listr<=vol(i+1);ifcount1<25thenlistg<=vol(i+1);elselistg<="00000000";endif;

when"010"=>row<="11011111";listr<=vol(i+2);ifcount1<25thenlistg<=vol(i+2);elselistg<="00000000";endif;

when"011"=>row<="11101111";listr<=vol(i+3);ifcount1<25thenlistg<=vol(i+3);elselistg<="00000000";endif;

when"100"=>row<="11110111";listr<=vol(i+4);ifcount1<25thenlistg<=vol(i+4);elselistg<="00000000";endif;

when"101"=>row<="11111011";listr<=vol(i+5);ifcount1<25thenlistg<=vol(i+5);elselistg<="00000000"

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 农学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1