双色点阵显示控制器数字电路实验报告.docx
- 文档编号:7894456
- 上传时间:2023-01-27
- 格式:DOCX
- 页数:23
- 大小:287.74KB
双色点阵显示控制器数字电路实验报告.docx
《双色点阵显示控制器数字电路实验报告.docx》由会员分享,可在线阅读,更多相关《双色点阵显示控制器数字电路实验报告.docx(23页珍藏版)》请在冰豆网上搜索。
双色点阵显示控制器数字电路实验报告
数字电路实验报告
双色点阵显示控制器
班级:
学号:
姓名:
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"
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 点阵 显示 控制器 数字电路 实验 报告